Documentation Source Text

Hex Artifact Content
Login

Artifact 048acb6eab698edc605e5065bdb10d426fa9a582:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 7d 20 7b   {file format} {
0050: 73 65 63 6f 6e 64 20 65 64 69 74 69 6f 6e 20 66  second edition f
0060: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0070: 65 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 20  ent}</tcl>..<h1 
0080: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 0a 54 68  align=center>.Th
0090: 65 20 53 51 4c 69 74 65 20 44 61 74 61 62 61 73  e SQLite Databas
00a0: 65 20 46 69 6c 65 20 46 6f 72 6d 61 74 0a 3c 2f  e File Format.</
00b0: 68 31 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  h1>..<p>This doc
00c0: 75 6d 65 6e 74 20 64 65 73 63 72 69 62 65 73 20  ument describes 
00d0: 61 6e 64 20 64 65 66 69 6e 65 73 20 74 68 65 20  and defines the 
00e0: 6f 6e 2d 64 69 73 6b 20 64 61 74 61 62 61 73 65  on-disk database
00f0: 20 66 69 6c 65 0a 66 6f 72 6d 61 74 20 75 73 65   file.format use
0100: 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  d by SQLite.</p>
0110: 0a 0a 3c 68 32 3e 31 2e 30 20 54 68 65 20 44 61  ..<h2>1.0 The Da
0120: 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68 32 3e  tabase File</h2>
0130: 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 6c 65 74  ..<p>The complet
0140: 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51  e state of an SQ
0150: 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69 73  Lite database is
0160: 20 75 73 75 61 6c 6c 79 0a 63 6f 6e 74 61 69 6e   usually.contain
0170: 65 64 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  ed a single file
0180: 20 6f 6e 20 64 69 73 6b 20 63 61 6c 6c 65 64 20   on disk called 
0190: 74 68 65 20 22 6d 61 69 6e 20 64 61 74 61 62 61  the "main databa
01a0: 73 65 20 66 69 6c 65 22 2e 3c 2f 70 3e 0a 0a 3c  se file".</p>..<
01b0: 70 3e 44 75 72 69 6e 67 20 61 20 74 72 61 6e 73  p>During a trans
01c0: 61 63 74 69 6f 6e 2c 20 53 51 4c 69 74 65 20 73  action, SQLite s
01d0: 74 6f 72 65 73 20 61 64 64 69 74 69 6f 6e 61 6c  tores additional
01e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 0a 69 6e   information .in
01f0: 20 61 20 73 65 63 6f 6e 64 20 66 69 6c 65 20 63   a second file c
0200: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 6c 6c 62  alled the "rollb
0210: 61 63 6b 20 6a 6f 75 72 6e 61 6c 22 2c 20 6f 72  ack journal", or
0220: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e   if SQLite is in
0230: 0a 5b 57 41 4c 20 6d 6f 64 65 5d 2c 20 61 20 77  .[WAL mode], a w
0240: 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20 66  rite-ahead log f
0250: 69 6c 65 2e 0a 49 66 20 74 68 65 20 61 70 70 6c  ile..If the appl
0260: 69 63 61 74 69 6f 6e 20 6f 72 0a 68 6f 73 74 20  ication or.host 
0270: 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73  computer crashes
0280: 20 62 65 66 6f 72 65 20 74 68 65 20 74 72 61 6e   before the tran
0290: 73 61 63 74 69 6f 6e 20 63 6f 6d 70 6c 65 74 65  saction complete
02a0: 73 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 6c 6c  s, then the roll
02b0: 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20  back.journal or 
02c0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
02d0: 63 6f 6e 74 61 69 6e 73 20 63 72 69 74 69 63 61  contains critica
02e0: 6c 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  l state informat
02f0: 69 6f 6e 20 6e 65 65 64 65 64 20 0a 74 6f 20 72  ion needed .to r
0300: 65 73 74 6f 72 65 20 74 68 65 20 6d 61 69 6e 20  estore the main 
0310: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
0320: 20 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 73 74   a consistent st
0330: 61 74 65 2e 20 20 57 68 65 6e 20 61 20 72 6f 6c  ate.  When a rol
0340: 6c 62 61 63 6b 20 0a 6a 6f 75 72 6e 61 6c 20 6f  lback .journal o
0350: 72 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f  r write-ahead lo
0360: 67 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  g contains infor
0370: 6d 61 74 69 6f 6e 20 6e 65 63 65 73 73 61 72 79  mation necessary
0380: 20 66 6f 72 20 72 65 63 6f 76 65 72 69 6e 67 20   for recovering 
0390: 0a 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68  .the state of th
03a0: 65 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 79  e database, they
03b0: 20 61 72 65 20 63 61 6c 6c 65 64 20 61 20 22 68   are called a "h
03c0: 6f 74 20 6a 6f 75 72 6e 61 6c 22 20 6f 72 20 22  ot journal" or "
03d0: 68 6f 74 20 57 41 4c 20 66 69 6c 65 22 2e 0a 48  hot WAL file"..H
03e0: 6f 74 20 6a 6f 75 72 6e 61 6c 73 20 61 6e 64 20  ot journals and 
03f0: 57 41 4c 20 66 69 6c 65 73 20 61 72 65 20 6f 6e  WAL files are on
0400: 6c 79 20 61 20 66 61 63 74 6f 72 20 64 75 72 69  ly a factor duri
0410: 6e 67 20 65 72 72 6f 72 20 72 65 63 6f 76 65 72  ng error recover
0420: 79 0a 73 63 65 6e 61 72 69 6f 73 20 61 6e 64 20  y.scenarios and 
0430: 73 6f 20 61 72 65 20 75 6e 63 6f 6d 6d 6f 6e 2c  so are uncommon,
0440: 20 62 75 74 20 74 68 65 79 20 61 72 65 20 70 61   but they are pa
0450: 72 74 20 6f 66 20 74 68 65 20 73 74 61 74 65 20  rt of the state 
0460: 6f 66 20 61 6e 20 53 51 4c 69 74 65 0a 64 61 74  of an SQLite.dat
0470: 61 62 61 73 65 20 61 6e 64 20 73 6f 20 63 61 6e  abase and so can
0480: 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 2e 20  not be ignored. 
0490: 20 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 64   This document d
04a0: 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
04b0: 74 0a 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20  t.of a rollback 
04c0: 6a 6f 75 72 6e 61 6c 20 61 6e 64 20 74 68 65 20  journal and the 
04d0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
04e0: 66 69 6c 65 2c 20 62 75 74 20 74 68 65 20 66 6f  file, but the fo
04f0: 63 75 73 20 69 73 0a 6f 6e 20 74 68 65 20 6d 61  cus is.on the ma
0500: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
0510: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 31 20 50  .</p>..<h3>1.1 P
0520: 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ages</h3>..<p>Th
0530: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
0540: 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  file consists of
0550: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67   one or more pag
0560: 65 73 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f  es.  ^The size o
0570: 66 20 61 0a 70 61 67 65 20 69 73 20 61 20 70 6f  f a.page is a po
0580: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
0590: 65 6e 20 35 31 32 20 61 6e 64 20 36 35 35 33 36  en 512 and 65536
05a0: 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6c 6c   inclusive.  All
05b0: 20 70 61 67 65 73 20 77 69 74 68 69 6e 0a 74 68   pages within.th
05c0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
05d0: 61 72 65 20 74 68 65 20 73 61 6d 65 20 73 69 7a  are the same siz
05e0: 65 2e 20 20 5e 54 68 65 20 70 61 67 65 20 73 69  e.  ^The page si
05f0: 7a 65 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ze for a databas
0600: 65 20 66 69 6c 65 0a 69 73 20 64 65 74 65 72 6d  e file.is determ
0610: 69 6e 65 64 20 62 79 20 74 68 65 20 32 2d 62 79  ined by the 2-by
0620: 74 65 20 69 6e 74 65 67 65 72 20 6c 6f 63 61 74  te integer locat
0630: 65 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  ed at an offset 
0640: 6f 66 0a 31 36 20 62 79 74 65 73 20 66 72 6f 6d  of.16 bytes from
0650: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
0660: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
0670: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 67  ile.</p>..<p>Pag
0680: 65 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20  es are numbered 
0690: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31  beginning with 1
06a0: 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 70  .  The maximum p
06b0: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 0a 32 31  age number is.21
06c0: 34 37 34 38 33 36 34 36 20 28 32 3c 73 75 70 3e  47483646 (2<sup>
06d0: 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61 6c 6c  <small>31</small
06e0: 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20 20 54  ></sup> - 2).  T
06f0: 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a 65 0a  he minimum size.
0700: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0710: 69 73 20 61 20 73 69 6e 67 6c 65 20 35 31 32 2d  is a single 512-
0720: 62 79 74 65 20 70 61 67 65 2e 0a 54 68 65 20 6d  byte page..The m
0730: 61 78 69 6d 75 6d 20 73 69 7a 65 20 64 61 74 61  aximum size data
0740: 62 61 73 65 20 77 6f 75 6c 64 20 62 65 20 32 31  base would be 21
0750: 34 37 34 38 33 36 34 36 20 70 61 67 65 73 20 61  47483646 pages a
0760: 74 20 36 35 35 33 36 20 62 79 74 65 73 20 70 65  t 65536 bytes pe
0770: 72 0a 70 61 67 65 20 6f 72 20 31 34 30 2c 37 33  r.page or 140,73
0780: 37 2c 34 38 38 2c 32 32 34 2c 32 35 36 20 62 79  7,488,224,256 by
0790: 74 65 73 20 28 61 62 6f 75 74 20 31 34 30 20 74  tes (about 140 t
07a0: 65 72 61 62 79 74 65 73 29 2e 20 20 55 73 75 61  erabytes).  Usua
07b0: 6c 6c 79 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a  lly SQLite will.
07c0: 68 69 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  hit the maximum 
07d0: 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69 74 20  file size limit 
07e0: 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  of the underlyin
07f0: 67 20 66 69 6c 65 73 79 73 74 65 6d 20 6f 72 20  g filesystem or 
0800: 64 69 73 6b 0a 68 61 72 64 77 61 72 65 20 73 69  disk.hardware si
0810: 7a 65 20 6c 69 6d 69 74 20 6c 6f 6e 67 20 62 65  ze limit long be
0820: 66 6f 72 65 20 69 74 20 68 69 74 73 20 69 74 73  fore it hits its
0830: 20 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 73 69   own internal si
0840: 7a 65 20 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c  ze limit.</p>..<
0850: 70 3e 49 6e 20 63 6f 6d 6d 6f 6e 20 75 73 65 2c  p>In common use,
0860: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
0870: 73 20 74 65 6e 64 20 74 6f 20 72 61 6e 67 65 20  s tend to range 
0880: 69 6e 20 73 69 7a 65 20 66 72 6f 6d 20 61 20 66  in size from a f
0890: 65 77 20 6b 69 6c 6f 62 79 74 65 73 0a 74 6f 20  ew kilobytes.to 
08a0: 61 20 66 65 77 20 67 69 67 61 62 79 74 65 73 2e  a few gigabytes.
08b0: 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20 61 6e 79 20  </p>..<p>At any 
08c0: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 65  point in time, e
08d0: 76 65 72 79 20 70 61 67 65 20 69 6e 20 74 68 65  very page in the
08e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68   main database h
08f0: 61 73 20 61 20 73 69 6e 67 6c 65 0a 75 73 65 20  as a single.use 
0900: 77 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66 20  which is one of 
0910: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 3c  the following:.<
0920: 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 6c 6f 63 6b  ul>.<li>The lock
0930: 2d 62 79 74 65 20 70 61 67 65 0a 3c 6c 69 3e 41  -byte page.<li>A
0940: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 0a 3c   freelist page.<
0950: 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ul>.<li>A freeli
0960: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 0a 3c 6c  st trunk page.<l
0970: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 6c 65 61  i>A freelist lea
0980: 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69  f page.</ul>.<li
0990: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 0a 3c  >A b-tree page.<
09a0: 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61 62 6c 65 20  ul>.<li>A table 
09b0: 62 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20  b-tree interior 
09c0: 70 61 67 65 0a 3c 6c 69 3e 41 20 74 61 62 6c 65  page.<li>A table
09d0: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
09e0: 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20 62  e.<li>An index b
09f0: 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20 70  -tree interior p
0a00: 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78  age.<li>An index
0a10: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
0a20: 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 70 61  e.</ul>.<li>A pa
0a30: 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70  yload overflow p
0a40: 61 67 65 0a 3c 6c 69 3e 41 20 70 6f 69 6e 74 65  age.<li>A pointe
0a50: 72 20 6d 61 70 20 70 61 67 65 0a 3c 2f 75 6c 3e  r map page.</ul>
0a60: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6c 6c 20 72  .</p>..<p>^All r
0a70: 65 61 64 73 20 66 72 6f 6d 20 61 6e 64 20 77 72  eads from and wr
0a80: 69 74 65 73 20 74 6f 20 74 68 65 20 6d 61 69 6e  ites to the main
0a90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
0aa0: 65 67 69 6e 20 61 74 20 61 20 70 61 67 65 0a 62  egin at a page.b
0ab0: 6f 75 6e 64 61 72 79 20 61 6e 64 20 61 6c 6c 20  oundary and all 
0ac0: 77 72 69 74 65 73 20 61 72 65 20 61 6e 20 69 6e  writes are an in
0ad0: 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20  teger number of 
0ae0: 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2e 20 20  pages in size.  
0af0: 5e 52 65 61 64 73 0a 61 72 65 20 61 6c 73 6f 20  ^Reads.are also 
0b00: 75 73 75 61 6c 6c 79 20 61 6e 20 69 6e 74 65 67  usually an integ
0b10: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  er number of pag
0b20: 65 73 20 69 6e 20 73 69 7a 65 2c 20 77 69 74 68  es in size, with
0b30: 20 74 68 65 20 6f 6e 65 20 65 78 63 65 70 74 69   the one excepti
0b40: 6f 6e 0a 74 68 61 74 20 77 68 65 6e 20 74 68 65  on.that when the
0b50: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
0b60: 73 74 20 6f 70 65 6e 65 64 2c 20 74 68 65 20 66  st opened, the f
0b70: 69 72 73 74 20 31 30 30 20 62 79 74 65 73 20 6f  irst 100 bytes o
0b80: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  f the.database f
0b90: 69 6c 65 20 28 74 68 65 20 64 61 74 61 62 61 73  ile (the databas
0ba0: 65 20 66 69 6c 65 20 68 65 61 64 65 72 29 20 61  e file header) a
0bb0: 72 65 20 72 65 61 64 20 61 73 20 61 20 73 75 62  re read as a sub
0bc0: 2d 70 61 67 65 20 73 69 7a 65 20 75 6e 69 74 2e  -page size unit.
0bd0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42 65 66 6f 72 65  </p>..<p>^Before
0be0: 20 61 6e 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   any information
0bf0: 2d 62 65 61 72 69 6e 67 20 70 61 67 65 20 6f 66  -bearing page of
0c00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
0c10: 20 6d 6f 64 69 66 69 65 64 2c 20 0a 74 68 65 20   modified, .the 
0c20: 6f 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66  original unmodif
0c30: 69 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  ied content of t
0c40: 68 61 74 20 70 61 67 65 20 69 73 20 77 72 69 74  hat page is writ
0c50: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 0a 72 6f  ten into the .ro
0c60: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
0c70: 20 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   If a transactio
0c80: 6e 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64  n is interrupted
0c90: 20 61 6e 64 20 6e 65 65 64 73 20 74 6f 20 62 65   and needs to be
0ca0: 20 0a 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 20 74   .rolled back, t
0cb0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
0cc0: 6e 61 6c 20 63 61 6e 20 74 68 65 6e 20 62 65 20  nal can then be 
0cd0: 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20  used to restore 
0ce0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
0cf0: 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 73 74 61  its original sta
0d00: 74 65 2e 20 20 5e 46 72 65 65 6c 69 73 74 20 6c  te.  ^Freelist l
0d10: 65 61 66 20 70 61 67 65 73 20 62 65 61 72 20 6e  eaf pages bear n
0d20: 6f 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  o.information th
0d30: 61 74 20 77 6f 75 6c 64 20 6e 65 65 64 20 74 6f  at would need to
0d40: 20 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 20   be restored on 
0d50: 61 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 73  a rollback and s
0d60: 6f 20 74 68 65 79 0a 61 72 65 20 6e 6f 74 20 77  o they.are not w
0d70: 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 6a 6f  ritten to the jo
0d80: 75 72 6e 61 6c 20 70 72 69 6f 72 20 74 6f 20 6d  urnal prior to m
0d90: 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 69 6e 20  odification, in 
0da0: 6f 72 64 65 72 20 74 6f 0a 72 65 64 75 63 65 20  order to.reduce 
0db0: 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c  disk I/O.</p>..<
0dc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
0dd0: 64 61 74 61 62 61 73 65 5f 68 65 61 64 65 72 20  database_header 
0de0: 7b 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72  {database header
0df0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 32 20  }</tcl>.<h3>1.2 
0e00: 54 68 65 20 44 61 74 61 62 61 73 65 20 48 65 61  The Database Hea
0e10: 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  der</h3>..<p>The
0e20: 20 66 69 72 73 74 20 31 30 30 20 62 79 74 65 73   first 100 bytes
0e30: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0e40: 20 66 69 6c 65 20 63 6f 6d 70 72 69 73 65 20 74   file comprise t
0e50: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
0e60: 20 0a 68 65 61 64 65 72 2e 20 20 54 68 65 20 64   .header.  The d
0e70: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
0e80: 64 65 72 20 69 73 20 64 69 76 69 64 65 64 20 69  der is divided i
0e90: 6e 74 6f 20 66 69 65 6c 64 73 20 61 73 20 73 68  nto fields as sh
0ea0: 6f 77 6e 20 62 79 0a 74 68 65 20 74 61 62 6c 65  own by.the table
0eb0: 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20 6d 75 6c   below.  All mul
0ec0: 74 69 62 79 74 65 20 66 69 65 6c 64 73 20 69 6e  tibyte fields in
0ed0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0ee0: 6c 65 20 68 65 61 64 65 72 20 61 72 65 0a 73 74  le header are.st
0ef0: 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 6d 6f  ored with the mo
0f00: 73 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  st significant b
0f10: 79 74 65 20 66 69 72 73 74 20 28 62 69 67 2d 65  yte first (big-e
0f20: 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63 65  ndian).</p>..<ce
0f30: 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61 62 61 73  nter>.<i>Databas
0f40: 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
0f50: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
0f60: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
0f70: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
0f80: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
0f90: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
0fa0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
0fb0: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
0fc0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
0fd0: 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 61 6c  =center>16<td al
0fe0: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 68 65  ign=left>.The he
0ff0: 61 64 65 72 20 73 74 72 69 6e 67 3a 20 22 53 51  ader string: "SQ
1000: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 5c 30 30  Lite format 3\00
1010: 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0".<tr><td valig
1020: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1030: 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
1040: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1050: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
1060: 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65 20 70  >.The database p
1070: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
1080: 73 2e 20 20 4d 75 73 74 20 62 65 20 61 20 70 6f  s.  Must be a po
1090: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
10a0: 65 6e 20 35 31 32 0a 61 6e 64 20 33 32 37 36 38  en 512.and 32768
10b0: 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f 72 20 74   inclusive, or t
10c0: 68 65 20 76 61 6c 75 65 20 31 20 72 65 70 72 65  he value 1 repre
10d0: 73 65 6e 74 69 6e 67 20 61 20 70 61 67 65 20 73  senting a page s
10e0: 69 7a 65 20 6f 66 20 36 35 35 33 36 2e 0a 3c 74  ize of 65536..<t
10f0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1100: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 38   align=center>18
1110: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1120: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
1130: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c   align=left>.Fil
1140: 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76  e format write v
1150: 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20 6c  ersion.  1 for l
1160: 65 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57 41  egacy; 2 for [WA
1170: 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  L]..<tr><td vali
1180: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1190: 74 65 72 3e 31 39 3c 74 64 20 76 61 6c 69 67 6e  ter>19<td valign
11a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11b0: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
11c0: 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 72  t>.File format r
11d0: 65 61 64 20 76 65 72 73 69 6f 6e 2e 20 20 31 20  ead version.  1 
11e0: 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f  for legacy; 2 fo
11f0: 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64  r [WAL]..<tr><td
1200: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1210: 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
1220: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1230: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
1240: 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73 20 6f 66  n=left>.Bytes of
1250: 20 75 6e 75 73 65 64 20 22 72 65 73 65 72 76 65   unused "reserve
1260: 64 22 20 73 70 61 63 65 20 61 74 20 74 68 65 20  d" space at the 
1270: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
1280: 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e 0a 3c 74  .  Usually 0..<t
1290: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 31   align=center>21
12b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
12d0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 61 78   align=left>.Max
12e0: 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61  imum embedded pa
12f0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20  yload fraction. 
1300: 20 4d 75 73 74 20 62 65 20 36 34 2e 0a 3c 74 72   Must be 64..<tr
1310: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1320: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 32 3c  align=center>22<
1330: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1340: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
1350: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 69 6e 69  align=left>.Mini
1360: 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79  mum embedded pay
1370: 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20 20  load fraction.  
1380: 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72 3e  Must be 32..<tr>
1390: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 33 3c 74  lign=center>23<t
13b0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13c0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
13d0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65 61 66 20  lign=left>.Leaf 
13e0: 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e  payload fraction
13f0: 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c  .  Must be 32..<
1400: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1410: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1420: 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
1430: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1440: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69  d align=left>.Fi
1450: 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  le change counte
1460: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
1470: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1480: 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>28<td valign=
1490: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14a0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
14b0: 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65 20 64 61  >.Size of the da
14c0: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70  tabase file in p
14d0: 61 67 65 73 2e 20 20 54 68 65 20 22 69 6e 2d 68  ages.  The "in-h
14e0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
14f0: 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  ize"..<tr><td va
1500: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1510: 65 6e 74 65 72 3e 33 32 3c 74 64 20 76 61 6c 69  enter>32<td vali
1520: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1530: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1540: 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d 62 65 72  eft>.Page number
1550: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
1560: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
1570: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1580: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1590: 65 72 3e 33 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>36<td valign=
15a0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
15b0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
15c0: 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  >.Total number o
15d0: 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 73  f freelist pages
15e0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><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 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>40<td valign=t
1610: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1620: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1630: 0a 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .The schema cook
1640: 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ie..<tr><td vali
1650: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1660: 74 65 72 3e 34 34 3c 74 64 20 76 61 6c 69 67 6e  ter>44<td valign
1670: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1680: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1690: 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f  t>.The schema fo
16a0: 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20 20 53 75  rmat number.  Su
16b0: 70 70 6f 72 74 65 64 20 73 63 68 65 6d 61 20 66  pported schema f
16c0: 6f 72 6d 61 74 73 20 61 72 65 20 31 2c 20 32 2c  ormats are 1, 2,
16d0: 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72 3e 3c   3, and 4..<tr><
16e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
16f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c 74 64  ign=center>48<td
1700: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1710: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1720: 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61 75 6c  ign=left>.Defaul
1730: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
1740: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1750: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1760: 65 72 3e 35 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>52<td valign=
1770: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1780: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1790: 3e 0a 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65  >.The page numbe
17a0: 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  r of the largest
17b0: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
17c0: 65 20 77 68 65 6e 20 69 6e 20 61 75 74 6f 2d 76  e when in auto-v
17d0: 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65 6d 65  acuum or.increme
17e0: 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64 65  ntal-vacuum mode
17f0: 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68 65 72  s, or zero other
1800: 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  wise..<tr><td va
1810: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1820: 65 6e 74 65 72 3e 35 36 3c 74 64 20 76 61 6c 69  enter>56<td vali
1830: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1840: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1850: 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73  eft>.The databas
1860: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
1870: 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20 6d    A value of 1 m
1880: 65 61 6e 73 20 55 54 46 2d 38 2e 20 20 41 20 76  eans UTF-8.  A v
1890: 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e 73 20  alue of 2.means 
18a0: 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61 6c  UTF-16le.  A val
18b0: 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54  ue of 3 means UT
18c0: 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74 64 20  F-16be..<tr><td 
18d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
18e0: 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64 20 76 61  =center>60<td va
18f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1900: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1910: 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75 73 65 72  =left>.The "user
1920: 20 76 65 72 73 69 6f 6e 22 20 61 73 20 72 65 61   version" as rea
1930: 64 20 61 6e 64 20 73 65 74 20 62 79 20 74 68 65  d and set by the
1940: 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70   [user_version p
1950: 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74 64 20  ragma]..<tr><td 
1960: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1970: 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64 20 76 61  =center>64<td va
1980: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1990: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
19a0: 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e 6f 6e  =left>.True (non
19b0: 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63 72 65  -zero) for incre
19c0: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f  mental-vacuum mo
19d0: 64 65 2e 20 20 46 61 6c 73 65 20 28 7a 65 72 6f  de.  False (zero
19e0: 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72  ) otherwise..<tr
19f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1a00: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 38 3c  align=center>68<
1a10: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1a20: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1a30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
1a40: 22 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 22  "Application ID"
1a50: 20 73 65 74 20 62 79 20 5b 50 52 41 47 4d 41 20   set by [PRAGMA 
1a60: 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 5d 2e  application_id].
1a70: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1a80: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1a90: 3e 37 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >72<td valign=to
1aa0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1ab0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
1ac0: 0a 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78  .Reserved for ex
1ad0: 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20 62  pansion.  Must b
1ae0: 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  e zero..<tr><td 
1af0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1b00: 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64 20 76 61  =center>92<td va
1b10: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1b20: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1b30: 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76 65 72 73  =left>.The [vers
1b40: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
1b50: 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  mber]..<tr><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 39 36 3c 74 64 20 76 61 6c  center>96<td val
1b80: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1b90: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1ba0: 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45 5f 56 45  left>.[SQLITE_VE
1bb0: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f  RSION_NUMBER].</
1bc0: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  table></center>.
1bd0: 0a 3c 68 34 3e 31 2e 32 2e 31 20 4d 61 67 69 63  .<h4>1.2.1 Magic
1be0: 20 48 65 61 64 65 72 20 53 74 72 69 6e 67 3c 2f   Header String</
1bf0: 68 34 3e 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76  h4>..<p>^Every v
1c00: 61 6c 69 64 20 53 51 4c 69 74 65 20 64 61 74 61  alid SQLite data
1c10: 62 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 73  base file begins
1c20: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
1c30: 69 6e 67 20 31 36 20 62 79 74 65 73 20 0a 28 69  ing 16 bytes .(i
1c40: 6e 20 68 65 78 29 3a 20 35 33 20 35 31 20 34 63  n hex): 53 51 4c
1c50: 20 36 39 20 37 34 20 36 35 20 32 30 20 36 36 20   69 74 65 20 66 
1c60: 36 66 20 37 32 20 36 64 20 36 31 20 37 34 20 32  6f 72 6d 61 74 2
1c70: 30 20 33 33 20 30 30 2e 20 20 54 68 69 73 20 62  0 33 00.  This b
1c80: 79 74 65 20 73 65 71 75 65 6e 63 65 0a 63 6f 72  yte sequence.cor
1c90: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
1ca0: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 22 53 51  UTF-8 string "SQ
1cb0: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22 20 69  Lite format 3" i
1cc0: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 75 6c  ncluding the nul
1cd0: 0a 74 65 72 6d 69 6e 61 74 6f 72 20 63 68 61 72  .terminator char
1ce0: 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64  acter at the end
1cf0: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 32  .</p>..<h4>1.2.2
1d00: 20 50 61 67 65 20 53 69 7a 65 3c 2f 68 34 3e 0a   Page Size</h4>.
1d10: 0a 3c 70 3e 54 68 65 20 74 77 6f 2d 62 79 74 65  .<p>The two-byte
1d20: 20 76 61 6c 75 65 20 62 65 67 69 6e 6e 69 6e 67   value beginning
1d30: 20 61 74 20 6f 66 66 73 65 74 20 31 36 20 64 65   at offset 16 de
1d40: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 70 61 67  termines the pag
1d50: 65 20 73 69 7a 65 20 6f 66 20 0a 74 68 65 20 64  e size of .the d
1d60: 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20 53 51  atabase.  For SQ
1d70: 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 33 2e  Lite versions 3.
1d80: 37 2e 30 2e 31 20 61 6e 64 20 65 61 72 6c 69 65  7.0.1 and earlie
1d90: 72 2c 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  r, this value is
1da0: 20 0a 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   .interpreted as
1db0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e   a big-endian in
1dc0: 74 65 67 65 72 20 61 6e 64 20 6d 75 73 74 20 62  teger and must b
1dd0: 65 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  e a power of two
1de0: 20 62 65 74 77 65 65 6e 0a 35 31 32 20 61 6e 64   between.512 and
1df0: 20 33 32 37 36 38 2c 20 69 6e 63 6c 75 73 69 76   32768, inclusiv
1e00: 65 2e 20 20 42 65 67 69 6e 6e 69 6e 67 20 77 69  e.  Beginning wi
1e10: 74 68 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  th SQLite versio
1e20: 6e 20 33 2e 37 2e 31 2c 20 61 20 70 61 67 65 0a  n 3.7.1, a page.
1e30: 73 69 7a 65 20 6f 66 20 36 35 35 33 36 20 62 79  size of 65536 by
1e40: 74 65 73 20 69 73 20 73 75 70 70 6f 72 74 65 64  tes is supported
1e50: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 36 35 35  .  The value 655
1e60: 33 36 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20  36 will not fit 
1e70: 69 6e 20 61 0a 74 77 6f 2d 62 79 74 65 20 69 6e  in a.two-byte in
1e80: 74 65 67 65 72 2c 20 73 6f 20 74 6f 20 73 70 65  teger, so to spe
1e90: 63 69 66 79 20 61 20 36 35 35 33 36 2d 62 79 74  cify a 65536-byt
1ea0: 65 20 70 61 67 65 20 73 69 7a 65 2c 20 74 68 65  e page size, the
1eb0: 20 76 61 6c 75 65 0a 61 74 20 6f 66 66 73 65 74   value.at offset
1ec0: 20 31 36 20 69 73 20 30 78 30 30 20 30 78 30 31   16 is 0x00 0x01
1ed0: 2e 0a 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  ..This value can
1ee0: 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
1ef0: 61 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a  as a big-endian.
1f00: 31 20 61 6e 64 20 74 68 6f 75 67 68 74 20 6f 66  1 and thought of
1f10: 20 69 73 20 61 73 20 61 20 6d 61 67 69 63 20 6e   is as a magic n
1f20: 75 6d 62 65 72 20 74 6f 20 72 65 70 72 65 73 65  umber to represe
1f30: 6e 74 20 74 68 65 20 36 35 35 33 36 20 70 61 67  nt the 65536 pag
1f40: 65 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e 65 20 63  e size..Or one c
1f50: 61 6e 20 76 69 65 77 20 74 68 65 20 74 77 6f 2d  an view the two-
1f60: 62 79 74 65 20 66 69 65 6c 64 20 61 73 20 61 20  byte field as a 
1f70: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 6e 75  little endian nu
1f80: 6d 62 65 72 20 61 6e 64 20 73 61 79 0a 74 68 61  mber and say.tha
1f90: 74 20 69 74 20 72 65 70 72 65 73 65 6e 74 73 20  t it represents 
1fa0: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 64 69  the page size di
1fb0: 76 69 64 65 64 20 62 79 20 32 35 36 2e 20 20 54  vided by 256.  T
1fc0: 68 65 73 65 20 74 77 6f 20 0a 69 6e 74 65 72 70  hese two .interp
1fd0: 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  retations of the
1fe0: 20 70 61 67 65 2d 73 69 7a 65 20 66 69 65 6c 64   page-size field
1ff0: 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 2e   are equivalent.
2000: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 33 20  </p>..<h4>1.2.3 
2010: 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73  File format vers
2020: 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 34 3e  ion numbers</h4>
2030: 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 66 6f  ..<p>The file fo
2040: 72 6d 61 74 20 77 72 69 74 65 20 76 65 72 73 69  rmat write versi
2050: 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66 6f 72 6d  on and file form
2060: 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 20  at read version 
2070: 61 74 20 6f 66 66 73 65 74 73 0a 31 38 20 61 6e  at offsets.18 an
2080: 64 20 31 39 20 61 72 65 20 69 6e 74 65 6e 64 65  d 19 are intende
2090: 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 65  d to allow for e
20a0: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20 74  nhancements of t
20b0: 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 69  he file format.i
20c0: 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  n future version
20d0: 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 49 6e  s of SQLite.  In
20e0: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
20f0: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f 74  s of SQLite, bot
2100: 68 20 6f 66 0a 74 68 65 73 65 20 76 61 6c 75 65  h of.these value
2110: 73 20 61 72 65 20 31 20 66 6f 72 20 72 6f 6c 6c  s are 1 for roll
2120: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e 67  back journalling
2130: 20 6d 6f 64 65 73 20 61 6e 64 20 32 20 66 6f 72   modes and 2 for
2140: 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c 69   [WAL].journalli
2150: 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20 61 20 76  ng mode.  If a v
2160: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
2170: 20 63 6f 64 65 64 20 74 6f 20 74 68 65 20 63 75   coded to the cu
2180: 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d 61  rrent.file forma
2190: 74 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  t specification 
21a0: 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 64 61 74  encounters a dat
21b0: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 72 65  abase file where
21c0: 20 74 68 65 20 72 65 61 64 0a 76 65 72 73 69 6f   the read.versio
21d0: 6e 20 69 73 20 31 20 6f 72 20 32 20 62 75 74 20  n is 1 or 2 but 
21e0: 74 68 65 20 77 72 69 74 65 20 76 65 72 73 69 6f  the write versio
21f0: 6e 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  n is greater tha
2200: 6e 20 32 2c 20 74 68 65 6e 20 74 68 65 20 64 61  n 2, then the da
2210: 74 61 62 61 73 65 0a 66 69 6c 65 20 6d 75 73 74  tabase.file must
2220: 20 62 65 20 74 72 65 61 74 65 64 20 61 73 20 72   be treated as r
2230: 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61 20  ead-only.  If a 
2240: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69  database file wi
2250: 74 68 20 61 20 72 65 61 64 20 76 65 72 73 69 6f  th a read versio
2260: 6e 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 32  n.greater than 2
2270: 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c   is encountered,
2280: 20 74 68 65 6e 20 74 68 61 74 20 64 61 74 61 62   then that datab
2290: 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  ase cannot be re
22a0: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c 2f  ad or written.</
22b0: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 34 20 52 65  p>..<h4>1.2.4 Re
22c0: 73 65 72 76 65 64 20 62 79 74 65 73 20 70 65 72  served bytes per
22d0: 20 70 61 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 53   page</h4>..<p>S
22e0: 51 4c 69 74 65 20 68 61 73 20 74 68 65 20 61 62  QLite has the ab
22f0: 69 6c 69 74 79 20 74 6f 20 73 65 74 20 61 73 69  ility to set asi
2300: 64 65 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65  de a small numbe
2310: 72 20 6f 66 20 65 78 74 72 61 20 62 79 74 65 73  r of extra bytes
2320: 20 61 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 65   at.the end of e
2330: 76 65 72 79 20 70 61 67 65 20 66 6f 72 20 75 73  very page for us
2340: 65 20 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e  e by extensions.
2350: 20 20 54 68 65 73 65 20 65 78 74 72 61 20 62 79    These extra by
2360: 74 65 73 20 61 72 65 0a 75 73 65 64 2c 20 66 6f  tes are.used, fo
2370: 72 20 65 78 61 6d 70 6c 65 2c 20 62 79 20 74 68  r example, by th
2380: 65 20 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74  e SQLite Encrypt
2390: 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f  ion Extension to
23a0: 20 73 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61   store a nonce.a
23b0: 6e 64 2f 6f 72 20 63 72 79 70 74 6f 67 72 61 70  nd/or cryptograp
23c0: 68 69 63 20 63 68 65 63 6b 73 75 6d 20 61 73 73  hic checksum ass
23d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63  ociated with eac
23e0: 68 20 70 61 67 65 2e 20 20 5e 54 68 65 20 0a 22  h page.  ^The ."
23f0: 72 65 73 65 72 76 65 64 20 73 70 61 63 65 22 20  reserved space" 
2400: 73 69 7a 65 20 69 6e 20 74 68 65 20 31 2d 62 79  size in the 1-by
2410: 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  te integer at of
2420: 66 73 65 74 20 32 30 20 69 73 20 74 68 65 20 6e  fset 20 is the n
2430: 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 6f  umber.of bytes o
2440: 66 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65  f space at the e
2450: 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  nd of each page 
2460: 74 6f 20 72 65 73 65 72 76 65 20 66 6f 72 20 65  to reserve for e
2470: 78 74 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20  xtensions..This 
2480: 76 61 6c 75 65 20 69 73 20 75 73 75 61 6c 6c 79  value is usually
2490: 20 30 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63   0.  The value c
24a0: 61 6e 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a  an be odd.</p>..
24b0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
24c0: 20 75 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73   usable_size {us
24d0: 61 62 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e  able size}</tcl>
24e0: 0a 3c 70 3e 54 68 65 20 22 75 73 61 62 6c 65 20  .<p>The "usable 
24f0: 73 69 7a 65 22 20 6f 66 20 61 20 64 61 74 61 62  size" of a datab
2500: 61 73 65 20 70 61 67 65 20 69 73 20 74 68 65 20  ase page is the 
2510: 70 61 67 65 20 73 69 7a 65 20 73 70 65 63 69 66  page size specif
2520: 79 20 62 79 20 74 68 65 0a 32 2d 62 79 74 65 20  y by the.2-byte 
2530: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
2540: 74 20 31 36 20 69 6e 20 74 68 65 20 68 65 61 64  t 16 in the head
2550: 65 72 20 6c 65 73 73 20 74 68 65 20 22 72 65 73  er less the "res
2560: 65 72 76 65 64 22 20 73 70 61 63 65 20 73 69 7a  erved" space siz
2570: 65 0a 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68  e.recorded in th
2580: 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72  e 1-byte integer
2590: 20 61 74 20 6f 66 66 73 65 74 20 32 30 20 69 6e   at offset 20 in
25a0: 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68   the header.  Th
25b0: 65 20 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66  e usable.size of
25c0: 20 61 20 70 61 67 65 20 6d 69 67 68 74 20 62 65   a page might be
25d0: 20 61 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20   an odd number. 
25e0: 20 5e 28 48 6f 77 65 76 65 72 2c 20 74 68 65 20   ^(However, the 
25f0: 75 73 61 62 6c 65 20 73 69 7a 65 20 69 73 20 6e  usable size is n
2600: 6f 74 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ot.allowed to be
2610: 20 6c 65 73 73 20 74 68 61 6e 20 34 38 30 2e 20   less than 480. 
2620: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2630: 20 69 66 20 74 68 65 20 70 61 67 65 20 73 69 7a   if the page siz
2640: 65 20 69 73 20 35 31 32 2c 0a 74 68 65 6e 20 74  e is 512,.then t
2650: 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61 63  he reserved spac
2660: 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65 78  e size cannot ex
2670: 63 65 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a  ceed 32.)^</p>..
2680: 3c 68 34 3e 31 2e 32 2e 35 20 50 61 79 6c 6f 61  <h4>1.2.5 Payloa
2690: 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f 68 34 3e  d fractions</h4>
26a0: 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
26b0: 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20 65 6d  m and minimum em
26c0: 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20 66  bedded payload f
26d0: 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74 68 65  ractions and the
26e0: 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20 66 72   leaf.payload fr
26f0: 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20 6d 75  action values mu
2700: 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20 61 6e  st be 64, 32, an
2710: 64 20 33 32 2e 20 20 54 68 65 73 65 20 76 61 6c  d 32.  These val
2720: 75 65 73 20 77 65 72 65 0a 6f 72 69 67 69 6e 61  ues were.origina
2730: 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  lly intended to 
2740: 62 65 20 74 75 6e 61 62 6c 65 20 70 61 72 61 6d  be tunable param
2750: 65 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c 64  eters that could
2760: 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64 69   be used to.modi
2770: 66 79 20 74 68 65 20 73 74 6f 72 61 67 65 20 66  fy the storage f
2780: 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d 74  ormat of the b-t
2790: 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20 20  ree algorithm.  
27a0: 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66 75  However, that.fu
27b0: 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 6e  nctionality is n
27c0: 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e 64  ot supported and
27d0: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63 75   there are no cu
27e0: 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20 61  rrent plans to a
27f0: 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74 68  dd.support in th
2800: 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63 65  e future.  Hence
2810: 2c 20 74 68 65 73 65 20 74 68 72 65 65 20 62 79  , these three by
2820: 74 65 73 20 61 72 65 20 66 69 78 65 64 20 61 74  tes are fixed at
2830: 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65 63   the.values spec
2840: 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  ified.</p>..<h4>
2850: 31 2e 32 2e 36 20 46 69 6c 65 20 63 68 61 6e 67  1.2.6 File chang
2860: 65 20 63 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a 0a  e counter</h4>..
2870: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2880: 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e 67 65   chngctr {change
2890: 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e 0a   counter}</tcl>.
28a0: 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63 68 61  <p>^The file cha
28b0: 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 61  nge counter is a
28c0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
28d0: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 0a 6f 66  an integer at.of
28e0: 66 73 65 74 20 32 34 20 74 68 61 74 20 69 73 20  fset 24 that is 
28f0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
2900: 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
2910: 65 20 66 69 6c 65 20 69 73 20 75 6e 6c 6f 63 6b  e file is unlock
2920: 65 64 0a 61 66 74 65 72 20 68 61 76 69 6e 67 20  ed.after having 
2930: 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2e 0a 57  been modified..W
2940: 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  hen two or more 
2950: 70 72 6f 63 65 73 73 65 73 20 61 72 65 20 72 65  processes are re
2960: 61 64 69 6e 67 20 74 68 65 20 73 61 6d 65 20 64  ading the same d
2970: 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 65 61  atabase file, ea
2980: 63 68 20 0a 70 72 6f 63 65 73 73 20 63 61 6e 20  ch .process can 
2990: 64 65 74 65 63 74 20 64 61 74 61 62 61 73 65 20  detect database 
29a0: 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f 74 68  changes from oth
29b0: 65 72 20 70 72 6f 63 65 73 73 65 73 20 62 79 20  er processes by 
29c0: 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68 65 20  monitoring .the 
29d0: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 2e 0a  change counter..
29e0: 41 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 20 6e  A process will n
29f0: 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74 6f 20  ormally want to 
2a00: 66 6c 75 73 68 20 69 74 73 20 64 61 74 61 62 61  flush its databa
2a10: 73 65 20 70 61 67 65 20 63 61 63 68 65 20 77 68  se page cache wh
2a20: 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  en.another proce
2a30: 73 73 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20  ss modified the 
2a40: 64 61 74 61 62 61 73 65 2c 20 73 69 6e 63 65 20  database, since 
2a50: 74 68 65 20 63 61 63 68 65 20 68 61 73 20 62 65  the cache has be
2a60: 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68 65 20  come stale..The 
2a70: 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e  file change coun
2a80: 74 65 72 20 66 61 63 69 6c 69 74 61 74 65 73 20  ter facilitates 
2a90: 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  this.</p>..<p>In
2aa0: 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61 6e 67   WAL mode, chang
2ab0: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
2ac0: 73 65 20 61 72 65 20 64 65 74 65 63 74 65 64 20  se are detected 
2ad0: 75 73 69 6e 67 20 74 68 65 20 77 61 6c 2d 69 6e  using the wal-in
2ae0: 64 65 78 0a 61 6e 64 20 73 6f 20 74 68 65 20 63  dex.and so the c
2af0: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2b00: 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20 48 65   not needed.  He
2b10: 6e 63 65 2c 20 74 68 65 20 63 68 61 6e 67 65 20  nce, the change 
2b20: 63 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a 6e 6f  counter might.no
2b30: 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  t be incremented
2b40: 20 6f 6e 20 65 61 63 68 20 74 72 61 6e 73 61 63   on each transac
2b50: 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f 64 65  tion in WAL mode
2b60: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 37  .</p>..<h4>1.2.7
2b70: 20 49 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   In-header datab
2b80: 61 73 65 20 73 69 7a 65 3c 2f 68 34 3e 0a 0a 3c  ase size</h4>..<
2b90: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2ba0: 66 69 6c 65 73 69 7a 65 20 7b 69 6e 2d 68 65 61  filesize {in-hea
2bb0: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2bc0: 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  e}</tcl>.<p>^The
2bd0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
2be0: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
2bf0: 66 73 65 74 20 32 38 20 69 6e 74 6f 20 74 68 65  fset 28 into the
2c00: 20 68 65 61 64 65 72 20 0a 73 74 6f 72 65 73 20   header .stores 
2c10: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
2c20: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e  database file in
2c30: 20 70 61 67 65 73 2e 20 20 5e 49 66 20 74 68 69   pages.  ^If thi
2c40: 73 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61  s in-header.data
2c50: 73 69 7a 65 20 73 69 7a 65 20 69 73 20 6e 6f 74  size size is not
2c60: 20 76 61 6c 69 64 20 28 73 65 65 20 74 68 65 20   valid (see the 
2c70: 6e 65 78 74 20 70 61 72 61 67 72 61 70 68 29 2c  next paragraph),
2c80: 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
2c90: 73 65 20 0a 73 69 7a 65 20 69 73 20 63 6f 6d 70  se .size is comp
2ca0: 75 74 65 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 0a  uted by looking.
2cb0: 61 74 20 74 68 65 20 61 63 74 75 61 6c 20 73 69  at the actual si
2cc0: 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
2cd0: 73 65 20 66 69 6c 65 2e 20 4f 6c 64 65 72 20 76  se file. Older v
2ce0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2cf0: 65 0a 69 67 6e 6f 72 65 64 20 74 68 65 20 69 6e  e.ignored the in
2d00: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
2d10: 20 73 69 7a 65 20 61 6e 64 20 75 73 65 64 20 74   size and used t
2d20: 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20 73  he actual file s
2d30: 69 7a 65 0a 65 78 63 6c 75 73 69 76 65 6c 79 2e  ize.exclusively.
2d40: 20 20 5e 4e 65 77 65 72 20 76 65 72 73 69 6f 6e    ^Newer version
2d50: 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 20  s of SQLite use 
2d60: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  the in-header da
2d70: 74 61 62 61 73 65 0a 73 69 7a 65 20 69 66 20 69  tabase.size if i
2d80: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 62  t is available b
2d90: 75 74 20 66 61 6c 6c 20 62 61 63 6b 20 74 6f 20  ut fall back to 
2da0: 74 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20  the actual file 
2db0: 73 69 7a 65 20 69 66 0a 74 68 65 20 69 6e 2d 68  size if.the in-h
2dc0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
2dd0: 69 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c 69 64  ize is not valid
2de0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 69  .</p>..<p>^The i
2df0: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2e00: 65 20 73 69 7a 65 20 69 73 20 6f 6e 6c 79 20 63  e size is only c
2e10: 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
2e20: 76 61 6c 69 64 20 69 66 0a 69 74 20 69 73 20 6e  valid if.it is n
2e30: 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 69 66 20 74  on-zero and if t
2e40: 68 65 20 34 2d 62 79 74 65 20 5b 63 68 61 6e 67  he 4-byte [chang
2e50: 65 20 63 6f 75 6e 74 65 72 5d 20 61 74 20 6f 66  e counter] at of
2e60: 66 73 65 74 20 32 34 0a 65 78 61 63 74 6c 79 20  fset 24.exactly 
2e70: 6d 61 74 63 68 65 73 20 74 68 65 20 34 2d 62 79  matches the 4-by
2e80: 74 65 20 5b 76 65 72 73 69 6f 6e 2d 76 61 6c 69  te [version-vali
2e90: 64 2d 66 6f 72 20 6e 75 6d 62 65 72 5d 20 61 74  d-for number] at
2ea0: 20 6f 66 66 73 65 74 20 39 32 2e 0a 5e 28 54 68   offset 92..^(Th
2eb0: 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61  e in-header data
2ec0: 62 61 73 65 20 73 69 7a 65 20 69 73 20 61 6c 77  base size is alw
2ed0: 61 79 73 20 76 61 6c 69 64 20 0a 77 68 65 6e 20  ays valid .when 
2ee0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2ef0: 6f 6e 6c 79 20 6d 6f 64 69 66 69 65 64 20 75 73  only modified us
2f00: 69 6e 67 20 72 65 63 65 6e 74 20 76 65 72 73 69  ing recent versi
2f10: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 28 76  ons of SQLite.(v
2f20: 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30 20 61 6e  ersions 3.7.0 an
2f30: 64 20 6c 61 74 65 72 29 2e 29 5e 0a 49 66 20 61  d later).)^.If a
2f40: 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e 20   legacy version 
2f50: 6f 66 20 53 51 4c 69 74 65 20 77 72 69 74 65 73  of SQLite writes
2f60: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2f70: 2c 20 69 74 20 77 69 6c 6c 20 6e 6f 74 0a 6b 6e  , it will not.kn
2f80: 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  ow to update the
2f90: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2fa0: 61 73 65 20 73 69 7a 65 20 61 6e 64 20 73 6f 20  ase size and so 
2fb0: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 0a 64 61  the in-header.da
2fc0: 74 61 62 61 73 65 20 73 69 7a 65 20 63 6f 75 6c  tabase size coul
2fd0: 64 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20  d be incorrect. 
2fe0: 20 42 75 74 20 6c 65 67 61 63 79 20 76 65 72 73   But legacy vers
2ff0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 77  ions of SQLite.w
3000: 69 6c 6c 20 61 6c 73 6f 20 6c 65 61 76 65 20 74  ill also leave t
3010: 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  he version-valid
3020: 2d 66 6f 72 20 6e 75 6d 62 65 72 20 61 74 20 6f  -for number at o
3030: 66 66 73 65 74 20 39 32 20 75 6e 63 68 61 6e 67  ffset 92 unchang
3040: 65 64 0a 73 6f 20 69 74 20 77 69 6c 6c 20 6e 6f  ed.so it will no
3050: 74 20 6d 61 74 63 68 20 74 68 65 20 63 68 61 6e  t match the chan
3060: 67 65 2d 63 6f 75 6e 74 65 72 2e 20 20 48 65 6e  ge-counter.  Hen
3070: 63 65 2c 20 69 6e 76 61 6c 69 64 20 69 6e 2d 68  ce, invalid in-h
3080: 65 61 64 65 72 0a 64 61 74 61 62 61 73 65 20 73  eader.database s
3090: 69 7a 65 73 20 63 61 6e 20 62 65 20 64 65 74 65  izes can be dete
30a0: 63 74 65 64 20 28 61 6e 64 20 69 67 6e 6f 72 65  cted (and ignore
30b0: 64 29 20 62 79 20 6f 62 73 65 72 76 69 6e 67 20  d) by observing 
30c0: 77 68 65 6e 0a 74 68 65 20 63 68 61 6e 67 65 2d  when.the change-
30d0: 63 6f 75 6e 74 65 72 20 64 6f 65 73 20 6e 6f 74  counter does not
30e0: 20 6d 61 74 63 68 20 74 68 65 20 76 65 72 73 69   match the versi
30f0: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
3100: 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  ber.</p>..<h4>1.
3110: 32 2e 38 20 46 72 65 65 20 70 61 67 65 20 6c 69  2.8 Free page li
3120: 73 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 55 6e 75 73  st</h4>..<p>Unus
3130: 65 64 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ed pages in the 
3140: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 72  database file ar
3150: 65 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 66 72  e stored on a fr
3160: 65 65 6c 69 73 74 2e 20 20 5e 54 68 65 0a 34 2d  eelist.  ^The.4-
3170: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3180: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3190: 74 20 33 32 20 73 74 6f 72 65 73 20 74 68 65 20  t 32 stores the 
31a0: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 0a 74  page number of.t
31b0: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66  he first page of
31c0: 20 74 68 65 20 66 72 65 65 6c 69 73 74 2c 20 6f   the freelist, o
31d0: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66 72  r zero if the fr
31e0: 65 65 6c 69 73 74 20 69 73 20 65 6d 70 74 79 2e  eelist is empty.
31f0: 0a 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  .^The 4-byte big
3200: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3210: 61 74 20 6f 66 66 73 65 74 20 33 36 20 73 74 6f  at offset 36 sto
3220: 72 65 73 20 73 74 6f 72 65 73 20 74 68 65 20 74  res stores the t
3230: 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20 6f 66 20  otal .number of 
3240: 70 61 67 65 73 20 6f 6e 20 74 68 65 20 66 72 65  pages on the fre
3250: 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  elist.</p>..<h4>
3260: 31 2e 32 2e 39 20 53 63 68 65 6d 61 20 63 6f 6f  1.2.9 Schema coo
3270: 6b 69 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68  kie</h4>..<p>^Th
3280: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
3290: 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  is a 4-byte big-
32a0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
32b0: 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68 61 74  t offset 40.that
32c0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
32d0: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
32e0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
32f0: 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70 61 72  nges.  A .prepar
3300: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
3310: 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74  compiled against
3320: 20 61 20 73 70 65 63 69 66 69 63 20 76 65 72 73   a specific vers
3330: 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74 61 62  ion of the.datab
3340: 61 73 65 20 73 63 68 65 6d 61 2e 20 20 57 68 65  ase schema.  Whe
3350: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
3360: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
3370: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 6d 75 73  he statement.mus
3380: 74 20 62 65 20 72 65 70 72 65 70 61 72 65 64 2e  t be reprepared.
3390: 20 20 5e 57 68 65 6e 20 61 20 70 72 65 70 61 72    ^When a prepar
33a0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e  ed statement run
33b0: 73 2c 20 69 74 20 66 69 72 73 74 20 63 68 65 63  s, it first chec
33c0: 6b 73 0a 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks.the schema co
33d0: 6f 6b 69 65 20 74 6f 20 65 6e 73 75 72 65 20 74  okie to ensure t
33e0: 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  he value is the 
33f0: 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65  same as when the
3400: 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20 70   statement.was p
3410: 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20 74  repared and if t
3420: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
3430: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74 68   has changed, th
3440: 65 20 73 74 61 74 65 6d 65 6e 74 20 65 69 74 68  e statement eith
3450: 65 72 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  er.automatically
3460: 20 72 65 70 72 65 70 61 72 65 73 20 61 6e 64 20   reprepares and 
3470: 72 65 72 75 6e 73 20 6f 72 20 69 74 20 61 62 6f  reruns or it abo
3480: 72 74 73 20 77 69 74 68 20 61 6e 20 5b 53 51 4c  rts with an [SQL
3490: 49 54 45 5f 53 43 48 45 4d 41 5d 20 0a 65 72 72  ITE_SCHEMA] .err
34a0: 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  or.</p>..<tcl>hd
34b0: 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68 65 6d  _fragment {schem
34c0: 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61  aformat} {schema
34d0: 20 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61   format} {schema
34e0: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 7d 3c   format number}<
34f0: 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 30  /tcl>.<h4>1.2.10
3500: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e   Schema format n
3510: 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  umber</h4>..<p>T
3520: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  he schema format
3530: 20 6e 75 6d 62 65 72 20 69 73 20 61 20 34 2d 62   number is a 4-b
3540: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
3550: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3560: 20 34 34 2e 0a 54 68 65 20 73 63 68 65 6d 61 20   44..The schema 
3570: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20 69 73  format number is
3580: 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20   similar to the 
3590: 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65 61 64  file format read
35a0: 20 61 6e 64 20 77 72 69 74 65 0a 76 65 72 73 69   and write.versi
35b0: 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74 20 6f 66  on numbers at of
35c0: 66 73 65 74 73 20 31 38 20 61 6e 64 20 31 39 20  fsets 18 and 19 
35d0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
35e0: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
35f0: 6d 62 65 72 0a 72 65 66 65 72 73 20 74 6f 20 74  mber.refers to t
3600: 68 65 20 68 69 67 68 2d 6c 65 76 65 6c 20 53 51  he high-level SQ
3610: 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20 72 61 74  L formatting rat
3620: 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 6f 77  her than the low
3630: 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 0a 66 6f  -level b-tree.fo
3640: 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f 75 72 20  rmatting.  Four 
3650: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
3660: 6d 62 65 72 73 20 61 72 65 20 63 75 72 72 65 6e  mbers are curren
3670: 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c 2f 70 3e  tly defined:</p>
3680: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c 75 65  ..<ol>.<li value
3690: 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69 73 20 75  =1>Format 1 is u
36a0: 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 61 6c 6c  nderstood by all
36b0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
36c0: 69 74 65 20 62 61 63 6b 20 74 6f 0a 76 65 72 73  ite back to.vers
36d0: 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f 6c 69 3e 0a  ion 3.0.0.</li>.
36e0: 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46 6f 72 6d  <li value=2>Form
36f0: 61 74 20 32 20 61 64 64 73 20 74 68 65 20 61 62  at 2 adds the ab
3700: 69 6c 69 74 79 20 6f 66 20 72 6f 77 73 20 77 69  ility of rows wi
3710: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 61  thin the same ta
3720: 62 6c 65 0a 74 6f 20 68 61 76 65 20 61 20 76 61  ble.to have a va
3730: 72 79 69 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20  rying number of 
3740: 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72 64 65  columns, in orde
3750: 72 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65  r to support the
3760: 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20  .[ALTER TABLE | 
3770: 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20  ALTER TABLE ... 
3780: 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66 75 6e 63  ADD COLUMN] func
3790: 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53 75 70 70  tionality.  Supp
37a0: 6f 72 74 20 66 6f 72 0a 72 65 61 64 69 6e 67 20  ort for.reading 
37b0: 61 6e 64 20 77 72 69 74 69 6e 67 20 66 6f 72 6d  and writing form
37c0: 61 74 20 32 20 77 61 73 20 61 64 64 65 64 20 69  at 2 was added i
37d0: 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  n SQLite version
37e0: 20 33 2e 31 2e 33 20 0a 6f 6e 20 32 30 30 35 2d   3.1.3 .on 2005-
37f0: 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20  02-19.</li>.<li 
3800: 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74 20 33  value=3>Format 3
3810: 20 61 64 64 73 20 74 68 65 20 61 62 69 6c 69 74   adds the abilit
3820: 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c 75 6d  y of extra colum
3830: 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41 4c 54  ns added by.[ALT
3840: 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54 45 52  ER TABLE | ALTER
3850: 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43   TABLE ... ADD C
3860: 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65 20 6e  OLUMN] to have n
3870: 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 0a  on-NULL default.
3880: 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20 63 61  values.  This ca
3890: 70 61 62 69 6c 69 74 79 20 77 61 73 20 61 64 64  pability was add
38a0: 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72  ed in SQLite ver
38b0: 73 69 6f 6e 20 33 2e 31 2e 34 20 0a 6f 6e 20 32  sion 3.1.4 .on 2
38c0: 30 30 35 2d 30 33 2d 31 31 2e 3c 2f 6c 69 3e 0a  005-03-11.</li>.
38d0: 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e 46 6f 72  <li value=4>^For
38e0: 6d 61 74 20 34 20 63 61 75 73 65 73 20 53 51 4c  mat 4 causes SQL
38f0: 69 74 65 20 74 6f 20 72 65 73 70 65 63 74 20 74  ite to respect t
3900: 68 65 0a 5b 64 65 73 63 65 6e 64 69 6e 67 20 69  he.[descending i
3910: 6e 64 65 78 65 73 20 7c 20 44 45 53 43 20 6b 65  ndexes | DESC ke
3920: 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e 64 65 78 20  yword] on.index 
3930: 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20 20 28  declarations.  (
3940: 5e 54 68 65 20 44 45 53 43 20 6b 65 79 77 6f 72  ^The DESC keywor
3950: 64 20 69 73 20 69 67 6e 6f 72 65 64 20 69 6e 20  d is ignored in 
3960: 69 6e 64 65 78 65 73 20 66 6f 72 20 0a 66 6f 72  indexes for .for
3970: 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e 64 20 33  mats 1, 2, and 3
3980: 2e 29 0a 5e 46 6f 72 6d 61 74 20 34 20 61 6c 73  .).^Format 4 als
3990: 6f 20 61 64 64 73 20 74 77 6f 20 6e 65 77 20 62  o adds two new b
39a0: 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64 20 74 79  oolean record ty
39b0: 70 65 20 76 61 6c 75 65 73 20 28 5b 73 65 72 69  pe values ([seri
39c0: 61 6c 20 74 79 70 65 73 5d 0a 38 20 61 6e 64 20  al types].8 and 
39d0: 39 29 2e 20 20 53 75 70 70 6f 72 74 20 66 6f 72  9).  Support for
39e0: 20 66 6f 72 6d 61 74 20 34 20 77 61 73 20 61 64   format 4 was ad
39f0: 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 33 2e  ded in SQLite 3.
3a00: 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30 31 2d 31  3.0 on.2006-01-1
3a10: 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c  0.</li>.</ol>..<
3a20: 70 3e 5e 4e 65 77 20 64 61 74 61 62 61 73 65 20  p>^New database 
3a30: 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 62 79  files created by
3a40: 20 53 51 4c 69 74 65 20 75 73 65 20 66 6f 72 6d   SQLite use form
3a50: 61 74 20 34 20 62 79 20 64 65 66 61 75 6c 74 2e  at 4 by default.
3a60: 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f 66 69  .^The [legacy_fi
3a70: 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d 61  le_format pragma
3a80: 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ] can be used to
3a90: 20 63 61 75 73 65 20 53 51 4c 69 74 65 0a 74 6f   cause SQLite.to
3aa0: 20 63 72 65 61 74 65 20 6e 65 77 20 64 61 74 61   create new data
3ab0: 62 61 73 65 20 66 69 6c 65 73 20 75 73 69 6e 67  base files using
3ac0: 20 66 6f 72 6d 61 74 20 31 2e 0a 54 68 65 20 66   format 1..The f
3ad0: 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e 75  ormat version nu
3ae0: 6d 62 65 72 20 63 61 6e 20 62 65 20 6d 61 64 65  mber can be made
3af0: 20 74 6f 20 64 65 66 61 75 6c 74 20 74 6f 20 31   to default to 1
3b00: 20 69 6e 73 74 65 61 64 20 6f 66 20 34 20 62 79   instead of 4 by
3b10: 0a 73 65 74 74 69 6e 67 20 5b 53 51 4c 49 54 45  .setting [SQLITE
3b20: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
3b30: 52 4d 41 54 5d 3d 31 20 61 74 20 63 6f 6d 70 69  RMAT]=1 at compi
3b40: 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le-time..</p>..<
3b50: 68 34 3e 31 2e 32 2e 31 31 20 53 75 67 67 65 73  h4>1.2.11 Sugges
3b60: 74 65 64 20 63 61 63 68 65 20 73 69 7a 65 3c 2f  ted cache size</
3b70: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79  h4>..<p>The 4-by
3b80: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73 69  te big-endian si
3b90: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 74 20  gned integer at 
3ba0: 6f 66 66 73 65 74 20 34 38 20 69 73 20 74 68 65  offset 48 is the
3bb0: 20 73 75 67 67 65 73 74 65 64 0a 63 61 63 68 65   suggested.cache
3bc0: 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73 20 66   size in pages f
3bd0: 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
3be0: 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c 75 65  file.  The value
3bf0: 20 69 73 20 61 20 73 75 67 67 65 73 74 69 6f 6e   is a suggestion
3c00: 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69 74 65  .only and SQLite
3c10: 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f 62 6c   is under no obl
3c20: 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72  igation to honor
3c30: 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f 6c 75   it.  The absolu
3c40: 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68 65 20  te value.of the 
3c50: 69 6e 74 65 67 65 72 20 69 73 20 75 73 65 64 20  integer is used 
3c60: 61 73 20 74 68 65 20 73 75 67 67 65 73 74 65 64  as the suggested
3c70: 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75 67 67   size.  The sugg
3c80: 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65  ested cache size
3c90: 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73 69 6e  .can be set usin
3ca0: 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74 5f 63  g the [default_c
3cb0: 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d 61  ache_size pragma
3cc0: 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  ].</p>..<h4>1.2.
3cd0: 31 32 20 49 6e 63 72 65 6d 65 6e 74 61 6c 20 76  12 Incremental v
3ce0: 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73 3c 2f  acuum settings</
3cf0: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 74 77 6f 20  h4>..<p>The two 
3d00: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
3d10: 6e 20 69 6e 74 65 67 65 72 73 20 61 74 20 6f 66  n integers at of
3d20: 66 73 65 74 73 20 35 32 20 61 6e 64 20 36 34 20  fsets 52 and 64 
3d30: 61 72 65 20 75 73 65 64 0a 74 6f 20 6d 61 6e 61  are used.to mana
3d40: 67 65 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63  ge the [auto_vac
3d50: 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d  uum] and [increm
3d60: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f  ental_vacuum] mo
3d70: 64 65 73 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e  des.  ^If.the in
3d80: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3d90: 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e 20  52 is zero then 
3da0: 70 6f 69 6e 74 65 72 2d 6d 61 70 20 28 70 74 72  pointer-map (ptr
3db0: 6d 61 70 29 20 70 61 67 65 73 20 61 72 65 0a 6f  map) pages are.o
3dc0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
3dd0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
3de0: 64 20 6e 65 69 74 68 65 72 20 61 75 74 6f 5f 76  d neither auto_v
3df0: 61 63 75 75 6d 20 6e 6f 72 0a 69 6e 63 72 65 6d  acuum nor.increm
3e00: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61 72 65  ental_vacuum are
3e10: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 5e 49 66   supported.  ^If
3e20: 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   the integer at 
3e30: 6f 66 66 73 65 74 20 35 32 20 69 73 0a 6e 6f 6e  offset 52 is.non
3e40: 2d 7a 65 72 6f 20 74 68 65 6e 20 69 74 20 69 73  -zero then it is
3e50: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
3e60: 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   of the largest 
3e70: 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
3e80: 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20  .database file, 
3e90: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3ea0: 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 70  e will contain p
3eb0: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6e 64  trmap pages, and
3ec0: 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62   the.mode must b
3ed0: 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61  e either auto_va
3ee0: 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e  cuum or incremen
3ef0: 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 5e 49 6e  tal_vacuum.  ^In
3f00: 20 74 68 69 73 20 6c 61 74 74 65 72 0a 63 61 73   this latter.cas
3f10: 65 2c 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  e, the integer a
3f20: 74 20 6f 66 66 73 65 74 20 36 34 20 69 73 20 74  t offset 64 is t
3f30: 72 75 65 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e  rue for incremen
3f40: 74 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66  tal_vacuum and.f
3f50: 61 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f 76 61  alse for auto_va
3f60: 63 75 75 6d 2e 20 20 5e 49 66 20 74 68 65 20 69  cuum.  ^If the i
3f70: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3f80: 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e   52 is zero then
3f90: 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20  .the integer at 
3fa0: 6f 66 66 73 65 74 20 36 34 20 6d 75 73 74 20 61  offset 64 must a
3fb0: 6c 73 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e  lso be zero.</p>
3fc0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
3fd0: 6e 74 20 65 6e 63 20 7b 74 65 78 74 20 65 6e 63  nt enc {text enc
3fe0: 6f 64 69 6e 67 7d 3c 2f 74 63 6c 3e 0a 3c 68 34  oding}</tcl>.<h4
3ff0: 3e 31 2e 32 2e 31 33 20 54 65 78 74 20 65 6e 63  >1.2.13 Text enc
4000: 6f 64 69 6e 67 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e  oding</h4>..<p>^
4010: 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65  The 4-byte big-e
4020: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
4030: 20 6f 66 66 73 65 74 20 35 36 20 64 65 74 65 72   offset 56 deter
4040: 6d 69 6e 65 73 20 74 68 65 20 65 6e 63 6f 64 69  mines the encodi
4050: 6e 67 0a 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  ng.used for all 
4060: 74 65 78 74 20 73 74 72 69 6e 67 73 20 73 74 6f  text strings sto
4070: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
4080: 61 73 65 2e 20 20 0a 5e 41 20 76 61 6c 75 65 20  ase.  .^A value 
4090: 6f 66 20 31 20 6d 65 61 6e 73 20 55 54 46 2d 38  of 1 means UTF-8
40a0: 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20  ..^A value of 2 
40b0: 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e 0a  means UTF-16le..
40c0: 5e 41 20 76 61 6c 75 65 20 6f 66 20 33 20 6d 65  ^A value of 3 me
40d0: 61 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a 4e 6f  ans UTF-16be..No
40e0: 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61 72   other values ar
40f0: 65 20 61 6c 6c 6f 77 65 64 2e 0a 5e 28 54 68 65  e allowed..^(The
4100: 20 73 71 6c 69 74 65 33 2e 68 20 68 65 61 64 65   sqlite3.h heade
4110: 72 20 66 69 6c 65 20 64 65 66 69 6e 65 73 20 43  r file defines C
4120: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
4130: 63 72 6f 73 20 53 51 4c 49 54 45 5f 55 54 46 38  cros SQLITE_UTF8
4140: 20 61 73 20 31 2c 0a 53 51 4c 49 54 45 5f 55 54   as 1,.SQLITE_UT
4150: 46 31 36 4c 45 20 61 73 20 32 2c 20 61 6e 64 20  F16LE as 2, and 
4160: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 61  SQLITE_UTF16BE a
4170: 73 20 33 2c 20 74 6f 20 75 73 65 20 69 6e 20 70  s 3, to use in p
4180: 6c 61 63 65 20 6f 66 0a 74 68 65 20 6e 75 6d 65  lace of.the nume
4190: 72 69 63 20 63 6f 64 65 73 20 66 6f 72 20 74 68  ric codes for th
41a0: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
41b0: 29 5e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  )^</p>..<h4>1.2.
41c0: 31 34 20 55 73 65 72 20 76 65 72 73 69 6f 6e 20  14 User version 
41d0: 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e  number</h4>..<p>
41e0: 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  ^The 4-byte big-
41f0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
4200: 74 20 6f 66 66 73 65 74 20 36 30 20 69 73 20 74  t offset 60 is t
4210: 68 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20  he user version 
4220: 77 68 69 63 68 0a 69 73 20 73 65 74 20 61 6e 64  which.is set and
4230: 20 71 75 65 72 69 65 64 20 62 79 20 74 68 65 20   queried by the 
4240: 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70 72  [user_version pr
4250: 61 67 6d 61 5d 2e 20 20 54 68 65 20 75 73 65 72  agma].  The user
4260: 20 76 65 72 73 69 6f 6e 20 69 73 0a 6e 6f 74 20   version is.not 
4270: 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 2e 3c  used by SQLite.<
4280: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
4290: 67 6d 65 6e 74 20 61 70 70 69 64 20 7b 41 70 70  gment appid {App
42a0: 6c 69 63 61 74 69 6f 6e 20 49 44 7d 3c 2f 74 63  lication ID}</tc
42b0: 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 35 20 41 70  l>.<h4>1.2.15 Ap
42c0: 70 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f 68 34  plication ID</h4
42d0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
42e0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
42f0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36  eger at offset 6
4300: 38 20 69 73 20 61 6e 20 22 41 70 70 6c 69 63 61  8 is an "Applica
4310: 74 69 6f 6e 20 49 44 22 20 74 68 61 74 0a 63 61  tion ID" that.ca
4320: 6e 20 62 65 20 73 65 74 20 62 79 20 74 68 65 20  n be set by the 
4330: 5b 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74  [PRAGMA applicat
4340: 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e 64 20  ion_id] command 
4350: 69 6e 20 6f 72 64 65 72 20 74 6f 20 69 64 65 6e  in order to iden
4360: 74 69 66 79 20 74 68 65 0a 64 61 74 61 62 61 73  tify the.databas
4370: 65 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74  e as belonging t
4380: 6f 20 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20  o or associated 
4390: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
43a0: 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 54  r application..T
43b0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49  he application I
43c0: 44 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  D is intended fo
43d0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
43e0: 20 75 73 65 64 20 61 73 20 61 6e 0a 5b 61 70 70   used as an.[app
43f0: 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d 66 6f  lication file-fo
4400: 72 6d 61 74 5d 2e 20 20 54 68 65 20 61 70 70 6c  rmat].  The appl
4410: 69 63 61 74 69 6f 6e 20 49 44 20 63 61 6e 20 62  ication ID can b
4420: 65 20 75 73 65 64 20 62 79 20 75 74 69 6c 69 74  e used by utilit
4430: 69 65 73 20 0a 73 75 63 68 20 61 73 20 5b 68 74  ies .such as [ht
4440: 74 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69 6e 73  tp://www.darwins
4450: 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c 20 66  ys.com/file/ | f
4460: 69 6c 65 28 31 29 5d 20 74 6f 20 64 65 74 65 72  ile(1)] to deter
4470: 6d 69 6e 65 20 74 68 65 20 73 70 65 63 69 66 69  mine the specifi
4480: 63 0a 66 69 6c 65 20 74 79 70 65 20 72 61 74 68  c.file type rath
4490: 65 72 20 74 68 61 6e 20 6a 75 73 74 20 72 65 70  er than just rep
44a0: 6f 72 74 69 6e 67 20 22 53 51 4c 69 74 65 33 20  orting "SQLite3 
44b0: 44 61 74 61 62 61 73 65 22 2e 20 20 41 20 6c 69  Database".  A li
44c0: 73 74 20 6f 66 0a 61 73 73 69 67 6e 65 64 20 61  st of.assigned a
44d0: 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 73 20 63  pplication IDs c
44e0: 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63 6f  an be seen by co
44f0: 6e 73 75 6c 74 69 6e 67 20 74 68 65 0a 5b 68 74  nsulting the.[ht
4500: 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
4510: 6f 72 67 2f 73 72 63 2f 61 72 74 69 66 61 63 74  org/src/artifact
4520: 3f 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e 61  ?ci=trunk&filena
4530: 6d 65 3d 6d 61 67 69 63 2e 74 78 74 7c 6d 61 67  me=magic.txt|mag
4540: 69 63 2e 74 78 74 5d 0a 66 69 6c 65 20 69 6e 20  ic.txt].file in 
4550: 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63  the SQLite sourc
4560: 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 3c 2f 70  e repository.</p
4570: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4580: 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65  ent validfor {ve
4590: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
45a0: 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  number}</tcl>.<h
45b0: 34 3e 31 2e 32 2e 31 36 20 57 72 69 74 65 20 6c  4>1.2.16 Write l
45c0: 69 62 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e  ibrary version n
45d0: 75 6d 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f  umber and versio
45e0: 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62  n-valid-for numb
45f0: 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65  er</h4>..<p>^The
4600: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
4610: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
4620: 66 73 65 74 20 39 36 20 73 74 6f 72 65 73 20 74  fset 96 stores t
4630: 68 65 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53  he .[SQLITE_VERS
4640: 49 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75  ION_NUMBER] valu
4650: 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  e for the SQLite
4660: 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f   library that mo
4670: 73 74 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69  st.recently modi
4680: 66 69 65 64 20 74 68 65 20 64 61 74 61 62 61 73  fied the databas
4690: 65 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d  e file.  ^The 4-
46a0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
46b0: 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65  integer at.offse
46c0: 74 20 39 32 20 69 73 20 74 68 65 20 76 61 6c 75  t 92 is the valu
46d0: 65 20 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65  e of the [change
46e0: 20 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74   counter] when t
46f0: 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  he version numbe
4700: 72 0a 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54  r.was stored.  T
4710: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
4720: 66 73 65 74 20 39 32 20 69 6e 64 69 63 61 74 65  fset 92 indicate
4730: 73 20 77 68 69 63 68 20 74 72 61 6e 73 61 63 74  s which transact
4740: 69 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20  ion.the version 
4750: 6e 75 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20  number is valid 
4760: 66 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74  for and is somet
4770: 69 6d 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a  imes called the.
4780: 22 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66  "version-valid-f
4790: 6f 72 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34  or number"...<h4
47a0: 3e 31 2e 32 2e 31 36 20 48 65 61 64 65 72 20 73  >1.2.16 Header s
47b0: 70 61 63 65 20 72 65 73 65 72 76 65 64 20 66 6f  pace reserved fo
47c0: 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e  r expansion</h4>
47d0: 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62  ..<p>All other b
47e0: 79 74 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  ytes of the data
47f0: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
4800: 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66 6f   are reserved fo
4810: 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e 73 69  r.future expansi
4820: 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65 20 73  on and must be s
4830: 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a  et to zero.</p>.
4840: 0a 3c 68 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63  .<h3>1.3 The Loc
4850: 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68 33 3e  k-Byte Page</h3>
4860: 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79  ..<p>The lock-by
4870: 74 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73  te page is the s
4880: 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68  ingle page of th
4890: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
48a0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
48b0: 65 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65  e bytes at offse
48c0: 74 73 20 62 65 74 77 65 65 6e 20 31 30 37 33 37  ts between 10737
48d0: 34 31 38 32 34 20 61 6e 64 20 31 30 37 33 37 34  41824 and 107374
48e0: 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e  2335,.inclusive.
48f0: 20 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c    A database fil
4900: 65 20 74 68 61 74 20 69 73 20 6c 65 73 73 20 74  e that is less t
4910: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
4920: 31 30 37 33 37 34 31 38 32 34 20 62 79 74 65 73  1073741824 bytes
4930: 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69   .in size contai
4940: 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20  ns no lock-byte 
4950: 70 61 67 65 2e 20 20 41 20 64 61 74 61 62 61 73  page.  A databas
4960: 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68  e file larger th
4970: 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f  an.1073741824 co
4980: 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f  ntains exactly o
4990: 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  ne lock-byte pag
49a0: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  e..</p>..<p>The 
49b0: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69  lock-byte page i
49c0: 73 20 73 65 74 20 61 73 69 64 65 20 66 6f 72 20  s set aside for 
49d0: 75 73 65 20 62 79 20 74 68 65 20 6f 70 65 72 61  use by the opera
49e0: 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63  ting-system spec
49f0: 69 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65  ific.[VFS] imple
4a00: 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70  mentation in imp
4a10: 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61  lementing the da
4a20: 74 61 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b  tabase file lock
4a30: 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a  ing primitives..
4a40: 5e 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74  ^SQLite does not
4a50: 20 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79   use the lock-by
4a60: 74 65 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53  te page.  ^The S
4a70: 51 4c 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c  QLite core .will
4a80: 20 6e 65 76 65 72 20 72 65 61 64 20 6f 72 20 77   never read or w
4a90: 72 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79  rite the lock-by
4aa0: 74 65 20 70 61 67 65 2c 0a 74 68 6f 75 67 68 20  te page,.though 
4ab0: 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d  operating-system
4ac0: 20 73 70 65 63 69 66 69 63 20 5b 56 46 53 5d 20   specific [VFS] 
4ad0: 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73  .implementations
4ae0: 20 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f 20 72   may choose to r
4af0: 65 61 64 20 6f 72 20 77 72 69 74 65 20 62 79 74  ead or write byt
4b00: 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62  es on the lock-b
4b10: 79 74 65 20 0a 70 61 67 65 20 61 63 63 6f 72 64  yte .page accord
4b20: 69 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64  ing to the .need
4b30: 73 20 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69  s and procliviti
4b40: 65 73 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c  es of the underl
4b50: 79 69 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68  ying system.  Th
4b60: 65 20 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32  e unix and win32
4b70: 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74  .[VFS] implement
4b80: 61 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65  ations that come
4b90: 20 62 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69   built into SQLi
4ba0: 74 65 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20  te do not write 
4bb0: 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65  to the.lock-byte
4bc0: 20 70 61 67 65 2c 20 62 75 74 20 74 68 69 72 64   page, but third
4bd0: 2d 70 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65  -party VFS imple
4be0: 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f  mentations for.o
4bf0: 74 68 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73  ther operating s
4c00: 79 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70  ystems might.</p
4c10: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4c20: 65 6e 74 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b  ent {freelist} {
4c30: 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d  freelist} {free-
4c40: 70 61 67 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e  page list}</tcl>
4c50: 0a 3c 68 33 3e 31 2e 34 20 54 68 65 20 46 72 65  .<h3>1.4 The Fre
4c60: 65 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  elist</h3>..<p>A
4c70: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
4c80: 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 65  ight contain one
4c90: 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 73 20 74   or more pages t
4ca0: 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 0a 61  hat are not in.a
4cb0: 63 74 69 76 65 20 75 73 65 2e 20 20 55 6e 75 73  ctive use.  Unus
4cc0: 65 64 20 70 61 67 65 73 20 63 61 6e 20 63 6f 6d  ed pages can com
4cd0: 65 20 61 62 6f 75 74 2c 20 66 6f 72 20 65 78 61  e about, for exa
4ce0: 6d 70 6c 65 2c 20 77 68 65 6e 20 69 6e 66 6f 72  mple, when infor
4cf0: 6d 61 74 69 6f 6e 0a 69 73 20 64 65 6c 65 74 65  mation.is delete
4d00: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
4d10: 61 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67  ase.  Unused pag
4d20: 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  es are stored on
4d30: 20 74 68 65 20 66 72 65 65 6c 69 73 74 0a 61 6e   the freelist.an
4d40: 64 20 61 72 65 20 72 65 75 73 65 64 20 77 68 65  d are reused whe
4d50: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 67  n additional pag
4d60: 65 73 20 61 72 65 20 72 65 71 75 69 72 65 64 2e  es are required.
4d70: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 72 65  </p>..<p>The fre
4d80: 65 6c 69 73 74 20 69 73 20 6f 72 67 61 6e 69 7a  elist is organiz
4d90: 65 64 20 61 73 20 61 20 6c 69 6e 6b 65 64 20 6c  ed as a linked l
4da0: 69 73 74 20 6f 66 20 66 72 65 65 6c 69 73 74 20  ist of freelist 
4db0: 74 72 75 6e 6b 20 70 61 67 65 73 0a 77 69 74 68  trunk pages.with
4dc0: 20 65 61 63 68 20 74 72 75 6e 6b 20 70 61 67 65   each trunk page
4dd0: 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 61 67  s containing pag
4de0: 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 7a 65  e numbers for ze
4df0: 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 65 65 6c  ro or more freel
4e00: 69 73 74 0a 6c 65 61 66 20 70 61 67 65 73 2e 3c  ist.leaf pages.<
4e10: 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 6c 69  /p>..<p>A freeli
4e20: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 63 6f  st trunk page co
4e30: 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72  nsists of an arr
4e40: 61 79 20 6f 66 20 34 2d 62 79 74 65 20 62 69 67  ay of 4-byte big
4e50: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73  -endian integers
4e60: 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  ..The size of th
4e70: 65 20 61 72 72 61 79 20 69 73 20 61 73 20 6d 61  e array is as ma
4e80: 6e 79 20 69 6e 74 65 67 65 72 73 20 61 73 20 77  ny integers as w
4e90: 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75  ill fit in the u
4ea0: 73 61 62 6c 65 20 73 70 61 63 65 0a 6f 66 20 61  sable space.of a
4eb0: 20 70 61 67 65 2e 20 20 54 68 65 20 6d 69 6e 69   page.  The mini
4ec0: 6d 75 6d 20 75 73 61 62 6c 65 20 73 70 61 63 65  mum usable space
4ed0: 20 69 73 20 34 38 30 20 62 79 74 65 73 20 73 6f   is 480 bytes so
4ee0: 20 74 68 65 20 61 72 72 61 79 20 77 69 6c 6c 20   the array will 
4ef0: 61 6c 77 61 79 73 0a 62 65 20 61 74 20 6c 65 61  always.be at lea
4f00: 73 74 20 31 32 30 20 65 6e 74 72 69 65 73 20 69  st 120 entries i
4f10: 6e 20 6c 65 6e 67 74 68 2e 20 20 5e 54 68 65 20  n length.  ^The 
4f20: 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 6f 6e  first integer on
4f30: 20 61 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e   a freelist trun
4f40: 6b 0a 70 61 67 65 20 69 73 20 74 68 65 20 70 61  k.page is the pa
4f50: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
4f60: 20 6e 65 78 74 20 66 72 65 65 6c 69 73 74 20 74   next freelist t
4f70: 72 75 6e 6b 20 70 61 67 65 20 69 6e 20 74 68 65  runk page in the
4f80: 20 6c 69 73 74 20 6f 72 20 7a 65 72 6f 20 0a 69   list or zero .i
4f90: 66 20 74 68 69 73 20 69 73 20 74 68 65 20 6c 61  f this is the la
4fa0: 73 74 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e  st freelist trun
4fb0: 6b 20 70 61 67 65 2e 20 20 5e 54 68 65 20 73 65  k page.  ^The se
4fc0: 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 6f 6e 20  cond integer on 
4fd0: 61 20 66 72 65 65 6c 69 73 74 0a 74 72 75 6e 6b  a freelist.trunk
4fe0: 20 70 61 67 65 20 69 73 20 74 68 65 20 6e 75 6d   page is the num
4ff0: 62 65 72 20 6f 66 20 6c 65 61 66 20 70 61 67 65  ber of leaf page
5000: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 66 6f 6c   pointers to fol
5010: 6c 6f 77 2e 20 20 0a 5e 28 43 61 6c 6c 20 74 68  low.  .^(Call th
5020: 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72  e second integer
5030: 20 6f 6e 20 61 20 66 72 65 65 6c 69 73 74 20 74   on a freelist t
5040: 72 75 6e 6b 20 70 61 67 65 20 4c 2e 0a 49 66 20  runk page L..If 
5050: 4c 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  L is greater tha
5060: 6e 20 7a 65 72 6f 20 74 68 65 6e 20 69 6e 74 65  n zero then inte
5070: 67 65 72 73 20 77 69 74 68 20 61 72 72 61 79 20  gers with array 
5080: 69 6e 64 65 78 65 73 20 62 65 74 77 65 65 6e 20  indexes between 
5090: 32 20 61 6e 64 0a 4c 2b 31 20 69 6e 63 6c 75 73  2 and.L+1 inclus
50a0: 69 76 65 20 63 6f 6e 74 61 69 6e 20 70 61 67 65  ive contain page
50b0: 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 66 72 65   numbers for fre
50c0: 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73  elist leaf pages
50d0: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 46 72 65 65  .)^</p>..<p>Free
50e0: 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20  list leaf pages 
50f0: 63 6f 6e 74 61 69 6e 20 6e 6f 20 69 6e 66 6f 72  contain no infor
5100: 6d 61 74 69 6f 6e 2e 20 20 5e 53 51 4c 69 74 65  mation.  ^SQLite
5110: 20 61 76 6f 69 64 73 20 72 65 61 64 69 6e 67 20   avoids reading 
5120: 6f 72 0a 77 72 69 74 69 6e 67 20 66 72 65 65 6c  or.writing freel
5130: 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20 69  ist leaf pages i
5140: 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 64 75 63  n order to reduc
5150: 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a  e disk I/O.</p>.
5160: 0a 3c 70 3e 41 20 62 75 67 20 69 6e 20 53 51 4c  .<p>A bug in SQL
5170: 69 74 65 20 76 65 72 73 69 6f 6e 73 20 70 72 69  ite versions pri
5180: 6f 72 20 74 6f 20 33 2e 36 2e 30 20 63 61 75 73  or to 3.6.0 caus
5190: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ed the database 
51a0: 74 6f 20 62 65 0a 72 65 70 6f 72 74 65 64 20 61  to be.reported a
51b0: 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79  s corrupt if any
51c0: 20 6f 66 20 74 68 65 20 6c 61 73 74 20 36 20 65   of the last 6 e
51d0: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 66 72  ntries in the fr
51e0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
51f0: 65 20 0a 61 72 72 61 79 20 63 6f 6e 74 61 69 6e  e .array contain
5200: 65 64 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75  ed non-zero valu
5210: 65 73 2e 20 20 4e 65 77 65 72 20 76 65 72 73 69  es.  Newer versi
5220: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 64 6f  ons of SQLite do
5230: 20 6e 6f 74 20 68 61 76 65 0a 74 68 69 73 20 70   not have.this p
5240: 72 6f 62 6c 65 6d 2e 20 20 5e 48 6f 77 65 76 65  roblem.  ^Howeve
5250: 72 2c 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e  r, newer version
5260: 73 20 6f 66 20 53 51 4c 69 74 65 20 73 74 69 6c  s of SQLite stil
5270: 6c 20 61 76 6f 69 64 20 75 73 69 6e 67 20 74 68  l avoid using th
5280: 65 20 0a 6c 61 73 74 20 73 69 78 20 65 6e 74 72  e .last six entr
5290: 69 65 73 20 69 6e 20 74 68 65 20 66 72 65 65 6c  ies in the freel
52a0: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 61  ist trunk page a
52b0: 72 72 61 79 20 69 6e 20 6f 72 64 65 72 20 74 68  rray in order th
52c0: 61 74 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  at database.file
52d0: 73 20 63 72 65 61 74 65 64 20 62 79 20 6e 65 77  s created by new
52e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
52f0: 51 4c 69 74 65 20 63 61 6e 20 62 65 20 72 65 61  QLite can be rea
5300: 64 20 62 79 20 6f 6c 64 65 72 20 76 65 72 73 69  d by older versi
5310: 6f 6e 73 0a 6f 66 20 53 51 4c 69 74 65 2e 3c 2f  ons.of SQLite.</
5320: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62  p>..<p>^The numb
5330: 65 72 20 6f 66 20 66 72 65 65 6c 69 73 74 20 70  er of freelist p
5340: 61 67 65 73 20 69 73 20 73 74 6f 72 65 64 20 61  ages is stored a
5350: 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  s a 4-byte big-e
5360: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 0a 69 6e  ndian integer.in
5370: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
5380: 61 64 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65  ader at an offse
5390: 74 20 6f 66 20 33 36 20 66 72 6f 6d 20 74 68 65  t of 36 from the
53a0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
53b0: 65 20 66 69 6c 65 2e 0a 5e 54 68 65 20 64 61 74  e file..^The dat
53c0: 61 62 61 73 65 20 68 65 61 64 65 72 20 61 6c 73  abase header als
53d0: 6f 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67  o stores the pag
53e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
53f0: 66 69 72 73 74 20 66 72 65 65 6c 69 73 74 20 74  first freelist t
5400: 72 75 6e 6b 0a 70 61 67 65 20 61 73 20 61 20 34  runk.page as a 4
5410: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
5420: 20 69 6e 74 65 67 65 72 20 61 74 20 61 6e 20 6f   integer at an o
5430: 66 66 73 65 74 20 6f 66 20 33 32 20 66 72 6f 6d  ffset of 32 from
5440: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f   the beginning.o
5450: 66 20 74 68 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  f the file.</p>.
5460: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
5470: 74 20 62 74 72 65 65 20 7b 42 2a 2d 54 72 65 65  t btree {B*-Tree
5480: 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 35  s}</tcl>.<h3>1.5
5490: 20 42 2d 74 72 65 65 20 50 61 67 65 73 3c 2f 68   B-tree Pages</h
54a0: 33 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65  3>..<p>The b-tre
54b0: 65 20 61 6c 67 6f 72 69 74 68 6d 20 70 72 6f 76  e algorithm prov
54c0: 69 64 65 73 20 6b 65 79 2f 64 61 74 61 20 73 74  ides key/data st
54d0: 6f 72 61 67 65 20 77 69 74 68 20 75 6e 69 71 75  orage with uniqu
54e0: 65 20 61 6e 64 0a 6f 72 64 65 72 65 64 20 6b 65  e and.ordered ke
54f0: 79 73 20 6f 6e 20 70 61 67 65 2d 6f 72 69 65 6e  ys on page-orien
5500: 74 65 64 20 73 74 6f 72 61 67 65 20 64 65 76 69  ted storage devi
5510: 63 65 73 2e 0a 46 6f 72 20 62 61 63 6b 67 72 6f  ces..For backgro
5520: 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
5530: 6f 6e 20 62 2d 74 72 65 65 73 2c 20 73 65 65 0a  on b-trees, see.
5540: 4b 6e 75 74 68 2c 20 3c 75 3e 54 68 65 20 41 72  Knuth, <u>The Ar
5550: 74 20 4f 66 20 43 6f 6d 70 75 74 65 72 20 50 72  t Of Computer Pr
5560: 6f 67 72 61 6d 6d 69 6e 67 3c 2f 75 3e 2c 20 56  ogramming</u>, V
5570: 6f 6c 75 6d 65 20 33 20 22 53 6f 72 74 69 6e 67  olume 3 "Sorting
5580: 0a 61 6e 64 20 53 65 61 72 63 68 69 6e 67 22 2c  .and Searching",
5590: 20 70 61 67 65 73 20 34 37 31 2d 34 37 39 2e 20   pages 471-479. 
55a0: 20 54 77 6f 20 6b 69 6e 64 73 20 6f 66 20 62 2d   Two kinds of b-
55b0: 74 72 65 65 73 20 61 72 65 20 75 73 65 64 20 62  trees are used b
55c0: 79 0a 53 51 4c 69 74 65 2e 20 20 54 68 65 20 61  y.SQLite.  The a
55d0: 6c 67 6f 72 69 74 68 6d 20 74 68 61 74 20 4b 6e  lgorithm that Kn
55e0: 75 74 68 20 63 61 6c 6c 73 20 22 42 2a 2d 54 72  uth calls "B*-Tr
55f0: 65 65 22 20 73 74 6f 72 65 73 20 61 6c 6c 20 64  ee" stores all d
5600: 61 74 61 0a 69 6e 20 74 68 65 20 6c 65 61 76 65  ata.in the leave
5610: 73 20 6f 66 20 74 68 65 20 74 72 65 65 2e 20 20  s of the tree.  
5620: 53 51 4c 69 74 65 20 63 61 6c 6c 73 20 74 68 69  SQLite calls thi
5630: 73 20 76 61 72 69 65 74 79 20 6f 66 20 62 2d 74  s variety of b-t
5640: 72 65 65 0a 61 20 22 74 61 62 6c 65 20 62 2d 74  ree.a "table b-t
5650: 72 65 65 22 2e 20 54 68 65 20 61 6c 67 6f 72 69  ree". The algori
5660: 74 68 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63  thm that Knuth c
5670: 61 6c 6c 73 20 73 69 6d 70 6c 79 20 22 42 2d 54  alls simply "B-T
5680: 72 65 65 22 0a 73 74 6f 72 65 73 20 62 6f 74 68  ree".stores both
5690: 20 74 68 65 20 6b 65 79 20 61 6e 64 20 74 68 65   the key and the
56a0: 20 64 61 74 61 20 74 6f 67 65 74 68 65 72 20 69   data together i
56b0: 6e 20 62 6f 74 68 20 6c 65 61 76 65 73 0a 61 6e  n both leaves.an
56c0: 64 20 69 6e 20 69 6e 74 65 72 69 6f 72 20 70 61  d in interior pa
56d0: 67 65 73 2e 20 20 49 6e 20 74 68 65 20 53 51 4c  ges.  In the SQL
56e0: 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ite implementati
56f0: 6f 6e 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  on, the original
5700: 0a 42 2d 54 72 65 65 20 61 6c 67 6f 72 69 74 68  .B-Tree algorith
5710: 6d 20 73 74 6f 72 65 73 20 6b 65 79 73 20 6f 6e  m stores keys on
5720: 6c 79 2c 20 6f 6d 69 74 74 69 6e 67 20 74 68 65  ly, omitting the
5730: 20 64 61 74 61 20 65 6e 74 69 72 65 6c 79 2c 20   data entirely, 
5740: 61 6e 64 0a 69 73 20 63 61 6c 6c 65 64 20 61 6e  and.is called an
5750: 20 22 69 6e 64 65 78 20 62 2d 74 72 65 65 22 2e   "index b-tree".
5760: 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61  ..<p>A b-tree pa
5770: 67 65 20 69 73 20 65 69 74 68 65 72 20 61 6e 20  ge is either an 
5780: 69 6e 74 65 72 69 6f 72 20 70 61 67 65 20 6f 72  interior page or
5790: 20 61 20 6c 65 61 66 20 70 61 67 65 2e 0a 41 20   a leaf page..A 
57a0: 6c 65 61 66 20 70 61 67 65 20 63 6f 6e 74 61 69  leaf page contai
57b0: 6e 73 20 6b 65 79 73 20 61 6e 64 20 69 6e 20 74  ns keys and in t
57c0: 68 65 20 63 61 73 65 20 6f 66 20 61 20 74 61 62  he case of a tab
57d0: 6c 65 20 62 2d 74 72 65 65 20 65 61 63 68 0a 6b  le b-tree each.k
57e0: 65 79 20 68 61 73 20 61 73 73 6f 63 69 61 74 65  ey has associate
57f0: 64 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 74 65  d data.  An inte
5800: 72 69 6f 72 20 70 61 67 65 20 63 6f 6e 74 61 69  rior page contai
5810: 6e 73 0a 4b 20 6b 65 79 73 20 74 6f 67 65 74 68  ns.K keys togeth
5820: 65 72 20 77 69 74 68 20 4b 2b 31 20 70 6f 69 6e  er with K+1 poin
5830: 74 65 72 73 20 74 6f 20 63 68 69 6c 64 20 62 2d  ters to child b-
5840: 74 72 65 65 20 70 61 67 65 73 2e 0a 41 20 22 70  tree pages..A "p
5850: 6f 69 6e 74 65 72 22 20 69 6e 20 61 6e 20 69 6e  ointer" in an in
5860: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
5870: 67 65 20 69 73 20 6a 75 73 74 20 74 68 65 20 33  ge is just the 3
5880: 31 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 70 61  1-bit integer.pa
5890: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
58a0: 20 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f 70 3e   child page.</p>
58b0: 0a 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20  ..<p>Define the 
58c0: 64 65 70 74 68 0a 6f 66 20 61 20 6c 65 61 66 20  depth.of a leaf 
58d0: 62 2d 74 72 65 65 20 74 6f 20 62 65 20 31 20 61  b-tree to be 1 a
58e0: 6e 64 20 74 68 65 20 64 65 70 74 68 20 6f 66 20  nd the depth of 
58f0: 61 6e 79 20 69 6e 74 65 72 69 6f 72 20 62 2d 74  any interior b-t
5900: 72 65 65 20 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f  ree to be one.mo
5910: 72 65 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69  re than the maxi
5920: 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 61 6e 79  mum depth of any
5930: 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e   of its children
5940: 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f  .  ^In a well-fo
5950: 72 6d 65 64 0a 64 61 74 61 62 61 73 65 2c 20 61  rmed.database, a
5960: 6c 6c 20 63 68 69 6c 64 72 65 6e 20 6f 66 20 61  ll children of a
5970: 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  n interior b-tre
5980: 65 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  e have the same 
5990: 64 65 70 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  depth.</p>..<p>I
59a0: 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  n an interior b-
59b0: 74 72 65 65 20 70 61 67 65 2c 20 74 68 65 20 70  tree page, the p
59c0: 6f 69 6e 74 65 72 73 20 61 6e 64 20 6b 65 79 73  ointers and keys
59d0: 20 6c 6f 67 69 63 61 6c 6c 79 20 61 6c 74 65 72   logically alter
59e0: 6e 61 74 65 20 0a 77 69 74 68 20 61 20 70 6f 69  nate .with a poi
59f0: 6e 74 65 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64  nter on both end
5a00: 73 2e 20 28 54 68 65 20 70 72 65 76 69 6f 75 73  s. (The previous
5a10: 20 73 65 6e 74 65 6e 63 65 20 69 73 20 74 6f 20   sentence is to 
5a20: 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f  be understood.co
5a30: 6e 63 65 70 74 75 61 6c 6c 79 20 2d 20 74 68 65  nceptually - the
5a40: 20 61 63 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f   actual layout o
5a50: 66 20 74 68 65 20 6b 65 79 73 20 61 6e 64 0a 70  f the keys and.p
5a60: 6f 69 6e 74 65 72 73 20 77 69 74 68 69 6e 20 74  ointers within t
5a70: 68 65 20 70 61 67 65 20 69 73 20 6d 6f 72 65 20  he page is more 
5a80: 63 6f 6d 70 6c 69 63 61 74 65 64 20 61 6e 64 20  complicated and 
5a90: 77 69 6c 6c 20 62 65 20 64 65 73 63 72 69 62 65  will be describe
5aa0: 64 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e  d in.the sequel.
5ab0: 29 20 20 41 6c 6c 20 6b 65 79 73 20 77 69 74 68  )  All keys with
5ac0: 69 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65  in the same page
5ad0: 20 61 72 65 20 75 6e 69 71 75 65 20 61 6e 64 20   are unique and 
5ae0: 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72  are logically.or
5af0: 67 61 6e 69 7a 65 64 20 69 6e 20 61 73 63 65 6e  ganized in ascen
5b00: 64 69 6e 67 20 6f 72 64 65 72 20 66 72 6f 6d 20  ding order from 
5b10: 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20  left to right.  
5b20: 28 41 67 61 69 6e 2c 20 74 68 69 73 20 6f 72 64  (Again, this ord
5b30: 65 72 69 6e 67 0a 69 73 20 6c 6f 67 69 63 61 6c  ering.is logical
5b40: 2c 20 6e 6f 74 20 70 68 79 73 69 63 61 6c 2e 20  , not physical. 
5b50: 20 54 68 65 20 61 63 74 75 61 6c 20 6c 6f 63 61   The actual loca
5b60: 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74  tion of keys wit
5b70: 68 69 6e 20 74 68 65 20 70 61 67 65 0a 69 73 20  hin the page.is 
5b80: 61 72 62 69 74 72 61 72 79 2e 29 20 5e 46 6f 72  arbitrary.) ^For
5b90: 20 61 6e 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e   any key X, poin
5ba0: 74 65 72 73 20 74 6f 20 74 68 65 20 6c 65 66 74  ters to the left
5bb0: 0a 6f 66 20 61 20 58 20 72 65 66 65 72 20 74 6f  .of a X refer to
5bc0: 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e   b-tree pages on
5bd0: 20 77 68 69 63 68 20 61 6c 6c 20 6b 65 79 73 20   which all keys 
5be0: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6f 72  are less than or
5bf0: 20 65 71 75 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f   equal to X..^Po
5c00: 69 6e 74 65 72 73 20 74 6f 20 74 68 65 20 72 69  inters to the ri
5c10: 67 68 74 20 6f 66 20 58 20 72 65 66 65 72 20 74  ght of X refer t
5c20: 6f 20 70 61 67 65 73 20 77 68 65 72 65 20 61 6c  o pages where al
5c30: 6c 20 6b 65 79 73 20 61 72 65 20 0a 67 72 65 61  l keys are .grea
5c40: 74 65 72 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a  ter than X.</p>.
5c50: 0a 3c 70 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e  .<p>Within an in
5c60: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
5c70: 67 65 2c 20 65 61 63 68 20 6b 65 79 20 61 6e 64  ge, each key and
5c80: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
5c90: 69 74 73 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65  its.immediate le
5ca0: 66 74 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  ft are combined 
5cb0: 69 6e 74 6f 20 61 20 73 74 72 75 63 74 75 72 65  into a structure
5cc0: 20 63 61 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22   called a "cell"
5cd0: 2e 20 20 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73  .  The.right-mos
5ce0: 74 20 70 6f 69 6e 74 65 72 20 69 73 20 68 65 6c  t pointer is hel
5cf0: 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41  d separately.  A
5d00: 20 6c 65 61 66 20 62 2d 74 72 65 65 20 70 61 67   leaf b-tree pag
5d10: 65 20 68 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72  e has no.pointer
5d20: 73 2c 20 62 75 74 20 69 74 20 73 74 69 6c 6c 20  s, but it still 
5d30: 75 73 65 73 20 74 68 65 20 63 65 6c 6c 20 73 74  uses the cell st
5d40: 72 75 63 74 75 72 65 20 74 6f 20 68 6f 6c 64 20  ructure to hold 
5d50: 6b 65 79 73 20 66 6f 72 0a 69 6e 64 65 78 20 62  keys for.index b
5d60: 2d 74 72 65 65 73 20 6f 72 20 6b 65 79 73 20 61  -trees or keys a
5d70: 6e 64 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74  nd content for t
5d80: 61 62 6c 65 20 62 2d 74 72 65 65 73 2e 20 20 44  able b-trees.  D
5d90: 61 74 61 20 69 73 20 61 6c 73 6f 0a 63 6f 6e 74  ata is also.cont
5da0: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 65 6c  ained in the cel
5db0: 6c 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72  l..</p>..<p>Ever
5dc0: 79 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61  y b-tree page ha
5dd0: 73 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61  s at most one pa
5de0: 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65  rent b-tree page
5df0: 2e 0a 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  ..A b-tree page 
5e00: 77 69 74 68 6f 75 74 20 61 20 70 61 72 65 6e 74  without a parent
5e10: 20 69 73 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f   is called a roo
5e20: 74 20 70 61 67 65 2e 20 20 41 20 72 6f 6f 74 20  t page.  A root 
5e30: 62 2d 74 72 65 65 20 70 61 67 65 0a 74 6f 67 65  b-tree page.toge
5e40: 74 68 65 72 20 77 69 74 68 20 74 68 65 20 63 6c  ther with the cl
5e50: 6f 73 75 72 65 20 6f 66 20 69 74 73 20 63 68 69  osure of its chi
5e60: 6c 64 72 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d  ldren form a com
5e70: 70 6c 65 74 65 20 62 2d 74 72 65 65 2e 0a 49 74  plete b-tree..It
5e80: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 28 61 6e   is possible (an
5e90: 64 20 69 6e 20 66 61 63 74 20 72 61 74 68 65 72  d in fact rather
5ea0: 20 63 6f 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65   common) to have
5eb0: 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72   a complete b-tr
5ec0: 65 65 0a 74 68 61 74 20 63 6f 6e 73 69 73 74 73  ee.that consists
5ed0: 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67   of a single pag
5ee0: 65 20 74 68 61 74 20 69 73 20 62 6f 74 68 20 61  e that is both a
5ef0: 20 6c 65 61 66 20 61 6e 64 20 74 68 65 20 72 6f   leaf and the ro
5f00: 6f 74 2e 0a 42 65 63 61 75 73 65 20 74 68 65 72  ot..Because ther
5f10: 65 20 61 72 65 20 70 6f 69 6e 74 65 72 73 20 66  e are pointers f
5f20: 72 6f 6d 20 70 61 72 65 6e 74 73 20 74 6f 20 63  rom parents to c
5f30: 68 69 6c 64 72 65 6e 2c 20 65 76 65 72 79 20 70  hildren, every p
5f40: 61 67 65 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74  age of a.complet
5f50: 65 20 62 2d 74 72 65 65 20 63 61 6e 20 62 65 20  e b-tree can be 
5f60: 6c 6f 63 61 74 65 64 20 69 66 20 6f 6e 6c 79 20  located if only 
5f70: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  the root page is
5f80: 20 6b 6e 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a   known.  Hence,.
5f90: 62 2d 74 72 65 65 73 20 61 72 65 20 69 64 65 6e  b-trees are iden
5fa0: 74 69 66 69 65 64 20 62 79 20 74 68 65 69 72 20  tified by their 
5fb0: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
5fc0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72  .</p>..<p>A b-tr
5fd0: 65 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65  ee page is eithe
5fe0: 72 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  r a table b-tree
5ff0: 20 70 61 67 65 20 6f 72 20 61 6e 20 69 6e 64 65   page or an inde
6000: 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41  x b-tree page..A
6010: 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 20  ll pages within 
6020: 65 61 63 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d  each complete b-
6030: 74 72 65 65 20 61 72 65 20 6f 66 20 74 68 65 20  tree are of the 
6040: 73 61 6d 65 20 74 79 70 65 3a 20 65 69 74 68 65  same type: eithe
6050: 72 20 74 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78  r table.or index
6060: 2e 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65 20  .  There is one 
6070: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 69 6e  table b-trees in
6080: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6090: 6c 65 0a 66 6f 72 20 65 61 63 68 20 72 6f 77 69  le.for each rowi
60a0: 64 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  d table in the d
60b0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
60c0: 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74 65 6d  including system
60d0: 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61 73 20   tables.such as 
60e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20 20  sqlite_master.  
60f0: 54 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 64  There is one ind
6100: 65 78 20 62 2d 74 72 65 65 0a 69 6e 20 74 68 65  ex b-tree.in the
6110: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
6120: 6f 72 20 65 61 63 68 20 69 6e 64 65 78 20 69 6e  or each index in
6130: 20 74 68 65 20 73 63 68 65 6d 61 2c 20 69 6e 63   the schema, inc
6140: 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69  luding implied i
6150: 6e 64 65 78 65 73 0a 63 72 65 61 74 65 64 20 62  ndexes.created b
6160: 79 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  y uniqueness con
6170: 73 74 72 61 69 6e 74 73 2e 20 20 54 68 65 72 65  straints.  There
6180: 20 61 72 65 20 6e 6f 20 62 2d 74 72 65 65 73 20   are no b-trees 
6190: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
61a0: 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d  [virtual tables]
61b0: 2e 20 20 53 70 65 63 69 66 69 63 20 76 69 72 74  .  Specific virt
61c0: 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
61d0: 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20  entations might 
61e0: 6d 61 6b 65 20 75 73 65 0a 6f 66 20 5b 73 68 61  make use.of [sha
61f0: 64 6f 77 20 74 61 62 6c 65 73 5d 20 66 6f 72 20  dow tables] for 
6200: 73 74 6f 72 61 67 65 2c 20 62 75 74 20 74 68 6f  storage, but tho
6210: 73 65 20 73 68 61 64 6f 77 20 74 61 62 6c 65 73  se shadow tables
6220: 20 77 69 6c 6c 20 68 61 76 65 20 73 65 70 61 72   will have separ
6230: 61 74 65 0a 65 6e 74 72 69 65 73 20 69 6e 20 74  ate.entries in t
6240: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
6250: 6d 61 2e 20 20 5b 57 49 54 48 4f 55 54 20 52 4f  ma.  [WITHOUT RO
6260: 57 49 44 5d 20 74 61 62 6c 65 73 20 75 73 65 20  WID] tables use 
6270: 69 6e 64 65 78 20 62 2d 74 72 65 65 73 0a 72 61  index b-trees.ra
6280: 74 68 65 72 20 74 68 61 6e 20 61 20 74 61 62 6c  ther than a tabl
6290: 65 20 62 2d 74 72 65 65 73 2c 20 73 6f 20 74 68  e b-trees, so th
62a0: 65 72 65 20 69 73 20 6f 6e 65 0a 69 6e 64 65 78  ere is one.index
62b0: 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 64   b-tree in the d
62c0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
62d0: 20 65 61 63 68 20 5b 57 49 54 48 4f 55 54 20 52   each [WITHOUT R
62e0: 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65  OWID] table..The
62f0: 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f   b-tree correspo
6300: 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 73 71 6c  nding to the sql
6310: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
6320: 20 69 73 20 61 6c 77 61 79 73 20 61 20 74 61 62   is always a tab
6330: 6c 65 0a 62 2d 74 72 65 65 20 61 6e 64 20 61 6c  le.b-tree and al
6340: 77 61 79 73 20 68 61 73 20 61 20 72 6f 6f 74 20  ways has a root 
6350: 70 61 67 65 20 6f 66 20 31 2e 0a 54 68 65 20 73  page of 1..The s
6360: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
6370: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  le contains the 
6380: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
6390: 20 66 6f 72 20 65 76 65 72 79 20 6f 74 68 65 72   for every other
63a0: 20 0a 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65   .table and inde
63b0: 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  x in the databas
63c0: 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
63d0: 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 20  Each entry in a 
63e0: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e  table b-tree con
63f0: 73 69 73 74 73 20 6f 66 20 61 20 36 34 2d 62 69  sists of a 64-bi
6400: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
6410: 20 6b 65 79 0a 61 6e 64 20 75 70 20 74 6f 20 32   key.and up to 2
6420: 31 34 37 34 38 33 36 34 37 20 62 79 74 65 73 20  147483647 bytes 
6430: 6f 66 20 61 72 62 69 74 72 61 72 79 20 64 61 74  of arbitrary dat
6440: 61 2e 20 20 28 54 68 65 20 6b 65 79 20 6f 66 20  a.  (The key of 
6450: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 0a 63  a table b-tree.c
6460: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
6470: 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65  e [rowid] of the
6480: 20 53 51 4c 20 74 61 62 6c 65 20 74 68 61 74 20   SQL table that 
6490: 74 68 65 20 62 2d 74 72 65 65 20 69 6d 70 6c 65  the b-tree imple
64a0: 6d 65 6e 74 73 2e 29 0a 49 6e 74 65 72 69 6f 72  ments.).Interior
64b0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68   table b-trees h
64c0: 6f 6c 64 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e  old only keys an
64d0: 64 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68  d pointers to ch
64e0: 69 6c 64 72 65 6e 2e 0a 41 6c 6c 20 64 61 74 61  ildren..All data
64f0: 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e   is contained in
6500: 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65   the table b-tre
6510: 65 20 6c 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c  e leaves.</p>..<
6520: 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20  p>Each entry in 
6530: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
6540: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
6550: 72 62 69 74 72 61 72 79 20 6b 65 79 20 6f 66 20  rbitrary key of 
6560: 75 70 0a 74 6f 20 32 31 34 37 34 38 33 36 34 37  up.to 2147483647
6570: 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
6580: 20 61 6e 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70   and no data.</p
6590: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
65a0: 65 6e 74 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64  ent cell_payload
65b0: 20 7b 63 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c   {cell payload}<
65c0: 2f 74 63 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20  /tcl>.<p>Define 
65d0: 74 68 65 20 22 70 61 79 6c 6f 61 64 22 20 6f 66  the "payload" of
65e0: 20 61 20 63 65 6c 6c 20 74 6f 20 62 65 20 74 68   a cell to be th
65f0: 65 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67  e arbitrary leng
6600: 74 68 20 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68  th section.of th
6610: 65 20 63 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20  e cell.  For an 
6620: 69 6e 64 65 78 20 62 2d 74 72 65 65 2c 20 74 68  index b-tree, th
6630: 65 20 6b 65 79 20 69 73 20 61 6c 77 61 79 73 20  e key is always 
6640: 61 72 62 69 74 72 61 72 79 20 69 6e 20 6c 65 6e  arbitrary in len
6650: 67 74 68 0a 61 6e 64 20 68 65 6e 63 65 20 74 68  gth.and hence th
6660: 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65  e payload is the
6670: 20 6b 65 79 2e 20 20 54 68 65 72 65 20 61 72 65   key.  There are
6680: 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 65   no arbitrary le
6690: 6e 67 74 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e  ngth elements.in
66a0: 20 74 68 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e   the cells of in
66b0: 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74  terior table b-t
66c0: 72 65 65 20 70 61 67 65 73 20 61 6e 64 20 73 6f  ree pages and so
66d0: 20 74 68 6f 73 65 20 63 65 6c 6c 73 20 68 61 76   those cells hav
66e0: 65 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54  e no.payload.  T
66f0: 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66  able b-tree leaf
6700: 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 20 61   pages contain a
6710: 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20  rbitrary length 
6720: 63 6f 6e 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66  content and.so f
6730: 6f 72 20 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73  or cells on thos
6740: 65 20 70 61 67 65 73 20 74 68 65 20 70 61 79 6c  e pages the payl
6750: 6f 61 64 20 69 73 20 74 68 65 20 63 6f 6e 74 65  oad is the conte
6760: 6e 74 2e 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20  nt..<p>When the 
6770: 73 69 7a 65 20 6f 66 20 70 61 79 6c 6f 61 64 20  size of payload 
6780: 66 6f 72 20 61 20 63 65 6c 6c 20 65 78 63 65 65  for a cell excee
6790: 64 73 20 61 20 63 65 72 74 61 69 6e 20 74 68 72  ds a certain thr
67a0: 65 73 68 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65  eshold (to.be de
67b0: 66 69 6e 65 64 20 6c 61 74 65 72 29 20 74 68 65  fined later) the
67c0: 6e 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74  n only the first
67d0: 20 66 65 77 20 62 79 74 65 73 20 6f 66 20 74 68   few bytes of th
67e0: 65 20 70 61 79 6c 6f 61 64 0a 61 72 65 20 73 74  e payload.are st
67f0: 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72  ored on the b-tr
6800: 65 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20  ee page and the 
6810: 62 61 6c 61 6e 63 65 20 69 73 20 73 74 6f 72 65  balance is store
6820: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
6830: 73 74 0a 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76  st.of content ov
6840: 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70  erflow pages.</p
6850: 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70  >..<p>A b-tree p
6860: 61 67 65 20 69 73 20 64 69 76 69 64 65 64 20 69  age is divided i
6870: 6e 74 6f 20 72 65 67 69 6f 6e 73 20 69 6e 20 74  nto regions in t
6880: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64  he following ord
6890: 65 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68  er:..<ol>.<li>Th
68a0: 65 20 31 30 30 2d 62 79 74 65 20 64 61 74 61 62  e 100-byte datab
68b0: 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20  ase file header 
68c0: 28 66 6f 75 6e 64 20 6f 6e 20 70 61 67 65 20 31  (found on page 1
68d0: 20 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38   only).<li>The 8
68e0: 20 6f 72 20 31 32 20 62 79 74 65 20 62 2d 74 72   or 12 byte b-tr
68f0: 65 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 3c  ee page header.<
6900: 6c 69 3e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e  li>The cell poin
6910: 74 65 72 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e  ter array.<li>Un
6920: 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 0a  allocated space.
6930: 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e  <li>The cell con
6940: 74 65 6e 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68  tent area.<li>Th
6950: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
6960: 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c  n..</ol>.</p>..<
6970: 70 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64  p>The 100-byte d
6980: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
6990: 64 65 72 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c  der is found onl
69a0: 79 20 6f 6e 20 70 61 67 65 20 31 2c 20 77 68 69  y on page 1, whi
69b0: 63 68 20 69 73 0a 61 6c 77 61 79 73 20 61 20 74  ch is.always a t
69c0: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
69d0: 2e 20 20 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74  .  All other b-t
69e0: 72 65 65 20 70 61 67 65 73 20 69 6e 20 74 68 65  ree pages in the
69f0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 6f   database file.o
6a00: 6d 69 74 20 74 68 69 73 20 31 30 30 2d 62 79 74  mit this 100-byt
6a10: 65 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c  e header.</p>..<
6a20: 70 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72  p>The reserved r
6a30: 65 67 69 6f 6e 20 69 73 20 61 6e 20 61 72 65 61  egion is an area
6a40: 20 6f 66 20 75 6e 75 73 65 64 20 73 70 61 63 65   of unused space
6a50: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65   at the end of e
6a60: 76 65 72 79 0a 70 61 67 65 20 28 65 78 63 65 70  very.page (excep
6a70: 74 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61  t the locking pa
6a80: 67 65 29 20 74 68 61 74 20 65 78 74 65 6e 73 69  ge) that extensi
6a90: 6f 6e 73 20 63 61 6e 20 75 73 65 20 74 6f 20 68  ons can use to h
6aa0: 6f 6c 64 20 70 65 72 2d 70 61 67 65 0a 69 6e 66  old per-page.inf
6ab0: 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20  ormation.  ^The 
6ac0: 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65  size of the rese
6ad0: 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 64  rved region is d
6ae0: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
6af0: 20 6f 6e 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e   one-byte.unsign
6b00: 65 64 20 69 6e 74 65 67 65 72 20 66 6f 75 6e 64  ed integer found
6b10: 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66   at an offset of
6b20: 20 32 30 20 69 6e 74 6f 20 74 68 65 20 64 61 74   20 into the dat
6b30: 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65  abase file heade
6b40: 72 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74  r..The size of t
6b50: 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69  he reserved regi
6b60: 6f 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 7a 65  on is usually ze
6b70: 72 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ro.</p>..<p>The 
6b80: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
6b90: 65 72 20 69 73 20 38 20 62 79 74 65 73 20 69 6e  er is 8 bytes in
6ba0: 20 73 69 7a 65 20 66 6f 72 20 6c 65 61 66 20 70   size for leaf p
6bb0: 61 67 65 73 20 61 6e 64 20 31 32 0a 62 79 74 65  ages and 12.byte
6bc0: 73 20 66 6f 72 20 69 6e 74 65 72 69 6f 72 20 70  s for interior p
6bd0: 61 67 65 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69  ages.  All multi
6be0: 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74  byte values in t
6bf0: 68 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 61  he page header.a
6c00: 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54  re big-endian..T
6c10: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  he b-tree page h
6c20: 65 61 64 65 72 20 69 73 20 63 6f 6d 70 6f 73 65  eader is compose
6c30: 64 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d of the followi
6c40: 6e 67 20 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a  ng fields:</p>..
6c50: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72  <center>.<i>B-tr
6c60: 65 65 20 50 61 67 65 20 48 65 61 64 65 72 20 46  ee Page Header F
6c70: 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
6c80: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69  able border=1 wi
6c90: 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c  dth="80%">.<tr><
6ca0: 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a  th>Offset<th>Siz
6cb0: 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e  e<th>Description
6cc0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
6cd0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
6ce0: 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >0<td align=cent
6cf0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c  er valign=top>1<
6d00: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
6d10: 54 68 65 20 6f 6e 65 2d 62 79 74 65 20 66 6c 61  The one-byte fla
6d20: 67 20 61 74 20 6f 66 66 73 65 74 20 30 20 69 6e  g at offset 0 in
6d30: 64 69 63 61 74 69 6e 67 20 74 68 65 20 62 2d 74  dicating the b-t
6d40: 72 65 65 20 70 61 67 65 20 74 79 70 65 2e 0a 5e  ree page type..^
6d50: 41 20 76 61 6c 75 65 20 6f 66 20 32 20 6d 65 61  A value of 2 mea
6d60: 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61  ns the page is a
6d70: 6e 20 69 6e 74 65 72 69 6f 72 20 69 6e 64 65 78  n interior index
6d80: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41   b-tree page..^A
6d90: 20 76 61 6c 75 65 20 6f 66 20 35 20 6d 65 61 6e   value of 5 mean
6da0: 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61 6e  s the page is an
6db0: 20 69 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20   interior table 
6dc0: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20  b-tree page..^A 
6dd0: 76 61 6c 75 65 20 6f 66 20 31 30 20 6d 65 61 6e  value of 10 mean
6de0: 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61 20  s the page is a 
6df0: 6c 65 61 66 20 69 6e 64 65 78 20 62 2d 74 72 65  leaf index b-tre
6e00: 65 20 70 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65  e page..^A value
6e10: 20 6f 66 20 31 33 20 6d 65 61 6e 73 20 74 68 65   of 13 means the
6e20: 20 70 61 67 65 20 69 73 20 61 20 6c 65 61 66 20   page is a leaf 
6e30: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67  table b-tree pag
6e40: 65 2e 0a 5e 41 6e 79 20 6f 74 68 65 72 20 76 61  e..^Any other va
6e50: 6c 75 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72  lue for the b-tr
6e60: 65 65 20 70 61 67 65 20 74 79 70 65 20 69 73 20  ee page type is 
6e70: 61 6e 20 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c 74  an error..<tr><t
6e80: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6e90: 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61  align=top>1<td a
6ea0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6eb0: 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67  gn=top>2<td alig
6ec0: 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f  n=left>.^The two
6ed0: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74  -byte integer at
6ee0: 20 6f 66 66 73 65 74 20 31 20 67 69 76 65 73 20   offset 1 gives 
6ef0: 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65  the start of the
6f00: 0a 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b  .first freeblock
6f10: 20 6f 6e 20 74 68 65 20 70 61 67 65 2c 20 6f 72   on the page, or
6f20: 20 69 73 20 7a 65 72 6f 20 69 66 20 74 68 65 72   is zero if ther
6f30: 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f  e are no freeblo
6f40: 63 6b 73 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  cks..<tr><td ali
6f50: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6f60: 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69 67 6e 3d  =top>3<td align=
6f70: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6f80: 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  p>2<td align=lef
6f90: 74 3e 0a 5e 54 68 65 20 74 77 6f 2d 62 79 74 65  t>.^The two-byte
6fa0: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
6fb0: 65 74 20 33 20 67 69 76 65 73 20 74 68 65 20 6e  et 3 gives the n
6fc0: 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f  umber of cells o
6fd0: 6e 20 74 68 65 20 70 61 67 65 2e 0a 3c 74 72 3e  n the page..<tr>
6fe0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6ff0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 35 3c 74 64   valign=top>5<td
7000: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7010: 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c  lign=top>2<td al
7020: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68 65 20  ign=left>.^(The 
7030: 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72  two-byte integer
7040: 20 61 74 20 6f 66 66 73 65 74 20 35 20 64 65 73   at offset 5 des
7050: 69 67 6e 61 74 65 73 20 74 68 65 20 73 74 61 72  ignates the star
7060: 74 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 63 6f  t of the cell co
7070: 6e 74 65 6e 74 0a 61 72 65 61 2e 20 20 41 20 7a  ntent.area.  A z
7080: 65 72 6f 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ero value for th
7090: 69 73 20 69 6e 74 65 67 65 72 20 69 73 20 69 6e  is integer is in
70a0: 74 65 72 70 72 65 74 65 64 20 61 73 20 36 35 35  terpreted as 655
70b0: 33 36 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 61 6c  36.)^.<tr><td al
70c0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
70d0: 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c 69 67 6e  n=top>7<td align
70e0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
70f0: 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  op>1<td align=le
7100: 66 74 3e 0a 5e 54 68 65 20 6f 6e 65 2d 62 79 74  ft>.^The one-byt
7110: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
7120: 73 65 74 20 37 20 67 69 76 65 73 20 74 68 65 20  set 7 gives the 
7130: 6e 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65  number of fragme
7140: 6e 74 65 64 20 66 72 65 65 0a 62 79 74 65 73 20  nted free.bytes 
7150: 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c 6c 20  within the cell 
7160: 63 6f 6e 74 65 6e 74 20 61 72 65 61 2e 0a 3c 74  content area..<t
7170: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
7180: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c  er valign=top>8<
7190: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
71a0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c 74 64 20  valign=top>4<td 
71b0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68  align=left>.^(Th
71c0: 65 20 66 6f 75 72 2d 62 79 74 65 20 70 61 67 65  e four-byte page
71d0: 20 6e 75 6d 62 65 72 20 61 74 20 6f 66 66 73 65   number at offse
71e0: 74 20 38 20 69 73 20 74 68 65 20 72 69 67 68 74  t 8 is the right
71f0: 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72 2e 20 20  -most pointer.  
7200: 54 68 69 73 0a 76 61 6c 75 65 20 61 70 70 65 61  This.value appea
7210: 72 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  rs in the header
7220: 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 62 2d 74   of interior b-t
7230: 72 65 65 20 70 61 67 65 73 20 6f 6e 6c 79 20 61  ree pages only a
7240: 6e 64 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  nd is omitted fr
7250: 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72 20 70 61 67  om.all other pag
7260: 65 73 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f  es.)^.</table></
7270: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 2f 63 65 6e  blockquote></cen
7280: 74 65 72 3e 0a 0a 3c 70 3e 5e 54 68 65 20 63 65  ter>..<p>^The ce
7290: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
72a0: 20 6f 66 20 61 20 62 2d 74 72 65 65 20 70 61 67   of a b-tree pag
72b0: 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  e immediately fo
72c0: 6c 6c 6f 77 73 20 74 68 65 20 62 2d 74 72 65 65  llows the b-tree
72d0: 0a 70 61 67 65 20 68 65 61 64 65 72 2e 20 20 4c  .page header.  L
72e0: 65 74 20 4b 20 62 65 20 74 68 65 20 6e 75 6d 62  et K be the numb
72f0: 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74  er of cells on t
7300: 68 65 20 62 74 72 65 65 2e 20 20 5e 54 68 65 20  he btree.  ^The 
7310: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 0a 61 72 72  cell pointer.arr
7320: 61 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 4b  ay consists of K
7330: 20 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   2-byte integer 
7340: 6f 66 66 73 65 74 73 20 74 6f 20 74 68 65 20 63  offsets to the c
7350: 65 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e 20 20 5e  ell contents.  ^
7360: 54 68 65 0a 63 65 6c 6c 20 70 6f 69 6e 74 65 72  The.cell pointer
7370: 73 20 61 72 65 20 61 72 72 61 6e 67 65 64 20 69  s are arranged i
7380: 6e 20 6b 65 79 20 6f 72 64 65 72 20 77 69 74 68  n key order with
7390: 20 6c 65 66 74 2d 6d 6f 73 74 20 63 65 6c 6c 20   left-most cell 
73a0: 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74  (the cell with t
73b0: 68 65 0a 73 6d 61 6c 6c 65 73 74 20 6b 65 79 29  he.smallest key)
73c0: 20 66 69 72 73 74 20 61 6e 64 20 74 68 65 20 72   first and the r
73d0: 69 67 68 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28  ight-most cell (
73e0: 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74 68  the cell with th
73f0: 65 20 6c 61 72 67 65 73 74 0a 6b 65 79 29 20 6c  e largest.key) l
7400: 61 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 65 6c  ast.</p>..<p>Cel
7410: 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 74 6f  l content is sto
7420: 72 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c 20  red in the cell 
7430: 63 6f 6e 74 65 6e 74 20 72 65 67 69 6f 6e 20 6f  content region o
7440: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
7450: 65 2e 0a 53 51 4c 69 74 65 20 73 74 72 69 76 65  e..SQLite strive
7460: 73 20 74 6f 20 70 6c 61 63 65 20 63 65 6c 6c 73  s to place cells
7470: 20 61 73 20 66 61 72 20 74 6f 77 61 72 64 20 74   as far toward t
7480: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 2d  he end of the b-
7490: 74 72 65 65 20 70 61 67 65 20 61 73 0a 69 74 20  tree page as.it 
74a0: 63 61 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f  can, in order to
74b0: 20 6c 65 61 76 65 20 73 70 61 63 65 20 66 6f 72   leave space for
74c0: 20 66 75 74 75 72 65 20 67 72 6f 77 74 68 20 6f   future growth o
74d0: 66 20 74 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74  f the cell point
74e0: 65 72 20 61 72 72 61 79 2e 0a 54 68 65 20 61 72  er array..The ar
74f0: 65 61 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68  ea in between th
7500: 65 20 6c 61 73 74 20 63 65 6c 6c 20 70 6f 69 6e  e last cell poin
7510: 74 65 72 20 61 72 72 61 79 20 65 6e 74 72 79 20  ter array entry 
7520: 61 6e 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  and the beginnin
7530: 67 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 63  g of.the first c
7540: 65 6c 6c 20 69 73 20 74 68 65 20 75 6e 61 6c 6c  ell is the unall
7550: 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 2e 0a 3c  ocated region..<
7560: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 70 61  /p>..<p>^If a pa
7570: 67 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63  ge contains no c
7580: 65 6c 6c 73 20 28 77 68 69 63 68 20 69 73 20 6f  ells (which is o
7590: 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 66 6f 72  nly possible for
75a0: 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 6f 66 20   a root page.of 
75b0: 61 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  a table that con
75c0: 74 61 69 6e 73 20 6e 6f 20 72 6f 77 73 29 20 74  tains no rows) t
75d0: 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74 20 74  hen the offset t
75e0: 6f 20 74 68 65 0a 63 65 6c 6c 20 63 6f 6e 74 65  o the.cell conte
75f0: 6e 74 20 61 72 65 61 20 77 69 6c 6c 20 65 71 75  nt area will equ
7600: 61 6c 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  al the page size
7610: 20 6d 69 6e 75 73 20 74 68 65 20 62 79 74 65 73   minus the bytes
7620: 20 6f 66 20 72 65 73 65 72 76 65 64 20 73 70 61   of reserved spa
7630: 63 65 2e 0a 5e 28 49 66 20 74 68 65 20 64 61 74  ce..^(If the dat
7640: 61 62 61 73 65 20 75 73 65 73 20 61 20 36 35 35  abase uses a 655
7650: 33 36 2d 62 79 74 65 20 70 61 67 65 20 73 69 7a  36-byte page siz
7660: 65 20 61 6e 64 20 74 68 65 20 72 65 73 65 72 76  e and the reserv
7670: 65 64 20 73 70 61 63 65 20 69 73 20 7a 65 72 6f  ed space is zero
7680: 0a 28 74 68 65 20 75 73 75 61 6c 20 76 61 6c 75  .(the usual valu
7690: 65 20 66 6f 72 20 72 65 73 65 72 76 65 64 20 73  e for reserved s
76a0: 70 61 63 65 29 20 74 68 65 6e 20 74 68 65 20 63  pace) then the c
76b0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 66 73  ell content offs
76c0: 65 74 20 6f 66 20 61 6e 0a 65 6d 70 74 79 20 70  et of an.empty p
76d0: 61 67 65 20 77 61 6e 74 73 20 74 6f 20 62 65 20  age wants to be 
76e0: 36 35 35 33 36 2e 20 20 0a 48 6f 77 65 76 65 72  65536.  .However
76f0: 2c 20 74 68 61 74 20 69 6e 74 65 67 65 72 20 69  , that integer i
7700: 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62  s too large to b
7710: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 0a 32 2d  e stored in a.2-
7720: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
7730: 74 65 67 65 72 2c 20 73 6f 20 61 20 76 61 6c 75  teger, so a valu
7740: 65 20 6f 66 20 30 20 69 73 20 75 73 65 64 20 69  e of 0 is used i
7750: 6e 20 69 74 73 20 70 6c 61 63 65 2e 29 5e 0a 0a  n its place.)^..
7760: 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 69  <p>A freeblock i
7770: 73 20 61 20 73 74 72 75 63 74 75 72 65 20 75 73  s a structure us
7780: 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20 75  ed to identify u
7790: 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65  nallocated space
77a0: 20 77 69 74 68 69 6e 0a 61 20 62 2d 74 72 65 65   within.a b-tree
77b0: 20 70 61 67 65 2e 20 20 46 72 65 65 62 6c 6f 63   page.  Freebloc
77c0: 6b 73 20 61 72 65 20 6f 72 67 61 6e 69 7a 65 64  ks are organized
77d0: 20 61 73 20 61 20 63 68 61 69 6e 2e 20 20 5e 54   as a chain.  ^T
77e0: 68 65 20 66 69 72 73 74 20 32 20 62 79 74 65 73  he first 2 bytes
77f0: 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f 63 6b 20   of.a freeblock 
7800: 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e  are a big-endian
7810: 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
7820: 73 20 74 68 65 20 6f 66 66 73 65 74 20 69 6e 20  s the offset in 
7830: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 0a  the b-tree page.
7840: 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72 65 65  of the next free
7850: 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 63 68 61  block in the cha
7860: 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74  in, or zero if t
7870: 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20  he freeblock is 
7880: 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74 68 65 20  the last on.the 
7890: 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 74 68 69  chain.  ^The thi
78a0: 72 64 20 61 6e 64 20 66 6f 75 72 74 68 20 62 79  rd and fourth by
78b0: 74 65 73 20 6f 66 20 65 61 63 68 20 66 72 65 65  tes of each free
78c0: 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20 62 69 67  block form.a big
78d0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
78e0: 77 68 69 63 68 20 69 73 20 74 68 65 20 73 69 7a  which is the siz
78f0: 65 20 6f 66 20 74 68 65 20 66 72 65 65 62 6c 6f  e of the freeblo
7900: 63 6b 20 69 6e 20 62 79 74 65 73 2c 20 69 6e 63  ck in bytes, inc
7910: 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d 62 79 74  luding.the 4-byt
7920: 65 20 68 65 61 64 65 72 2e 20 20 5e 46 72 65 65  e header.  ^Free
7930: 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c 77 61 79  blocks are alway
7940: 73 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 20 6f  s connected in o
7950: 72 64 65 72 20 0a 6f 66 20 69 6e 63 72 65 61 73  rder .of increas
7960: 69 6e 67 20 6f 66 66 73 65 74 2e 20 20 5e 54 68  ing offset.  ^Th
7970: 65 20 73 65 63 6f 6e 64 20 66 69 65 6c 64 20 6f  e second field o
7980: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
7990: 65 20 68 65 61 64 65 72 20 69 73 20 74 68 65 0a  e header is the.
79a0: 6f 66 66 73 65 74 20 6f 66 20 74 68 65 20 66 69  offset of the fi
79b0: 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2c 20 6f  rst freeblock, o
79c0: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20  r zero if there 
79d0: 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b  are no freeblock
79e0: 73 20 6f 6e 20 74 68 65 0a 70 61 67 65 2e 20 20  s on the.page.  
79f0: 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  ^In a well-forme
7a00: 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 74  d b-tree page, t
7a10: 68 65 72 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  here will always
7a20: 20 62 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65   be at least one
7a30: 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20 74 68 65   cell.before the
7a40: 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b   first freeblock
7a50: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65  .</p>..<p>A free
7a60: 62 6c 6f 63 6b 20 72 65 71 75 69 72 65 73 20 61  block requires a
7a70: 74 20 6c 65 61 73 74 20 34 20 62 79 74 65 73 20  t least 4 bytes 
7a80: 6f 66 20 73 70 61 63 65 2e 20 20 49 66 20 74 68  of space.  If th
7a90: 65 72 65 20 69 73 20 61 6e 20 69 73 6f 6c 61 74  ere is an isolat
7aa0: 65 64 0a 67 72 6f 75 70 20 6f 66 20 31 2c 20 32  ed.group of 1, 2
7ab0: 2c 20 6f 72 20 33 20 75 6e 75 73 65 64 20 62 79  , or 3 unused by
7ac0: 74 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63  tes within the c
7ad0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
7ae0: 2c 20 74 68 6f 73 65 20 62 79 74 65 73 0a 63 6f  , those bytes.co
7af0: 6d 70 72 69 73 65 20 61 20 66 72 61 67 6d 65 6e  mprise a fragmen
7b00: 74 2e 20 20 5e 54 68 65 20 74 6f 74 61 6c 20 6e  t.  ^The total n
7b10: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
7b20: 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e 74 73 20  n all fragments 
7b30: 69 73 20 73 74 6f 72 65 64 0a 69 6e 20 74 68 65  is stored.in the
7b40: 20 66 69 66 74 68 20 66 69 65 6c 64 20 6f 66 20   fifth field of 
7b50: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
7b60: 68 65 61 64 65 72 2e 20 20 5e 49 6e 20 61 20 77  header.  ^In a w
7b70: 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65  ell-formed b-tre
7b80: 65 20 70 61 67 65 2c 0a 74 68 65 20 74 6f 74 61  e page,.the tota
7b90: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
7ba0: 73 20 69 6e 20 66 72 61 67 6d 65 6e 74 73 20 6d  s in fragments m
7bb0: 61 79 20 6e 6f 74 20 65 78 63 65 65 64 20 36 30  ay not exceed 60
7bc0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 6f  .</p>..<p>The to
7bd0: 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 66 72  tal amount of fr
7be0: 65 65 20 73 70 61 63 65 20 6f 6e 20 61 20 62 2d  ee space on a b-
7bf0: 74 72 65 65 20 70 61 67 65 20 63 6f 6e 73 69 73  tree page consis
7c00: 74 73 20 6f 66 20 74 68 65 20 73 69 7a 65 0a 6f  ts of the size.o
7c10: 66 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65  f the unallocate
7c20: 64 20 72 65 67 69 6f 6e 20 70 6c 75 73 20 74 68  d region plus th
7c30: 65 20 74 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20  e total size of 
7c40: 61 6c 6c 20 66 72 65 65 62 6c 6f 63 6b 73 20 70  all freeblocks p
7c50: 6c 75 73 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f  lus the.number o
7c60: 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65  f fragmented fre
7c70: 65 20 62 79 74 65 73 2e 20 20 5e 53 51 4c 69 74  e bytes.  ^SQLit
7c80: 65 20 6d 61 79 20 66 72 6f 6d 20 74 69 6d 65 20  e may from time 
7c90: 74 6f 20 74 69 6d 65 20 72 65 6f 72 67 61 6e 69  to time reorgani
7ca0: 7a 65 0a 61 20 62 2d 74 72 65 65 20 70 61 67 65  ze.a b-tree page
7cb0: 20 73 6f 20 74 68 61 74 20 74 68 65 72 65 20 61   so that there a
7cc0: 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73  re no freeblocks
7cd0: 20 6f 72 20 66 72 61 67 6d 65 6e 74 20 62 79 74   or fragment byt
7ce0: 65 73 2c 20 61 6c 6c 0a 75 6e 75 73 65 64 20 62  es, all.unused b
7cf0: 79 74 65 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ytes are contain
7d00: 65 64 20 69 6e 20 74 68 65 20 75 6e 61 6c 6c 6f  ed in the unallo
7d10: 63 61 74 65 64 20 73 70 61 63 65 20 72 65 67 69  cated space regi
7d20: 6f 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63 65 6c 6c  on, and all.cell
7d30: 73 20 61 72 65 20 70 61 63 6b 65 64 20 74 69 67  s are packed tig
7d40: 68 74 6c 79 20 61 74 20 74 68 65 20 65 6e 64 20  htly at the end 
7d50: 6f 66 20 74 68 65 20 70 61 67 65 2e 20 20 54 68  of the page.  Th
7d60: 69 73 20 69 73 20 63 61 6c 6c 65 64 20 0a 22 64  is is called ."d
7d70: 65 66 72 61 67 6d 65 6e 74 69 6e 67 22 20 74 68  efragmenting" th
7d80: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 3c 2f  e b-tree page.</
7d90: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
7da0: 6d 65 6e 74 20 76 61 72 69 6e 74 20 7b 76 61 72  ment varint {var
7db0: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
7dc0: 65 67 65 72 7d 20 7b 76 61 72 69 6e 74 7d 3c 2f  eger} {varint}</
7dd0: 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72 69 61  tcl>..<p>A varia
7de0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
7df0: 65 72 20 6f 72 20 22 76 61 72 69 6e 74 22 20 69  er or "varint" i
7e00: 73 20 61 20 73 74 61 74 69 63 20 48 75 66 66 6d  s a static Huffm
7e10: 61 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f 66 20 36  an encoding.of 6
7e20: 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  4-bit twos-compl
7e30: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 73 20 74  ement integers t
7e40: 68 61 74 20 75 73 65 73 20 6c 65 73 73 20 73 70  hat uses less sp
7e50: 61 63 65 20 66 6f 72 20 73 6d 61 6c 6c 20 70 6f  ace for small po
7e60: 73 69 74 69 76 65 20 0a 76 61 6c 75 65 73 2e 20  sitive .values. 
7e70: 0a 41 20 76 61 72 69 6e 74 20 69 73 20 62 65 74  .A varint is bet
7e80: 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62 79 74  ween 1 and 9 byt
7e90: 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 54  es in length.  T
7ea0: 68 65 20 76 61 72 69 6e 74 20 63 6f 6e 73 69 73  he varint consis
7eb0: 74 73 20 6f 66 20 65 69 74 68 65 72 0a 7a 65 72  ts of either.zer
7ec0: 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 20  o or more bytes 
7ed0: 77 68 69 63 68 20 68 61 76 65 20 74 68 65 20 68  which have the h
7ee0: 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 73 65  igh-order bit se
7ef0: 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
7f00: 73 69 6e 67 6c 65 20 62 79 74 65 0a 77 69 74 68  single byte.with
7f10: 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
7f20: 62 69 74 20 63 6c 65 61 72 2c 20 6f 72 20 6e 69  bit clear, or ni
7f30: 6e 65 20 62 79 74 65 73 2c 20 77 68 69 63 68 65  ne bytes, whiche
7f40: 76 65 72 20 69 73 20 73 68 6f 72 74 65 72 2e 0a  ver is shorter..
7f50: 54 68 65 20 6c 6f 77 65 72 20 73 65 76 65 6e 20  The lower seven 
7f60: 62 69 74 73 20 6f 66 20 65 61 63 68 20 6f 66 20  bits of each of 
7f70: 74 68 65 20 66 69 72 73 74 20 65 69 67 68 74 20  the first eight 
7f80: 62 79 74 65 73 20 61 6e 64 20 61 6c 6c 20 38 20  bytes and all 8 
7f90: 62 69 74 73 20 6f 66 0a 74 68 65 20 6e 69 6e 74  bits of.the nint
7fa0: 68 20 62 79 74 65 20 61 72 65 20 75 73 65 64 20  h byte are used 
7fb0: 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74 20 74  to reconstruct t
7fc0: 68 65 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63  he 64-bit twos-c
7fd0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
7fe0: 72 2e 0a 56 61 72 69 6e 74 73 20 61 72 65 20 62  r..Varints are b
7ff0: 69 67 2d 65 6e 64 69 61 6e 3a 20 62 69 74 73 20  ig-endian: bits 
8000: 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 65  taken from the e
8010: 61 72 6c 69 65 72 20 62 79 74 65 20 6f 66 20 74  arlier byte of t
8020: 68 65 20 76 61 72 69 6e 74 0a 61 72 65 20 74 68  he varint.are th
8030: 65 20 6d 6f 72 65 20 73 69 67 6e 69 66 69 63 61  e more significa
8040: 6e 74 20 74 68 61 6e 20 62 69 74 73 20 74 61 6b  nt than bits tak
8050: 65 6e 20 66 72 6f 6d 20 74 68 65 20 6c 61 74 65  en from the late
8060: 72 20 62 79 74 65 73 2e 20 3c 2f 70 3e 0a 0a 3c  r bytes. </p>..<
8070: 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  p>The format of 
8080: 61 20 63 65 6c 6c 20 64 65 70 65 6e 64 73 20 6f  a cell depends o
8090: 6e 20 77 68 69 63 68 20 6b 69 6e 64 20 6f 66 20  n which kind of 
80a0: 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 65 20  b-tree page the 
80b0: 63 65 6c 6c 0a 61 70 70 65 61 72 73 20 6f 6e 2e  cell.appears on.
80c0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
80d0: 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65 20  table shows the 
80e0: 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61 20 63 65  elements of a ce
80f0: 6c 6c 2c 20 69 6e 0a 6f 72 64 65 72 20 6f 66 20  ll, in.order of 
8100: 61 70 70 65 61 72 61 6e 63 65 2c 20 66 6f 72 20  appearance, for 
8110: 74 68 65 20 76 61 72 69 6f 75 73 20 62 2d 74 72  the various b-tr
8120: 65 65 20 70 61 67 65 20 74 79 70 65 73 2e 3c 2f  ee page types.</
8130: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
8140: 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c  <dl>.<dt><p>Tabl
8150: 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65  e B-Tree Leaf Ce
8160: 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30 64 29  ll (header 0x0d)
8170: 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  :</p></dt>.<dd><
8180: 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72  p><ul>.<li>A var
8190: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
81a0: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
81b0: 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61   bytes of payloa
81c0: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79  d, including any
81d0: 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 41 20  .overflow.<li>A 
81e0: 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
81f0: 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79 2c  the integer key,
8200: 20 61 2e 6b 2e 61 2e 20 22 5b 72 6f 77 69 64 5d   a.k.a. "[rowid]
8210: 22 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61  ".<li>The initia
8220: 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  l portion of the
8230: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f   payload that do
8240: 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20  es not spill to 
8250: 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a  overflow.pages..
8260: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
8270: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
8280: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
8290: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  the first page o
82a0: 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70  f the.overflow p
82b0: 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74  age list - omitt
82c0: 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61  ed if all payloa
82d0: 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d  d fits on the b-
82e0: 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e  tree page..</ul>
82f0: 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
8300: 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49  p>Table B-Tree I
8310: 6e 74 65 72 69 6f 72 20 43 65 6c 6c 20 28 68 65  nterior Cell (he
8320: 61 64 65 72 20 30 78 30 35 29 3a 3c 2f 70 3e 3c  ader 0x05):</p><
8330: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e  /dt>.<dd><p><ul>
8340: 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69  .<li>A 4-byte bi
8350: 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20 6e 75  g-endian page nu
8360: 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 74 68  mber which is th
8370: 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70 6f 69  e left child poi
8380: 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69  nter..<li>A vari
8390: 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
83a0: 69 6e 74 65 67 65 72 20 6b 65 79 0a 3c 2f 75 6c  integer key.</ul
83b0: 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  ></p></dd>..<dt>
83c0: 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20  <p>Index B-Tree 
83d0: 4c 65 61 66 20 43 65 6c 6c 20 28 68 65 61 64 65  Leaf Cell (heade
83e0: 72 20 30 78 30 61 29 3a 3c 2f 70 3e 3c 2f 64 74  r 0x0a):</p></dt
83f0: 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c  >.<dd><p><ul>.<l
8400: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
8410: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
8420: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
8430: 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e   key payload, in
8440: 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72  cluding any.over
8450: 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69  flow.<li>The ini
8460: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20  tial portion of 
8470: 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74  the payload that
8480: 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20   does not spill 
8490: 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65  to overflow.page
84a0: 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  s..<li>A 4-byte 
84b0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
84c0: 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  er page number f
84d0: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
84e0: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
84f0: 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d  w page list - om
8500: 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79  itted if all pay
8510: 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65  load fits on the
8520: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
8530: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ul></p></dd>..<d
8540: 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65  t><p>Index B-Tre
8550: 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 20  e Interior Cell 
8560: 28 68 65 61 64 65 72 20 30 78 30 32 29 3a 3c 2f  (header 0x02):</
8570: 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c  p></dt>.<dd><p><
8580: 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65  ul>.<li>A 4-byte
8590: 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65   big-endian page
85a0: 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73   number which is
85b0: 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20   the left child 
85c0: 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76  pointer..<li>A v
85d0: 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
85e0: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
85f0: 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20  of bytes of key 
8600: 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69  payload, includi
8610: 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a  ng any.overflow.
8620: 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20  <li>The initial 
8630: 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  portion of the p
8640: 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73  ayload that does
8650: 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76   not spill to ov
8660: 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c  erflow.pages..<l
8670: 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65  i>A 4-byte big-e
8680: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61  ndian integer pa
8690: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ge number for th
86a0: 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20  e first page of 
86b0: 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67  the.overflow pag
86c0: 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64  e list - omitted
86d0: 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20   if all payload 
86e0: 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72  fits on the b-tr
86f0: 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f  ee page..</ul></
8700: 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62  p></dd>.</dl></b
8710: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
8720: 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  he information a
8730: 62 6f 76 65 20 63 61 6e 20 62 65 20 72 65 63 61  bove can be reca
8740: 73 74 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20  st into a table 
8750: 66 6f 72 6d 61 74 20 61 73 20 66 6f 6c 6c 6f 77  format as follow
8760: 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  s:</p>..<tcl>hd_
8770: 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c 66 6f 72  fragment cellfor
8780: 6d 61 74 20 7b 63 65 6c 6c 20 66 6f 72 6d 61 74  mat {cell format
8790: 20 73 75 6d 6d 61 72 79 7d 3c 2f 74 63 6c 3e 0a   summary}</tcl>.
87a0: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72  <center>.<i>B-tr
87b0: 65 65 20 43 65 6c 6c 20 46 6f 72 6d 61 74 3c 2f  ee Cell Format</
87c0: 69 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  i>.<table border
87d0: 3d 31 20 77 69 64 74 68 3d 22 38 30 25 22 3e 0a  =1 width="80%">.
87e0: 3c 74 72 3e 3c 74 68 20 72 6f 77 73 70 61 6e 3d  <tr><th rowspan=
87f0: 32 3e 44 61 74 61 74 79 70 65 0a 20 20 20 20 3c  2>Datatype.    <
8800: 74 68 20 63 6f 6c 73 70 61 6e 3d 34 3e 41 70 70  th colspan=4>App
8810: 65 61 72 73 20 69 6e 2e 2e 2e 0a 20 20 20 20 3c  ears in....    <
8820: 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 65 73  th rowspan=2>Des
8830: 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 68  cription.<tr><th
8840: 3e 54 61 62 6c 65 20 4c 65 61 66 20 28 30 78 30  >Table Leaf (0x0
8850: 64 29 0a 20 20 20 20 3c 74 68 3e 54 61 62 6c 65  d).    <th>Table
8860: 20 49 6e 74 65 72 69 6f 72 20 28 30 78 30 35 29   Interior (0x05)
8870: 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 4c  .    <th>Index L
8880: 65 61 66 20 28 30 78 30 61 29 0a 20 20 20 20 3c  eaf (0x0a).    <
8890: 74 68 3e 49 6e 64 65 78 20 49 6e 74 65 72 69 6f  th>Index Interio
88a0: 72 20 28 30 78 30 32 29 0a 3c 74 72 3e 3c 74 64  r (0x02).<tr><td
88b0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
88c0: 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20  lign=top>4-byte 
88d0: 69 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64 20  integer.    <td 
88e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
88f0: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8900: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8910: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8920: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8930: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8940: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8950: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8960: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8970: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8980: 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20  align=left>Page 
8990: 6e 75 6d 62 65 72 20 6f 66 20 6c 65 66 74 20 63  number of left c
89a0: 68 69 6c 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  hild.<tr><td ali
89b0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
89c0: 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20  =top>varint.    
89d0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
89e0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
89f0: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8a00: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8a10: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8a20: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8a30: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8a40: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8a50: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8a60: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8a70: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74    <td align=left
8a80: 3e 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73  >Number of bytes
8a90: 20 6f 66 20 70 61 79 6c 6f 61 64 0a 3c 74 72 3e   of payload.<tr>
8aa0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8ab0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69   valign=top>vari
8ac0: 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  nt.    <td align
8ad0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8ae0: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8af0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8b00: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8b10: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8b20: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8b30: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8b40: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8b50: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73   valign=top>&nbs
8b60: 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  p;.    <td align
8b70: 3d 6c 65 66 74 3e 52 6f 77 69 64 0a 3c 74 72 3e  =left>Rowid.<tr>
8b80: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8b90: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 62 79 74 65   valign=top>byte
8ba0: 20 61 72 72 61 79 0a 20 20 20 20 3c 74 64 20 61   array.    <td a
8bb0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8bc0: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8bd0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8be0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8bf0: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
8c00: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8c10: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8c20: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8c30: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8c40: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8c50: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 79 6c   align=left>Payl
8c60: 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  oad.<tr><td alig
8c70: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8c80: 74 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67  top>4-byte integ
8c90: 65 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  er.    <td align
8ca0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8cb0: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8cc0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8cd0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73   valign=top>&nbs
8ce0: 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  p;.    <td align
8cf0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8d00: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8d10: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8d20: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8d30: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8d40: 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d  gn=left>Page num
8d50: 62 65 72 20 6f 66 20 66 69 72 73 74 20 6f 76 65  ber of first ove
8d60: 72 66 6c 6f 77 20 70 61 67 65 0a 3c 2f 74 61 62  rflow page.</tab
8d70: 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 0a  le></center>....
8d80: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
8d90: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8da0: 0a 0a 3c 70 3e 54 68 65 20 61 6d 6f 75 6e 74 20  ..<p>The amount 
8db0: 6f 66 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20  of payload that 
8dc0: 73 70 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76 65 72  spills onto over
8dd0: 66 6c 6f 77 20 70 61 67 65 73 20 61 6c 73 6f 20  flow pages also 
8de0: 64 65 70 65 6e 64 73 20 6f 6e 0a 74 68 65 20 70  depends on.the p
8df0: 61 67 65 20 74 79 70 65 2e 20 20 46 6f 72 20 74  age type.  For t
8e00: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d  he following com
8e10: 70 75 74 61 74 69 6f 6e 73 2c 20 6c 65 74 20 55  putations, let U
8e20: 20 62 65 20 74 68 65 20 75 73 61 62 6c 65 20 73   be the usable s
8e30: 69 7a 65 0a 6f 66 20 61 20 64 61 74 61 62 61 73  ize.of a databas
8e40: 65 20 70 61 67 65 2c 20 74 68 65 20 74 6f 74 61  e page, the tota
8e50: 6c 20 70 61 67 65 20 73 69 7a 65 20 6c 65 73 73  l page size less
8e60: 20 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70   the reserved sp
8e70: 61 63 65 20 61 74 20 74 68 65 0a 65 6e 64 20 6f  ace at the.end o
8e80: 66 20 65 61 63 68 20 70 61 67 65 2e 20 20 41 6e  f each page.  An
8e90: 64 20 6c 65 74 20 50 20 62 65 20 74 68 65 20 70  d let P be the p
8ea0: 61 79 6c 6f 61 64 20 73 69 7a 65 2e 3c 2f 70 3e  ayload size.</p>
8eb0: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64  ..<blockquote><d
8ec0: 6c 3e 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54  l>.<dt>Table B-T
8ed0: 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f  ree Leaf Cell:</
8ee0: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 49 66 20  dt>.<dd><p>.^If 
8ef0: 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65  the payload size
8f00: 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20   P is less than 
8f10: 6f 72 20 65 71 75 61 6c 20 74 6f 20 55 2d 33 35  or equal to U-35
8f20: 20 74 68 65 6e 0a 74 68 65 20 65 6e 74 69 72 65   then.the entire
8f30: 20 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72   payload is stor
8f40: 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ed on the b-tree
8f50: 20 6c 65 61 66 20 70 61 67 65 2e 20 20 0a 5e 28   leaf page.  .^(
8f60: 4c 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29  Let M be ((U-12)
8f70: 2a 33 32 2f 32 35 35 29 2d 32 33 2e 20 20 49 66  *32/255)-23.  If
8f80: 20 50 20 69 73 20 67 72 65 61 74 65 72 20 74 68   P is greater th
8f90: 61 6e 20 55 2d 33 35 0a 74 68 65 6e 20 74 68 65  an U-35.then the
8fa0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
8fb0: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62   stored on the b
8fc0: 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65 20  -tree leaf page 
8fd0: 69 73 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f  is the smaller o
8fe0: 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29  f.M+((P-M)%(U-4)
8ff0: 29 20 61 6e 64 20 55 2d 33 35 2e 29 5e 0a 5e 28  ) and U-35.)^.^(
9000: 4e 6f 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72  Note that number
9010: 20 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65 64   of bytes stored
9020: 20 6f 6e 20 74 68 65 20 6c 65 61 66 20 70 61 67   on the leaf pag
9030: 65 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20  e is never less 
9040: 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f  than M.)^.</p></
9050: 64 64 3e 0a 0a 3c 64 74 3e 54 61 62 6c 65 20 42  dd>..<dt>Table B
9060: 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43  -Tree Interior C
9070: 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  ell:</dt>.<dd><p
9080: 3e 0a 49 6e 74 65 72 69 6f 72 20 70 61 67 65 73  >.Interior pages
9090: 20 6f 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65   of table b-tree
90a0: 73 20 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61  s have no payloa
90b0: 64 20 61 6e 64 20 73 6f 20 74 68 65 72 65 20 69  d and so there i
90c0: 73 20 6e 65 76 65 72 0a 61 6e 79 20 70 61 79 6c  s never.any payl
90d0: 6f 61 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f  oad to spill..</
90e0: 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 49 6e 64  p></dd>..<dt>Ind
90f0: 65 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20 4f  ex B-Tree Leaf O
9100: 72 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a  r Interior Cell:
9110: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28  </dt>.<dd><p>.^(
9120: 4c 65 74 20 58 20 62 65 20 28 28 55 2d 31 32 29  Let X be ((U-12)
9130: 2a 36 34 2f 32 35 35 29 2d 32 33 29 2e 20 20 49  *64/255)-23).  I
9140: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69  f the payload si
9150: 7a 65 20 50 20 69 73 20 6c 65 73 73 20 74 68 61  ze P is less tha
9160: 6e 0a 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20  n.or equal to X 
9170: 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20  then the entire 
9180: 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65  payload is store
9190: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
91a0: 70 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20  page.)^.^(Let M 
91b0: 62 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35  be ((U-12)*32/25
91c0: 35 29 2d 32 33 2e 20 20 49 66 20 50 20 69 73 20  5)-23.  If P is 
91d0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 58 20 74  greater than X t
91e0: 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  hen the number.o
91f0: 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f  f bytes stored o
9200: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
9210: 65 20 69 73 20 74 68 65 20 73 6d 61 6c 6c 65 72  e is the smaller
9220: 20 6f 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d   of.M+((P-M)%(U-
9230: 34 29 29 20 61 6e 64 20 58 2e 29 5e 0a 5e 28 4e  4)) and X.)^.^(N
9240: 6f 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20  ote that number 
9250: 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20  of bytes stored 
9260: 6f 6e 20 74 68 65 20 69 6e 64 65 78 20 70 61 67  on the index pag
9270: 65 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20  e is never less 
9280: 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f  than M.)^.</p></
9290: 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b  dd>.</dl></block
92a0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f  quote>..<p>The o
92b0: 76 65 72 66 6c 6f 77 20 74 68 72 65 73 68 6f 6c  verflow threshol
92c0: 64 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20  ds are designed 
92d0: 74 6f 20 67 69 76 65 20 61 20 6d 69 6e 69 6d 75  to give a minimu
92e0: 6d 20 66 61 6e 6f 75 74 20 6f 66 0a 34 20 66 6f  m fanout of.4 fo
92f0: 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20  r index b-trees 
9300: 61 6e 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  and to make sure
9310: 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 70   enough of the p
9320: 61 79 6c 6f 61 64 0a 69 73 20 6f 6e 20 74 68 65  ayload.is on the
9330: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 61   b-tree page tha
9340: 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  t the record hea
9350: 64 65 72 20 63 61 6e 20 75 73 75 61 6c 6c 79 20  der can usually 
9360: 62 65 20 61 63 63 65 73 73 65 64 0a 77 69 74 68  be accessed.with
9370: 6f 75 74 20 63 6f 6e 73 75 6c 74 69 6e 67 20 61  out consulting a
9380: 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2e  n overflow page.
9390: 20 20 49 6e 20 68 69 6e 64 73 69 67 68 74 2c 20    In hindsight, 
93a0: 74 68 65 20 64 65 73 69 67 6e 65 72 73 20 6f 66  the designers of
93b0: 0a 74 68 65 20 53 51 4c 69 74 65 20 62 2d 74 72  .the SQLite b-tr
93c0: 65 65 20 6c 6f 67 69 63 20 72 65 61 6c 69 7a 65  ee logic realize
93d0: 20 74 68 61 74 20 74 68 65 73 65 20 74 68 72 65   that these thre
93e0: 73 68 6f 6c 64 73 20 63 6f 75 6c 64 20 68 61 76  sholds could hav
93f0: 65 20 62 65 65 6e 0a 6d 61 64 65 20 6d 75 63 68  e been.made much
9400: 20 73 69 6d 70 6c 65 72 2e 20 20 48 6f 77 65 76   simpler.  Howev
9410: 65 72 2c 20 74 68 65 20 63 6f 6d 70 75 74 61 74  er, the computat
9420: 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 63  ions cannot be c
9430: 68 61 6e 67 65 64 0a 77 69 74 68 6f 75 74 20 72  hanged.without r
9440: 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 6e 20 69  esulting in an i
9450: 6e 63 6f 6d 70 61 74 69 62 6c 65 20 66 69 6c 65  ncompatible file
9460: 20 66 6f 72 6d 61 74 2e 20 20 41 6e 64 20 74 68   format.  And th
9470: 65 20 63 75 72 72 65 6e 74 20 63 6f 6d 70 75 74  e current comput
9480: 61 74 69 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c  ations.work well
9490: 2c 20 65 76 65 6e 20 69 66 20 74 68 65 79 20 61  , even if they a
94a0: 72 65 20 61 20 6c 69 74 74 6c 65 20 63 6f 6d 70  re a little comp
94b0: 6c 65 78 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  lex.</p>..<tcl>h
94c0: 64 5f 66 72 61 67 6d 65 6e 74 20 6f 76 66 6c 70  d_fragment ovflp
94d0: 67 73 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67  gs {overflow pag
94e0: 65 7d 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67  e} {overflow pag
94f0: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e  es}</tcl>.<h3>1.
9500: 36 20 43 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f  6 Cell Payload O
9510: 76 65 72 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68  verflow Pages</h
9520: 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  3>..<p>^When the
9530: 20 70 61 79 6c 6f 61 64 20 6f 66 20 61 20 62 2d   payload of a b-
9540: 74 72 65 65 20 63 65 6c 6c 20 69 73 20 74 6f 6f  tree cell is too
9550: 20 6c 61 72 67 65 20 66 6f 72 20 74 68 65 20 62   large for the b
9560: 2d 74 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20  -tree page,.the 
9570: 73 75 72 70 6c 75 73 20 69 73 20 73 70 69 6c 6c  surplus is spill
9580: 65 64 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77  ed onto overflow
9590: 20 70 61 67 65 73 2e 20 20 5e 4f 76 65 72 66 6c   pages.  ^Overfl
95a0: 6f 77 20 70 61 67 65 73 20 66 6f 72 6d 20 61 20  ow pages form a 
95b0: 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e 20 20 5e 54  linked.list.  ^T
95c0: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 62 79  he first four by
95d0: 74 65 73 20 6f 66 20 65 61 63 68 20 6f 76 65 72  tes of each over
95e0: 66 6c 6f 77 20 70 61 67 65 20 61 72 65 20 61 20  flow page are a 
95f0: 62 69 67 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67  big-endian.integ
9600: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
9610: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
9620: 68 65 20 6e 65 78 74 20 70 61 67 65 20 69 6e 20  he next page in 
9630: 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65  the chain, or ze
9640: 72 6f 0a 66 6f 72 20 74 68 65 20 66 69 6e 61 6c  ro.for the final
9650: 20 70 61 67 65 20 69 6e 20 74 68 65 20 63 68 61   page in the cha
9660: 69 6e 2e 20 20 5e 54 68 65 20 66 69 66 74 68 20  in.  ^The fifth 
9670: 62 79 74 65 20 74 68 72 6f 75 67 68 20 74 68 65  byte through the
9680: 20 6c 61 73 74 20 75 73 61 62 6c 65 0a 62 79 74   last usable.byt
9690: 65 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  e are used to ho
96a0: 6c 64 20 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74  ld overflow cont
96b0: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e  ent.</p>..<h3>1.
96c0: 37 20 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72  7 Pointer Map or
96d0: 20 50 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68   Ptrmap Pages</h
96e0: 33 3e 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d  3>..<p>Pointer m
96f0: 61 70 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67  ap or ptrmap pag
9700: 65 73 20 61 72 65 20 65 78 74 72 61 20 70 61 67  es are extra pag
9710: 65 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  es inserted into
9720: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f   the database.to
9730: 20 6d 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74   make the operat
9740: 69 6f 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63  ion of [auto_vac
9750: 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d  uum] and [increm
9760: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f  ental_vacuum] mo
9770: 64 65 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65  des.more efficie
9780: 6e 74 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20  nt.  Other page 
9790: 74 79 70 65 73 20 69 6e 20 74 68 65 20 64 61 74  types in the dat
97a0: 61 62 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20  abase typically 
97b0: 68 61 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72  have pointers.fr
97c0: 6f 6d 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69  om parent to chi
97d0: 6c 64 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ld.  For example
97e0: 2c 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  , an interior b-
97f0: 74 72 65 65 20 70 61 67 65 20 63 6f 6e 74 61 69  tree page contai
9800: 6e 73 20 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69  ns pointers.to i
9810: 74 73 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20  ts child b-tree 
9820: 70 61 67 65 73 20 61 6e 64 20 61 6e 20 6f 76 65  pages and an ove
9830: 72 66 6c 6f 77 20 63 68 61 69 6e 20 68 61 73 20  rflow chain has 
9840: 61 20 70 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65  a pointer.from e
9850: 61 72 6c 69 65 72 20 74 6f 20 6c 61 74 65 72 20  arlier to later 
9860: 6c 69 6e 6b 73 20 69 6e 20 74 68 65 20 63 68 61  links in the cha
9870: 69 6e 2e 20 20 41 20 70 74 72 6d 61 70 20 70 61  in.  A ptrmap pa
9880: 67 65 20 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b  ge contains link
9890: 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  age.information 
98a0: 67 6f 69 6e 67 20 69 6e 20 74 68 65 20 6f 70 70  going in the opp
98b0: 6f 73 69 74 65 20 64 69 72 65 63 74 69 6f 6e 2c  osite direction,
98c0: 20 66 72 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70   from child to p
98d0: 61 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  arent.</p>..<p>^
98e0: 50 74 72 6d 61 70 20 70 61 67 65 73 20 6d 75 73  Ptrmap pages mus
98f0: 74 20 65 78 69 73 74 20 69 6e 20 61 6e 79 20 64  t exist in any d
9900: 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 69  atabase file whi
9910: 63 68 20 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72  ch has a non-zer
9920: 6f 0a 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62  o.largest root b
9930: 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c 75 65  -tree page value
9940: 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 6e   at offset 52 in
9950: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
9960: 61 64 65 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61  ader..^If the la
9970: 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65  rgest root b-tre
9980: 65 20 70 61 67 65 20 76 61 6c 75 65 20 69 73 20  e page value is 
9990: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 64  zero, then the d
99a0: 61 74 61 62 61 73 65 20 6d 75 73 74 20 6e 6f 74  atabase must not
99b0: 0a 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20  .contain ptrmap 
99c0: 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  pages.</p>..<p>^
99d0: 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 77 69  In a database wi
99e0: 74 68 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c  th ptrmap pages,
99f0: 20 74 68 65 20 66 69 72 73 74 20 70 74 72 6d 61   the first ptrma
9a00: 70 20 70 61 67 65 20 69 73 20 70 61 67 65 20 32  p page is page 2
9a10: 2e 0a 41 20 70 74 72 6d 61 70 20 70 61 67 65 20  ..A ptrmap page 
9a20: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
9a30: 72 72 61 79 20 6f 66 20 35 2d 62 79 74 65 20 65  rray of 5-byte e
9a40: 6e 74 72 69 65 73 2e 20 20 4c 65 74 20 4a 20 62  ntries.  Let J b
9a50: 65 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20  e the.number of 
9a60: 35 2d 62 79 74 65 20 65 6e 74 72 69 65 73 20 74  5-byte entries t
9a70: 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20  hat will fit in 
9a80: 74 68 65 20 75 73 61 62 6c 65 20 73 70 61 63 65  the usable space
9a90: 20 6f 66 20 61 20 70 61 67 65 2e 0a 28 49 6e 20   of a page..(In 
9aa0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55  other words, J=U
9ab0: 2f 35 2e 29 20 20 5e 54 68 65 20 66 69 72 73 74  /5.)  ^The first
9ac0: 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c   ptrmap page wil
9ad0: 6c 20 63 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70  l contain back p
9ae0: 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69  ointer.informati
9af0: 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 33 20 74  on for pages 3 t
9b00: 68 72 6f 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c  hrough J+2, incl
9b10: 75 73 69 76 65 2e 20 20 5e 54 68 65 20 73 65 63  usive.  ^The sec
9b20: 6f 6e 64 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a  ond pointer map.
9b30: 70 61 67 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20  page will be on 
9b40: 70 61 67 65 20 4a 2b 33 20 61 6e 64 20 74 68 61  page J+3 and tha
9b50: 74 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69  t ptrmap page wi
9b60: 6c 6c 20 70 72 6f 76 69 64 65 20 62 61 63 6b 20  ll provide back 
9b70: 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74  pointer.informat
9b80: 69 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 4a 2b  ion for pages J+
9b90: 34 20 74 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20  4 through 2*J+3 
9ba0: 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6e 64 20  inclusive.  And 
9bb0: 73 6f 20 66 6f 72 74 68 20 66 6f 72 0a 74 68 65  so forth for.the
9bc0: 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
9bd0: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   file.</p>..<p>^
9be0: 28 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 74  (In a database t
9bf0: 68 61 74 20 75 73 65 73 20 70 74 72 6d 61 70 20  hat uses ptrmap 
9c00: 70 61 67 65 73 2c 20 61 6c 6c 20 70 61 67 65 73  pages, all pages
9c10: 20 61 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64   at locations id
9c20: 65 6e 74 69 66 69 65 64 0a 62 79 20 74 68 65 20  entified.by the 
9c30: 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 74  computation in t
9c40: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
9c50: 67 72 61 70 68 20 6d 75 73 74 20 62 65 20 70 74  graph must be pt
9c60: 72 6d 61 70 20 70 61 67 65 20 61 6e 64 20 6e 6f  rmap page and no
9c70: 0a 6f 74 68 65 72 20 70 61 67 65 20 6d 61 79 20  .other page may 
9c80: 62 65 20 61 20 70 74 72 6d 61 70 20 70 61 67 65  be a ptrmap page
9c90: 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 74 68  .  Except, if th
9ca0: 65 20 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65  e byte-lock page
9cb0: 20 68 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c   happens to.fall
9cc0: 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67   on the same pag
9cd0: 65 20 6e 75 6d 62 65 72 20 61 73 20 61 20 70 74  e number as a pt
9ce0: 72 6d 61 70 20 70 61 67 65 2c 20 74 68 65 6e 20  rmap page, then 
9cf0: 74 68 65 20 70 74 72 6d 61 70 20 69 73 20 6d 6f  the ptrmap is mo
9d00: 76 65 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ved.to the follo
9d10: 77 69 6e 67 20 70 61 67 65 20 66 6f 72 20 74 68  wing page for th
9d20: 61 74 20 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f  at one case.)^</
9d30: 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79  p>..<p>Each 5-by
9d40: 74 65 20 65 6e 74 72 79 20 6f 6e 20 61 20 70 74  te entry on a pt
9d50: 72 6d 61 70 20 70 61 67 65 20 70 72 6f 76 69 64  rmap page provid
9d60: 65 73 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66  es back-link inf
9d70: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a  ormation about .
9d80: 6f 6e 65 20 6f 66 20 74 68 65 20 70 61 67 65 73  one of the pages
9d90: 20 74 68 61 74 20 69 6d 6d 65 64 69 61 74 65 6c   that immediatel
9da0: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70 6f 69  y follow the poi
9db0: 6e 74 65 72 20 6d 61 70 2e 20 20 5e 28 49 66 20  nter map.  ^(If 
9dc0: 70 61 67 65 20 42 20 69 73 20 61 0a 70 74 72 6d  page B is a.ptrm
9dd0: 61 70 20 70 61 67 65 20 74 68 65 6e 20 62 61 63  ap page then bac
9de0: 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69  k-link informati
9df0: 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b  on about page B+
9e00: 31 20 69 73 20 70 72 6f 76 69 64 65 64 20 62 79  1 is provided by
9e10: 0a 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79  .the first entry
9e20: 20 6f 6e 20 74 68 65 20 70 6f 69 6e 74 65 72 20   on the pointer 
9e30: 6d 61 70 2e 20 20 49 6e 66 6f 72 6d 61 74 69 6f  map.  Informatio
9e40: 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b 32  n about page B+2
9e50: 20 69 73 0a 70 72 6f 76 69 64 65 64 20 62 79 20   is.provided by 
9e60: 74 68 65 20 73 65 63 6f 6e 64 20 65 6e 74 72 79  the second entry
9e70: 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e  .  And so forth.
9e80: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20  )^</p>..<p>Each 
9e90: 35 2d 62 79 74 65 20 70 74 72 6d 61 70 20 65 6e  5-byte ptrmap en
9ea0: 74 72 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  try consists of 
9eb0: 6f 6e 65 20 62 79 74 65 20 6f 66 20 22 70 61 67  one byte of "pag
9ec0: 65 20 74 79 70 65 22 20 69 6e 66 6f 72 6d 61 74  e type" informat
9ed0: 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ion.followed by 
9ee0: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
9ef0: 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  ian page number.
9f00: 20 20 46 69 76 65 20 70 61 67 65 20 74 79 70 65    Five page type
9f10: 73 20 61 72 65 20 72 65 63 6f 67 6e 69 7a 65 64  s are recognized
9f20: 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  :.</p>..<ol>.<li
9f30: 3e 41 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70  >A b-tree root p
9f40: 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e  age.  The.page n
9f50: 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65 20  umber should be 
9f60: 7a 65 72 6f 2e 0a 3c 6c 69 3e 41 20 66 72 65 65  zero..<li>A free
9f70: 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 65 20  list page.  The 
9f80: 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68 6f 75  page number shou
9f90: 6c 64 20 62 65 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e  ld be.zero..<li>
9fa0: 54 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  The first page o
9fb0: 66 20 61 0a 63 65 6c 6c 20 70 61 79 6c 6f 61 64  f a.cell payload
9fc0: 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e   overflow chain.
9fd0: 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65    The page numbe
9fe0: 72 20 69 73 20 74 68 65 20 62 2d 74 72 65 65 20  r is the b-tree 
9ff0: 70 61 67 65 20 74 68 61 74 0a 63 6f 6e 74 61 69  page that.contai
a000: 6e 73 20 74 68 65 20 63 65 6c 6c 20 77 68 6f 73  ns the cell whos
a010: 65 20 63 6f 6e 74 65 6e 74 20 68 61 73 20 6f 76  e content has ov
a020: 65 72 66 6c 6f 77 65 64 2e 0a 3c 6c 69 3e 41 20  erflowed..<li>A 
a030: 70 61 67 65 20 69 6e 20 61 6e 20 6f 76 65 72 66  page in an overf
a040: 6c 6f 77 20 63 68 61 69 6e 0a 6f 74 68 65 72 20  low chain.other 
a050: 74 68 61 6e 20 74 68 65 20 66 69 72 73 74 20 70  than the first p
a060: 61 67 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e  age.  The page n
a070: 75 6d 62 65 72 20 69 73 20 74 68 65 20 70 72 69  umber is the pri
a080: 6f 72 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f  or page of the.o
a090: 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e 0a 3c  verflow chain..<
a0a0: 6c 69 3e 41 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d  li>A non-root b-
a0b0: 74 72 65 65 20 70 61 67 65 2e 20 20 54 68 65 0a  tree page.  The.
a0c0: 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74  page number is t
a0d0: 68 65 20 70 61 72 65 6e 74 20 62 2d 74 72 65 65  he parent b-tree
a0e0: 20 70 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   page..</ol>..<p
a0f0: 3e 5e 49 6e 20 61 6e 79 20 64 61 74 61 62 61 73  >^In any databas
a100: 65 20 66 69 6c 65 20 74 68 61 74 20 63 6f 6e 74  e file that cont
a110: 61 69 6e 73 20 70 74 72 6d 61 70 20 70 61 67 65  ains ptrmap page
a120: 73 2c 20 61 6c 6c 20 62 2d 74 72 65 65 20 72 6f  s, all b-tree ro
a130: 6f 74 20 70 61 67 65 73 20 0a 6d 75 73 74 20 63  ot pages .must c
a140: 6f 6d 65 20 62 65 66 6f 72 65 20 61 6e 79 20 6e  ome before any n
a150: 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  on-root b-tree p
a160: 61 67 65 2c 20 63 65 6c 6c 20 70 61 79 6c 6f 61  age, cell payloa
a170: 64 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2c  d overflow page,
a180: 20 6f 72 0a 66 72 65 65 6c 69 73 74 20 70 61 67   or.freelist pag
a190: 65 2e 20 20 54 68 69 73 20 72 65 73 74 72 69 63  e.  This restric
a1a0: 74 69 6f 6e 20 65 6e 73 75 72 65 73 20 74 68 61  tion ensures tha
a1b0: 74 20 61 20 72 6f 6f 74 20 70 61 67 65 20 77 69  t a root page wi
a1c0: 6c 6c 20 6e 65 76 65 72 0a 62 65 20 6d 6f 76 65  ll never.be move
a1d0: 64 20 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f  d during an auto
a1e0: 2d 76 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65  -vacuum or incre
a1f0: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 2e 20 20  mental-vacuum.  
a200: 54 68 65 20 61 75 74 6f 2d 76 61 63 75 75 6d 0a  The auto-vacuum.
a210: 6c 6f 67 69 63 20 64 6f 65 73 20 6e 6f 74 20 6b  logic does not k
a220: 6e 6f 77 20 68 6f 77 20 74 6f 20 75 70 64 61 74  now how to updat
a230: 65 20 74 68 65 20 72 6f 6f 74 5f 70 61 67 65 20  e the root_page 
a240: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
a250: 69 74 65 5f 6d 61 73 74 65 72 0a 74 61 62 6c 65  ite_master.table
a260: 20 61 6e 64 20 73 6f 20 69 74 20 69 73 20 6e 65   and so it is ne
a270: 63 65 73 73 61 72 79 20 74 6f 20 70 72 65 76 65  cessary to preve
a280: 6e 74 20 72 6f 6f 74 20 70 61 67 65 73 20 66 72  nt root pages fr
a290: 6f 6d 20 62 65 69 6e 67 20 6d 6f 76 65 64 0a 64  om being moved.d
a2a0: 75 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61  uring an auto-va
a2b0: 63 75 75 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f  cuum in order to
a2c0: 20 70 72 65 73 65 72 76 65 20 74 68 65 20 69 6e   preserve the in
a2d0: 74 65 67 72 69 74 79 20 6f 66 20 74 68 65 0a 73  tegrity of the.s
a2e0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
a2f0: 6c 65 2e 20 20 5e 52 6f 6f 74 20 70 61 67 65 73  le.  ^Root pages
a300: 20 61 72 65 20 6d 6f 76 65 64 20 74 6f 20 74 68   are moved to th
a310: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
a320: 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  he.database file
a330: 20 62 79 20 74 68 65 20 43 52 45 41 54 45 20 54   by the CREATE T
a340: 41 42 4c 45 2c 20 43 52 45 41 54 45 20 49 4e 44  ABLE, CREATE IND
a350: 45 58 2c 20 44 52 4f 50 20 54 41 42 4c 45 2c 20  EX, DROP TABLE, 
a360: 61 6e 64 0a 44 52 4f 50 20 49 4e 44 45 58 20 6f  and.DROP INDEX o
a370: 70 65 72 61 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a  perations.</p>..
a380: 3c 68 32 3e 32 2e 30 20 53 63 68 65 6d 61 20 4c  <h2>2.0 Schema L
a390: 61 79 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  ayer</h2>..<p>Th
a3a0: 65 20 66 6f 72 65 67 6f 69 6e 67 20 74 65 78 74  e foregoing text
a3b0: 20 64 65 73 63 72 69 62 65 73 20 6c 6f 77 2d 6c   describes low-l
a3c0: 65 76 65 6c 20 61 73 70 65 63 74 73 20 6f 66 20  evel aspects of 
a3d0: 74 68 65 20 53 51 4c 69 74 65 20 66 69 6c 65 0a  the SQLite file.
a3e0: 66 6f 72 6d 61 74 2e 20 20 54 68 65 20 62 2d 74  format.  The b-t
a3f0: 72 65 65 20 6d 65 63 68 61 6e 69 73 6d 20 70 72  ree mechanism pr
a400: 6f 76 69 64 65 73 20 61 20 70 6f 77 65 72 66 75  ovides a powerfu
a410: 6c 20 61 6e 64 20 65 66 66 69 63 69 65 6e 74 20  l and efficient 
a420: 6d 65 61 6e 73 20 6f 66 0a 61 63 63 65 73 73 69  means of.accessi
a430: 6e 67 20 61 20 6c 61 72 67 65 20 64 61 74 61 20  ng a large data 
a440: 73 65 74 2e 20 20 54 68 69 73 20 73 65 63 74 69  set.  This secti
a450: 6f 6e 20 77 69 6c 6c 20 64 65 73 63 72 69 62 65  on will describe
a460: 20 68 6f 77 20 74 68 65 0a 6c 6f 77 2d 6c 65 76   how the.low-lev
a470: 65 6c 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  el b-tree layer 
a480: 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
a490: 6d 65 6e 74 20 68 69 67 68 65 72 2d 6c 65 76 65  ment higher-leve
a4a0: 6c 20 53 51 4c 0a 63 61 70 61 62 69 6c 69 74 69  l SQL.capabiliti
a4b0: 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  es.</p>..<tcl>hd
a4c0: 5f 66 72 61 67 6d 65 6e 74 20 72 65 63 6f 72 64  _fragment record
a4d0: 5f 66 6f 72 6d 61 74 20 7b 72 65 63 6f 72 64 20  _format {record 
a4e0: 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  format}</tcl>.<h
a4f0: 33 3e 32 2e 31 20 52 65 63 6f 72 64 20 46 6f 72  3>2.1 Record For
a500: 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  mat</h3>..<p>The
a510: 20 64 61 74 61 20 66 6f 72 20 61 20 74 61 62 6c   data for a tabl
a520: 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61  e b-tree leaf pa
a530: 67 65 20 61 6e 64 20 74 68 65 20 6b 65 79 0a 6f  ge and the key.o
a540: 66 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  f an index b-tre
a550: 65 20 70 61 67 65 20 77 61 73 20 63 68 61 72 61  e page was chara
a560: 63 74 65 72 69 7a 65 64 20 61 62 6f 76 65 0a 61  cterized above.a
a570: 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73  s an arbitrary s
a580: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
a590: 2e 0a 54 68 65 20 70 72 69 6f 72 20 64 69 73 63  ..The prior disc
a5a0: 75 73 73 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64  ussion mentioned
a5b0: 20 6f 6e 65 20 6b 65 79 20 62 65 69 6e 67 20 6c   one key being l
a5c0: 65 73 73 20 74 68 61 6e 20 61 6e 6f 74 68 65 72  ess than another
a5d0: 2c 20 62 75 74 0a 64 69 64 20 6e 6f 74 20 64 65  , but.did not de
a5e0: 66 69 6e 65 20 77 68 61 74 20 22 6c 65 73 73 20  fine what "less 
a5f0: 74 68 61 6e 22 20 6d 65 61 6e 74 2e 20 20 54 68  than" meant.  Th
a600: 65 20 63 75 72 72 65 6e 74 20 73 65 63 74 69 6f  e current sectio
a610: 6e 20 77 69 6c 6c 20 61 64 64 72 65 73 73 0a 74  n will address.t
a620: 68 65 73 65 20 6f 6d 69 73 73 69 6f 6e 73 2e 3c  hese omissions.<
a630: 2f 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f 61 64 2c  /p>..<p>Payload,
a640: 20 65 69 74 68 65 72 20 74 61 62 6c 65 20 62 2d   either table b-
a650: 74 72 65 65 20 64 61 74 61 20 6f 72 20 69 6e 64  tree data or ind
a660: 65 78 20 62 2d 74 72 65 65 20 6b 65 79 73 2c 20  ex b-tree keys, 
a670: 0a 69 73 20 61 6c 77 61 79 73 20 69 6e 20 74 68  .is always in th
a680: 65 20 22 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e "record format
a690: 22 2e 0a 54 68 65 20 72 65 63 6f 72 64 20 66 6f  "..The record fo
a6a0: 72 6d 61 74 20 64 65 66 69 6e 65 73 20 61 20 73  rmat defines a s
a6b0: 65 71 75 65 6e 63 65 20 6f 66 20 76 61 6c 75 65  equence of value
a6c0: 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a  s corresponding.
a6d0: 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20  to columns in a 
a6e0: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
a6f0: 20 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   The record form
a700: 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
a710: 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f 6c 75 6d   number.of colum
a720: 6e 73 2c 20 74 68 65 20 64 61 74 61 74 79 70 65  ns, the datatype
a730: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c   of each column,
a740: 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74   and the content
a750: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e   of each column.
a760: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 63  </p>..<p>The rec
a770: 6f 72 64 20 66 6f 72 6d 61 74 20 6d 61 6b 65 73  ord format makes
a780: 20 65 78 74 65 6e 73 69 76 65 20 75 73 65 20 6f   extensive use o
a790: 66 20 74 68 65 20 0a 5b 76 61 72 69 61 62 6c 65  f the .[variable
a7a0: 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 5d  -length integer]
a7b0: 20 6f 72 20 5b 76 61 72 69 6e 74 5d 0a 72 65 70   or [varint].rep
a7c0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 36  resentation of 6
a7d0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
a7e0: 65 67 65 72 73 20 64 65 66 69 6e 65 64 20 61 62  egers defined ab
a7f0: 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ove.</p>..<tcl>h
a800: 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 72 69 61  d_fragment seria
a810: 6c 74 79 70 65 20 7b 73 65 72 69 61 6c 20 74 79  ltype {serial ty
a820: 70 65 7d 20 7b 73 65 72 69 61 6c 20 74 79 70 65  pe} {serial type
a830: 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41 20 72 65  s}</tcl>.<p>A re
a840: 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 61 20  cord contains a 
a850: 68 65 61 64 65 72 20 61 6e 64 20 61 20 62 6f 64  header and a bod
a860: 79 2c 20 69 6e 20 74 68 61 74 20 6f 72 64 65 72  y, in that order
a870: 2e 20 20 0a 5e 28 54 68 65 20 68 65 61 64 65 72  .  .^(The header
a880: 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20 73   begins with a s
a890: 69 6e 67 6c 65 20 76 61 72 69 6e 74 20 77 68 69  ingle varint whi
a8a0: 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  ch determines th
a8b0: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 0a 6f  e total number.o
a8c0: 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68  f bytes in the h
a8d0: 65 61 64 65 72 2e 20 20 54 68 65 20 76 61 72 69  eader.  The vari
a8e0: 6e 74 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  nt value is the 
a8f0: 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  size of the head
a900: 65 72 20 69 6e 0a 62 79 74 65 73 20 69 6e 63 6c  er in.bytes incl
a910: 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  uding the size v
a920: 61 72 69 6e 74 20 69 74 73 65 6c 66 2e 29 5e 20  arint itself.)^ 
a930: 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20   ^Following the 
a940: 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65 0a  size varint are.
a950: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 64 64 69  one or more addi
a960: 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20  tional varints, 
a970: 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20  one per column. 
a980: 20 54 68 65 73 65 20 61 64 64 69 74 69 6f 6e 61   These additiona
a990: 6c 20 76 61 72 69 6e 74 73 0a 61 72 65 20 63 61  l varints.are ca
a9a0: 6c 6c 65 64 20 22 73 65 72 69 61 6c 20 74 79 70  lled "serial typ
a9b0: 65 22 20 6e 75 6d 62 65 72 73 20 61 6e 64 0a 64  e" numbers and.d
a9c0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64 61 74  etermine the dat
a9d0: 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f  atype of each co
a9e0: 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69 6e 67 20  lumn, according 
a9f0: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
aa00: 20 63 68 61 72 74 3a 3c 2f 70 3e 0a 0a 3c 63 65   chart:</p>..<ce
aa10: 6e 74 65 72 3e 0a 3c 69 3e 53 65 72 69 61 6c 20  nter>.<i>Serial 
aa20: 54 79 70 65 20 43 6f 64 65 73 20 4f 66 20 54 68  Type Codes Of Th
aa30: 65 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c  e Record Format<
aa40: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
aa50: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
aa60: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 53 65 72  r=1>.<tr><th>Ser
aa70: 69 61 6c 20 54 79 70 65 3c 74 68 3e 43 6f 6e 74  ial Type<th>Cont
aa80: 65 6e 74 20 53 69 7a 65 3c 74 68 3e 4d 65 61 6e  ent Size<th>Mean
aa90: 69 6e 67 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ing.<tr><td vali
aaa0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
aab0: 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>0<td valign=
aac0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
aad0: 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >0<td align=left
aae0: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 4e 55  >.^Value is a NU
aaf0: 4c 4c 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  LL..<tr><td vali
ab00: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
ab10: 74 65 72 3e 31 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>1<td valign=
ab20: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
ab30: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
ab40: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 6e 20 38  >.^Value is an 8
ab50: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
ab60: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
ab70: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
ab80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c   align=center>2<
ab90: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
aba0: 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20  ign=center>2<td 
abb0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
abc0: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
abd0: 61 6e 20 31 36 2d 62 69 74 20 74 77 6f 73 2d 63  an 16-bit twos-c
abe0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
abf0: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
ac00: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
ac10: 65 72 3e 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>3<td valign=t
ac20: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
ac30: 33 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  3<td align=left>
ac40: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
ac50: 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69 74 20 74  -endian 24-bit t
ac60: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
ac70: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
ac80: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
ac90: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c  =center>4<td val
aca0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
acb0: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
acc0: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
acd0: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d  a big-endian 32-
ace0: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
acf0: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72  ent integer..<tr
ad00: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
ad10: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 3c 74  align=center>5<t
ad20: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
ad30: 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 61  gn=center>6<td a
ad40: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
ad50: 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61  e is a big-endia
ad60: 6e 20 34 38 2d 62 69 74 20 74 77 6f 73 2d 63 6f  n 48-bit twos-co
ad70: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
ad80: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
ad90: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
ada0: 72 3e 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>6<td valign=to
adb0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
adc0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
add0: 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d  ^Value is a big-
ade0: 65 6e 64 69 61 6e 20 36 34 2d 62 69 74 20 74 77  endian 64-bit tw
adf0: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
ae00: 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76  teger..<tr><td v
ae10: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
ae20: 63 65 6e 74 65 72 3e 37 3c 74 64 20 76 61 6c 69  center>7<td vali
ae30: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
ae40: 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>8<td align=l
ae50: 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61  eft>.^Value is a
ae60: 20 62 69 67 2d 65 6e 64 69 61 6e 20 49 45 45 45   big-endian IEEE
ae70: 20 37 35 34 2d 32 30 30 38 20 36 34 2d 62 69 74   754-2008 64-bit
ae80: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
ae90: 6e 75 6d 62 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  number..<tr><td 
aea0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
aeb0: 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c  =center>8<td val
aec0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
aed0: 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d  nter>0<td align=
aee0: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
aef0: 74 68 65 20 69 6e 74 65 67 65 72 20 30 2e 20 28  the integer 0. (
af00: 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 66  Only available f
af10: 6f 72 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61  or [schema forma
af20: 74 5d 20 34 20 61 6e 64 20 68 69 67 68 65 72 2e  t] 4 and higher.
af30: 29 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ).<tr><td valign
af40: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
af50: 72 3e 39 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>9<td valign=to
af60: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
af70: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
af80: 5e 56 61 6c 75 65 20 69 73 20 74 68 65 20 69 6e  ^Value is the in
af90: 74 65 67 65 72 20 31 2e 20 28 4f 6e 6c 79 20 61  teger 1. (Only a
afa0: 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 5b 73 63  vailable for [sc
afb0: 68 65 6d 61 20 66 6f 72 6d 61 74 5d 20 34 20 61  hema format] 4 a
afc0: 6e 64 20 68 69 67 68 65 72 2e 29 0a 3c 74 72 3e  nd higher.).<tr>
afd0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
afe0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 30 2c 31  lign=center>10,1
aff0: 31 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  1.    <td valign
b000: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b010: 72 3e 26 6e 62 73 70 3b 3c 74 64 20 61 6c 69 67  r>&nbsp;<td alig
b020: 6e 3d 6c 65 66 74 3e 0a 3c 69 3e 4e 6f 74 20 75  n=left>.<i>Not u
b030: 73 65 64 2e 20 20 52 65 73 65 72 76 65 64 20 66  sed.  Reserved f
b040: 6f 72 20 65 78 70 61 6e 73 69 6f 6e 2e 3c 2f 69  or expansion.</i
b050: 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  >.<tr><td valign
b060: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b070: 72 3e 4e 26 23 78 32 32 36 35 3b 31 32 20 61 6e  r>N&#x2265;12 an
b080: 64 20 65 76 65 6e 0a 20 20 20 20 3c 74 64 20 76  d even.    <td v
b090: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b0a0: 63 65 6e 74 65 72 3e 28 4e 2d 31 32 29 2f 32 3c  center>(N-12)/2<
b0b0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
b0c0: 56 61 6c 75 65 20 69 73 20 61 20 42 4c 4f 42 20  Value is a BLOB 
b0d0: 74 68 61 74 20 69 73 20 28 4e 2d 31 32 29 2f 32  that is (N-12)/2
b0e0: 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
b0f0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
b100: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b110: 72 3e 4e 26 23 78 32 32 36 35 3b 31 33 20 61 6e  r>N&#x2265;13 an
b120: 64 20 6f 64 64 0a 20 20 20 20 3c 74 64 20 76 61  d odd.    <td va
b130: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
b140: 65 6e 74 65 72 3e 28 4e 2d 31 33 29 2f 32 3c 74  enter>(N-13)/2<t
b150: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56  d align=left>.^V
b160: 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67  alue is a string
b170: 20 69 6e 20 74 68 65 20 5b 74 65 78 74 20 65 6e   in the [text en
b180: 63 6f 64 69 6e 67 5d 20 61 6e 64 20 28 4e 2d 31  coding] and (N-1
b190: 33 29 2f 32 20 62 79 74 65 73 20 69 6e 20 6c 65  3)/2 bytes in le
b1a0: 6e 67 74 68 2e 0a 5e 54 68 65 20 6e 75 6c 20 74  ngth..^The nul t
b1b0: 65 72 6d 69 6e 61 74 6f 72 20 69 73 20 6e 6f 74  erminator is not
b1c0: 20 73 74 6f 72 65 64 2e 0a 3c 2f 74 61 62 6c 65   stored..</table
b1d0: 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 4e  ></center>..<p>N
b1e0: 6f 74 65 20 74 68 61 74 20 62 65 63 61 75 73 65  ote that because
b1f0: 20 6f 66 20 74 68 65 20 77 61 79 20 76 61 72 69   of the way vari
b200: 6e 74 73 20 61 72 65 20 64 65 66 69 6e 65 64 2c  nts are defined,
b210: 20 74 68 65 20 68 65 61 64 65 72 20 73 69 7a 65   the header size
b220: 20 76 61 72 69 6e 74 0a 61 6e 64 20 73 65 72 69   varint.and seri
b230: 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73 20  al type varints 
b240: 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 63 6f 6e  will usually con
b250: 73 69 73 74 20 6f 66 20 61 20 73 69 6e 67 6c 65  sist of a single
b260: 20 62 79 74 65 2e 20 20 54 68 65 0a 73 65 72 69   byte.  The.seri
b270: 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73 20  al type varints 
b280: 66 6f 72 20 6c 61 72 67 65 20 73 74 72 69 6e 67  for large string
b290: 73 20 61 6e 64 20 42 4c 4f 42 73 20 6d 69 67 68  s and BLOBs migh
b2a0: 74 20 65 78 74 65 6e 64 20 74 6f 20 74 77 6f 20  t extend to two 
b2b0: 6f 72 20 74 68 72 65 65 0a 62 79 74 65 20 76 61  or three.byte va
b2c0: 72 69 6e 74 73 2c 20 62 75 74 20 74 68 61 74 20  rints, but that 
b2d0: 69 73 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e  is the exception
b2e0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65   rather than the
b2f0: 20 72 75 6c 65 2e 20 0a 54 68 65 20 76 61 72 69   rule. .The vari
b300: 6e 74 20 66 6f 72 6d 61 74 20 69 73 20 76 65 72  nt format is ver
b310: 79 20 65 66 66 69 63 69 65 6e 74 20 61 74 20 63  y efficient at c
b320: 6f 64 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oding the record
b330: 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70   header.</p>..<p
b340: 3e 5e 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72  >^The values for
b350: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
b360: 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64  the record immed
b370: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68  iately follow th
b380: 65 20 68 65 61 64 65 72 2e 0a 5e 28 4e 6f 74 65  e header..^(Note
b390: 20 74 68 61 74 20 66 6f 72 20 73 65 72 69 61 6c   that for serial
b3a0: 20 74 79 70 65 73 20 30 2c 20 38 2c 20 39 2c 20   types 0, 8, 9, 
b3b0: 31 32 2c 20 61 6e 64 20 31 33 2c 20 74 68 65 20  12, and 13, the 
b3c0: 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 20 62 79  value is zero by
b3d0: 74 65 73 20 69 6e 0a 6c 65 6e 67 74 68 2e 20 20  tes in.length.  
b3e0: 49 66 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 61  If all columns a
b3f0: 72 65 20 6f 66 20 74 68 65 73 65 20 74 79 70 65  re of these type
b400: 73 20 74 68 65 6e 20 74 68 65 20 62 6f 64 79 20  s then the body 
b410: 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 0a 72  section of the.r
b420: 65 63 6f 72 64 20 69 73 20 65 6d 70 74 79 2e 29  ecord is empty.)
b430: 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 32 20 52  ^</p>..<h3>2.2 R
b440: 65 63 6f 72 64 20 53 6f 72 74 20 4f 72 64 65 72  ecord Sort Order
b450: 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 6f 72  </h3>..<p>The or
b460: 64 65 72 20 6f 66 20 6b 65 79 73 20 69 6e 20 61  der of keys in a
b470: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69  n index b-tree i
b480: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
b490: 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6f  the sort order o
b4a0: 66 0a 74 68 65 20 72 65 63 6f 72 64 73 20 74 68  f.the records th
b4b0: 61 74 20 74 68 65 20 6b 65 79 73 20 72 65 70 72  at the keys repr
b4c0: 65 73 65 6e 74 2e 20 20 52 65 63 6f 72 64 20 63  esent.  Record c
b4d0: 6f 6d 70 61 72 69 73 6f 6e 20 70 72 6f 67 72 65  omparison progre
b4e0: 73 73 65 73 20 63 6f 6c 75 6d 6e 0a 62 79 20 63  sses column.by c
b4f0: 6f 6c 75 6d 6e 2e 20 20 43 6f 6c 75 6d 6e 73 20  olumn.  Columns 
b500: 6f 66 20 61 20 72 65 63 6f 72 64 20 61 72 65 20  of a record are 
b510: 65 78 61 6d 69 6e 65 64 20 66 72 6f 6d 20 6c 65  examined from le
b520: 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20 54 68  ft to right.  Th
b530: 65 0a 66 69 72 73 74 20 70 61 69 72 20 6f 66 20  e.first pair of 
b540: 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65  columns that are
b550: 20 6e 6f 74 20 65 71 75 61 6c 20 64 65 74 65 72   not equal deter
b560: 6d 69 6e 65 73 20 74 68 65 20 72 65 6c 61 74 69  mines the relati
b570: 76 65 20 6f 72 64 65 72 0a 6f 66 20 74 68 65 20  ve order.of the 
b580: 74 77 6f 20 72 65 63 6f 72 64 73 2e 20 20 54 68  two records.  Th
b590: 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6f 66 20  e sort order of 
b5a0: 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d  individual colum
b5b0: 6e 73 20 69 73 20 61 73 0a 66 6f 6c 6c 6f 77 73  ns is as.follows
b5c0: 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
b5d0: 5e 28 4e 55 4c 4c 20 76 61 6c 75 65 73 20 28 73  ^(NULL values (s
b5e0: 65 72 69 61 6c 20 74 79 70 65 20 30 29 20 73 6f  erial type 0) so
b5f0: 72 74 20 66 69 72 73 74 2e 29 5e 0a 3c 6c 69 3e  rt first.)^.<li>
b600: 5e 28 4e 75 6d 65 72 69 63 20 76 61 6c 75 65 73  ^(Numeric values
b610: 20 28 73 65 72 69 61 6c 20 74 79 70 65 73 20 31   (serial types 1
b620: 20 74 68 72 6f 75 67 68 20 39 29 20 73 6f 72 74   through 9) sort
b630: 20 61 66 74 65 72 20 4e 55 4c 4c 73 0a 20 20 20   after NULLs.   
b640: 20 20 20 61 6e 64 20 69 6e 20 6e 75 6d 65 72 69     and in numeri
b650: 63 20 6f 72 64 65 72 2e 29 5e 0a 3c 6c 69 3e 5e  c order.)^.<li>^
b660: 28 54 65 78 74 20 76 61 6c 75 65 73 20 28 6f 64  (Text values (od
b670: 64 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 31  d serial types 1
b680: 33 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73 6f  3 and larger) so
b690: 72 74 20 61 66 74 65 72 20 6e 75 6d 65 72 69 63  rt after numeric
b6a0: 0a 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20 74  .    values in t
b6b0: 68 65 20 6f 72 64 65 72 20 64 65 74 65 72 6d 69  he order determi
b6c0: 6e 65 64 20 62 79 20 74 68 65 20 63 6f 6c 75 6d  ned by the colum
b6d0: 6e 73 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ns [collating fu
b6e0: 6e 63 74 69 6f 6e 5d 2e 29 5e 0a 3c 6c 69 3e 5e  nction].)^.<li>^
b6f0: 28 42 4c 4f 42 20 76 61 6c 75 65 73 20 28 65 76  (BLOB values (ev
b700: 65 6e 20 73 65 72 69 61 6c 20 74 79 70 65 73 20  en serial types 
b710: 31 32 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73  12 and larger) s
b720: 6f 72 74 20 6c 61 73 74 20 61 6e 64 20 69 6e 20  ort last and in 
b730: 74 68 65 20 6f 72 64 65 72 20 0a 20 20 20 20 64  the order .    d
b740: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6d 65 6d  etermined by mem
b750: 63 6d 70 28 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 0a  cmp().)^.</ol>..
b760: 3c 70 3e 41 20 5b 63 6f 6c 6c 61 74 69 6e 67 20  <p>A [collating 
b770: 66 75 6e 63 74 69 6f 6e 5d 20 66 6f 72 20 65 61  function] for ea
b780: 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 65 63  ch column is nec
b790: 65 73 73 61 72 79 20 69 6e 20 6f 72 64 65 72 20  essary in order 
b7a0: 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65 20 6f  to compute.the o
b7b0: 72 64 65 72 20 6f 66 20 74 65 78 74 20 66 69 65  rder of text fie
b7c0: 6c 64 73 2e 0a 5e 28 53 51 4c 69 74 65 20 64 65  lds..^(SQLite de
b7d0: 66 69 6e 65 73 20 74 68 72 65 65 20 62 75 69 6c  fines three buil
b7e0: 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 66  t-in collating f
b7f0: 75 6e 63 74 69 6f 6e 73 3a 29 5e 0a 3c 2f 70 3e  unctions:)^.</p>
b800: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74  ..<blockquote><t
b810: 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
b820: 6c 6c 73 70 61 63 69 6e 67 3d 31 30 3e 0a 3c 74  llspacing=10>.<t
b830: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
b840: 3e 42 49 4e 41 52 59 0a 20 20 20 20 3c 74 64 3e  >BINARY.    <td>
b850: 20 5e 28 54 68 65 20 62 75 69 6c 74 2d 69 6e 20   ^(The built-in 
b860: 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6f 6e  BINARY collation
b870: 20 63 6f 6d 70 61 72 65 73 20 73 74 72 69 6e 67   compares string
b880: 73 20 62 79 74 65 20 62 79 20 62 79 74 65 0a 20  s byte by byte. 
b890: 20 20 20 20 20 20 20 75 73 69 6e 67 20 74 68 65         using the
b8a0: 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63 74 69   memcmp() functi
b8b0: 6f 6e 0a 20 20 20 20 20 20 20 20 66 72 6f 6d 20  on.        from 
b8c0: 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
b8d0: 69 62 72 61 72 79 2e 29 5e 0a 3c 74 72 3e 3c 74  ibrary.)^.<tr><t
b8e0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f 43  d valign=top>NOC
b8f0: 41 53 45 0a 20 20 20 20 3c 74 64 3e 20 5e 28 54  ASE.    <td> ^(T
b900: 68 65 20 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74  he NOCASE collat
b910: 69 6f 6e 20 69 73 20 6c 69 6b 65 20 42 49 4e 41  ion is like BINA
b920: 52 59 20 65 78 63 65 70 74 20 74 68 61 74 20 75  RY except that u
b930: 70 70 65 72 63 61 73 65 0a 20 20 20 20 20 20 20  ppercase.       
b940: 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
b950: 73 20 28 27 41 27 20 74 68 72 6f 75 67 68 20 27  s ('A' through '
b960: 5a 27 29 0a 20 20 20 20 20 20 20 20 61 72 65 20  Z').        are 
b970: 66 6f 6c 64 65 64 20 69 6e 74 6f 20 74 68 65 69  folded into thei
b980: 72 20 6c 6f 77 65 72 63 61 73 65 20 65 71 75 69  r lowercase equi
b990: 76 61 6c 65 6e 74 73 20 70 72 69 6f 72 20 74 6f  valents prior to
b9a0: 20 72 75 6e 6e 69 6e 67 20 74 68 65 0a 20 20 20   running the.   
b9b0: 20 20 20 20 20 63 6f 6d 70 61 72 69 73 6f 6e 2e       comparison.
b9c0: 20 20 4e 6f 74 65 20 74 68 61 74 20 6f 6e 6c 79    Note that only
b9d0: 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
b9e0: 73 20 61 72 65 20 63 61 73 65 2d 66 6f 6c 64 65  s are case-folde
b9f0: 64 2e 29 5e 0a 20 20 20 20 20 20 20 20 5e 28 4e  d.)^.        ^(N
ba00: 4f 43 41 53 45 0a 20 20 20 20 20 20 20 20 64 6f  OCASE.        do
ba10: 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74  es not implement
ba20: 20 61 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f   a general purpo
ba30: 73 65 20 75 6e 69 63 6f 64 65 20 63 61 73 65 6c  se unicode casel
ba40: 65 73 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 29  ess comparison.)
ba50: 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ^.<tr><td valign
ba60: 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20 20 20 3c  =top>RTRIM.    <
ba70: 74 64 3e 20 5e 28 52 54 52 49 4d 20 69 73 20 6c  td> ^(RTRIM is l
ba80: 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63 65 70  ike BINARY excep
ba90: 74 20 74 68 61 74 20 65 78 74 72 61 20 73 70 61  t that extra spa
baa0: 63 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ces at the end o
bab0: 66 20 65 69 74 68 65 72 0a 20 20 20 20 20 20 20  f either.       
bac0: 20 20 73 74 72 69 6e 67 20 64 6f 20 6e 6f 74 20    string do not 
bad0: 63 68 61 6e 67 65 20 74 68 65 20 72 65 73 75 6c  change the resul
bae0: 74 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  t.  In other wor
baf0: 64 73 2c 20 73 74 72 69 6e 67 73 20 77 69 6c 6c  ds, strings will
bb00: 0a 20 20 20 20 20 20 20 20 20 63 6f 6d 70 61 72  .         compar
bb10: 65 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61  e equal to one a
bb20: 6e 6f 74 68 65 72 20 61 73 20 6c 6f 6e 67 20 61  nother as long a
bb30: 73 20 74 68 65 79 0a 20 20 20 20 20 20 20 20 20  s they.         
bb40: 64 69 66 66 65 72 20 6f 6e 6c 79 20 69 6e 20 74  differ only in t
bb50: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 70 61  he number of spa
bb60: 63 65 73 20 61 74 20 74 68 65 20 65 6e 64 2e 29  ces at the end.)
bb70: 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  ^.</table></bloc
bb80: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41 64 64  kquote>..<p>^Add
bb90: 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74  itional applicat
bba0: 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 63 6f 6c  ion-specific col
bbb0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
bbc0: 20 63 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f   can be added to
bbd0: 0a 53 51 4c 69 74 65 20 75 73 69 6e 67 20 74 68  .SQLite using th
bbe0: 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
bbf0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d 20 69  e_collation()] i
bc00: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
bc10: 70 3e 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  p>^The default c
bc20: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
bc30: 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
bc40: 73 20 69 73 20 42 49 4e 41 52 59 2e 0a 5e 41 6c  s is BINARY..^Al
bc50: 74 65 72 6e 61 74 69 76 65 20 63 6f 6c 6c 61 74  ternative collat
bc60: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f  ing functions fo
bc70: 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20  r table columns 
bc80: 63 61 6e 20 62 65 20 73 70 65 63 69 66 69 65 64  can be specified
bc90: 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20   in the.[CREATE 
bca0: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
bcb0: 20 75 73 69 6e 67 20 74 68 65 20 43 4f 4c 4c 41   using the COLLA
bcc0: 54 45 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65  TE clause on the
bcd0: 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   [column definit
bce0: 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61 20 63 6f  ion]..^When a co
bcf0: 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78 65 64 2c  lumn is indexed,
bd00: 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 6c 61 74   the same collat
bd10: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
bd20: 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43  cified in the.[C
bd30: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
bd40: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 66  tement is used f
bd50: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  or the column in
bd60: 20 74 68 65 20 69 6e 64 65 78 2c 20 62 79 20 64   the index, by d
bd70: 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67 68 20 74  efault,.though t
bd80: 68 69 73 20 63 61 6e 20 62 65 20 6f 76 65 72 72  his can be overr
bd90: 69 64 64 65 6e 20 75 73 69 6e 67 20 61 20 43 4f  idden using a CO
bda0: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20  LLATE clause in 
bdb0: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 49 4e 44  the .[CREATE IND
bdc0: 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  EX] statement...
bdd0: 3c 68 33 3e 32 2e 33 20 52 65 70 72 65 73 65 6e  <h3>2.3 Represen
bde0: 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 54 61  tation Of SQL Ta
bdf0: 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e  bles</h3>..<p> ^
be00: 45 61 63 68 20 6f 72 64 69 6e 61 72 79 20 53 51  Each ordinary SQ
be10: 4c 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  L table in the d
be20: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
be30: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 6f 6e  s represented on
be40: 2d 64 69 73 6b 0a 62 79 20 61 20 74 61 62 6c 65  -disk.by a table
be50: 20 62 2d 74 72 65 65 2e 20 20 5e 45 61 63 68 20   b-tree.  ^Each 
be60: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62  entry in the tab
be70: 6c 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73  le b-tree corres
be80: 70 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f  ponds to a row.o
be90: 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 2e  f the SQL table.
bea0: 20 20 5e 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f    ^The [rowid] o
beb0: 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20  f the SQL table 
bec0: 69 73 20 74 68 65 20 36 34 2d 62 69 74 20 73 69  is the 64-bit si
bed0: 67 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79  gned.integer key
bee0: 20 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20   for each entry 
bef0: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74  in the table b-t
bf00: 72 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54  ree.</p>..<p> ^T
bf10: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61  he content of ea
bf20: 63 68 20 53 51 4c 20 74 61 62 6c 65 20 72 6f 77  ch SQL table row
bf30: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
bf40: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
bf50: 62 79 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e 69  by.first combini
bf60: 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  ng the values in
bf70: 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6c   the various col
bf80: 75 6d 6e 73 20 69 6e 74 6f 20 61 20 62 79 74 65  umns into a byte
bf90: 20 61 72 72 61 79 0a 69 6e 20 74 68 65 20 72 65   array.in the re
bfa0: 63 6f 72 64 20 66 6f 72 6d 61 74 2c 20 74 68 65  cord format, the
bfb0: 6e 20 73 74 6f 72 69 6e 67 20 74 68 61 74 20 62  n storing that b
bfc0: 79 74 65 20 61 72 72 61 79 20 61 73 20 74 68 65  yte array as the
bfd0: 20 70 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65   payload in.an e
bfe0: 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c  ntry in the tabl
bff0: 65 20 62 2d 74 72 65 65 2e 20 20 5e 54 68 65 20  e b-tree.  ^The 
c000: 6f 72 64 65 72 20 6f 66 20 76 61 6c 75 65 73 20  order of values 
c010: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 73  in the record is
c020: 0a 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65  .the same as the
c030: 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e   order of column
c040: 73 20 69 6e 20 74 68 65 20 53 51 4c 20 74 61 62  s in the SQL tab
c050: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e  le definition..^
c060: 57 68 65 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  When an SQL tabl
c070: 65 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b 49  e includes an.[I
c080: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
c090: 45 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69 63  EY] column (whic
c0a0: 68 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b 72  h aliases the [r
c0b0: 6f 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61 74  owid]) then that
c0c0: 0a 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20  .column appears 
c0d0: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 73  in the record as
c0e0: 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20 20   a NULL value.  
c0f0: 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77  ^SQLite will alw
c100: 61 79 73 20 75 73 65 0a 74 68 65 20 74 61 62 6c  ays use.the tabl
c110: 65 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61 74  e b-tree key rat
c120: 68 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55 4c  her than the NUL
c130: 4c 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65 66  L value when ref
c140: 65 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49 4e  erencing the.[IN
c150: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c160: 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a  Y] column.</p>..
c170: 3c 70 3e 20 5e 49 66 20 74 68 65 20 5b 61 66 66  <p> ^If the [aff
c180: 69 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75  inity] of a colu
c190: 6d 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74  mn is REAL and t
c1a0: 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  hat column conta
c1b0: 69 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74  ins a.value that
c1c0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65   can be converte
c1d0: 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  d to an integer 
c1e0: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
c1f0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20  information.(if 
c200: 74 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  the value contai
c210: 6e 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c  ns no fractional
c220: 20 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74   part and is not
c230: 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65   too large to be
c240: 0a 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20  .represented as 
c250: 61 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e  an integer) then
c260: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20   the column may 
c270: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  be stored in the
c280: 20 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e   record.as an in
c290: 74 65 67 65 72 2e 20 20 5e 53 51 4c 69 74 65 20  teger.  ^SQLite 
c2a0: 77 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65  will convert the
c2b0: 20 76 61 6c 75 65 20 62 61 63 6b 20 74 6f 20 66   value back to f
c2c0: 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68  loating.point wh
c2d0: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 74  en extracting it
c2e0: 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
c2f0: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 34 20 52  .</p>..<h3>2.4 R
c300: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
c310: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 54   WITHOUT ROWID T
c320: 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ables</h3>..<p>^
c330: 49 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  If an SQL table 
c340: 69 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  is created using
c350: 20 74 68 65 20 22 57 49 54 48 4f 55 54 20 52 4f   the "WITHOUT RO
c360: 57 49 44 22 20 63 6c 61 75 73 65 20 61 74 20 74  WID" clause at t
c370: 68 65 0a 65 6e 64 20 6f 66 20 69 74 73 20 43 52  he.end of its CR
c380: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
c390: 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 61 74 20  ment, then that 
c3a0: 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
c3b0: 4f 55 54 20 52 4f 57 49 44 5d 0a 74 61 62 6c 65  OUT ROWID].table
c3c0: 20 61 6e 64 20 75 73 65 73 20 61 20 64 69 66 66   and uses a diff
c3d0: 65 72 65 6e 74 20 6f 6e 2d 64 69 73 6b 20 72 65  erent on-disk re
c3e0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 5e  presentation.  ^
c3f0: 41 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a  A WITHOUT ROWID.
c400: 74 61 62 6c 65 20 75 73 65 73 20 61 6e 20 69 6e  table uses an in
c410: 64 65 78 20 62 2d 74 72 65 65 20 72 61 74 68 65  dex b-tree rathe
c420: 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65 20 62  r than a table b
c430: 2d 74 72 65 65 20 66 6f 72 20 73 74 6f 72 61 67  -tree for storag
c440: 65 2e 0a 5e 54 68 65 20 6b 65 79 20 66 6f 72 20  e..^The key for 
c450: 65 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68  each entry in th
c460: 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  e WITHOUT ROWID 
c470: 62 2d 74 72 65 65 20 69 73 20 61 20 72 65 63 6f  b-tree is a reco
c480: 72 64 20 63 6f 6d 70 6f 73 65 64 0a 6f 66 20 74  rd composed.of t
c490: 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
c4a0: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f  e PRIMARY KEY fo
c4b0: 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 72 65  llowed by all re
c4c0: 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  maining columns 
c4d0: 6f 66 0a 74 68 65 20 74 61 62 6c 65 2e 20 20 5e  of.the table.  ^
c4e0: 54 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  The primary key 
c4f0: 63 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69  columns appear i
c500: 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79  n the order they
c510: 20 74 68 65 79 20 77 65 72 65 0a 64 65 63 6c 61   they were.decla
c520: 72 65 64 20 69 6e 20 74 68 65 20 50 52 49 4d 41  red in the PRIMA
c530: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 61 6e  RY KEY clause an
c540: 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  d the remaining 
c550: 63 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69  columns appear i
c560: 6e 0a 74 68 65 20 6f 72 64 65 72 20 74 68 65 79  n.the order they
c570: 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 43 52   occur in the CR
c580: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
c590: 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 48 65 6e 63 65  ment...<p>^Hence
c5a0: 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e  , the content en
c5b0: 63 6f 64 69 6e 67 20 66 6f 72 20 61 20 57 49 54  coding for a WIT
c5c0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
c5d0: 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20   is the same.as 
c5e0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f  the content enco
c5f0: 64 69 6e 67 20 66 6f 72 20 61 6e 20 6f 72 64 69  ding for an ordi
c600: 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65  nary rowid table
c610: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  , except that th
c620: 65 0a 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63  e.order of the c
c630: 6f 6c 75 6d 6e 73 20 69 73 20 72 65 61 72 72 61  olumns is rearra
c640: 6e 67 65 64 20 73 6f 20 74 68 61 74 20 50 52 49  nged so that PRI
c650: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73  MARY KEY columns
c660: 20 63 6f 6d 65 0a 66 69 72 73 74 2c 20 61 6e 64   come.first, and
c670: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
c680: 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
c690: 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  in an index b-tr
c6a0: 65 65 20 72 61 74 68 65 72 0a 74 68 61 6e 20 61  ee rather.than a
c6b0: 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 61 20  s the data in a 
c6c0: 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 0a 5e 54  table b-tree..^T
c6d0: 68 65 20 73 70 65 63 69 61 6c 20 65 6e 63 6f 64  he special encod
c6e0: 69 6e 67 20 72 75 6c 65 73 20 66 6f 72 20 63 6f  ing rules for co
c6f0: 6c 75 6d 6e 73 20 77 69 74 68 20 52 45 41 4c 20  lumns with REAL 
c700: 61 66 66 69 6e 69 74 79 0a 61 70 70 6c 79 20 74  affinity.apply t
c710: 6f 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  o WITHOUT ROWID 
c720: 74 61 62 6c 65 73 20 74 68 65 20 73 61 6d 65 20  tables the same 
c730: 61 73 20 74 68 65 79 20 64 6f 20 77 69 74 68 20  as they do with 
c740: 72 6f 77 69 64 20 74 61 62 6c 65 73 2e 0a 0a 3c  rowid tables...<
c750: 68 33 3e 32 2e 35 20 52 65 70 72 65 73 65 6e 74  h3>2.5 Represent
c760: 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 49 6e 64  ation Of SQL Ind
c770: 69 63 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45  ices</h3>..<p>^E
c780: 61 63 68 20 53 51 4c 20 69 6e 64 65 78 2c 20 77  ach SQL index, w
c790: 68 65 74 68 65 72 20 65 78 70 6c 69 63 69 74 6c  hether explicitl
c7a0: 79 20 64 65 63 6c 61 72 65 64 20 76 69 61 20 61  y declared via a
c7b0: 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
c7c0: 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 69 6d 70  statement.or imp
c7d0: 6c 69 65 64 20 62 79 20 61 20 55 4e 49 51 55 45  lied by a UNIQUE
c7e0: 20 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59 20   or PRIMARY KEY 
c7f0: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 63 6f 72 72  constraint, corr
c800: 65 73 70 6f 6e 64 73 20 74 6f 20 61 6e 20 0a 69  esponds to an .i
c810: 6e 64 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74  ndex b-tree in t
c820: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
c830: 2e 0a 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e  ..^Each entry in
c840: 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65   the index b-tre
c850: 65 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  e corresponds to
c860: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e   a single row in
c870: 20 74 68 65 20 0a 61 73 73 6f 63 69 61 74 65 64   the .associated
c880: 20 53 51 4c 20 74 61 62 6c 65 2e 0a 5e 54 68 65   SQL table..^The
c890: 20 6b 65 79 20 74 6f 20 61 6e 20 69 6e 64 65 78   key to an index
c8a0: 20 62 2d 74 72 65 65 20 69 73 0a 61 20 72 65 63   b-tree is.a rec
c8b0: 6f 72 64 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20  ord composed of 
c8c0: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74  the columns that
c8d0: 20 61 72 65 20 62 65 69 6e 67 20 69 6e 64 65 78   are being index
c8e0: 65 64 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74  ed followed by t
c8f0: 68 65 0a 6b 65 79 20 6f 66 20 74 68 65 20 63 6f  he.key of the co
c900: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
c910: 65 20 72 6f 77 2e 20 20 46 6f 72 20 6f 72 64 69  e row.  For ordi
c920: 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 74 68 65  nary tables, the
c930: 20 72 6f 77 20 6b 65 79 20 69 73 0a 74 68 65 20   row key is.the 
c940: 5b 72 6f 77 69 64 5d 2c 20 61 6e 64 20 66 6f 72  [rowid], and for
c950: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
c960: 20 74 61 62 6c 65 73 20 74 68 65 20 72 6f 77 20   tables the row 
c970: 6b 65 79 20 69 73 20 74 68 65 20 50 52 49 4d 41  key is the PRIMA
c980: 52 59 20 4b 45 59 2e 0a 42 65 63 61 75 73 65 20  RY KEY..Because 
c990: 65 76 65 72 79 20 72 6f 77 20 69 6e 20 74 68 65  every row in the
c9a0: 20 74 61 62 6c 65 20 68 61 73 20 61 20 75 6e 69   table has a uni
c9b0: 71 75 65 20 72 6f 77 20 6b 65 79 2c 0a 61 6c 6c  que row key,.all
c9c0: 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
c9d0: 78 20 61 72 65 20 75 6e 69 71 75 65 2e 3c 2f 70  x are unique.</p
c9e0: 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 6e 6f 72 6d  >..<p>^In a norm
c9f0: 61 6c 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20  al index, there 
ca00: 69 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20  is a one-to-one 
ca10: 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20  mapping between 
ca20: 72 6f 77 73 20 69 6e 20 61 20 0a 74 61 62 6c 65  rows in a .table
ca30: 20 61 6e 64 20 65 6e 74 72 69 65 73 20 69 6e 20   and entries in 
ca40: 65 61 63 68 20 69 6e 64 65 78 20 61 73 73 6f 63  each index assoc
ca50: 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20  iated with that 
ca60: 74 61 62 6c 65 2e 0a 5e 48 6f 77 65 76 65 72 2c  table..^However,
ca70: 20 69 6e 20 61 20 5b 70 61 72 74 69 61 6c 20 69   in a [partial i
ca80: 6e 64 65 78 5d 2c 20 74 68 65 20 69 6e 64 65 78  ndex], the index
ca90: 20 62 2d 74 72 65 65 20 6f 6e 6c 79 20 63 6f 6e   b-tree only con
caa0: 74 61 69 6e 73 20 65 6e 74 72 69 65 73 0a 63 6f  tains entries.co
cab0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74  rresponding to t
cac0: 61 62 6c 65 20 72 6f 77 73 20 66 6f 72 20 77 68  able rows for wh
cad0: 69 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  ich the WHERE cl
cae0: 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  ause expression 
caf0: 6f 6e 20 74 68 65 0a 43 52 45 41 54 45 20 49 4e  on the.CREATE IN
cb00: 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 73  DEX statement is
cb10: 20 74 72 75 65 2e 0a 5e 43 6f 72 72 65 73 70 6f   true..^Correspo
cb20: 6e 64 69 6e 67 20 72 6f 77 73 20 69 6e 20 74 68  nding rows in th
cb30: 65 20 69 6e 64 65 78 20 61 6e 64 20 74 61 62 6c  e index and tabl
cb40: 65 20 62 2d 74 72 65 65 73 20 73 68 61 72 65 20  e b-trees share 
cb50: 74 68 65 20 73 61 6d 65 20 72 6f 77 69 64 0a 6f  the same rowid.o
cb60: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61  r primary key va
cb70: 6c 75 65 73 20 61 6e 64 20 63 6f 6e 74 61 69 6e  lues and contain
cb80: 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
cb90: 66 6f 72 20 61 6c 6c 20 69 6e 64 65 78 65 64 20  for all indexed 
cba0: 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68  columns.</p>..<h
cbb0: 34 3e 32 2e 35 2e 31 20 53 75 70 70 72 65 73 73  4>2.5.1 Suppress
cbc0: 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e 74  ion of redundant
cbd0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54 48   columns in WITH
cbe0: 4f 55 54 20 52 4f 57 49 44 20 73 65 63 6f 6e 64  OUT ROWID second
cbf0: 61 72 79 20 69 6e 64 65 78 65 64 0a 3c 2f 68 34  ary indexed.</h4
cc00: 3e 0a 0a 3c 70 3e 20 5e 49 6e 20 61 6e 20 69 6e  >..<p> ^In an in
cc10: 64 65 78 20 6f 6e 20 61 20 57 49 54 48 4f 55 54  dex on a WITHOUT
cc20: 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 69 66   ROWID table, if
cc30: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20   one or more of 
cc40: 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
cc50: 68 65 20 74 61 62 6c 65 20 50 52 49 4d 41 52 59  he table PRIMARY
cc60: 20 4b 45 59 20 61 72 65 20 61 6c 73 6f 20 63 6f   KEY are also co
cc70: 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 69 6e 64  lumns of the ind
cc80: 65 78 2c 20 74 68 65 6e 20 74 68 65 0a 69 6e 64  ex, then the.ind
cc90: 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e  exed column is n
cca0: 6f 74 20 72 65 70 65 61 74 65 64 20 69 6e 20 74  ot repeated in t
ccb0: 68 65 20 74 61 62 6c 65 2d 6b 65 79 20 73 75 66  he table-key suf
ccc0: 66 69 78 20 6f 6e 20 74 68 65 20 65 6e 64 20 6f  fix on the end o
ccd0: 66 0a 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f  f.the index reco
cce0: 72 64 2e 20 20 5e 28 41 73 20 61 6e 20 65 78 61  rd.  ^(As an exa
ccf0: 6d 70 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20 74  mple, consider t
cd00: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c  he following SQL
cd10: 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
cd20: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
cd30: 45 20 65 78 32 35 28 61 2c 62 2c 63 2c 64 2c 65  E ex25(a,b,c,d,e
cd40: 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 64 2c 63  ,PRIMARY KEY(d,c
cd50: 2c 61 29 29 20 57 49 54 48 4f 55 54 20 72 6f 77  ,a)) WITHOUT row
cd60: 69 64 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58  id;.CREATE INDEX
cd70: 20 65 78 32 35 63 65 20 4f 4e 20 65 78 32 35 28   ex25ce ON ex25(
cd80: 63 2c 65 29 3b 0a 43 52 45 41 54 45 20 49 4e 44  c,e);.CREATE IND
cd90: 45 58 20 65 78 32 35 61 63 64 65 20 4f 4e 20 65  EX ex25acde ON e
cda0: 78 32 35 28 61 2c 63 2c 64 2c 65 29 3b 0a 3c 2f  x25(a,c,d,e);.</
cdb0: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
cdc0: 3e 0a 0a 3c 70 3e 45 61 63 68 20 72 6f 77 20 69  >..<p>Each row i
cdd0: 6e 20 74 68 65 20 65 78 32 35 63 65 20 69 6e 64  n the ex25ce ind
cde0: 65 78 20 69 73 20 61 20 72 65 63 6f 72 64 0a 77  ex is a record.w
cdf0: 69 74 68 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  ith these column
ce00: 73 3a 20 63 2c 20 65 2c 20 64 2c 20 61 2e 20 20  s: c, e, d, a.  
ce10: 54 68 65 20 66 69 72 73 74 20 74 77 6f 20 63 6f  The first two co
ce20: 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65 20 63 6f  lumns are.the co
ce30: 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64 65  lumns being inde
ce40: 78 65 64 2c 20 63 20 61 6e 64 20 65 2e 20 20 54  xed, c and e.  T
ce50: 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c  he remaining col
ce60: 75 6d 6e 73 20 61 72 65 20 74 68 65 20 70 72 69  umns are the pri
ce70: 6d 61 72 79 0a 6b 65 79 20 6f 66 20 74 68 65 20  mary.key of the 
ce80: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
ce90: 62 6c 65 20 72 6f 77 2e 20 20 4e 6f 72 6d 61 6c  ble row.  Normal
cea0: 6c 79 2c 20 74 68 65 20 70 72 69 6d 61 72 79 20  ly, the primary 
ceb0: 6b 65 79 20 77 6f 75 6c 64 20 62 65 0a 63 6f 6c  key would be.col
cec0: 75 6d 6e 73 20 64 2c 20 63 2c 20 61 6e 64 20 61  umns d, c, and a
ced0: 2c 20 62 75 74 20 62 65 63 61 75 73 65 20 63 6f  , but because co
cee0: 6c 75 6d 6e 20 63 20 61 6c 72 65 61 64 79 20 61  lumn c already a
cef0: 70 70 65 61 72 73 20 65 61 72 6c 69 65 72 20 69  ppears earlier i
cf00: 6e 20 74 68 65 0a 69 6e 64 65 78 2c 20 69 74 20  n the.index, it 
cf10: 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
cf20: 74 68 65 20 6b 65 79 20 73 75 66 66 69 78 2e 29  the key suffix.)
cf30: 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 74  ^</p>..<p>^(In t
cf40: 68 65 20 65 78 74 72 65 6d 65 20 63 61 73 65 20  he extreme case 
cf50: 77 68 65 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e  where the column
cf60: 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  s being indexed 
cf70: 63 6f 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  cover all column
cf80: 73 0a 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  s.of the PRIMARY
cf90: 20 4b 45 59 2c 20 74 68 65 20 69 6e 64 65 78 20   KEY, the index 
cfa0: 77 69 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66 20  will consist of 
cfb0: 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  only the columns
cfc0: 20 62 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e 20   being.indexed. 
cfd0: 20 54 68 65 20 65 78 32 35 61 63 64 65 20 65 78   The ex25acde ex
cfe0: 61 6d 70 6c 65 20 61 62 6f 76 65 20 64 65 6d 6f  ample above demo
cff0: 6e 73 74 72 61 74 65 73 20 74 68 69 73 2e 29 5e  nstrates this.)^
d000: 20 20 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e    ^Each entry in
d010: 0a 74 68 65 20 65 78 32 35 61 63 64 65 20 69 6e  .the ex25acde in
d020: 64 65 78 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  dex consists of 
d030: 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  only the columns
d040: 20 61 2c 20 63 2c 20 64 2c 20 61 6e 64 20 65 2c   a, c, d, and e,
d050: 20 69 6e 20 74 68 61 74 0a 6f 72 64 65 72 2e 3c   in that.order.<
d060: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 73 75  /p>..<p> ^The su
d070: 70 70 72 65 73 73 69 6f 6e 20 6f 66 20 72 65 64  ppression of red
d080: 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20 69  undant columns i
d090: 6e 20 74 68 65 20 6b 65 79 20 73 75 66 66 69 78  n the key suffix
d0a0: 20 6f 66 20 61 6e 20 69 6e 64 65 78 0a 65 6e 74   of an index.ent
d0b0: 72 79 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20 69  ry only occurs i
d0c0: 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  n WITHOUT ROWID 
d0d0: 74 61 62 6c 65 73 2e 20 20 5e 49 6e 20 61 6e 20  tables.  ^In an 
d0e0: 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64 20 74  ordinary rowid t
d0f0: 61 62 6c 65 2c 0a 74 68 65 20 69 6e 64 65 78 20  able,.the index 
d100: 65 6e 74 72 79 20 61 6c 77 61 79 73 20 65 6e 64  entry always end
d110: 73 20 77 69 74 68 20 74 68 65 20 72 6f 77 69 64  s with the rowid
d120: 20 65 76 65 6e 20 69 66 20 74 68 65 20 5b 49 4e   even if the [IN
d130: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
d140: 59 5d 0a 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e 65  Y].column is one
d150: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
d160: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 3c 2f  being indexed.</
d170: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
d180: 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73 74  ment sqlite_mast
d190: 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65  er {sqlite_maste
d1a0: 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65  r} {sqlite_maste
d1b0: 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a 3c  r table}</tcl>.<
d1c0: 68 33 3e 32 2e 36 20 53 74 6f 72 61 67 65 20 4f  h3>2.6 Storage O
d1d0: 66 20 54 68 65 20 53 51 4c 20 44 61 74 61 62 61  f The SQL Databa
d1e0: 73 65 20 53 63 68 65 6d 61 3c 2f 68 33 3e 0a 0a  se Schema</h3>..
d1f0: 3c 70 3e 5e 50 61 67 65 20 31 20 6f 66 20 61 20  <p>^Page 1 of a 
d200: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
d210: 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6f   the root page o
d220: 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  f a table b-tree
d230: 20 74 68 61 74 0a 68 6f 6c 64 73 20 61 20 73 70   that.holds a sp
d240: 65 63 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65  ecial table name
d250: 64 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  d "sqlite_master
d260: 22 20 28 6f 72 20 22 73 71 6c 69 74 65 5f 74 65  " (or "sqlite_te
d270: 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a 74 68  mp_master" in.th
d280: 65 20 63 61 73 65 20 6f 66 20 61 20 54 45 4d 50  e case of a TEMP
d290: 20 64 61 74 61 62 61 73 65 29 20 77 68 69 63 68   database) which
d2a0: 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6d 70   stores the comp
d2b0: 6c 65 74 65 0a 64 61 74 61 62 61 73 65 20 73 63  lete.database sc
d2c0: 68 65 6d 61 2e 20 20 5e 28 54 68 65 20 73 74 72  hema.  ^(The str
d2d0: 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 73 71  ucture of the sq
d2e0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
d2f0: 65 20 69 73 20 61 73 0a 69 66 20 69 74 20 68 61  e is as.if it ha
d300: 64 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 75  d been created u
d310: 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69  sing the followi
d320: 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c  ng SQL:</p>..<bl
d330: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
d340: 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69  REATE TABLE sqli
d350: 74 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79 70  te_master(.  typ
d360: 65 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74  e text,.  name t
d370: 65 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20  ext,.  tbl_name 
d380: 74 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65  text,.  rootpage
d390: 20 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c 20   integer,.  sql 
d3a0: 74 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  text.);.</pre></
d3b0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
d3c0: 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  p>^The sqlite_ma
d3d0: 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 61  ster table conta
d3e0: 69 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20  ins one row for 
d3f0: 65 61 63 68 20 74 61 62 6c 65 2c 20 69 6e 64 65  each table, inde
d400: 78 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74 72 69  x, view,.and tri
d410: 67 67 65 72 20 28 63 6f 6c 6c 65 63 74 69 76 65  gger (collective
d420: 6c 79 20 22 6f 62 6a 65 63 74 73 22 29 20 69 6e  ly "objects") in
d430: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
d440: 68 65 6d 61 2c 20 65 78 63 65 70 74 20 74 68 65  hema, except the
d450: 72 65 0a 69 73 20 6e 6f 20 65 6e 74 72 79 20 66  re.is no entry f
d460: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  or the sqlite_ma
d470: 73 74 65 72 20 74 61 62 6c 65 20 69 74 73 65 6c  ster table itsel
d480: 66 2e 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  f.  ^The sqlite_
d490: 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 63 6f 6e  master table.con
d4a0: 74 61 69 6e 73 20 65 6e 74 72 69 65 73 20 66 6f  tains entries fo
d4b0: 72 20 5b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65  r [internal sche
d4c0: 6d 61 20 6f 62 6a 65 63 74 73 5d 20 69 6e 20 61  ma objects] in a
d4d0: 64 64 69 74 69 6f 6e 20 74 6f 20 61 70 70 6c 69  ddition to appli
d4e0: 63 61 74 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f 67  cation-.and prog
d4f0: 72 61 6d 6d 65 72 2d 64 65 66 69 6e 65 64 20 6f  rammer-defined o
d500: 62 6a 65 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28 54  bjects....<p>^(T
d510: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
d520: 2e 74 79 70 65 20 63 6f 6c 75 6d 6e 20 77 69 6c  .type column wil
d530: 6c 20 62 65 20 6f 6e 65 0a 6f 66 20 74 68 65 20  l be one.of the 
d540: 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74 20 73  following text s
d550: 74 72 69 6e 67 73 3a 20 20 27 74 61 62 6c 65 27  trings:  'table'
d560: 2c 20 27 69 6e 64 65 78 27 2c 20 27 76 69 65 77  , 'index', 'view
d570: 27 2c 20 6f 72 20 27 74 72 69 67 67 65 72 27 0a  ', or 'trigger'.
d580: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
d590: 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 20   type of object 
d5a0: 64 65 66 69 6e 65 64 2e 20 20 54 68 65 20 27 74  defined.  The 't
d5b0: 61 62 6c 65 27 20 73 74 72 69 6e 67 20 69 73 20  able' string is 
d5c0: 75 73 65 64 0a 66 6f 72 20 62 6f 74 68 20 6f 72  used.for both or
d5d0: 64 69 6e 61 72 79 20 61 6e 64 20 5b 76 69 72 74  dinary and [virt
d5e0: 75 61 6c 20 74 61 62 6c 65 73 5d 2e 29 5e 3c 2f  ual tables].)^</
d5f0: 70 3e 0a 0a 3c 2f 70 3e 5e 28 54 68 65 20 73 71  p>..</p>^(The sq
d600: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65  lite_master.name
d610: 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 68 6f 6c   column will hol
d620: 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
d630: 65 20 6f 62 6a 65 63 74 2e 29 5e 0a 5e 28 5b 55  e object.)^.^([U
d640: 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d  NIQUE] and [PRIM
d650: 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61  ARY KEY] constra
d660: 69 6e 74 73 20 6f 6e 20 74 61 62 6c 65 73 20 63  ints on tables c
d670: 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 63  ause SQLite to c
d680: 72 65 61 74 65 0a 5b 69 6e 74 65 72 6e 61 6c 20  reate.[internal 
d690: 69 6e 64 65 78 65 73 5d 20 77 69 74 68 20 6e 61  indexes] with na
d6a0: 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  mes of the form 
d6b0: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
d6c0: 78 5f 54 41 42 4c 45 5f 4e 22 0a 77 68 65 72 65  x_TABLE_N".where
d6d0: 20 54 41 42 4c 45 20 69 73 20 72 65 70 6c 61 63   TABLE is replac
d6e0: 65 64 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  ed by the name o
d6f0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
d700: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 63 6f   contains the.co
d710: 6e 73 74 72 61 69 6e 74 20 61 6e 64 20 4e 20 69  nstraint and N i
d720: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 67  s an integer beg
d730: 69 6e 6e 69 6e 67 20 77 69 74 68 20 31 20 61 6e  inning with 1 an
d740: 64 20 69 6e 63 72 65 61 73 69 6e 67 20 62 79 20  d increasing by 
d750: 6f 6e 65 0a 77 69 74 68 20 65 61 63 68 20 63 6f  one.with each co
d760: 6e 73 74 72 61 69 6e 74 20 73 65 65 6e 20 69 6e  nstraint seen in
d770: 20 74 68 65 20 74 61 62 6c 65 20 64 65 66 69 6e   the table defin
d780: 69 74 69 6f 6e 2e 29 5e 0a 5e 28 49 6e 20 61 20  ition.)^.^(In a 
d790: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
d7a0: 74 61 62 6c 65 2c 20 74 68 65 72 65 20 69 73 20  table, there is 
d7b0: 6e 6f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  no sqlite_master
d7c0: 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65 0a 50   entry for the.P
d7d0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 75 74 20  RIMARY KEY, but 
d7e0: 74 68 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f  the "sqlite_auto
d7f0: 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e  index_TABLE_N" n
d800: 61 6d 65 20 69 73 20 73 65 74 20 61 73 69 64 65  ame is set aside
d810: 0a 66 6f 72 20 74 68 65 20 50 52 49 4d 41 52 59  .for the PRIMARY
d820: 20 4b 45 59 20 61 73 20 69 66 20 74 68 65 20 73   KEY as if the s
d830: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74  qlite_master ent
d840: 72 79 20 64 69 64 20 65 78 69 73 74 2e 20 20 54  ry did exist.  T
d850: 68 69 73 0a 77 69 6c 6c 20 61 66 66 65 63 74 20  his.will affect 
d860: 74 68 65 20 6e 75 6d 62 65 72 69 6e 67 20 6f 66  the numbering of
d870: 20 73 75 62 73 65 71 75 65 6e 74 20 55 4e 49 51   subsequent UNIQ
d880: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29  UE constraints.)
d890: 5e 0a 5e 54 68 65 20 22 73 71 6c 69 74 65 5f 61  ^.^The "sqlite_a
d8a0: 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e  utoindex_TABLE_N
d8b0: 22 20 6e 61 6d 65 20 69 73 20 6e 65 76 65 72 20  " name is never 
d8c0: 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 6e  allocated for an
d8d0: 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  .[INTEGER PRIMAR
d8e0: 59 20 4b 45 59 5d 2c 20 65 69 74 68 65 72 20 69  Y KEY], either i
d8f0: 6e 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20 6f  n rowid tables o
d900: 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  r WITHOUT ROWID 
d910: 74 61 62 6c 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70  tables..</p>..<p
d920: 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74  >The sqlite_mast
d930: 65 72 2e 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75  er.tbl_name colu
d940: 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  mn holds the nam
d950: 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20  e of a table or 
d960: 76 69 65 77 0a 74 68 61 74 20 74 68 65 20 6f 62  view.that the ob
d970: 6a 65 63 74 20 69 73 20 61 73 73 6f 63 69 61 74  ject is associat
d980: 65 64 20 77 69 74 68 2e 20 20 5e 46 6f 72 20 61  ed with.  ^For a
d990: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 2c 20   table or view, 
d9a0: 74 68 65 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c  the.tbl_name col
d9b0: 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66  umn is a copy of
d9c0: 20 74 68 65 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e   the name column
d9d0: 2e 20 20 5e 46 6f 72 20 61 6e 20 69 6e 64 65 78  .  ^For an index
d9e0: 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 69  , the tbl_name.i
d9f0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
da00: 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
da10: 69 6e 64 65 78 65 64 2e 20 20 5e 46 6f 72 20 61  indexed.  ^For a
da20: 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 74 62   trigger, the tb
da30: 6c 5f 6e 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74  l_name.column st
da40: 6f 72 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ores the name of
da50: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
da60: 65 77 20 74 68 61 74 20 63 61 75 73 65 73 20 74  ew that causes t
da70: 68 65 20 74 72 69 67 67 65 72 20 0a 74 6f 20 66  he trigger .to f
da80: 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  ire.</p>..<p>^(T
da90: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
daa0: 2e 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e  .rootpage column
dab0: 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67 65   stores the page
dac0: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 72   number of the r
dad0: 6f 6f 74 0a 62 2d 74 72 65 65 20 70 61 67 65 20  oot.b-tree page 
dae0: 66 6f 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  for tables and i
daf0: 6e 64 65 78 65 73 2e 29 5e 20 20 5e 46 6f 72 20  ndexes.)^  ^For 
db00: 72 6f 77 73 20 74 68 61 74 20 64 65 66 69 6e 65  rows that define
db10: 20 76 69 65 77 73 2c 20 74 72 69 67 67 65 72 73   views, triggers
db20: 2c 0a 61 6e 64 20 76 69 72 74 75 61 6c 20 74 61  ,.and virtual ta
db30: 62 6c 65 73 2c 20 74 68 65 20 72 6f 6f 74 70 61  bles, the rootpa
db40: 67 65 20 63 6f 6c 75 6d 6e 20 69 73 20 30 20 6f  ge column is 0 o
db50: 72 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e  r NULL.</p>..<p>
db60: 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  ^(The sqlite_mas
db70: 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 73  ter.sql column s
db80: 74 6f 72 65 73 20 53 51 4c 20 74 65 78 74 20 74  tores SQL text t
db90: 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
dba0: 65 0a 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20  e.object.  This 
dbb0: 53 51 4c 20 74 65 78 74 20 69 73 20 61 20 5b 43  SQL text is a [C
dbc0: 52 45 41 54 45 20 54 41 42 4c 45 5d 2c 20 5b 43  REATE TABLE], [C
dbd0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
dbe0: 42 4c 45 5d 2c 0a 5b 43 52 45 41 54 45 20 49 4e  BLE],.[CREATE IN
dbf0: 44 45 58 5d 2c 0a 5b 43 52 45 41 54 45 20 56 49  DEX],.[CREATE VI
dc00: 45 57 5d 2c 20 6f 72 20 5b 43 52 45 41 54 45 20  EW], or [CREATE 
dc10: 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
dc20: 6e 74 20 74 68 61 74 20 69 66 20 65 76 61 6c 75  nt that if evalu
dc30: 61 74 65 64 20 61 67 61 69 6e 73 74 0a 74 68 65  ated against.the
dc40: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
dc50: 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6d 61  hen it is the ma
dc60: 69 6e 20 64 61 74 61 62 61 73 65 20 6f 66 20 61  in database of a
dc70: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
dc80: 63 74 69 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65 63  ction].would rec
dc90: 72 65 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74  reate the object
dca0: 2e 29 5e 20 20 54 68 65 20 74 65 78 74 20 69 73  .)^  The text is
dcb0: 20 75 73 75 61 6c 6c 79 20 61 20 63 6f 70 79 20   usually a copy 
dcc0: 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  of the original.
dcd0: 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 74  statement used t
dce0: 6f 20 63 72 65 61 74 65 20 74 68 65 20 6f 62 6a  o create the obj
dcf0: 65 63 74 20 62 75 74 20 77 69 74 68 20 6e 6f 72  ect but with nor
dd00: 6d 61 6c 69 7a 61 74 69 6f 6e 73 20 61 70 70 6c  malizations appl
dd10: 69 65 64 20 73 6f 0a 74 68 61 74 20 74 68 65 20  ied so.that the 
dd20: 74 65 78 74 20 63 6f 6e 66 6f 72 6d 73 20 74 6f  text conforms to
dd30: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
dd40: 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  ules:..<ul>.<li>
dd50: 5e 54 68 65 20 43 52 45 41 54 45 2c 20 54 41 42  ^The CREATE, TAB
dd60: 4c 45 2c 20 56 49 45 57 2c 20 54 52 49 47 47 45  LE, VIEW, TRIGGE
dd70: 52 2c 20 61 6e 64 20 49 4e 44 45 58 20 6b 65 79  R, and INDEX key
dd80: 77 6f 72 64 73 20 61 74 20 74 68 65 20 62 65 67  words at the beg
dd90: 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20 73 74  inning.of the st
dda0: 61 74 65 6d 65 6e 74 20 61 72 65 20 63 6f 6e 76  atement are conv
ddb0: 65 72 74 65 64 20 74 6f 20 61 6c 6c 20 75 70 70  erted to all upp
ddc0: 65 72 20 63 61 73 65 20 6c 65 74 74 65 72 73 2e  er case letters.
ddd0: 0a 3c 6c 69 3e 5e 54 68 65 20 54 45 4d 50 20 6f  .<li>^The TEMP o
dde0: 72 20 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77  r TEMPORARY keyw
ddf0: 6f 72 64 20 69 73 20 72 65 6d 6f 76 65 64 20 69  ord is removed i
de00: 66 20 69 74 20 6f 63 63 75 72 73 20 61 66 74 65  f it occurs afte
de10: 72 20 74 68 65 20 0a 69 6e 69 74 69 61 6c 20 43  r the .initial C
de20: 52 45 41 54 45 20 6b 65 79 77 6f 72 64 2e 0a 3c  REATE keyword..<
de30: 6c 69 3e 5e 41 6e 79 20 64 61 74 61 62 61 73 65  li>^Any database
de40: 20 6e 61 6d 65 20 71 75 61 6c 69 66 69 65 72 20   name qualifier 
de50: 74 68 61 74 20 6f 63 63 75 72 73 20 70 72 69 6f  that occurs prio
de60: 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
de70: 20 74 68 65 0a 6f 62 6a 65 63 74 20 62 65 69 6e   the.object bein
de80: 67 20 63 72 65 61 74 65 64 20 69 73 20 72 65 6d  g created is rem
de90: 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 4c 65 61 64 69  oved..<li>^Leadi
dea0: 6e 67 20 73 70 61 63 65 73 20 61 72 65 20 72 65  ng spaces are re
deb0: 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20  moved..<li>^All 
dec0: 73 70 61 63 65 73 20 66 6f 6c 6c 6f 77 69 6e 67  spaces following
ded0: 20 74 68 65 20 66 69 72 73 74 20 74 77 6f 20 6b   the first two k
dee0: 65 79 77 6f 72 64 73 20 61 72 65 20 63 6f 6e 76  eywords are conv
def0: 65 72 74 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  erted into a sin
df00: 67 6c 65 0a 73 70 61 63 65 2e 0a 3c 2f 75 6c 3e  gle.space..</ul>
df10: 0a 0a 3c 70 3e 5e 28 54 68 65 20 74 65 78 74 20  ..<p>^(The text 
df20: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  in the sqlite_ma
df30: 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20  ster.sql column 
df40: 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  is a copy of the
df50: 20 6f 72 69 67 69 6e 61 6c 0a 43 52 45 41 54 45   original.CREATE
df60: 20 73 74 61 74 65 6d 65 6e 74 20 74 65 78 74 20   statement text 
df70: 74 68 61 74 20 63 72 65 61 74 65 64 20 74 68 65  that created the
df80: 20 6f 62 6a 65 63 74 2c 20 65 78 63 65 70 74 20   object, except 
df90: 6e 6f 72 6d 61 6c 69 7a 65 64 20 61 73 0a 64 65  normalized as.de
dfa0: 73 63 72 69 62 65 64 20 61 62 6f 76 65 20 61 6e  scribed above an
dfb0: 64 20 61 73 20 6d 6f 64 69 66 69 65 64 20 62 79  d as modified by
dfc0: 20 73 75 62 73 65 71 75 65 6e 74 20 5b 41 4c 54   subsequent [ALT
dfd0: 45 52 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  ER TABLE] statem
dfe0: 65 6e 74 73 2e 29 5e 0a 5e 28 54 68 65 20 73 71  ents.)^.^(The sq
dff0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20  lite_master.sql 
e000: 69 73 20 4e 55 4c 4c 20 66 6f 72 20 74 68 65 20  is NULL for the 
e010: 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 65  [internal indexe
e020: 73 5d 20 74 68 61 74 20 61 72 65 0a 61 75 74 6f  s] that are.auto
e030: 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
e040: 64 20 62 79 20 5b 55 4e 49 51 55 45 5d 20 6f 72  d by [UNIQUE] or
e050: 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63   [PRIMARY KEY] c
e060: 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 3c 2f 70  onstraints.)^</p
e070: 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  >...<tcl>hd_frag
e080: 6d 65 6e 74 20 69 6e 74 73 63 68 65 6d 61 20 7b  ment intschema {
e090: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
e0a0: 6f 62 6a 65 63 74 73 7d 20 5c 0a 7b 69 6e 74 65  objects} \.{inte
e0b0: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
e0c0: 63 74 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69 6e  ct} {internal in
e0d0: 64 65 78 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69  dex} {internal i
e0e0: 6e 64 65 78 65 73 7d 20 5c 0a 7b 69 6e 74 65 72  ndexes} \.{inter
e0f0: 6e 61 6c 20 74 61 62 6c 65 7d 20 7b 69 6e 74 65  nal table} {inte
e100: 72 6e 61 6c 20 74 61 62 6c 65 73 7d 3c 2f 74 63  rnal tables}</tc
e110: 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 31 20 49 6e 74  l>.<h4>2.6.1 Int
e120: 65 72 6e 61 6c 20 53 63 68 65 6d 61 20 4f 62 6a  ernal Schema Obj
e130: 65 63 74 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 49  ects</h4>..<p>^I
e140: 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68  n addition to th
e150: 65 20 74 61 62 6c 65 73 2c 20 69 6e 64 65 78 65  e tables, indexe
e160: 73 2c 20 76 69 65 77 73 2c 20 61 6e 64 20 74 72  s, views, and tr
e170: 69 67 67 65 72 73 20 63 72 65 61 74 65 64 20 62  iggers created b
e180: 79 0a 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  y.the applicatio
e190: 6e 20 61 6e 64 2f 6f 72 20 74 68 65 20 64 65 76  n and/or the dev
e1a0: 65 6c 6f 70 65 72 20 75 73 69 6e 67 20 43 52 45  eloper using CRE
e1b0: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 53  ATE statements S
e1c0: 51 4c 2c 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d  QL, the.sqlite_m
e1d0: 61 73 74 65 72 20 74 61 62 6c 65 20 6d 61 79 20  aster table may 
e1e0: 63 6f 6e 74 61 69 6e 20 7a 65 72 6f 20 6f 72 20  contain zero or 
e1f0: 6d 6f 72 65 20 65 6e 74 72 69 65 73 20 66 6f 72  more entries for
e200: 20 0a 3c 69 3e 69 6e 74 65 72 6e 61 6c 20 73 63   .<i>internal sc
e210: 68 65 6d 61 20 6f 62 6a 65 63 74 73 3c 2f 69 3e  hema objects</i>
e220: 20 74 68 61 74 20 61 72 65 20 63 72 65 61 74 65   that are create
e230: 64 20 62 79 20 53 51 4c 69 74 65 20 66 6f 72 20  d by SQLite for 
e240: 69 74 73 20 0a 6f 77 6e 20 69 6e 74 65 72 6e 61  its .own interna
e250: 6c 20 75 73 65 2e 20 20 5e 54 68 65 20 6e 61 6d  l use.  ^The nam
e260: 65 73 20 6f 66 20 69 6e 74 65 72 6e 61 6c 20 73  es of internal s
e270: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 0a 61 6c  chema objects.al
e280: 77 61 79 73 20 62 65 67 69 6e 20 77 69 74 68 20  ways begin with 
e290: 22 73 71 6c 69 74 65 5f 22 20 61 6e 64 20 61 6e  "sqlite_" and an
e2a0: 79 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  y table, index, 
e2b0: 76 69 65 77 2c 20 6f 72 20 74 72 69 67 67 65 72  view, or trigger
e2c0: 0a 77 68 6f 73 65 20 6e 61 6d 65 20 62 65 67 69  .whose name begi
e2d0: 6e 73 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f  ns with "sqlite_
e2e0: 22 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c  " is an internal
e2f0: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 2e 0a   schema object..
e300: 5e 53 51 4c 69 74 65 20 70 72 6f 68 69 62 69 74  ^SQLite prohibit
e310: 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66  s applications f
e320: 72 6f 6d 20 63 72 65 61 74 69 6e 67 20 6f 62 6a  rom creating obj
e330: 65 63 74 73 20 77 68 6f 73 65 20 6e 61 6d 65 73  ects whose names
e340: 20 62 65 67 69 6e 0a 77 69 74 68 20 22 73 71 6c   begin.with "sql
e350: 69 74 65 5f 22 2e 20 20 0a 0a 3c 70 3e 49 6e 74  ite_".  ..<p>Int
e360: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
e370: 65 63 74 73 20 75 73 65 64 20 62 79 20 53 51 4c  ects used by SQL
e380: 69 74 65 20 6d 61 79 20 69 6e 63 6c 75 64 65 20  ite may include 
e390: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a  the following:..
e3a0: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 6e 64 69  <ul>.<li><p>Indi
e3b0: 63 65 73 20 77 69 74 68 20 6e 61 6d 65 73 20 6f  ces with names o
e3c0: 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c 69  f the form "sqli
e3d0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42  te_autoindex_TAB
e3e0: 4c 45 5f 4e 22 20 74 68 61 74 0a 20 20 20 20 20  LE_N" that.     
e3f0: 20 20 61 72 65 20 75 73 65 64 20 74 6f 20 69 6d    are used to im
e400: 70 6c 65 6d 65 6e 74 20 5b 55 4e 49 51 55 45 5d  plement [UNIQUE]
e410: 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b 45   and [PRIMARY KE
e420: 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f  Y] constraints o
e430: 6e 0a 20 20 20 20 20 20 20 6f 72 64 69 6e 61 72  n.       ordinar
e440: 79 20 74 61 62 6c 65 73 2e 0a 0a 3c 6c 69 3e 3c  y tables...<li><
e450: 70 3e 41 20 74 61 62 6c 65 20 77 69 74 68 20 74  p>A table with t
e460: 68 65 20 6e 61 6d 65 20 22 73 71 6c 69 74 65 5f  he name "sqlite_
e470: 73 65 71 75 65 6e 63 65 22 20 74 68 61 74 20 69  sequence" that i
e480: 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74  s used to keep t
e490: 72 61 63 6b 0a 20 20 20 20 20 20 20 6f 66 20 74  rack.       of t
e4a0: 68 65 20 6d 61 78 69 6d 75 6d 20 68 69 73 74 6f  he maximum histo
e4b0: 72 69 63 61 6c 20 5b 49 4e 54 45 47 45 52 20 50  rical [INTEGER P
e4c0: 52 49 4d 41 52 59 20 4b 45 59 5d 20 66 6f 72 20  RIMARY KEY] for 
e4d0: 61 20 74 61 62 6c 65 0a 20 20 20 20 20 20 20 75  a table.       u
e4e0: 73 69 6e 67 20 5b 41 55 54 4f 49 4e 43 52 45 4d  sing [AUTOINCREM
e4f0: 45 4e 54 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 61  ENT]...<li><p>Ta
e500: 62 6c 65 73 20 77 69 74 68 20 6e 61 6d 65 73 20  bles with names 
e510: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c  of the form "sql
e520: 69 74 65 5f 73 74 61 74 4e 22 20 77 68 65 72 65  ite_statN" where
e530: 20 4e 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   N is an integer
e540: 2e 0a 20 20 20 20 20 20 20 53 75 63 68 20 74 61  ..       Such ta
e550: 62 6c 65 73 20 73 74 6f 72 65 20 64 61 74 61 62  bles store datab
e560: 61 73 65 20 73 74 61 74 69 73 74 69 63 73 20 67  ase statistics g
e570: 61 74 68 65 72 65 64 20 62 79 20 74 68 65 20 5b  athered by the [
e580: 41 4e 41 4c 59 5a 45 5d 0a 20 20 20 20 20 20 20  ANALYZE].       
e590: 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 75 73 65 64  command and used
e5a0: 20 62 79 20 74 68 65 20 71 75 65 72 79 20 70 6c   by the query pl
e5b0: 61 6e 6e 65 72 20 74 6f 20 68 65 6c 70 20 64 65  anner to help de
e5c0: 74 65 72 6d 69 6e 65 20 74 68 65 20 62 65 73 74  termine the best
e5d0: 0a 20 20 20 20 20 20 20 61 6c 67 6f 72 69 74 68  .       algorith
e5e0: 6d 20 74 6f 20 75 73 65 20 66 6f 72 20 65 61 63  m to use for eac
e5f0: 68 20 71 75 65 72 79 2e 0a 3c 2f 75 6c 3e 0a 0a  h query..</ul>..
e600: 3c 70 3e 4e 65 77 20 69 6e 74 65 72 6e 61 6c 20  <p>New internal 
e610: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 6e  schema objects n
e620: 61 6d 65 73 2c 20 61 6c 77 61 79 73 20 62 65 67  ames, always beg
e630: 69 6e 6e 69 6e 67 20 77 69 74 68 20 22 73 71 6c  inning with "sql
e640: 69 74 65 5f 22 2c 0a 6d 61 79 20 62 65 20 61 64  ite_",.may be ad
e650: 64 65 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74  ded to the SQLit
e660: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69 6e  e file format in
e670: 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 73   future releases
e680: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
e690: 65 6e 74 20 73 65 71 74 61 62 20 7b 73 71 6c 69  ent seqtab {sqli
e6a0: 74 65 5f 73 65 71 75 65 6e 63 65 7d 3c 2f 74 63  te_sequence}</tc
e6b0: 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 32 20 54 68 65  l>.<h4>2.6.2 The
e6c0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
e6d0: 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e   table</h4>..<p>
e6e0: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  ^The sqlite_sequ
e6f0: 65 6e 63 65 20 74 61 62 6c 65 20 69 73 20 61 6e  ence table is an
e700: 20 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20   internal table 
e710: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
e720: 6c 65 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52  lement.[AUTOINCR
e730: 45 4d 45 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71  EMENT].  ^The sq
e740: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
e750: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 61  ble is created a
e760: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65  utomatically.whe
e770: 6e 65 76 65 72 20 61 6e 79 20 6f 72 64 69 6e 61  never any ordina
e780: 72 79 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e  ry table with an
e790: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69   AUTOINCREMENT i
e7a0: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b  nteger primary.k
e7b0: 65 79 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  ey is created.  
e7c0: 5e 4f 6e 63 65 20 63 72 65 61 74 65 64 2c 20 74  ^Once created, t
e7d0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
e7e0: 63 65 20 74 61 62 6c 65 20 65 78 69 73 74 73 20  ce table exists 
e7f0: 69 6e 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61  in the.sqlite_ma
e800: 73 74 65 72 20 74 61 62 6c 65 20 66 6f 72 65 76  ster table forev
e810: 65 72 3b 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  er; it cannot be
e820: 20 64 72 6f 70 70 65 64 2e 0a 5e 28 54 68 65 20   dropped..^(The 
e830: 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 73  schema for the s
e840: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
e850: 61 62 6c 65 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b  able is:..<block
e860: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
e870: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
e880: 73 65 71 75 65 6e 63 65 28 6e 61 6d 65 2c 73 65  sequence(name,se
e890: 71 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  q);.</pre></bloc
e8a0: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54  kquote>)^..<p>^T
e8b0: 68 65 72 65 20 69 73 20 61 20 73 69 6e 67 6c 65  here is a single
e8c0: 20 72 6f 77 20 69 6e 20 74 68 65 20 73 71 6c 69   row in the sqli
e8d0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
e8e0: 65 20 66 6f 72 20 65 61 63 68 20 6f 72 64 69 6e  e for each ordin
e8f0: 61 72 79 0a 74 61 62 6c 65 20 74 68 61 74 20 75  ary.table that u
e900: 73 65 73 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  ses AUTOINCREMEN
e910: 54 2e 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f  T.  ^(The name o
e920: 66 20 74 68 65 20 74 61 62 6c 65 20 28 61 73 20  f the table (as 
e930: 69 74 20 61 70 70 65 61 72 73 20 69 6e 0a 73 71  it appears in.sq
e940: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65  lite_master.name
e950: 29 20 69 73 20 69 6e 20 74 68 65 20 73 71 6c 69  ) is in the sqli
e960: 74 65 5f 73 65 71 75 65 6e 63 65 2e 6d 61 69 6e  te_sequence.main
e970: 20 66 69 65 6c 64 20 61 6e 64 20 74 68 65 20 6c   field and the l
e980: 61 72 67 65 73 74 0a 5b 49 4e 54 45 47 45 52 20  argest.[INTEGER 
e990: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 65 76 65  PRIMARY KEY] eve
e9a0: 72 20 75 73 65 64 20 62 79 20 74 68 61 74 20 74  r used by that t
e9b0: 61 62 6c 65 20 69 73 20 69 6e 20 74 68 65 20 73  able is in the s
e9c0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73  qlite_sequence.s
e9d0: 65 71 0a 66 69 65 6c 64 2e 29 5e 20 20 5e 4e 65  eq.field.)^  ^Ne
e9e0: 77 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  w automatically 
e9f0: 67 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67 65  generated intege
ea00: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 66  r primary keys f
ea10: 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
ea20: 0a 74 61 62 6c 65 73 20 61 72 65 20 67 75 61 72  .tables are guar
ea30: 61 6e 74 65 65 64 20 74 6f 20 62 65 20 6c 61 72  anteed to be lar
ea40: 67 65 72 20 74 68 61 6e 20 74 68 65 20 73 71 6c  ger than the sql
ea50: 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71  ite_sequence.seq
ea60: 20 66 69 65 6c 64 20 66 6f 72 0a 74 68 61 74 20   field for.that 
ea70: 74 61 62 6c 65 2e 0a 5e 28 49 66 20 74 68 65 20  table..^(If the 
ea80: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e  sqlite_sequence.
ea90: 73 65 71 20 66 69 65 6c 64 20 6f 66 20 61 6e 20  seq field of an 
eaa0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
eab0: 62 6c 65 20 69 73 20 61 6c 72 65 61 64 79 20 61  ble is already a
eac0: 74 0a 74 68 65 20 6c 61 72 67 65 73 74 20 69 6e  t.the largest in
ead0: 74 65 67 65 72 20 76 61 6c 75 65 20 28 39 32 32  teger value (922
eae0: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
eaf0: 29 20 74 68 65 6e 20 61 74 74 65 6d 70 74 73 20  ) then attempts 
eb00: 74 6f 20 61 64 64 20 6e 65 77 0a 72 6f 77 73 20  to add new.rows 
eb10: 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 77 69  to that table wi
eb20: 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 61  th an automatica
eb30: 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69 6e  lly generated in
eb40: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 77 69  teger primary wi
eb50: 6c 6c 20 66 61 69 6c 0a 77 69 74 68 20 61 6e 20  ll fail.with an 
eb60: 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 20 65 72  [SQLITE_FULL] er
eb70: 72 6f 72 2e 29 5e 0a 5e 54 68 65 20 73 71 6c 69  ror.)^.^The sqli
eb80: 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 20  te_sequence.seq 
eb90: 66 69 65 6c 64 20 69 73 20 61 75 74 6f 6d 61 74  field is automat
eba0: 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64 20 69  ically updated i
ebb0: 66 20 72 65 71 75 69 72 65 64 20 77 68 65 6e 0a  f required when.
ebc0: 6e 65 77 20 65 6e 74 72 69 65 73 20 61 72 65 20  new entries are 
ebd0: 61 64 64 65 64 20 74 6f 20 61 6e 20 41 55 54 4f  added to an AUTO
ebe0: 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
ebf0: 20 20 0a 5e 54 68 65 20 73 71 6c 69 74 65 5f 73    .^The sqlite_s
ec00: 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72 20  equence row for 
ec10: 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
ec20: 20 74 61 62 6c 65 20 69 73 20 61 75 74 6f 6d 61   table is automa
ec30: 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a  tically deleted.
ec40: 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  when the table i
ec50: 73 20 64 72 6f 70 70 65 64 2e 0a 5e 49 66 20 74  s dropped..^If t
ec60: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ec70: 63 65 20 72 6f 77 20 66 6f 72 20 61 6e 20 41 55  ce row for an AU
ec80: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
ec90: 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
eca0: 20 77 68 65 6e 0a 74 68 65 20 41 55 54 4f 49 4e   when.the AUTOIN
ecb0: 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73  CREMENT table is
ecc0: 20 75 70 64 61 74 65 64 2c 20 74 68 65 6e 20 61   updated, then a
ecd0: 20 6e 65 77 20 73 71 6c 69 74 65 5f 73 65 71 75   new sqlite_sequ
ece0: 65 6e 63 65 20 72 6f 77 20 69 73 20 63 72 65 61  ence row is crea
ecf0: 74 65 64 2e 0a 5e 28 49 66 20 74 68 65 20 73 71  ted..^(If the sq
ed00: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65  lite_sequence.se
ed10: 71 20 76 61 6c 75 65 20 66 6f 72 20 61 6e 20 41  q value for an A
ed20: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
ed30: 6c 65 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 0a  le is manually .
ed40: 73 65 74 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67  set to something
ed50: 20 6f 74 68 65 72 20 74 68 61 6e 20 61 6e 20 69   other than an i
ed60: 6e 74 65 67 65 72 20 61 6e 64 20 74 68 65 72 65  nteger and there
ed70: 20 69 73 20 61 20 73 75 62 73 65 71 75 65 6e 74   is a subsequent
ed80: 20 61 74 74 65 6d 70 74 20 74 6f 0a 69 6e 73 65   attempt to.inse
ed90: 72 74 20 74 68 65 20 6f 72 20 75 70 64 61 74 65  rt the or update
eda0: 20 74 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45   the AUTOINCREME
edb0: 4e 54 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74  NT table, then t
edc0: 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
edd0: 6e 64 65 66 69 6e 65 64 2e 29 5e 0a 0a 3c 70 3e  ndefined.)^..<p>
ede0: 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64  ^Application cod
edf0: 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e is allowed to 
ee00: 6d 6f 64 69 66 79 20 74 68 65 20 73 71 6c 69 74  modify the sqlit
ee10: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
ee20: 2c 20 74 6f 20 61 64 64 0a 6e 65 77 20 72 6f 77  , to add.new row
ee30: 73 2c 20 74 6f 20 64 65 6c 65 74 65 20 72 6f 77  s, to delete row
ee40: 73 2c 20 6f 72 20 74 6f 20 6d 6f 64 69 66 79 20  s, or to modify 
ee50: 65 78 69 73 74 69 6e 67 20 72 6f 77 73 2e 20 20  existing rows.  
ee60: 5e 48 6f 77 65 76 65 72 2c 20 61 70 70 6c 69 63  ^However, applic
ee70: 61 74 69 6f 6e 0a 63 6f 64 65 20 63 61 6e 6e 6f  ation.code canno
ee80: 74 20 63 72 65 61 74 65 20 74 68 65 20 73 71 6c  t create the sql
ee90: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
eea0: 6c 65 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f  le if it does no
eeb0: 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 2e  t already exist.
eec0: 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f  .^Application co
eed0: 64 65 20 63 61 6e 20 64 65 6c 65 74 65 20 61 6c  de can delete al
eee0: 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
eef0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ef00: 63 65 20 74 61 62 6c 65 2c 0a 62 75 74 20 61 70  ce table,.but ap
ef10: 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 63  plication code c
ef20: 61 6e 6e 6f 74 20 64 72 6f 70 20 74 68 65 20 73  annot drop the s
ef30: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
ef40: 61 62 6c 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  able...<tcl>hd_f
ef50: 72 61 67 6d 65 6e 74 20 73 74 61 74 31 74 61 62  ragment stat1tab
ef60: 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 31 7d 20   {sqlite_stat1} 
ef70: 53 51 4c 49 54 45 5f 53 54 41 54 31 20 3c 2f 74  SQLITE_STAT1 </t
ef80: 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 33 20 54 68  cl>.<h4>2.6.3 Th
ef90: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
efa0: 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54  able</h4>..<p>^T
efb0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
efc0: 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 74  is an internal t
efd0: 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
efe0: 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f  the [ANALYZE] co
eff0: 6d 6d 61 6e 64 0a 61 6e 64 20 75 73 65 64 20 74  mmand.and used t
f000: 6f 20 68 6f 6c 64 20 73 75 70 70 6c 65 6d 65 6e  o hold supplemen
f010: 74 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  tal information 
f020: 61 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64  about tables and
f030: 20 69 6e 64 65 78 65 73 20 74 68 61 74 20 74 68   indexes that th
f040: 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e.query planner 
f050: 63 61 6e 20 75 73 65 20 74 6f 20 68 65 6c 70 20  can use to help 
f060: 69 74 20 66 69 6e 64 20 62 65 74 74 65 72 20 77  it find better w
f070: 61 79 73 20 6f 66 20 70 65 72 66 6f 72 6d 69 6e  ays of performin
f080: 67 20 71 75 65 72 69 65 73 2e 0a 5e 41 70 70 6c  g queries..^Appl
f090: 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 75 70 64  ications can upd
f0a0: 61 74 65 2c 20 64 65 6c 65 74 65 20 66 72 6f 6d  ate, delete from
f0b0: 2c 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 6f 72  , insert into or
f0c0: 20 64 72 6f 70 20 74 68 65 20 73 71 6c 69 74 65   drop the sqlite
f0d0: 5f 73 74 61 74 31 0a 74 61 62 6c 65 2c 20 62 75  _stat1.table, bu
f0e0: 74 20 6d 61 79 20 6e 6f 74 20 63 72 65 61 74 65  t may not create
f0f0: 20 6f 72 20 61 6c 74 65 72 20 74 68 65 20 73 71   or alter the sq
f100: 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
f110: 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20 6f  ..^(The schema o
f120: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
f130: 74 31 20 74 61 62 6c 65 20 69 73 20 61 73 20 66  t1 table is as f
f140: 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  ollows:..<blockq
f150: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
f160: 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73  E TABLE sqlite_s
f170: 74 61 74 31 28 74 62 6c 2c 69 64 78 2c 73 74 61  tat1(tbl,idx,sta
f180: 74 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  t);.</pre></bloc
f190: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 20 5e  kquote>)^..<p> ^
f1a0: 28 54 68 65 72 65 20 69 73 20 6e 6f 72 6d 61 6c  (There is normal
f1b0: 6c 79 20 6f 6e 65 20 72 6f 77 20 70 65 72 20 69  ly one row per i
f1c0: 6e 64 65 78 2c 20 77 69 74 68 20 74 68 65 20 69  ndex, with the i
f1d0: 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65 64 20  ndex identified 
f1e0: 62 79 20 74 68 65 0a 6e 61 6d 65 20 69 6e 20 74  by the.name in t
f1f0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
f200: 69 64 78 20 63 6f 6c 75 6d 6e 2e 29 5e 20 20 5e  idx column.)^  ^
f210: 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
f220: 31 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 73 0a  1.tbl column is.
f230: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
f240: 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74  table to which t
f250: 68 65 20 69 6e 64 65 78 20 62 65 6c 6f 6e 67 73  he index belongs
f260: 2e 29 5e 20 20 5e 28 49 6e 20 65 61 63 68 20 73  .)^  ^(In each s
f270: 75 63 68 20 72 6f 77 2c 20 0a 74 68 65 20 73 71  uch row, .the sq
f280: 6c 69 74 65 5f 73 74 61 74 2e 73 74 61 74 20 63  lite_stat.stat c
f290: 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 0a 61 20  olumn will be.a 
f2a0: 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e  string consistin
f2b0: 67 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 69  g of a list of i
f2c0: 6e 74 65 67 65 72 73 20 66 6f 6c 6c 6f 77 65 64  ntegers followed
f2d0: 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   by zero or more
f2e0: 20 0a 61 72 67 75 6d 65 6e 74 73 2e 29 5e 20 20   .arguments.)^  
f2f0: 5e 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67  ^The first integ
f300: 65 72 20 69 6e 20 74 68 69 73 0a 6c 69 73 74 20  er in this.list 
f310: 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  is the approxima
f320: 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  te number of row
f330: 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20  s in the index. 
f340: 20 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a   (The number of.
f350: 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
f360: 78 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  x is the same as
f370: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
f380: 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
f390: 2c 0a 65 78 63 65 70 74 20 66 6f 72 20 5b 70 61  ,.except for [pa
f3a0: 72 74 69 61 6c 20 69 6e 64 65 78 65 73 5d 2e 29  rtial indexes].)
f3b0: 0a 5e 54 68 65 20 73 65 63 6f 6e 64 20 69 6e 74  .^The second int
f3c0: 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70 72  eger is the appr
f3d0: 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f  oximate number o
f3e0: 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
f3f0: 64 65 78 0a 74 68 61 74 20 68 61 76 65 20 74 68  dex.that have th
f400: 65 20 73 61 6d 65 20 76 61 6c 75 65 20 69 6e 20  e same value in 
f410: 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  the first column
f420: 20 6f 66 20 74 68 65 20 69 6e 64 65 78 2e 20 20   of the index.  
f430: 5e 54 68 65 20 74 68 69 72 64 20 0a 69 6e 74 65  ^The third .inte
f440: 67 65 72 20 69 73 20 74 68 65 20 6e 75 6d 62 65  ger is the numbe
f450: 72 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  r number of rows
f460: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68   in the index th
f470: 61 74 20 68 61 76 65 20 0a 74 68 65 20 73 61 6d  at have .the sam
f480: 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
f490: 66 69 72 73 74 20 74 77 6f 20 63 6f 6c 75 6d 6e  first two column
f4a0: 73 2e 20 20 5e 54 68 65 20 4e 2d 74 68 20 69 6e  s.  ^The N-th in
f4b0: 74 65 67 65 72 20 28 66 6f 72 20 4e 3e 31 29 20  teger (for N>1) 
f4c0: 0a 69 73 20 74 68 65 20 65 73 74 69 6d 61 74 65  .is the estimate
f4d0: 64 20 61 76 65 72 61 67 65 20 6e 75 6d 62 65 72  d average number
f4e0: 20 6f 66 20 72 6f 77 73 20 69 6e 20 0a 74 68 65   of rows in .the
f4f0: 20 69 6e 64 65 78 20 77 68 69 63 68 20 68 61 76   index which hav
f500: 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
f510: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 4e   for the first N
f520: 2d 31 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e 46 6f  -1 columns.  ^Fo
f530: 72 0a 61 20 4b 2d 63 6f 6c 75 6d 6e 20 69 6e 64  r.a K-column ind
f540: 65 78 2c 20 74 68 65 72 65 20 77 69 6c 6c 20 62  ex, there will b
f550: 65 20 4b 2b 31 20 69 6e 74 65 67 65 72 73 20 69  e K+1 integers i
f560: 6e 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d  n the stat colum
f570: 6e 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e 64 65  n.  ^If.the inde
f580: 78 20 69 73 20 75 6e 69 71 75 65 2c 20 74 68 65  x is unique, the
f590: 6e 20 74 68 65 20 6c 61 73 74 20 69 6e 74 65 67  n the last integ
f5a0: 65 72 20 77 69 6c 6c 20 62 65 20 31 2e 0a 0a 3c  er will be 1...<
f5b0: 70 3e 5e 54 68 65 20 6c 69 73 74 20 6f 66 20 69  p>^The list of i
f5c0: 6e 74 65 67 65 72 73 20 69 6e 20 74 68 65 20 73  ntegers in the s
f5d0: 74 61 74 20 63 6f 6c 75 6d 6e 20 63 61 6e 20 6f  tat column can o
f5e0: 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 66 6f 6c  ptionally be fol
f5f0: 6c 6f 77 65 64 0a 62 79 20 61 72 67 75 6d 65 6e  lowed.by argumen
f600: 74 73 2c 20 65 61 63 68 20 6f 66 20 77 68 69 63  ts, each of whic
f610: 68 20 69 73 20 61 20 73 65 71 75 65 6e 63 65 20  h is a sequence 
f620: 6f 66 20 6e 6f 6e 2d 73 70 61 63 65 20 63 68 61  of non-space cha
f630: 72 61 63 74 65 72 73 2e 0a 5e 41 6c 6c 20 61 72  racters..^All ar
f640: 67 75 6d 65 6e 74 73 20 61 72 65 20 70 72 65 63  guments are prec
f650: 65 64 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  eded by a single
f660: 20 73 70 61 63 65 2e 0a 5e 55 6e 72 65 63 6f 67   space..^Unrecog
f670: 6e 69 7a 65 64 20 61 72 67 75 6d 65 6e 74 73 20  nized arguments 
f680: 61 72 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e  are silently ign
f690: 6f 72 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68  ored...<p>^If th
f6a0: 65 20 22 75 6e 6f 72 64 65 72 65 64 22 20 61 72  e "unordered" ar
f6b0: 67 75 6d 65 6e 74 20 69 73 20 70 72 65 73 65 6e  gument is presen
f6c0: 74 2c 20 74 68 65 6e 20 74 68 65 20 71 75 65 72  t, then the quer
f6d0: 79 20 70 6c 61 6e 6e 65 72 20 61 73 73 75 6d 65  y planner assume
f6e0: 73 0a 74 68 61 74 20 74 68 65 20 69 6e 64 65 78  s.that the index
f6f0: 20 69 73 20 75 6e 6f 72 64 65 72 65 64 20 61 6e   is unordered an
f700: 64 20 77 69 6c 6c 20 6e 6f 74 20 75 73 65 20 74  d will not use t
f710: 68 65 20 69 6e 64 65 78 20 66 6f 72 20 61 20 72  he index for a r
f720: 61 6e 67 65 20 71 75 65 72 79 0a 6f 72 20 66 6f  ange query.or fo
f730: 72 20 73 6f 72 74 69 6e 67 2e 0a 0a 3c 70 3e 5e  r sorting...<p>^
f740: 54 68 65 20 22 73 7a 3d 4e 4e 4e 22 20 61 72 67  The "sz=NNN" arg
f750: 75 6d 65 6e 74 20 28 77 68 65 72 65 20 4e 4e 4e  ument (where NNN
f760: 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
f770: 71 75 65 6e 63 65 20 6f 66 20 31 20 6f 72 20 6d  quence of 1 or m
f780: 6f 72 65 20 64 69 67 69 74 73 29 0a 6d 65 61 6e  ore digits).mean
f790: 73 20 74 68 61 74 20 74 68 65 20 61 76 65 72 61  s that the avera
f7a0: 67 65 20 72 6f 77 20 73 69 7a 65 20 6f 76 65 72  ge row size over
f7b0: 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 6f 66 20   all records of 
f7c0: 74 68 65 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64  the table or.ind
f7d0: 65 78 20 69 73 20 4e 4e 4e 20 62 79 74 65 73 20  ex is NNN bytes 
f7e0: 70 65 72 20 72 6f 77 2e 20 20 5e 54 68 65 20 53  per row.  ^The S
f7f0: 51 4c 69 74 65 20 71 75 65 72 79 20 70 6c 61 6e  QLite query plan
f800: 6e 65 72 20 6d 69 67 68 74 20 75 73 65 20 74 68  ner might use th
f810: 65 0a 65 73 74 69 6d 61 74 65 64 20 72 6f 77 20  e.estimated row 
f820: 73 69 7a 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  size information
f830: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
f840: 20 22 73 7a 3d 4e 4e 4e 22 20 74 6f 6b 65 6e 0a   "sz=NNN" token.
f850: 74 6f 20 68 65 6c 70 20 69 74 20 63 68 6f 6f 73  to help it choos
f860: 65 20 73 6d 61 6c 6c 65 72 20 74 61 62 6c 65 73  e smaller tables
f870: 20 61 6e 64 20 69 6e 64 65 78 65 73 20 74 68 61   and indexes tha
f880: 74 20 72 65 71 75 69 72 65 20 6c 65 73 73 20 64  t require less d
f890: 69 73 6b 20 49 2f 4f 2e 0a 0a 3c 70 3e 5e 28 54  isk I/O...<p>^(T
f8a0: 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74  he presence of t
f8b0: 68 65 20 22 6e 6f 73 6b 69 70 73 63 61 6e 22 20  he "noskipscan" 
f8c0: 74 6f 6b 65 6e 20 6f 6e 20 74 68 65 20 73 71 6c  token on the sql
f8d0: 69 74 65 5f 73 74 61 74 31 2e 73 74 61 74 20 66  ite_stat1.stat f
f8e0: 69 65 6c 64 0a 6f 66 20 61 6e 20 69 6e 64 65 78  ield.of an index
f8f0: 20 70 72 65 76 65 6e 74 73 20 74 68 61 74 20 69   prevents that i
f900: 6e 64 65 78 20 66 72 6f 6d 20 62 65 69 6e 67 20  ndex from being 
f910: 75 73 65 64 20 77 69 74 68 20 74 68 65 0a 5b 73  used with the.[s
f920: 6b 69 70 2d 73 63 61 6e 20 6f 70 74 69 6d 69 7a  kip-scan optimiz
f930: 61 74 69 6f 6e 5d 2e 29 5e 0a 0a 3c 70 3e 4e 65  ation].)^..<p>Ne
f940: 77 20 74 65 78 74 20 74 6f 6b 65 6e 73 20 6d 61  w text tokens ma
f950: 79 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68  y be added to th
f960: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74 61  e end of the sta
f970: 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 66 75 74 75  t column in futu
f980: 72 65 0a 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20  re.enhancements 
f990: 74 6f 20 53 51 4c 69 74 65 2e 20 20 46 6f 72 20  to SQLite.  For 
f9a0: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c 20 75  compatibility, u
f9b0: 6e 72 65 63 6f 67 6e 69 7a 65 64 20 74 6f 6b 65  nrecognized toke
f9c0: 6e 73 20 61 74 20 74 68 65 20 65 6e 64 0a 6f 66  ns at the end.of
f9d0: 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e   the stat column
f9e0: 20 61 72 65 20 73 69 6c 65 6e 74 6c 79 20 69 67   are silently ig
f9f0: 6e 6f 72 65 64 2e 0a 0a 3c 70 3e 5e 28 49 66 20  nored...<p>^(If 
fa00: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
fa10: 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 69 73 20 4e  .idx column is N
fa20: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 73 71  ULL, then the sq
fa30: 6c 69 74 65 5f 73 74 61 74 31 2e 73 74 61 74 0a  lite_stat1.stat.
fa40: 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
fa50: 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  a single integer
fa60: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 61 70   which is the ap
fa70: 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72  proximate number
fa80: 20 6f 66 0a 72 6f 77 73 20 69 6e 20 74 68 65 20   of.rows in the 
fa90: 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69 65 64  table identified
faa0: 20 62 79 20 73 71 6c 69 74 65 5f 73 74 61 74 31   by sqlite_stat1
fab0: 2e 74 62 6c 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  .tbl.)^..<tcl>hd
fac0: 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74 32 74  _fragment stat2t
fad0: 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 32  ab {sqlite_stat2
fae0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e  }</tcl>.<h4>2.6.
faf0: 34 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  4 The sqlite_sta
fb00: 74 32 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c  t2 table</h4>..<
fb10: 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  p>The sqlite_sta
fb20: 74 32 20 69 73 20 6f 6e 6c 79 20 63 72 65 61 74  t2 is only creat
fb30: 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20 75  ed and is only u
fb40: 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73  sed if SQLite is
fb50: 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 53   compiled.with S
fb60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
fb70: 54 32 20 61 6e 64 20 69 66 20 74 68 65 20 53 51  T2 and if the SQ
fb80: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d  Lite version num
fb90: 62 65 72 20 69 73 20 62 65 74 77 65 65 6e 0a 33  ber is between.3
fba0: 2e 36 2e 31 38 20 61 6e 64 20 33 2e 37 2e 38 2e  .6.18 and 3.7.8.
fbb0: 20 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61    The sqlite_sta
fbc0: 74 32 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74  t2 table is neit
fbd0: 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69  her read nor wri
fbe0: 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73  tten by any.vers
fbf0: 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65  ion of SQLite be
fc00: 66 6f 72 65 20 33 2e 36 2e 31 38 20 6e 6f 72 20  fore 3.6.18 nor 
fc10: 61 66 74 65 72 20 33 2e 37 2e 38 2e 0a 54 68 65  after 3.7.8..The
fc20: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
fc30: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64 64  ble contains add
fc40: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
fc50: 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64 69  ion.about the di
fc60: 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65  stribution of ke
fc70: 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64  ys within an ind
fc80: 65 78 2e 0a 54 68 65 20 73 63 68 65 6d 61 20 6f  ex..The schema o
fc90: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
fca0: 74 32 20 74 61 62 6c 65 20 69 73 20 61 73 20 66  t2 table is as f
fcb0: 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  ollows:..<blockq
fcc0: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
fcd0: 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73  E TABLE sqlite_s
fce0: 74 61 74 32 28 74 62 6c 2c 69 64 78 2c 73 61 6d  tat2(tbl,idx,sam
fcf0: 70 6c 65 6e 6f 2c 73 61 6d 70 6c 65 29 3b 0a 3c  pleno,sample);.<
fd00: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
fd10: 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74  e>..<p>The sqlit
fd20: 65 5f 73 74 61 74 32 2e 69 64 78 20 63 6f 6c 75  e_stat2.idx colu
fd30: 6d 6e 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  mn and the sqlit
fd40: 65 5f 73 74 61 74 32 2e 74 62 6c 20 63 6f 6c 75  e_stat2.tbl colu
fd50: 6d 6e 20 69 6e 20 65 61 63 68 20 0a 72 6f 77 20  mn in each .row 
fd60: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  of the sqlite_st
fd70: 61 74 32 20 74 61 62 6c 65 20 69 64 65 6e 74 69  at2 table identi
fd80: 66 79 20 61 6e 20 69 6e 64 65 78 20 64 65 73 63  fy an index desc
fd90: 72 69 62 65 64 20 62 79 20 74 68 61 74 20 72 6f  ribed by that ro
fda0: 77 2e 0a 54 68 65 72 65 20 61 72 65 20 75 73 75  w..There are usu
fdb0: 61 6c 6c 79 20 31 30 20 72 6f 77 73 20 69 6e 20  ally 10 rows in 
fdc0: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  the sqlite_stat2
fdd0: 0a 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 20  .table for each 
fde0: 69 6e 64 65 78 2e 0a 0a 3c 70 3e 54 68 65 20 73  index...<p>The s
fdf0: 71 6c 69 74 65 5f 73 74 61 74 32 20 65 6e 74 72  qlite_stat2 entr
fe00: 69 65 73 20 66 6f 72 20 61 6e 20 69 6e 64 65 78  ies for an index
fe10: 20 74 68 61 74 20 68 61 76 65 20 73 71 6c 69 74   that have sqlit
fe20: 65 5f 73 74 61 74 32 2e 73 61 6d 70 6c 65 6e 6f  e_stat2.sampleno
fe30: 0a 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 39  .between 0 and 9
fe40: 20 69 6e 63 6c 75 73 69 76 65 20 61 72 65 20 73   inclusive are s
fe50: 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
fe60: 66 74 2d 6d 6f 73 74 20 6b 65 79 20 76 61 6c 75  ft-most key valu
fe70: 65 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20 74  e in the.index t
fe80: 61 6b 65 6e 20 61 74 20 65 76 65 6e 6c 79 20 73  aken at evenly s
fe90: 70 61 63 65 64 20 70 6f 69 6e 74 73 20 61 6c 6f  paced points alo
fea0: 6e 67 20 74 68 65 20 69 6e 64 65 78 2e 0a 4c 65  ng the index..Le
feb0: 74 20 43 20 62 65 20 74 68 65 20 6e 75 6d 62 65  t C be the numbe
fec0: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
fed0: 20 69 6e 64 65 78 2e 0a 54 68 65 6e 20 74 68 65   index..Then the
fee0: 20 73 61 6d 70 6c 65 64 20 72 6f 77 73 20 61 72   sampled rows ar
fef0: 65 20 67 69 76 65 6e 20 62 79 0a 0a 3c 62 6c 6f  e given by..<blo
ff00: 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 20 72 6f  ckquote>.     ro
ff10: 77 6e 75 6d 62 65 72 20 3d 20 28 69 2a 43 2a 32  wnumber = (i*C*2
ff20: 20 2b 20 43 29 2f 32 30 0a 3c 2f 62 6c 6f 63 6b   + C)/20.</block
ff30: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 76  quote>..<p>The v
ff40: 61 72 69 61 62 6c 65 20 69 20 69 6e 20 74 68 65  ariable i in the
ff50: 20 70 72 65 76 69 6f 75 73 20 65 78 70 72 65 73   previous expres
ff60: 73 69 6f 6e 20 76 61 72 69 65 73 20 62 65 74 77  sion varies betw
ff70: 65 65 6e 20 30 20 61 6e 64 20 39 2e 0a 43 6f 6e  een 0 and 9..Con
ff80: 63 65 70 74 75 61 6c 6c 79 2c 20 74 68 65 20 69  ceptually, the i
ff90: 6e 64 65 78 20 73 70 61 63 65 20 69 73 20 64 69  ndex space is di
ffa0: 76 69 64 65 64 20 69 6e 74 6f 0a 31 30 20 75 6e  vided into.10 un
ffb0: 69 66 6f 72 6d 20 62 75 63 6b 65 74 73 20 61 6e  iform buckets an
ffc0: 64 20 74 68 65 20 73 61 6d 70 6c 65 73 20 61 72  d the samples ar
ffd0: 65 20 74 68 65 20 6d 69 64 64 6c 65 20 72 6f 77  e the middle row
ffe0: 20 66 72 6f 6d 20 65 61 63 68 20 62 75 63 6b 65   from each bucke
fff0: 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61  t...<p>The forma
10000 74 20 66 6f 72 20 73 71 6c 69 74 65 5f 73 74 61  t for sqlite_sta
10010 74 32 20 69 73 20 72 65 63 6f 72 64 65 64 20 68  t2 is recorded h
10020 65 72 65 20 66 6f 72 20 6c 65 67 61 63 79 20 72  ere for legacy r
10030 65 66 65 72 65 6e 63 65 2e 20 20 0a 52 65 63 65  eference.  .Rece
10040 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  nt versions of S
10050 51 4c 69 74 65 20 6e 6f 20 6c 6f 6e 67 65 72 20  QLite no longer 
10060 73 75 70 70 6f 72 74 20 73 71 6c 69 74 65 5f 73  support sqlite_s
10070 74 61 74 32 20 61 6e 64 20 74 68 65 0a 73 71 6c  tat2 and the.sql
10080 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 2c  ite_stat2 table,
10090 20 69 74 20 69 73 20 65 78 69 73 74 73 2c 20 69   it is exists, i
100a0 73 20 73 69 6d 70 6c 79 20 69 67 6e 6f 72 65 64  s simply ignored
100b0 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
100c0 65 6e 74 20 73 74 61 74 33 74 61 62 20 7b 73 71  ent stat3tab {sq
100d0 6c 69 74 65 5f 73 74 61 74 33 7d 20 53 51 4c 49  lite_stat3} SQLI
100e0 54 45 5f 53 54 41 54 33 3c 2f 74 63 6c 3e 0a 3c  TE_STAT3</tcl>.<
100f0 68 34 3e 32 2e 36 2e 35 20 54 68 65 20 73 71 6c  h4>2.6.5 The sql
10100 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 3c  ite_stat3 table<
10110 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  /h4>..<p>The sql
10120 69 74 65 5f 73 74 61 74 33 20 69 73 20 6f 6e 6c  ite_stat3 is onl
10130 79 20 75 73 65 64 20 69 66 20 53 51 4c 69 74 65  y used if SQLite
10140 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74   is compiled.wit
10150 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  h [SQLITE_ENABLE
10160 5f 53 54 41 54 33 5d 20 6f 72 20 5b 53 51 4c 49  _STAT3] or [SQLI
10170 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d  TE_ENABLE_STAT4]
10180 0a 61 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69  .and if the SQLi
10190 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  te version numbe
101a0 72 20 69 73 20 33 2e 37 2e 39 20 6f 72 20 67 72  r is 3.7.9 or gr
101b0 65 61 74 65 72 2e 0a 54 68 65 20 73 71 6c 69 74  eater..The sqlit
101c0 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
101d0 20 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f   neither read no
101e0 72 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79  r written by any
101f0 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69  .version of SQLi
10200 74 65 20 62 65 66 6f 72 65 20 33 2e 37 2e 39 2e  te before 3.7.9.
10210 0a 49 66 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  .If the [SQLITE_
10220 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 63 6f  ENABLE_STAT4] co
10230 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
10240 6e 20 69 73 20 75 73 65 64 20 61 6e 64 20 74 68  n is used and th
10250 65 0a 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  e.SQLite version
10260 20 6e 75 6d 62 65 72 20 69 73 20 33 2e 38 2e 31   number is 3.8.1
10270 20 6f 72 20 67 72 65 61 74 65 72 2c 20 74 68 65   or greater, the
10280 6e 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 6d  n sqlite_stat3 m
10290 69 67 68 74 0a 62 65 20 72 65 61 64 20 62 75 74  ight.be read but
102a0 20 6e 6f 74 20 77 72 69 74 74 65 6e 2e 0a 54 68   not written..Th
102b0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
102c0 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64  able contains ad
102d0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
102e0 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64  tion.about the d
102f0 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b  istribution of k
10300 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e  eys within an in
10310 64 65 78 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  dex, information
10320 20 74 68 61 74 20 74 68 65 0a 71 75 65 72 79 20   that the.query 
10330 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65 20  planner can use 
10340 74 6f 20 64 65 76 69 73 65 20 62 65 74 74 65 72  to devise better
10350 20 61 6e 64 20 66 61 73 74 65 72 20 71 75 65 72   and faster quer
10360 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e 28  y algorithms..^(
10370 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68  The schema of th
10380 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
10390 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f  able is as follo
103a0 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ws:..<blockquote
103b0 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
103c0 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 33  BLE sqlite_stat3
103d0 28 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c 74  (tbl,idx,nEq,nLt
103e0 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a 3c  ,nDLt,sample);.<
103f0 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
10400 65 3e 29 5e 0a 0a 3c 70 3e 54 68 65 72 65 20 61  e>)^..<p>There a
10410 72 65 20 75 73 75 61 6c 6c 79 20 6d 75 6c 74 69  re usually multi
10420 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ple entries in t
10430 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
10440 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 20 69  table for each i
10450 6e 64 65 78 2e 0a 5e 28 54 68 65 20 73 71 6c 69  ndex..^(The sqli
10460 74 65 5f 73 74 61 74 33 2e 73 61 6d 70 6c 65 20  te_stat3.sample 
10470 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65  column holds the
10480 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 65   value of the le
10490 66 74 2d 6d 6f 73 74 20 66 69 65 6c 64 20 6f 66  ft-most field of
104a0 20 61 6e 0a 69 6e 64 65 78 20 69 64 65 6e 74 69   an.index identi
104b0 66 69 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73  fied by sqlite_s
104c0 74 61 74 33 2e 69 64 78 20 61 6e 64 20 73 71 6c  tat3.idx and sql
104d0 69 74 65 5f 73 74 61 74 33 2e 74 62 6c 2e 29 5e  ite_stat3.tbl.)^
104e0 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .^(The sqlite_st
104f0 61 74 33 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68  at3.nEq column h
10500 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78 69  olds the approxi
10510 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 65  mate.number of e
10520 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e  ntries in the in
10530 64 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d  dex whose left-m
10540 6f 73 74 20 63 6f 6c 75 6d 6e 20 65 78 61 63 74  ost column exact
10550 6c 79 20 6d 61 74 63 68 65 73 0a 74 68 65 20 73  ly matches.the s
10560 61 6d 70 6c 65 2e 29 5e 0a 5e 28 54 68 65 20 73  ample.)^.^(The s
10570 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e 4c 74 20  qlite_stat3.nLt 
10580 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78  holds the approx
10590 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20  imate number of 
105a0 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a 69  entries in the.i
105b0 6e 64 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d  ndex whose left-
105c0 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 69 73 20 6c  most column is l
105d0 65 73 73 20 74 68 61 6e 20 74 68 65 20 73 61 6d  ess than the sam
105e0 70 6c 65 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c  ple.)^.^(The sql
105f0 69 74 65 5f 73 74 61 74 33 2e 6e 44 4c 74 20 63  ite_stat3.nDLt c
10600 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20  olumn holds the 
10610 61 70 70 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62  approximate.numb
10620 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6c  er of distinct l
10630 65 66 74 2d 6d 6f 73 74 20 65 6e 74 72 69 65 73  eft-most entries
10640 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68   in the index th
10650 61 74 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  at are less than
10660 0a 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a  .the sample.)^..
10670 3c 70 3e 5e 54 68 65 72 65 20 63 61 6e 20 62 65  <p>^There can be
10680 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6e 75   an arbitrary nu
10690 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 5f 73  mber of sqlite_s
106a0 74 61 74 33 20 65 6e 74 72 69 65 73 20 70 65 72  tat3 entries per
106b0 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41   index..The [ANA
106c0 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69  LYZE] command wi
106d0 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 67 65 6e  ll typically gen
106e0 65 72 61 74 65 20 73 71 6c 69 74 65 5f 73 74 61  erate sqlite_sta
106f0 74 33 20 74 61 62 6c 65 73 0a 74 68 61 74 20 63  t3 tables.that c
10700 6f 6e 74 61 69 6e 20 62 65 74 77 65 65 6e 20 31  ontain between 1
10710 30 20 61 6e 64 20 34 30 20 73 61 6d 70 6c 65 73  0 and 40 samples
10720 20 74 68 61 74 20 61 72 65 20 64 69 73 74 72 69   that are distri
10730 62 75 74 65 64 20 61 63 72 6f 73 73 0a 74 68 65  buted across.the
10740 20 6b 65 79 20 73 70 61 63 65 20 61 6e 64 20 77   key space and w
10750 69 74 68 20 6c 61 72 67 65 20 6e 45 71 20 76 61  ith large nEq va
10760 6c 75 65 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61  lues...<p>^(In a
10770 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c   well-formed sql
10780 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 2c  ite_stat3 table,
10790 20 74 68 65 20 73 61 6d 70 6c 65 73 20 66 6f 72   the samples for
107a0 20 61 6e 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65   any single.inde
107b0 78 20 6d 75 73 74 20 61 70 70 65 61 72 20 69 6e  x must appear in
107c0 20 74 68 65 20 73 61 6d 65 20 6f 72 64 65 72 20   the same order 
107d0 74 68 61 74 20 74 68 65 79 20 6f 63 63 75 72 20  that they occur 
107e0 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20 20 0a  in the index.  .
107f0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
10800 69 66 20 74 68 65 20 65 6e 74 72 79 20 77 69 74  if the entry wit
10810 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  h left-most colu
10820 6d 6e 20 53 31 20 69 73 20 65 61 72 6c 69 65 72  mn S1 is earlier
10830 20 69 6e 0a 74 68 65 20 69 6e 64 65 78 20 62 2d   in.the index b-
10840 74 72 65 65 20 74 68 61 6e 20 74 68 65 0a 65 6e  tree than the.en
10850 74 72 79 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f  try with left-mo
10860 73 74 20 63 6f 6c 75 6d 6e 20 53 32 2c 20 74 68  st column S2, th
10870 65 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  en in the sqlite
10880 5f 73 74 61 74 33 20 74 61 62 6c 65 2c 20 0a 73  _stat3 table, .s
10890 61 6d 70 6c 65 20 53 31 20 6d 75 73 74 20 68 61  ample S1 must ha
108a0 76 65 20 61 20 73 6d 61 6c 6c 65 72 20 72 6f 77  ve a smaller row
108b0 69 64 20 74 68 61 6e 20 73 61 6d 70 6c 65 20 53  id than sample S
108c0 32 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  2.)^..<tcl>hd_fr
108d0 61 67 6d 65 6e 74 20 73 74 61 74 34 74 61 62 20  agment stat4tab 
108e0 7b 73 71 6c 69 74 65 5f 73 74 61 74 34 7d 20 53  {sqlite_stat4} S
108f0 51 4c 49 54 45 5f 53 54 41 54 34 3c 2f 74 63 6c  QLITE_STAT4</tcl
10900 3e 0a 3c 68 34 3e 32 2e 36 2e 36 20 54 68 65 20  >.<h4>2.6.6 The 
10910 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
10920 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20  le</h4>..<p>The 
10930 73 71 6c 69 74 65 5f 73 74 61 74 34 20 69 73 20  sqlite_stat4 is 
10940 6f 6e 6c 79 20 63 72 65 61 74 65 64 20 61 6e 64  only created and
10950 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66   is only used if
10960 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
10970 6c 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54 45  led.with [SQLITE
10980 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 61  _ENABLE_STAT4] a
10990 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  nd if the SQLite
109a0 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
109b0 69 73 0a 33 2e 38 2e 31 20 6f 72 20 67 72 65 61  is.3.8.1 or grea
109c0 74 65 72 2e 20 20 54 68 65 20 73 71 6c 69 74 65  ter.  The sqlite
109d0 5f 73 74 61 74 34 20 74 61 62 6c 65 20 69 73 20  _stat4 table is 
109e0 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72  neither read nor
109f0 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a   written by any.
10a00 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74  version of SQLit
10a10 65 20 62 65 66 6f 72 65 20 33 2e 38 2e 31 2e 0a  e before 3.8.1..
10a20 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
10a30 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20   table contains 
10a40 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
10a50 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65  mation.about the
10a60 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66   distribution of
10a70 20 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20   keys within an 
10a80 69 6e 64 65 78 20 6f 72 20 74 68 65 20 64 69 73  index or the dis
10a90 74 72 69 62 75 74 69 6f 6e 20 6f 66 0a 6b 65 79  tribution of.key
10aa0 73 20 69 6e 20 74 68 65 20 70 72 69 6d 61 72 79  s in the primary
10ab0 20 6b 65 79 20 6f 66 20 61 20 5b 57 49 54 48 4f   key of a [WITHO
10ac0 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e  UT ROWID] table.
10ad0 0a 54 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e  .The query plann
10ae0 65 72 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73  er can sometimes
10af0 20 75 73 65 20 74 68 65 20 61 64 64 69 74 69 6f   use the additio
10b00 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  nal information 
10b10 69 6e 0a 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in.the sqlite_st
10b20 61 74 34 20 74 61 62 6c 65 20 74 6f 20 64 65 76  at4 table to dev
10b30 69 73 65 20 62 65 74 74 65 72 20 61 6e 64 20 66  ise better and f
10b40 61 73 74 65 72 20 71 75 65 72 79 20 61 6c 67 6f  aster query algo
10b50 72 69 74 68 6d 73 2e 0a 5e 28 54 68 65 20 73 63  rithms..^(The sc
10b60 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69  hema of the sqli
10b70 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 69  te_stat4 table i
10b80 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  s as follows:..<
10b90 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
10ba0 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71  .CREATE TABLE sq
10bb0 6c 69 74 65 5f 73 74 61 74 34 28 74 62 6c 2c 69  lite_stat4(tbl,i
10bc0 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c  dx,nEq,nLt,nDLt,
10bd0 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c  sample);.</pre><
10be0 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a  /blockquote>)^..
10bf0 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74 79 70  <p>There are typ
10c00 69 63 61 6c 6c 79 20 62 65 74 77 65 65 6e 20 31  ically between 1
10c10 30 20 74 6f 20 34 30 20 65 6e 74 72 69 65 73 20  0 to 40 entries 
10c20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
10c30 61 74 34 20 74 61 62 6c 65 20 66 6f 72 0a 65 61  at4 table for.ea
10c40 63 68 20 69 6e 64 65 78 20 66 6f 72 20 77 68 69  ch index for whi
10c50 63 68 20 73 74 61 74 69 73 74 69 63 73 20 61 72  ch statistics ar
10c60 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 68 6f 77  e available, how
10c70 65 76 65 72 20 74 68 65 73 65 20 6c 69 6d 69 74  ever these limit
10c80 73 20 61 72 65 0a 6e 6f 74 20 68 61 72 64 20 62  s are.not hard b
10c90 6f 75 6e 64 73 2e 0a 54 68 65 20 6d 65 61 6e 69  ounds..The meani
10ca0 6e 67 73 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ngs of the colum
10cb0 6e 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ns in the sqlite
10cc0 5f 73 74 61 74 34 20 74 61 62 6c 65 20 61 72 65  _stat4 table are
10cd0 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63   as follows:..<c
10ce0 65 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62 6f  enter>.<table bo
10cf0 72 64 65 72 3d 22 30 22 20 77 69 64 74 68 3d 22  rder="0" width="
10d00 31 30 30 25 22 20 63 65 6c 6c 70 61 64 64 69 6e  100%" cellpaddin
10d10 67 3d 22 31 30 22 3e 0a 3c 74 72 3e 3c 74 64 20  g="10">.<tr><td 
10d20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
10d30 67 6e 3d 22 72 69 67 68 74 22 3e 74 62 6c 3a 3c  gn="right">tbl:<
10d40 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54  /td>.    <td>^(T
10d50 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
10d60 74 62 6c 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  tbl column holds
10d70 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
10d80 6c 65 20 74 68 61 74 20 6f 77 6e 73 0a 20 20 20  le that owns.   
10d90 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
10da0 74 68 65 20 72 6f 77 20 64 65 73 63 72 69 62 65  the row describe
10db0 73 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  s)^..<tr><td val
10dc0 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
10dd0 22 72 69 67 68 74 22 3e 69 64 78 3a 3c 2f 74 64  "right">idx:</td
10de0 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20  >.    <td>^(The 
10df0 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 69 64 78  sqlite_stat4.idx
10e00 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e 61   column holds na
10e10 6d 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  me of the index 
10e20 74 68 61 74 20 74 68 65 0a 20 20 20 20 72 6f 77  that the.    row
10e30 20 64 65 73 63 72 69 62 65 73 2c 20 6f 72 20 69   describes, or i
10e40 6e 20 74 68 65 20 63 61 73 65 20 6f 66 0a 20 20  n the case of.  
10e50 20 20 61 6e 20 73 71 6c 69 74 65 5f 73 74 61 74    an sqlite_stat
10e60 34 20 65 6e 74 72 79 20 66 6f 72 20 61 20 5b 57  4 entry for a [W
10e70 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
10e80 62 6c 65 2c 20 74 68 65 0a 20 20 20 20 6e 61 6d  ble, the.    nam
10e90 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 69  e of the table i
10ea0 74 73 65 6c 66 2e 29 5e 0a 0a 3c 74 72 3e 3c 74  tself.)^..<tr><t
10eb0 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
10ec0 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 61 6d  lign="right">sam
10ed0 70 6c 65 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74  ple:</td>.    <t
10ee0 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  d>^(The sqlite_s
10ef0 74 61 74 34 2e 73 61 6d 70 6c 65 20 63 6f 6c 75  tat4.sample colu
10f00 6d 6e 20 68 6f 6c 64 73 20 61 20 42 4c 4f 42 0a  mn holds a BLOB.
10f10 20 20 20 20 69 6e 20 74 68 65 20 5b 72 65 63 6f      in the [reco
10f20 72 64 20 66 6f 72 6d 61 74 5d 20 74 68 61 74 20  rd format] that 
10f30 65 6e 63 6f 64 65 73 20 74 68 65 20 69 6e 64 65  encodes the inde
10f40 78 65 64 20 63 6f 6c 75 6d 6e 73 20 66 6f 6c 6c  xed columns foll
10f50 6f 77 65 64 20 62 79 0a 20 20 20 20 74 68 65 20  owed by.    the 
10f60 72 6f 77 69 64 20 66 6f 72 20 61 20 72 6f 77 69  rowid for a rowi
10f70 64 20 74 61 62 6c 65 20 6f 72 20 62 79 20 74 68  d table or by th
10f80 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
10f90 20 70 72 69 6d 61 72 79 20 6b 65 79 20 0a 20 20   primary key .  
10fa0 20 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20    for a WITHOUT 
10fb0 52 4f 57 49 44 20 74 61 62 6c 65 2e 29 5e 0a 20  ROWID table.)^. 
10fc0 20 20 20 5e 28 54 68 65 20 73 71 6c 69 74 65 5f     ^(The sqlite_
10fd0 73 74 61 74 34 2e 73 61 6d 70 6c 65 20 42 4c 4f  stat4.sample BLO
10fe0 42 20 66 6f 72 20 74 68 65 20 57 49 54 48 4f 55  B for the WITHOU
10ff0 54 20 52 4f 57 49 44 20 74 61 62 6c 65 20 69 74  T ROWID table it
11000 73 65 6c 66 20 0a 20 20 20 20 63 6f 6e 74 61 69  self .    contai
11010 6e 73 20 6a 75 73 74 20 74 68 65 20 63 6f 6c 75  ns just the colu
11020 6d 6e 73 20 6f 66 20 74 68 65 20 70 72 69 6d 61  mns of the prima
11030 72 79 20 6b 65 79 2e 29 5e 0a 20 20 20 20 4c 65  ry key.)^.    Le
11040 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
11050 63 6f 6c 75 6d 6e 73 20 65 6e 63 6f 64 65 64 20  columns encoded 
11060 62 79 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  by the sqlite_st
11070 61 74 34 2e 73 61 6d 70 6c 65 20 62 6c 6f 62 20  at4.sample blob 
11080 62 65 20 4e 2e 0a 20 20 20 20 5e 46 6f 72 20 69  be N..    ^For i
11090 6e 64 65 78 65 73 20 6f 6e 20 61 6e 20 6f 72 64  ndexes on an ord
110a0 69 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c  inary rowid tabl
110b0 65 2c 20 4e 20 77 69 6c 6c 20 62 65 20 6f 6e 65  e, N will be one
110c0 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6e   more than the n
110d0 75 6d 62 65 72 20 0a 20 20 20 20 6f 66 20 63 6f  umber .    of co
110e0 6c 75 6d 6e 73 20 69 6e 64 65 78 65 64 2e 0a 20  lumns indexed.. 
110f0 20 20 20 5e 46 6f 72 20 69 6e 64 65 78 65 73 20     ^For indexes 
11100 6f 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44  on WITHOUT ROWID
11110 20 74 61 62 6c 65 73 2c 20 4e 20 77 69 6c 6c 20   tables, N will 
11120 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  be the number of
11130 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 69 6e 64   columns.    ind
11140 65 78 65 64 20 70 6c 75 73 20 74 68 65 20 6e 75  exed plus the nu
11150 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11160 69 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  in the primary k
11170 65 79 2e 0a 20 20 20 20 5e 46 6f 72 20 61 20 57  ey..    ^For a W
11180 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
11190 6c 65 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74 68  le, N will be th
111a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
111b0 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20 70  mns in the.    p
111c0 72 69 6d 61 72 79 20 6b 65 79 2e 0a 0a 3c 74 72  rimary key...<tr
111d0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ><td valign="top
111e0 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
111f0 6e 45 71 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74  nEq:</td>.    <t
11200 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  d>^(The sqlite_s
11210 74 61 74 34 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20  tat4.nEq column 
11220 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66 20  holds a list of 
11230 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65 72 65  N integers where
11240 20 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69   .    the K-th i
11250 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61 70  nteger is the ap
11260 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72  proximate number
11270 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74   of entries in t
11280 68 65 20 69 6e 64 65 78 0a 20 20 20 20 77 68 6f  he index.    who
11290 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20 63  se left-most K c
112a0 6f 6c 75 6d 6e 73 20 65 78 61 63 74 6c 79 20 6d  olumns exactly m
112b0 61 74 63 68 20 74 68 65 20 4b 20 6c 65 66 74 2d  atch the K left-
112c0 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 0a 20 20 20  most columns.   
112d0 20 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29   of the sample.)
112e0 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ^..<tr><td valig
112f0 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
11300 69 67 68 74 22 3e 6e 4c 74 3a 3c 2f 74 64 3e 0a  ight">nLt:</td>.
11310 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71      <td>^(The sq
11320 6c 69 74 65 5f 73 74 61 74 34 2e 6e 4c 74 20 63  lite_stat4.nLt c
11330 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69  olumn holds a li
11340 73 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73  st of N integers
11350 20 77 68 65 72 65 0a 20 20 20 20 74 68 65 20 4b   where.    the K
11360 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73 20 74  -th integer is t
11370 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e  he approximate n
11380 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
11390 20 69 6e 20 74 68 65 0a 20 20 20 20 69 6e 64 65   in the.    inde
113a0 78 20 77 68 6f 73 65 20 4b 20 6c 65 66 74 2d 6d  x whose K left-m
113b0 6f 73 74 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ost columns are 
113c0 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65 73  collectively les
113d0 73 20 74 68 61 6e 20 74 68 65 20 0a 20 20 20 20  s than the .    
113e0 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  K left-most colu
113f0 6d 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 70 6c  mns of the sampl
11400 65 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61  e.)^..<tr><td va
11410 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
11420 3d 22 72 69 67 68 74 22 3e 6e 44 4c 74 3a 3c 2f  ="right">nDLt:</
11430 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68  td>.    <td>^(Th
11440 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e  e sqlite_stat4.n
11450 44 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  DLt column holds
11460 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74   a list of N int
11470 65 67 65 72 73 20 77 68 65 72 65 0a 20 20 20 20  egers where.    
11480 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65 72  the K-th integer
11490 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
114a0 61 74 65 0a 20 20 20 20 6e 75 6d 62 65 72 20 6f  ate.    number o
114b0 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  f entries in the
114c0 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20   index that are 
114d0 64 69 73 74 69 6e 63 74 20 69 6e 20 74 68 65 20  distinct in the 
114e0 66 69 72 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20  first K columns 
114f0 61 6e 64 0a 20 20 20 20 77 68 65 72 65 20 74 68  and.    where th
11500 65 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20 63 6f  e left-most K co
11510 6c 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c 65 63  lumns are collec
11520 74 69 76 65 6c 79 20 6c 65 73 73 20 74 68 61 6e  tively less than
11530 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 0a 20   the left-most. 
11540 20 20 20 4b 20 63 6f 6c 75 6d 6e 73 20 6f 66 20     K columns of 
11550 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 3c 2f  the sample.)^.</
11560 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e  table>.</center>
11570 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f  ..<p>The sqlite_
11580 73 74 61 74 34 20 69 73 20 61 20 67 65 6e 65 72  stat4 is a gener
11590 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65  alization of the
115a0 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
115b0 62 6c 65 2e 20 20 54 68 65 0a 73 71 6c 69 74 65  ble.  The.sqlite
115c0 5f 73 74 61 74 33 20 74 61 62 6c 65 20 70 72 6f  _stat3 table pro
115d0 76 69 64 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f  vides informatio
115e0 6e 20 61 62 6f 75 74 20 74 68 65 20 6c 65 66 74  n about the left
115f0 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  -most column of 
11600 61 6e 0a 69 6e 64 65 78 20 77 68 65 72 65 61 73  an.index whereas
11610 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
11620 34 20 74 61 62 6c 65 20 70 72 6f 76 69 64 65 73  4 table provides
11630 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
11640 75 74 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a 6f  ut all columns.o
11650 66 20 74 68 65 20 69 6e 64 65 78 2e 0a 0a 3c 70  f the index...<p
11660 3e 5e 54 68 65 72 65 20 63 61 6e 20 62 65 20 61  >^There can be a
11670 6e 20 61 72 62 69 74 72 61 72 79 20 6e 75 6d 62  n arbitrary numb
11680 65 72 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61  er of sqlite_sta
11690 74 34 20 65 6e 74 72 69 65 73 20 70 65 72 20 69  t4 entries per i
116a0 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59  ndex..The [ANALY
116b0 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  ZE] command will
116c0 20 74 79 70 69 63 61 6c 6c 79 20 67 65 6e 65 72   typically gener
116d0 61 74 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  ate sqlite_stat4
116e0 20 74 61 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e   tables.that con
116f0 74 61 69 6e 20 62 65 74 77 65 65 6e 20 31 30 20  tain between 10 
11700 61 6e 64 20 34 30 20 73 61 6d 70 6c 65 73 20 74  and 40 samples t
11710 68 61 74 20 61 72 65 20 64 69 73 74 72 69 62 75  hat are distribu
11720 74 65 64 20 61 63 72 6f 73 73 0a 74 68 65 20 6b  ted across.the k
11730 65 79 20 73 70 61 63 65 20 61 6e 64 20 77 69 74  ey space and wit
11740 68 20 6c 61 72 67 65 20 6e 45 71 20 76 61 6c 75  h large nEq valu
11750 65 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 77  es...<p>^(In a w
11760 65 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c 69 74  ell-formed sqlit
11770 65 5f 73 74 61 74 34 20 74 61 62 6c 65 2c 20 74  e_stat4 table, t
11780 68 65 20 73 61 6d 70 6c 65 73 20 66 6f 72 20 61  he samples for a
11790 6e 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65 78 20  ny single.index 
117a0 6d 75 73 74 20 61 70 70 65 61 72 20 69 6e 20 74  must appear in t
117b0 68 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74 68  he same order th
117c0 61 74 20 74 68 65 79 20 6f 63 63 75 72 20 69 6e  at they occur in
117d0 20 74 68 65 20 69 6e 64 65 78 2e 20 20 0a 49 6e   the index.  .In
117e0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
117f0 20 65 6e 74 72 79 20 53 31 20 69 73 20 65 61 72   entry S1 is ear
11800 6c 69 65 72 20 69 6e 20 74 68 65 20 69 6e 64 65  lier in the inde
11810 78 20 62 2d 74 72 65 65 20 74 68 61 6e 20 0a 65  x b-tree than .e
11820 6e 74 72 79 20 53 32 2c 20 74 68 65 6e 20 69 6e  ntry S2, then in
11830 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
11840 34 20 74 61 62 6c 65 2c 20 73 61 6d 70 6c 65 20  4 table, sample 
11850 53 31 20 6d 75 73 74 20 68 61 76 65 20 61 0a 73  S1 must have a.s
11860 6d 61 6c 6c 65 72 20 72 6f 77 69 64 20 74 68 61  maller rowid tha
11870 6e 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e 0a 0a  n sample S2.)^..
11880 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
11890 20 72 6f 6c 6c 62 61 63 6b 6a 6f 75 72 6e 61 6c   rollbackjournal
118a0 20 7b 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e   {rollback journ
118b0 61 6c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e  al format}</tcl>
118c0 0a 3c 68 32 3e 33 2e 30 20 54 68 65 20 52 6f 6c  .<h2>3.0 The Rol
118d0 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 3c 2f 68  lback Journal</h
118e0 32 3e 0a 0a 3c 70 3e 54 68 65 20 72 6f 6c 6c 62  2>..<p>The rollb
118f0 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20 61  ack journal is a
11900 20 66 69 6c 65 20 61 73 73 6f 63 69 61 74 65 64   file associated
11910 20 77 69 74 68 20 65 61 63 68 20 53 51 4c 69 74   with each SQLit
11920 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20  e database.file 
11930 74 68 61 74 20 68 6f 6c 64 20 69 6e 66 6f 72 6d  that hold inform
11940 61 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 72 65  ation used to re
11950 73 74 6f 72 65 20 74 68 65 20 64 61 74 61 62 61  store the databa
11960 73 65 20 66 69 6c 65 20 74 6f 20 69 74 73 20 69  se file to its i
11970 6e 69 74 69 61 6c 0a 73 74 61 74 65 20 64 75 72  nitial.state dur
11980 69 6e 67 20 74 68 65 20 63 6f 75 72 73 65 20 6f  ing the course o
11990 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  f a transaction.
119a0 0a 5e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  .^The rollback j
119b0 6f 75 72 6e 61 6c 20 66 69 6c 65 20 69 73 20 61  ournal file is a
119c0 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e  lways located in
119d0 20 74 68 65 20 73 61 6d 65 20 0a 64 69 72 65 63   the same .direc
119e0 74 6f 72 79 20 61 73 20 74 68 65 20 64 61 74 61  tory as the data
119f0 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61  base.file and ha
11a00 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  s the same name 
11a10 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  as the database 
11a20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20 74 68  file but with th
11a30 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 6a  e string."<tt>-j
11a40 6f 75 72 6e 61 6c 3c 2f 74 74 3e 22 20 61 70 70  ournal</tt>" app
11a50 65 6e 64 65 64 2e 20 20 54 68 65 72 65 20 63 61  ended.  There ca
11a60 6e 20 6f 6e 6c 79 20 62 65 20 61 20 73 69 6e 67  n only be a sing
11a70 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  le rollback jour
11a80 6e 61 6c 0a 61 73 73 6f 63 69 61 74 65 64 20 77  nal.associated w
11a90 69 74 68 20 61 20 67 69 76 65 20 64 61 74 61 62  ith a give datab
11aa0 61 73 65 20 61 6e 64 20 68 65 6e 63 65 20 74 68  ase and hence th
11ab0 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ere can only be 
11ac0 6f 6e 65 20 77 72 69 74 65 0a 74 72 61 6e 73 61  one write.transa
11ad0 63 74 69 6f 6e 20 6f 70 65 6e 20 61 67 61 69 6e  ction open again
11ae0 73 74 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61  st a single data
11af0 62 61 73 65 20 61 74 20 6f 6e 65 20 74 69 6d 65  base at one time
11b00 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 74  .</p>..<p>If a t
11b10 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 62  ransaction is ab
11b20 6f 72 74 65 64 20 64 75 65 20 74 6f 20 61 6e 20  orted due to an 
11b30 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 72 61 73  application cras
11b40 68 2c 20 61 6e 20 6f 70 65 72 61 74 69 6e 67 0a  h, an operating.
11b50 73 79 73 74 65 6d 20 63 72 61 73 68 2c 20 6f 72  system crash, or
11b60 20 61 20 68 61 72 64 77 61 72 65 20 70 6f 77 65   a hardware powe
11b70 72 20 66 61 69 6c 75 72 65 20 6f 72 20 63 72 61  r failure or cra
11b80 73 68 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74  sh, then the dat
11b90 61 62 61 73 65 20 6d 61 79 0a 62 65 20 6c 65 66  abase may.be lef
11ba0 74 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73 69 73  t in an inconsis
11bb0 74 65 6e 74 20 73 74 61 74 65 2e 20 20 5e 54 68  tent state.  ^Th
11bc0 65 20 6e 65 78 74 20 74 69 6d 65 20 53 51 4c 69  e next time SQLi
11bd0 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 6f  te attempts to o
11be0 70 65 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65  pen.the database
11bf0 20 66 69 6c 65 2c 20 74 68 65 20 70 72 65 73 65   file, the prese
11c00 6e 63 65 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62  nce of the rollb
11c10 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
11c20 20 77 69 6c 6c 20 62 65 20 0a 64 65 74 65 63 74   will be .detect
11c30 65 64 20 61 6e 64 20 74 68 65 20 6a 6f 75 72 6e  ed and the journ
11c40 61 6c 20 77 69 6c 6c 20 62 65 20 61 75 74 6f 6d  al will be autom
11c50 61 74 69 63 61 6c 6c 79 20 70 6c 61 79 65 64 20  atically played 
11c60 62 61 63 6b 20 74 6f 20 72 65 73 74 6f 72 65 20  back to restore 
11c70 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
11c80 69 74 73 20 73 74 61 74 65 20 61 74 20 74 68 65  its state at the
11c90 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 69 6e   start of the in
11ca0 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61 63  complete transac
11cb0 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  tion.</p>..<p>^A
11cc0 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
11cd0 6c 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69 64  l is only consid
11ce0 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c 69 64  ered to be valid
11cf0 20 69 66 20 69 74 20 65 78 69 73 74 73 20 61 6e   if it exists an
11d00 64 0a 63 6f 6e 74 61 69 6e 73 20 61 20 76 61 6c  d.contains a val
11d10 69 64 20 68 65 61 64 65 72 2e 20 20 48 65 6e 63  id header.  Henc
11d20 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  e a transaction 
11d30 63 61 6e 20 62 65 20 63 6f 6d 6d 69 74 74 65 64  can be committed
11d40 20 69 6e 20 6f 6e 65 0a 6f 66 20 74 68 72 65 65   in one.of three
11d50 20 77 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e   ways:.<ol>.<li>
11d60 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  ^(The rollback j
11d70 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20  ournal file can 
11d80 62 65 20 64 65 6c 65 74 65 64 29 5e 2c 0a 3c 6c  be deleted)^,.<l
11d90 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b  i>^(The rollback
11da0 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61   journal file ca
11db0 6e 20 62 65 20 74 72 75 6e 63 61 74 65 64 20 74  n be truncated t
11dc0 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68 29 5e 2c  o zero length)^,
11dd0 20 6f 72 0a 3c 6c 69 3e 5e 28 54 68 65 20 68 65   or.<li>^(The he
11de0 61 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6c 6c  ader of the roll
11df0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61 6e  back journal can
11e00 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
11e10 77 69 74 68 0a 69 6e 76 61 6c 69 64 20 68 65 61  with.invalid hea
11e20 64 65 72 20 74 65 78 74 20 28 66 6f 72 20 65 78  der text (for ex
11e30 61 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65 72 6f 73  ample, all zeros
11e40 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 5e 54 68 65 73  ).)^.</ol>.^Thes
11e50 65 20 74 68 72 65 65 20 77 61 79 73 20 6f 66 20  e three ways of 
11e60 63 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74 72 61  committing a tra
11e70 6e 73 61 63 74 69 6f 6e 20 63 6f 72 72 65 73 70  nsaction corresp
11e80 6f 6e 64 20 74 6f 20 74 68 65 20 44 45 4c 45 54  ond to the DELET
11e90 45 2c 0a 54 52 55 4e 43 41 54 45 2c 20 61 6e 64  E,.TRUNCATE, and
11ea0 20 50 45 52 53 49 53 54 20 73 65 74 74 69 6e 67   PERSIST setting
11eb0 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  s, respectively,
11ec0 20 6f 66 20 74 68 65 20 5b 6a 6f 75 72 6e 61 6c   of the [journal
11ed0 5f 6d 6f 64 65 20 70 72 61 67 6d 61 5d 2e 0a 3c  _mode pragma]..<
11ee0 2f 70 3e 0a 0a 0a 3c 70 3e 41 20 76 61 6c 69 64  /p>...<p>A valid
11ef0 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
11f00 6c 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  l begins with a 
11f10 68 65 61 64 65 72 20 69 6e 20 74 68 65 20 66 6f  header in the fo
11f20 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74 3a 3c  llowing format:<
11f30 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  /p>..<center>.<i
11f40 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61  >Rollback Journa
11f50 6c 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  l Header Format<
11f60 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
11f70 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
11f80 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
11f90 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
11fa0 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
11fb0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
11fc0 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20  ign=center>0.   
11fd0 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
11fe0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20  align=center>8. 
11ff0 20 20 20 3c 74 64 3e 48 65 61 64 65 72 20 73 74     <td>Header st
12000 72 69 6e 67 3a 20 20 30 78 64 39 2c 20 30 78 64  ring:  0xd9, 0xd
12010 35 2c 20 30 78 30 35 2c 20 30 78 66 39 2c 20 30  5, 0x05, 0xf9, 0
12020 78 32 30 2c 20 30 78 61 31 2c 20 30 78 36 33 2c  x20, 0xa1, 0x63,
12030 20 30 78 64 37 0a 3c 74 72 3e 3c 74 64 20 76 61   0xd7.<tr><td va
12040 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12050 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 20  enter>8.    <td 
12060 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12070 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
12080 64 3e 54 68 65 20 22 50 61 67 65 20 43 6f 75 6e  d>The "Page Coun
12090 74 22 20 2d 20 54 68 65 20 6e 75 6d 62 65 72 20  t" - The number 
120a0 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
120b0 6e 65 78 74 20 73 65 67 6d 65 6e 74 20 6f 66 20  next segment of 
120c0 74 68 65 20 0a 20 20 20 20 20 20 20 20 6a 6f 75  the .        jou
120d0 72 6e 61 6c 2c 20 6f 72 20 2d 31 20 74 6f 0a 20  rnal, or -1 to. 
120e0 20 20 20 20 20 20 20 6d 65 61 6e 20 61 6c 6c 20         mean all 
120f0 63 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65 20 65  content to the e
12100 6e 64 20 6f 66 20 74 68 65 20 66 69 6c 65 0a 3c  nd of the file.<
12110 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12120 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
12130 32 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  2.    <td valign
12140 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12150 72 3e 34 0a 20 20 20 20 3c 74 64 3e 41 20 72 61  r>4.    <td>A ra
12160 6e 64 6f 6d 20 6e 6f 6e 63 65 20 66 6f 72 20 74  ndom nonce for t
12170 68 65 20 63 68 65 63 6b 73 75 6d 0a 3c 74 72 3e  he checksum.<tr>
12180 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12190 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 0a 20  lign=center>16. 
121a0 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
121b0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
121c0 0a 20 20 20 20 3c 74 64 3e 49 6e 69 74 69 61 6c  .    <td>Initial
121d0 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
121e0 61 62 61 73 65 20 69 6e 20 70 61 67 65 73 0a 3c  abase in pages.<
121f0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
12200 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
12210 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  0.    <td valign
12220 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12230 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65  r>4.    <td>Size
12240 20 6f 66 20 61 20 64 69 73 6b 20 73 65 63 74 6f   of a disk secto
12250 72 20 61 73 73 75 6d 65 64 20 62 79 20 74 68 65  r assumed by the
12260 20 70 72 6f 63 65 73 73 20 74 68 61 74 20 77 72   process that wr
12270 6f 74 65 20 74 68 69 73 0a 20 20 20 20 20 20 20  ote this.       
12280 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 74 72 3e 3c 74   journal..<tr><t
12290 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
122a0 67 6e 3d 63 65 6e 74 65 72 3e 32 34 0a 20 20 20  gn=center>24.   
122b0 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
122c0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
122d0 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20 70     <td>Size of p
122e0 61 67 65 73 20 69 6e 20 74 68 69 73 20 6a 6f 75  ages in this jou
122f0 72 6e 61 6c 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  rnal..</table>.<
12300 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 41 20  /center>..<p>^A 
12310 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
12320 20 68 65 61 64 65 72 20 69 73 20 70 61 64 64 65   header is padde
12330 64 20 77 69 74 68 20 7a 65 72 6f 73 20 6f 75 74  d with zeros out
12340 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f 66 20   to the size of 
12350 61 20 0a 73 69 6e 67 6c 65 20 73 65 63 74 6f 72  a .single sector
12360 20 28 61 73 20 64 65 66 69 6e 65 64 20 62 79 20   (as defined by 
12370 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20  the sector size 
12380 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
12390 74 20 32 30 29 2e 0a 54 68 65 20 68 65 61 64 65  t 20)..The heade
123a0 72 20 69 73 20 69 6e 20 61 20 73 65 63 74 6f 72  r is in a sector
123b0 20 62 79 20 69 74 73 65 6c 66 20 73 6f 20 74 68   by itself so th
123c0 61 74 20 69 66 20 61 20 70 6f 77 65 72 20 6c 6f  at if a power lo
123d0 73 73 20 6f 63 63 75 72 73 20 77 68 69 6c 65 0a  ss occurs while.
123e0 77 72 69 74 69 6e 67 20 74 68 65 20 73 65 63 74  writing the sect
123f0 6f 72 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  or, information 
12400 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74 68 65  that follows the
12410 20 68 65 61 64 65 72 20 77 69 6c 6c 20 62 65 0a   header will be.
12420 28 68 6f 70 65 66 75 6c 6c 79 29 20 75 6e 64 61  (hopefully) unda
12430 6d 61 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  maged.</p>..<p>^
12440 41 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  After the header
12450 20 61 6e 64 20 7a 65 72 6f 20 70 61 64 64 69 6e   and zero paddin
12460 67 20 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f  g are zero or mo
12470 72 65 20 70 61 67 65 20 72 65 63 6f 72 64 73 2e  re page records.
12480 20 20 5e 45 61 63 68 0a 70 61 67 65 20 72 65 63    ^Each.page rec
12490 6f 72 64 20 73 74 6f 72 65 73 20 61 20 63 6f 70  ord stores a cop
124a0 79 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  y of the content
124b0 20 6f 66 20 61 20 70 61 67 65 20 66 72 6f 6d 20   of a page from 
124c0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
124d0 65 0a 62 65 66 6f 72 65 20 69 74 20 77 61 73 20  e.before it was 
124e0 63 68 61 6e 67 65 64 2e 20 20 5e 54 68 65 20 73  changed.  ^The s
124f0 61 6d 65 20 70 61 67 65 20 6d 61 79 20 6e 6f 74  ame page may not
12500 20 61 70 70 65 61 72 20 6d 6f 72 65 20 74 68 61   appear more tha
12510 6e 20 6f 6e 63 65 0a 77 69 74 68 69 6e 20 61 20  n once.within a 
12520 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20  single rollback 
12530 6a 6f 75 72 6e 61 6c 2e 0a 54 6f 20 72 6f 6c 6c  journal..To roll
12540 62 61 63 6b 20 61 6e 20 69 6e 63 6f 6d 70 6c 65  back an incomple
12550 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  te transaction, 
12560 61 20 70 72 6f 63 65 73 73 0a 68 61 73 20 6d 65  a process.has me
12570 72 65 6c 79 20 74 6f 20 72 65 61 64 20 74 68 65  rely to read the
12580 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
12590 6c 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  l from beginning
125a0 20 74 6f 20 65 6e 64 20 61 6e 64 0a 77 72 69 74   to end and.writ
125b0 65 20 70 61 67 65 73 20 66 6f 75 6e 64 20 69 6e  e pages found in
125c0 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 62 61 63   the journal bac
125d0 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  k into the datab
125e0 61 73 65 20 66 69 6c 65 20 61 74 20 74 68 65 0a  ase file at the.
125f0 61 70 70 72 6f 70 72 69 61 74 65 20 6c 6f 63 61  appropriate loca
12600 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65  tion.</p>..<p>Le
12610 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  t the database p
12620 61 67 65 20 73 69 7a 65 20 28 74 68 65 20 76 61  age size (the va
12630 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67  lue of the integ
12640 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 34 20  er at offset 24 
12650 0a 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  .in the journal 
12660 68 65 61 64 65 72 29 20 62 65 20 4e 2e 0a 54 68  header) be N..Th
12670 65 6e 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  en the format of
12680 20 61 20 70 61 67 65 20 72 65 63 6f 72 64 20 69   a page record i
12690 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70  s as follows:</p
126a0 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52  >..<center>.<i>R
126b0 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20  ollback Journal 
126c0 50 61 67 65 20 52 65 63 6f 72 64 20 46 6f 72 6d  Page Record Form
126d0 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c  at</i><br>.<tabl
126e0 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f  e width="80%" bo
126f0 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e  rder=1>.<tr><th>
12700 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74  Offset<th>Size<t
12710 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74  h>Description.<t
12720 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12730 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a   align=center>0.
12740 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
12750 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12760 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 70 61  4.    <td>The pa
12770 67 65 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  ge number in the
12780 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 3c   database file.<
12790 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
127a0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
127b0 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
127c0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
127d0 3e 4e 0a 20 20 20 20 3c 74 64 3e 4f 72 69 67 69  >N.    <td>Origi
127e0 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  nal content of t
127f0 68 65 20 70 61 67 65 20 70 72 69 6f 72 20 74 6f  he page prior to
12800 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
12810 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 3c 74  e transaction.<t
12820 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12830 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 2b   align=center>N+
12840 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  4.    <td valign
12850 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12860 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
12870 6b 73 75 6d 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  ksum.</table>.</
12880 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 5e 28 54  center>...<p>^(T
12890 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20 61  he checksum is a
128a0 6e 20 75 6e 73 69 67 6e 65 64 20 33 32 2d 62 69  n unsigned 32-bi
128b0 74 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 75 74  t integer comput
128c0 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  ed as follows:</
128d0 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 49 6e 69  p>..<ol>.<li>Ini
128e0 74 69 61 6c 69 7a 65 20 74 68 65 20 63 68 65 63  tialize the chec
128f0 6b 73 75 6d 20 74 6f 20 74 68 65 20 63 68 65 63  ksum to the chec
12900 6b 73 75 6d 20 6e 6f 6e 63 65 20 76 61 6c 75 65  ksum nonce value
12910 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 6a 6f   found in the.jo
12920 75 72 6e 61 6c 20 68 65 61 64 65 72 20 61 74 20  urnal header at 
12930 6f 66 66 73 65 74 20 31 32 2e 0a 3c 6c 69 3e 49  offset 12..<li>I
12940 6e 69 74 69 61 6c 69 7a 65 20 69 6e 64 65 78 20  nitialize index 
12950 58 20 74 6f 20 62 65 20 4e 2d 32 30 30 20 28 77  X to be N-200 (w
12960 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 73 69  here N is the si
12970 7a 65 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ze of a database
12980 20 70 61 67 65 0a 69 6e 20 62 79 74 65 73 2e 0a   page.in bytes..
12990 3c 6c 69 3e 49 6e 74 65 72 70 72 65 74 20 74 68  <li>Interpret th
129a0 65 20 66 6f 75 72 20 62 79 74 65 73 20 61 74 20  e four bytes at 
129b0 6f 66 66 73 65 74 20 58 20 69 6e 74 6f 20 74 68  offset X into th
129c0 65 20 70 61 67 65 20 61 73 20 61 20 34 2d 62 79  e page as a 4-by
129d0 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 0a 75 6e  te big-endian.un
129e0 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 20  signed integer. 
129f0 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 6f   Add the value o
12a00 66 20 74 68 61 74 20 69 6e 74 65 67 65 72 20 74  f that integer t
12a10 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 0a  o the checksum..
12a20 3c 6c 69 3e 53 75 62 74 72 61 63 65 20 32 30 30  <li>Subtrace 200
12a30 20 66 72 6f 6d 20 58 2e 0a 3c 6c 69 3e 49 66 20   from X..<li>If 
12a40 58 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  X is greater tha
12a50 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a 65  n or equal to ze
12a60 72 6f 2c 20 67 6f 20 62 61 63 6b 20 74 6f 20 73  ro, go back to s
12a70 74 65 70 20 33 2e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a  tep 3..</ol>)^..
12a80 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20  <p>The checksum 
12a90 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 74 6f  value is used to
12aa0 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 69   guard against i
12ab0 6e 63 6f 6d 70 6c 65 74 65 20 77 72 69 74 65 73  ncomplete writes
12ac0 20 6f 66 0a 61 20 6a 6f 75 72 6e 61 6c 20 70 61   of.a journal pa
12ad0 67 65 20 72 65 63 6f 72 64 20 66 6f 6c 6c 6f 77  ge record follow
12ae0 69 6e 67 20 61 20 70 6f 77 65 72 20 66 61 69 6c  ing a power fail
12af0 75 72 65 2e 20 20 41 20 64 69 66 66 65 72 65 6e  ure.  A differen
12b00 74 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 0a 69  t random nonce.i
12b10 73 20 75 73 65 64 20 65 61 63 68 20 74 69 6d 65  s used each time
12b20 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
12b30 73 20 73 74 61 72 74 65 64 20 69 6e 20 6f 72 64  s started in ord
12b40 65 72 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74  er to minimize t
12b50 68 65 20 72 69 73 6b 0a 74 68 61 74 20 75 6e 77  he risk.that unw
12b60 72 69 74 74 65 6e 20 73 65 63 74 6f 72 73 20 6d  ritten sectors m
12b70 69 67 68 74 20 62 79 20 63 68 61 6e 63 65 20 63  ight by chance c
12b80 6f 6e 74 61 69 6e 20 64 61 74 61 20 66 72 6f 6d  ontain data from
12b90 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 0a 74   the same page.t
12ba0 68 61 74 20 77 61 73 20 61 20 70 61 72 74 20 6f  hat was a part o
12bb0 66 20 70 72 69 6f 72 20 6a 6f 75 72 6e 61 6c 73  f prior journals
12bc0 2e 20 20 42 79 20 63 68 61 6e 67 69 6e 67 20 74  .  By changing t
12bd0 68 65 20 6e 6f 6e 63 65 20 66 6f 72 20 65 61 63  he nonce for eac
12be0 68 0a 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73  h.transaction, s
12bf0 74 61 6c 65 20 64 61 74 61 20 6f 6e 20 64 69 73  tale data on dis
12c00 6b 20 77 69 6c 6c 20 73 74 69 6c 6c 20 67 65 6e  k will still gen
12c10 65 72 61 74 65 20 61 6e 20 69 6e 63 6f 72 72 65  erate an incorre
12c20 63 74 20 63 68 65 63 6b 73 75 6d 0a 61 6e 64 20  ct checksum.and 
12c30 62 65 20 64 65 74 65 63 74 65 64 20 77 69 74 68  be detected with
12c40 20 68 69 67 68 20 70 72 6f 62 61 62 69 6c 69 74   high probabilit
12c50 79 2e 20 20 54 68 65 20 63 68 65 63 6b 73 75 6d  y.  The checksum
12c60 20 6f 6e 6c 79 20 75 73 65 73 20 61 20 73 70 61   only uses a spa
12c70 72 73 65 20 73 61 6d 70 6c 65 0a 6f 66 20 33 32  rse sample.of 32
12c80 2d 62 69 74 20 77 6f 72 64 73 20 66 72 6f 6d 20  -bit words from 
12c90 74 68 65 20 64 61 74 61 20 72 65 63 6f 72 64 20  the data record 
12ca0 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  for performance 
12cb0 72 65 61 73 6f 6e 73 20 2d 20 64 65 73 69 67 6e  reasons - design
12cc0 20 73 74 75 64 69 65 73 20 0a 64 75 72 69 6e 67   studies .during
12cd0 20 74 68 65 20 70 6c 61 6e 6e 69 6e 67 20 70 68   the planning ph
12ce0 61 73 65 73 20 6f 66 20 53 51 4c 69 74 65 20 33  ases of SQLite 3
12cf0 2e 30 2e 30 20 73 68 6f 77 65 64 0a 61 20 73 69  .0.0 showed.a si
12d00 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
12d10 6d 61 6e 63 65 20 68 69 74 20 69 6e 20 63 68 65  mance hit in che
12d20 63 6b 73 75 6d 6d 69 6e 67 20 74 68 65 20 65 6e  cksumming the en
12d30 74 69 72 65 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a  tire page.</p>..
12d40 3c 70 3e 4c 65 74 20 74 68 65 20 70 61 67 65 20  <p>Let the page 
12d50 63 6f 75 6e 74 20 76 61 6c 75 65 20 61 74 20 6f  count value at o
12d60 66 66 73 65 74 20 38 20 69 6e 20 74 68 65 20 6a  ffset 8 in the j
12d70 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 62 65  ournal header be
12d80 20 4d 2e 0a 5e 49 66 20 4d 20 69 73 20 67 72 65   M..^If M is gre
12d90 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 74  ater than zero t
12da0 68 65 6e 20 61 66 74 65 72 20 4d 20 70 61 67 65  hen after M page
12db0 20 72 65 63 6f 72 64 73 20 74 68 65 20 6a 6f 75   records the jou
12dc0 72 6e 61 6c 20 66 69 6c 65 0a 6d 61 79 20 62 65  rnal file.may be
12dd0 20 7a 65 72 6f 20 70 61 64 64 65 64 20 6f 75 74   zero padded out
12de0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6d 75 6c   to the next mul
12df0 74 69 70 6c 65 20 6f 66 20 74 68 65 20 73 65 63  tiple of the sec
12e00 74 6f 72 20 73 69 7a 65 20 61 6e 64 20 61 6e 6f  tor size and ano
12e10 74 68 65 72 0a 6a 6f 75 72 6e 61 6c 20 68 65 61  ther.journal hea
12e20 64 65 72 20 6d 61 79 20 62 65 20 69 6e 73 65 72  der may be inser
12e30 74 65 64 2e 20 20 5e 41 6c 6c 20 6a 6f 75 72 6e  ted.  ^All journ
12e40 61 6c 20 68 65 61 64 65 72 73 20 77 69 74 68 69  al headers withi
12e50 6e 20 74 68 65 20 73 61 6d 65 0a 6a 6f 75 72 6e  n the same.journ
12e60 61 6c 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  al must contain 
12e70 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
12e80 65 20 70 61 67 65 20 73 69 7a 65 20 61 6e 64 20  e page size and 
12e90 73 65 63 74 6f 72 20 73 69 7a 65 2e 3c 2f 70 3e  sector size.</p>
12ea0 0a 0a 3c 70 3e 5e 49 66 20 4d 20 69 73 20 2d 31  ..<p>^If M is -1
12eb0 20 69 6e 20 74 68 65 20 69 6e 69 74 69 61 6c 20   in the initial 
12ec0 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 2c 20  journal header, 
12ed0 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
12ee0 6f 66 20 70 61 67 65 20 72 65 63 6f 72 64 73 0a  of page records.
12ef0 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69 73 20 63  that follow is c
12f00 6f 6d 70 75 74 65 64 20 62 79 20 63 6f 6d 70 75  omputed by compu
12f10 74 69 6e 67 20 68 6f 77 20 6d 61 6e 79 20 70 61  ting how many pa
12f20 67 65 20 72 65 63 6f 72 64 73 20 77 69 6c 6c 20  ge records will 
12f30 66 69 74 20 69 6e 0a 74 68 65 20 61 76 61 69 6c  fit in.the avail
12f40 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20 74 68  able space of th
12f50 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74  e remainder of t
12f60 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 2e  he journal file.
12f70 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
12f80 61 67 6d 65 6e 74 20 77 61 6c 66 6f 72 6d 61 74  agment walformat
12f90 20 7b 57 41 4c 20 66 6f 72 6d 61 74 7d 3c 2f 74   {WAL format}</t
12fa0 63 6c 3e 0a 3c 68 32 3e 34 2e 30 20 54 68 65 20  cl>.<h2>4.0 The 
12fb0 57 72 69 74 65 2d 41 68 65 61 64 20 4c 6f 67 3c  Write-Ahead Log<
12fc0 2f 68 32 3e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69  /h2>..<p>Beginni
12fd0 6e 67 20 77 69 74 68 20 5b 76 65 72 73 69 6f 6e  ng with [version
12fe0 20 33 2e 37 2e 30 5d 2c 20 53 51 4c 69 74 65 20   3.7.0], SQLite 
12ff0 73 75 70 70 6f 72 74 73 20 61 20 6e 65 77 20 74  supports a new t
13000 72 61 6e 73 61 63 74 69 6f 6e 0a 63 6f 6e 74 72  ransaction.contr
13010 6f 6c 20 6d 65 63 68 61 6e 69 73 6d 20 63 61 6c  ol mechanism cal
13020 6c 65 64 20 22 5b 57 41 4c 20 7c 20 77 72 69 74  led "[WAL | writ
13030 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20 6f 72  e-ahead log]" or
13040 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68 65 6e 20   "[WAL]"..^When 
13050 61 20 64 61 74 61 62 61 73 65 20 69 73 20 69 6e  a database is in
13060 20 57 41 4c 20 6d 6f 64 65 2c 20 61 6c 6c 20 63   WAL mode, all c
13070 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74 68  onnections to th
13080 61 74 20 64 61 74 61 62 61 73 65 20 6d 75 73 74  at database must
13090 0a 75 73 65 20 74 68 65 20 57 41 4c 2e 20 20 5e  .use the WAL.  ^
130a0 41 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  A particular dat
130b0 61 62 61 73 65 20 77 69 6c 6c 20 75 73 65 20 65  abase will use e
130c0 69 74 68 65 72 20 61 20 72 6f 6c 6c 62 61 63 6b  ither a rollback
130d0 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61 20 57 41   journal.or a WA
130e0 4c 2c 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 20  L, but not both 
130f0 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
13100 2e 0a 5e 54 68 65 20 57 41 4c 20 69 73 20 61 6c  ..^The WAL is al
13110 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e 20  ways located in 
13120 74 68 65 20 73 61 6d 65 20 64 69 72 65 63 74 6f  the same directo
13130 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62 61  ry as the databa
13140 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73 20  se.file and has 
13150 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73  the same name as
13160 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
13170 6c 65 20 62 75 74 20 77 69 74 68 20 74 68 65 20  le but with the 
13180 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 77 61 6c  string."<tt>-wal
13190 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64 2e  </tt>" appended.
131a0 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 31 20 57 41  </p>..<h3>4.1 WA
131b0 4c 20 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 68  L File Format</h
131c0 33 3e 0a 0a 3c 70 3e 41 20 57 41 4c 20 66 69 6c  3>..<p>A WAL fil
131d0 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
131e0 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20  header followed 
131f0 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  by zero or more 
13200 22 66 72 61 6d 65 73 22 2e 0a 45 61 63 68 20 66  "frames"..Each f
13210 72 61 6d 65 20 72 65 63 6f 72 64 73 20 74 68 65  rame records the
13220 20 72 65 76 69 73 65 64 20 63 6f 6e 74 65 6e 74   revised content
13230 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67   of a single pag
13240 65 20 66 72 6f 6d 20 74 68 65 0a 64 61 74 61 62  e from the.datab
13250 61 73 65 20 66 69 6c 65 2e 20 20 41 6c 6c 20 63  ase file.  All c
13260 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
13270 74 61 62 61 73 65 20 61 72 65 20 72 65 63 6f 72  tabase are recor
13280 64 65 64 20 62 79 20 77 72 69 74 69 6e 67 0a 66  ded by writing.f
13290 72 61 6d 65 73 20 69 6e 74 6f 20 74 68 65 20 57  rames into the W
132a0 41 4c 2e 20 20 54 72 61 6e 73 61 63 74 69 6f 6e  AL.  Transaction
132b0 73 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 61 20  s commit when a 
132c0 66 72 61 6d 65 20 69 73 20 77 72 69 74 74 65 6e  frame is written
132d0 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 61   that.contains a
132e0 20 63 6f 6d 6d 69 74 20 6d 61 72 6b 65 72 2e 20   commit marker. 
132f0 20 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20 63   ^A single WAL c
13300 61 6e 20 61 6e 64 20 75 73 75 61 6c 6c 79 20 64  an and usually d
13310 6f 65 73 20 72 65 63 6f 72 64 20 0a 6d 75 6c 74  oes record .mult
13320 69 70 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  iple transaction
13330 73 2e 20 20 50 65 72 69 6f 64 69 63 61 6c 6c 79  s.  Periodically
13340 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  , the content of
13350 20 74 68 65 20 57 41 4c 20 69 73 0a 74 72 61 6e   the WAL is.tran
13360 73 66 65 72 72 65 64 20 62 61 63 6b 20 69 6e 74  sferred back int
13370 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
13380 69 6c 65 20 69 6e 20 61 6e 20 6f 70 65 72 61 74  ile in an operat
13390 69 6f 6e 20 63 61 6c 6c 65 64 20 61 0a 22 63 68  ion called a."ch
133a0 65 63 6b 70 6f 69 6e 74 22 2e 3c 2f 70 3e 0a 0a  eckpoint".</p>..
133b0 3c 70 3e 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c  <p>^A single WAL
133c0 20 66 69 6c 65 20 63 61 6e 20 62 65 20 72 65 75   file can be reu
133d0 73 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d  sed multiple tim
133e0 65 73 2e 20 20 5e 49 6e 20 6f 74 68 65 72 20 77  es.  ^In other w
133f0 6f 72 64 73 2c 20 74 68 65 0a 57 41 4c 20 63 61  ords, the.WAL ca
13400 6e 20 66 69 6c 6c 20 75 70 20 77 69 74 68 20 66  n fill up with f
13410 72 61 6d 65 73 20 61 6e 64 20 74 68 65 6e 20 62  rames and then b
13420 65 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  e checkpointed a
13430 6e 64 20 74 68 65 6e 20 6e 65 77 0a 66 72 61 6d  nd then new.fram
13440 65 73 20 63 61 6e 20 6f 76 65 72 77 72 69 74 65  es can overwrite
13450 20 74 68 65 20 6f 6c 64 20 6f 6e 65 73 2e 20 20   the old ones.  
13460 5e 41 20 57 41 4c 20 61 6c 77 61 79 73 20 67 72  ^A WAL always gr
13470 6f 77 73 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69  ows from beginni
13480 6e 67 0a 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng.toward the en
13490 64 2e 20 20 43 68 65 63 6b 73 75 6d 73 20 61 6e  d.  Checksums an
134a0 64 20 63 6f 75 6e 74 65 72 73 20 61 74 74 61 63  d counters attac
134b0 68 65 64 20 74 6f 20 65 61 63 68 20 66 72 61 6d  hed to each fram
134c0 65 20 61 72 65 0a 75 73 65 64 20 74 6f 20 64 65  e are.used to de
134d0 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20 66 72  termine which fr
134e0 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68 65 20  ames within the 
134f0 57 41 4c 20 61 72 65 20 76 61 6c 69 64 20 61 6e  WAL are valid an
13500 64 20 77 68 69 63 68 0a 61 72 65 20 6c 65 66 74  d which.are left
13510 6f 76 65 72 73 20 66 72 6f 6d 20 70 72 69 6f 72  overs from prior
13520 20 63 68 65 63 6b 70 6f 69 6e 74 73 2e 3c 2f 70   checkpoints.</p
13530 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 57 41 4c 20  >..<p>^(The WAL 
13540 68 65 61 64 65 72 20 69 73 20 33 32 20 62 79 74  header is 32 byt
13550 65 73 20 69 6e 20 73 69 7a 65 20 61 6e 64 20 63  es in size and c
13560 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 66  onsists of the f
13570 6f 6c 6c 6f 77 69 6e 67 20 65 69 67 68 74 0a 62  ollowing eight.b
13580 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74  ig-endian 32-bit
13590 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
135a0 72 20 76 61 6c 75 65 73 3a 3c 2f 70 3e 0a 0a 3c  r values:</p>..<
135b0 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 48  center>.<i>WAL H
135c0 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e  eader Format</i>
135d0 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  <br>.<table widt
135e0 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31  h="80%" border=1
135f0 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74  >.<tr><th>Offset
13600 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63  <th>Size<th>Desc
13610 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20  ription.<tr><td 
13620 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13630 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c  =center>0<td val
13640 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13650 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 4d  nter>4.    <td>M
13660 61 67 69 63 20 6e 75 6d 62 65 72 2e 20 20 30 78  agic number.  0x
13670 33 37 37 66 30 36 38 32 20 6f 72 20 30 78 33 37  377f0682 or 0x37
13680 37 66 30 36 38 33 0a 3c 74 72 3e 3c 74 64 20 76  7f0683.<tr><td v
13690 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
136a0 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69  center>4<td vali
136b0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
136c0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 69  ter>4.    <td>Fi
136d0 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  le format versio
136e0 6e 2e 20 20 43 75 72 72 65 6e 74 6c 79 20 33 30  n.  Currently 30
136f0 30 37 30 30 30 2e 0a 3c 74 72 3e 3c 74 64 20 76  07000..<tr><td v
13700 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13710 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69  center>8<td vali
13720 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13730 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 44 61  ter>4.    <td>Da
13740 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
13750 2e 20 20 45 78 61 6d 70 6c 65 3a 20 31 30 32 34  .  Example: 1024
13760 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13770 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13780 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >12<td valign=to
13790 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
137a0 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 70 6f  .    <td>Checkpo
137b0 69 6e 74 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  int sequence num
137c0 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ber.<tr><td vali
137d0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
137e0 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e  ter>16<td valign
137f0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13800 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74  r>4.    <td>Salt
13810 2d 31 3a 20 72 61 6e 64 6f 6d 20 69 6e 74 65 67  -1: random integ
13820 65 72 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  er incremented w
13830 69 74 68 20 65 61 63 68 20 63 68 65 63 6b 70 6f  ith each checkpo
13840 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  int.<tr><td vali
13850 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13860 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e  ter>20<td valign
13870 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13880 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74  r>4.    <td>Salt
13890 2d 32 3a 20 61 20 64 69 66 66 65 72 65 6e 74 20  -2: a different 
138a0 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 66 6f  random number fo
138b0 72 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e  r each checkpoin
138c0 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  t.<tr><td valign
138d0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
138e0 72 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>24<td valign=t
138f0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13900 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73  4.    <td>Checks
13910 75 6d 2d 31 3a 20 46 69 72 73 74 20 70 61 72 74  um-1: First part
13920 20 6f 66 20 61 20 63 68 65 63 6b 73 75 6d 20 6f   of a checksum o
13930 6e 20 74 68 65 20 66 69 72 73 74 20 32 34 20 62  n the first 24 b
13940 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a 3c  ytes of header.<
13950 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13960 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
13970 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
13980 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
13990 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d     <td>Checksum-
139a0 32 3a 20 53 65 63 6f 6e 64 20 70 61 72 74 20 6f  2: Second part o
139b0 66 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 6f  f the checksum o
139c0 6e 20 74 68 65 20 66 69 72 73 74 20 32 34 20 62  n the first 24 b
139d0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a 3c  ytes of header.<
139e0 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
139f0 3e 29 5e 0a 0a 3c 70 3e 5e 49 6d 6d 65 64 69 61  >)^..<p>^Immedia
13a00 74 65 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  tely following t
13a10 68 65 20 77 61 6c 2d 68 65 61 64 65 72 20 61 72  he wal-header ar
13a20 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66  e zero or more f
13a30 72 61 6d 65 73 2e 20 5e 45 61 63 68 0a 66 72 61  rames. ^Each.fra
13a40 6d 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  me consists of a
13a50 20 32 34 2d 62 79 74 65 20 66 72 61 6d 65 2d 68   24-byte frame-h
13a60 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62  eader followed b
13a70 79 20 61 20 3c 69 3e 70 61 67 65 2d 73 69 7a 65  y a <i>page-size
13a80 3c 2f 69 3e 20 62 79 74 65 73 0a 6f 66 20 70 61  </i> bytes.of pa
13a90 67 65 20 64 61 74 61 2e 20 5e 28 54 68 65 20 66  ge data. ^(The f
13aa0 72 61 6d 65 2d 68 65 61 64 65 72 20 69 73 20 73  rame-header is s
13ab0 69 78 20 62 69 67 2d 65 6e 64 69 61 6e 20 33 32  ix big-endian 32
13ac0 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20 0a 69  -bit unsigned .i
13ad0 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2c 20 61  nteger values, a
13ae0 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e  s follows:..<cen
13af0 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 46 72 61 6d  ter>.<i>WAL Fram
13b00 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
13b10 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
13b20 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
13b30 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
13b40 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
13b50 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
13b60 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13b70 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
13b80 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13b90 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
13ba0 64 3e 50 61 67 65 20 6e 75 6d 62 65 72 0a 3c 74  d>Page number.<t
13bb0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
13bc0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
13bd0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13be0 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
13bf0 20 3c 74 64 3e 46 6f 72 20 63 6f 6d 6d 69 74 20   <td>For commit 
13c00 72 65 63 6f 72 64 73 2c 20 74 68 65 20 73 69 7a  records, the siz
13c10 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
13c20 65 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73 0a  e file in pages.
13c30 20 20 20 20 20 20 20 20 61 66 74 65 72 20 74 68          after th
13c40 65 20 63 6f 6d 6d 69 74 2e 20 20 46 6f 72 20 61  e commit.  For a
13c50 6c 6c 20 6f 74 68 65 72 20 72 65 63 6f 72 64 73  ll other records
13c60 2c 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  , zero..<tr><td 
13c70 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13c80 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c  =center>8<td val
13c90 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13ca0 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53  nter>4.    <td>S
13cb0 61 6c 74 2d 31 20 63 6f 70 69 65 64 20 66 72 6f  alt-1 copied fro
13cc0 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72  m the WAL header
13cd0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13ce0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13cf0 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >12<td valign=to
13d00 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13d10 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 20  .    <td>Salt-2 
13d20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20  copied from the 
13d30 57 41 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c  WAL header.<tr><
13d40 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13d50 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64  ign=center>16<td
13d60 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13d70 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
13d80 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 20  td>Checksum-1:  
13d90 43 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b  Cumulative check
13da0 73 75 6d 20 75 70 20 74 68 72 6f 75 67 68 20 61  sum up through a
13db0 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 69  nd including thi
13dc0 73 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64 20 76  s page.<tr><td v
13dd0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13de0 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76 61 6c  center>20<td val
13df0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13e00 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
13e10 68 65 63 6b 73 75 6d 2d 32 3a 20 20 53 65 63 6f  hecksum-2:  Seco
13e20 6e 64 20 68 61 6c 66 20 6f 66 20 74 68 65 20 63  nd half of the c
13e30 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b 73  umulative checks
13e40 75 6d 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  um..</table>.</c
13e50 65 6e 74 65 72 3e 29 5e 0a 0a 5e 28 3c 70 3e 41  enter>)^..^(<p>A
13e60 20 66 72 61 6d 65 20 69 73 20 63 6f 6e 73 69 64   frame is consid
13e70 65 72 65 64 20 76 61 6c 69 64 20 69 66 20 61 6e  ered valid if an
13e80 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66 6f  d only if the fo
13e90 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74 69 6f  llowing conditio
13ea0 6e 73 20 61 72 65 0a 74 72 75 65 3a 3c 2f 70 3e  ns are.true:</p>
13eb0 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68  ..<ol>.<li><p>Th
13ec0 65 20 73 61 6c 74 2d 31 20 61 6e 64 20 73 61 6c  e salt-1 and sal
13ed0 74 2d 32 20 76 61 6c 75 65 73 20 69 6e 20 74 68  t-2 values in th
13ee0 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20 6d  e frame-header m
13ef0 61 74 63 68 0a 20 20 20 20 20 20 20 73 61 6c 74  atch.       salt
13f00 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 77   values in the w
13f10 61 6c 2d 68 65 61 64 65 72 3c 2f 70 3e 3c 2f 6c  al-header</p></l
13f20 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 63  i>..<li><p>The c
13f30 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73 20 69  hecksum values i
13f40 6e 20 74 68 65 20 66 69 6e 61 6c 20 38 20 62 79  n the final 8 by
13f50 74 65 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65  tes of the frame
13f60 2d 68 65 61 64 65 72 0a 20 20 20 20 20 20 20 65  -header.       e
13f70 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65  xactly match the
13f80 20 63 68 65 63 6b 73 75 6d 20 63 6f 6d 70 75 74   checksum comput
13f90 65 64 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79  ed consecutively
13fa0 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 66   on the.       f
13fb0 69 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66  irst 24 bytes of
13fc0 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 20   the WAL header 
13fd0 61 6e 64 20 74 68 65 20 66 69 72 73 74 20 38 20  and the first 8 
13fe0 62 79 74 65 73 20 61 6e 64 0a 20 20 20 20 20 20  bytes and.      
13ff0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
14000 61 6c 6c 20 66 72 61 6d 65 73 0a 20 20 20 20 20  all frames.     
14010 20 20 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c    up to and incl
14020 75 64 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  uding the curren
14030 74 20 66 72 61 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69  t frame.</p></li
14040 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a  ></li>.</ol>)^..
14050 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
14060 20 77 61 6c 63 6b 73 6d 20 7b 57 41 4c 20 63 68   walcksm {WAL ch
14070 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d  ecksum algorithm
14080 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 32 20  }</tcl>.<h3>4.2 
14090 43 68 65 63 6b 73 75 6d 20 41 6c 67 6f 72 69 74  Checksum Algorit
140a0 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  hm</h3>..<p>The 
140b0 63 68 65 63 6b 73 75 6d 20 69 73 20 63 6f 6d 70  checksum is comp
140c0 75 74 65 64 20 62 79 20 69 6e 74 65 72 70 72 65  uted by interpre
140d0 74 69 6e 67 20 74 68 65 20 69 6e 70 75 74 20 61  ting the input a
140e0 73 0a 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72  s.an even number
140f0 20 6f 66 20 75 6e 73 69 67 6e 65 64 20 33 32 2d   of unsigned 32-
14100 62 69 74 20 69 6e 74 65 67 65 72 73 3a 20 78 28  bit integers: x(
14110 30 29 20 74 68 72 6f 75 67 68 20 78 28 4e 29 2e  0) through x(N).
14120 0a 5e 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74  .^The 32-bit int
14130 65 67 65 72 73 20 61 72 65 20 62 69 67 2d 65 6e  egers are big-en
14140 64 69 61 6e 20 69 66 20 74 68 65 0a 6d 61 67 69  dian if the.magi
14150 63 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  c number in the 
14160 66 69 72 73 74 20 34 20 62 79 74 65 73 20 6f 66  first 4 bytes of
14170 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 20   the WAL header 
14180 69 73 20 30 78 33 37 37 66 30 36 38 33 20 61 6e  is 0x377f0683 an
14190 64 0a 74 68 65 20 69 6e 74 65 67 65 72 73 20 61  d.the integers a
141a0 72 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e  re little-endian
141b0 20 69 66 20 74 68 65 20 6d 61 67 69 63 20 6e 75   if the magic nu
141c0 6d 62 65 72 20 69 73 20 30 78 33 37 37 66 30 36  mber is 0x377f06
141d0 38 32 2e 0a 5e 54 68 65 20 63 68 65 63 6b 73 75  82..^The checksu
141e0 6d 20 76 61 6c 75 65 73 20 61 72 65 20 61 6c 77  m values are alw
141f0 61 79 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ays stored in th
14200 65 20 66 72 61 6d 65 20 68 65 61 64 65 72 20 69  e frame header i
14210 6e 20 61 0a 62 69 67 2d 65 6e 64 69 61 6e 20 66  n a.big-endian f
14220 6f 72 6d 61 74 20 72 65 67 61 72 64 6c 65 73 73  ormat regardless
14230 20 6f 66 20 77 68 69 63 68 20 62 79 74 65 20 6f   of which byte o
14240 72 64 65 72 20 69 73 20 75 73 65 64 20 74 6f 20  rder is used to 
14250 63 6f 6d 70 75 74 65 0a 74 68 65 20 63 68 65 63  compute.the chec
14260 6b 73 75 6d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ksum.</p>..<p>Th
14270 65 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72  e checksum algor
14280 69 74 68 6d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ithm only works 
14290 66 6f 72 20 63 6f 6e 74 65 6e 74 20 77 68 69 63  for content whic
142a0 68 20 69 73 20 61 20 6d 75 6c 74 69 70 6c 65 20  h is a multiple 
142b0 6f 66 0a 38 20 62 79 74 65 73 20 69 6e 20 6c 65  of.8 bytes in le
142c0 6e 67 74 68 2e 20 20 49 6e 20 6f 74 68 65 72 20  ngth.  In other 
142d0 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 69 6e  words, if the in
142e0 70 75 74 73 20 61 72 65 20 78 28 30 29 20 74 68  puts are x(0) th
142f0 72 6f 75 67 68 20 78 28 4e 29 0a 74 68 65 6e 20  rough x(N).then 
14300 4e 20 6d 75 73 74 20 62 65 20 6f 64 64 2e 0a 5e  N must be odd..^
14310 28 54 68 65 20 63 68 65 63 6b 73 75 6d 20 61 6c  (The checksum al
14320 67 6f 72 69 74 68 6d 20 69 73 20 61 73 20 66 6f  gorithm is as fo
14330 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  llows:..<blockqu
14340 6f 74 65 3e 3c 70 72 65 3e 20 0a 73 30 20 3d 20  ote><pre> .s0 = 
14350 73 31 20 3d 20 30 0a 66 6f 72 20 69 20 66 72 6f  s1 = 0.for i fro
14360 6d 20 30 20 74 6f 20 6e 2d 31 20 73 74 65 70 20  m 0 to n-1 step 
14370 32 3a 0a 20 20 20 73 30 20 2b 3d 20 78 28 69 29  2:.   s0 += x(i)
14380 20 2b 20 73 31 3b 0a 20 20 20 73 31 20 2b 3d 20   + s1;.   s1 += 
14390 78 28 69 2b 31 29 20 2b 20 73 30 3b 0a 65 6e 64  x(i+1) + s0;.end
143a0 66 6f 72 0a 23 20 72 65 73 75 6c 74 20 69 6e 20  for.# result in 
143b0 73 30 20 61 6e 64 20 73 31 0a 3c 2f 70 72 65 3e  s0 and s1.</pre>
143c0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
143d0 0a 3c 70 3e 5e 54 68 65 20 6f 75 74 70 75 74 73  .<p>^The outputs
143e0 20 73 30 20 61 6e 64 20 73 31 20 61 72 65 20 62   s0 and s1 are b
143f0 6f 74 68 20 77 65 69 67 68 74 65 64 20 63 68 65  oth weighted che
14400 63 6b 73 75 6d 73 20 75 73 69 6e 67 20 46 69 62  cksums using Fib
14410 6f 6e 61 63 63 69 20 77 65 69 67 68 74 73 0a 69  onacci weights.i
14420 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2e  n reverse order.
14430 20 20 28 5e 54 68 65 20 6c 61 72 67 65 73 74 20    (^The largest 
14440 46 69 62 6f 6e 61 63 63 69 20 77 65 69 67 68 74  Fibonacci weight
14450 20 6f 63 63 75 72 73 20 6f 6e 20 74 68 65 20 66   occurs on the f
14460 69 72 73 74 20 65 6c 65 6d 65 6e 74 0a 6f 66 20  irst element.of 
14470 74 68 65 20 73 65 71 75 65 6e 63 65 20 62 65 69  the sequence bei
14480 6e 67 20 73 75 6d 6d 65 64 2e 29 20 20 5e 54 68  ng summed.)  ^Th
14490 65 20 73 31 20 76 61 6c 75 65 20 73 70 61 6e 73  e s1 value spans
144a0 20 61 6c 6c 20 33 32 2d 62 69 74 20 69 6e 74 65   all 32-bit inte
144b0 67 65 72 0a 74 65 72 6d 73 20 6f 66 20 74 68 65  ger.terms of the
144c0 20 73 65 71 75 65 6e 63 65 20 77 68 65 72 65 61   sequence wherea
144d0 73 20 73 30 20 6f 6d 69 74 73 20 74 68 65 20 66  s s0 omits the f
144e0 69 6e 61 6c 20 74 65 72 6d 2e 3c 2f 70 3e 0a 0a  inal term.</p>..
144f0 3c 68 33 3e 34 2e 33 20 43 68 65 63 6b 70 6f 69  <h3>4.3 Checkpoi
14500 6e 74 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33  nt Algorithm</h3
14510 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61 20 5b 63 68 65  >..<p>^On a [che
14520 63 6b 70 6f 69 6e 74 5d 2c 20 74 68 65 20 57 41  ckpoint], the WA
14530 4c 20 69 73 20 66 69 72 73 74 20 66 6c 75 73 68  L is first flush
14540 65 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74  ed to persistent
14550 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67 0a 74   storage using.t
14560 68 65 20 78 53 79 6e 63 20 6d 65 74 68 6f 64 20  he xSync method 
14570 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  of the [sqlite3_
14580 69 6f 5f 6d 65 74 68 6f 64 73 20 7c 20 56 46 53  io_methods | VFS
14590 5d 2e 20 0a 5e 54 68 65 6e 20 76 61 6c 69 64 20  ]. .^Then valid 
145a0 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 57  content of the W
145b0 41 4c 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  AL is transferre
145c0 64 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  d into the datab
145d0 61 73 65 20 66 69 6c 65 2e 0a 5e 46 69 6e 61 6c  ase file..^Final
145e0 6c 79 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ly, the database
145f0 20 69 73 20 66 6c 75 73 68 65 64 20 74 6f 20 70   is flushed to p
14600 65 72 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67  ersistent storag
14610 65 20 75 73 69 6e 67 20 61 6e 6f 74 68 65 72 0a  e using another.
14620 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 63 61 6c  xSync method cal
14630 6c 2e 0a 54 68 65 20 78 53 79 6e 63 20 6f 70 65  l..The xSync ope
14640 72 61 74 69 6f 6e 73 20 73 65 72 76 65 20 61 73  rations serve as
14650 20 77 72 69 74 65 20 62 61 72 72 69 65 72 73 20   write barriers 
14660 2d 20 61 6c 6c 20 77 72 69 74 65 73 20 6c 61 75  - all writes lau
14670 6e 63 68 65 64 0a 62 65 66 6f 72 65 20 74 68 65  nched.before the
14680 20 78 53 79 6e 63 20 6d 75 73 74 20 63 6f 6d 70   xSync must comp
14690 6c 65 74 65 20 62 65 66 6f 72 65 20 61 6e 79 20  lete before any 
146a0 77 72 69 74 65 20 74 68 61 74 20 6c 61 75 6e 63  write that launc
146b0 68 65 73 20 61 66 74 65 72 20 74 68 65 0a 78 53  hes after the.xS
146c0 79 6e 63 20 62 65 67 69 6e 73 2e 3c 2f 70 3e 0a  ync begins.</p>.
146d0 0a 3c 70 3e 5e 41 66 74 65 72 20 61 20 63 68 65  .<p>^After a che
146e0 63 6b 70 6f 69 6e 74 2c 20 6e 65 77 20 77 72 69  ckpoint, new wri
146f0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  te transactions 
14700 6f 76 65 72 77 72 69 74 65 0a 74 68 65 20 57 41  overwrite.the WA
14710 4c 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 20  L file from the 
14720 62 65 67 69 6e 6e 69 6e 67 2e 20 20 5e 41 74 20  beginning.  ^At 
14730 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65  the start of the
14740 20 66 69 72 73 74 20 6e 65 77 0a 77 72 69 74 65   first new.write
14750 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
14760 65 20 57 41 4c 20 68 65 61 64 65 72 20 73 61 6c  e WAL header sal
14770 74 2d 31 20 76 61 6c 75 65 20 69 73 20 69 6e 63  t-1 value is inc
14780 72 65 6d 65 6e 74 65 64 0a 61 6e 64 20 74 68 65  remented.and the
14790 20 73 61 6c 74 2d 32 20 76 61 6c 75 65 20 69 73   salt-2 value is
147a0 20 72 61 6e 64 6f 6d 69 7a 65 64 2e 20 20 54 68   randomized.  Th
147b0 65 73 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ese changes to t
147c0 68 65 20 73 61 6c 74 73 20 69 6e 76 61 6c 69 64  he salts invalid
147d0 61 74 65 0a 6f 6c 64 20 66 72 61 6d 65 73 20 69  ate.old frames i
147e0 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68  n the WAL that h
147f0 61 76 65 20 61 6c 72 65 61 64 79 20 62 65 65 6e  ave already been
14800 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 62 75   checkpointed bu
14810 74 20 6e 6f 74 20 79 65 74 0a 6f 76 65 72 77 72  t not yet.overwr
14820 69 74 74 65 6e 2c 20 61 6e 64 20 70 72 65 76 65  itten, and preve
14830 6e 74 20 74 68 65 6d 20 66 72 6f 6d 20 62 65 69  nt them from bei
14840 6e 67 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  ng checkpointed 
14850 61 67 61 69 6e 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  again.</p>..<tcl
14860 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c  >hd_fragment wal
14870 72 65 61 64 20 7b 57 41 4c 20 72 65 61 64 20 61  read {WAL read a
14880 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a  lgorithm}</tcl>.
14890 3c 68 33 3e 34 2e 34 20 52 65 61 64 65 72 20 41  <h3>4.4 Reader A
148a0 6c 67 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c  lgorithm</h3>..<
148b0 70 3e 5e 28 54 6f 20 72 65 61 64 20 61 20 70 61  p>^(To read a pa
148c0 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ge from the data
148d0 62 61 73 65 20 28 63 61 6c 6c 20 69 74 20 70 61  base (call it pa
148e0 67 65 20 6e 75 6d 62 65 72 20 50 29 2c 20 61 20  ge number P), a 
148f0 72 65 61 64 65 72 0a 66 69 72 73 74 20 63 68 65  reader.first che
14900 63 6b 73 20 74 68 65 20 57 41 4c 20 74 6f 20 73  cks the WAL to s
14910 65 65 20 69 66 20 69 74 20 63 6f 6e 74 61 69 6e  ee if it contain
14920 73 20 70 61 67 65 20 50 2e 20 20 49 66 20 73 6f  s page P.  If so
14930 2c 20 74 68 65 6e 20 74 68 65 0a 6c 61 73 74 20  , then the.last 
14940 76 61 6c 69 64 20 69 6e 73 74 61 6e 63 65 20 6f  valid instance o
14950 66 20 70 61 67 65 20 50 20 74 68 61 74 20 69 73  f page P that is
14960 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
14970 6f 6d 6d 69 74 20 66 72 61 6d 65 0a 6f 72 20 69  ommit frame.or i
14980 73 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65  s a commit frame
14990 20 69 74 73 65 6c 66 20 62 65 63 6f 6d 65 73 20   itself becomes 
149a0 74 68 65 20 76 61 6c 75 65 20 72 65 61 64 2e 29  the value read.)
149b0 5e 20 20 5e 49 66 20 74 68 65 20 57 41 4c 0a 63  ^  ^If the WAL.c
149c0 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 6f 70 69 65  ontains no copie
149d0 73 20 6f 66 20 70 61 67 65 20 50 20 74 68 61 74  s of page P that
149e0 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77   are valid and w
149f0 68 69 63 68 20 61 72 65 20 61 20 63 6f 6d 6d 69  hich are a commi
14a00 74 0a 66 72 61 6d 65 20 6f 72 20 61 72 65 20 66  t.frame or are f
14a10 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d  ollowed by a com
14a20 6d 69 74 20 66 72 61 6d 65 2c 20 74 68 65 6e 20  mit frame, then 
14a30 70 61 67 65 20 50 20 69 73 20 72 65 61 64 20 66  page P is read f
14a40 72 6f 6d 0a 74 68 65 20 64 61 74 61 62 61 73 65  rom.the database
14a50 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   file.</p>..<p>T
14a60 6f 20 73 74 61 72 74 20 61 20 72 65 61 64 20 74  o start a read t
14a70 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 20  ransaction, the 
14a80 72 65 61 64 65 72 20 72 65 63 6f 72 64 73 20 74  reader records t
14a90 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
14aa0 6c 61 73 74 0a 76 61 6c 69 64 20 66 72 61 6d 65  last.valid frame
14ab0 20 69 6e 20 74 68 65 20 57 41 4c 2e 20 20 54 68   in the WAL.  Th
14ac0 65 20 72 65 61 64 65 72 20 75 73 65 73 20 74 68  e reader uses th
14ad0 69 73 20 72 65 63 6f 72 64 65 64 20 22 6d 78 46  is recorded "mxF
14ae0 72 61 6d 65 22 20 76 61 6c 75 65 0a 66 6f 72 20  rame" value.for 
14af0 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 72  all subsequent r
14b00 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73 2e 20  ead operations. 
14b10 20 4e 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e   New transaction
14b20 73 20 63 61 6e 20 62 65 20 61 70 70 65 6e 64 65  s can be appende
14b30 64 0a 74 6f 20 74 68 65 20 57 41 4c 2c 20 62 75  d.to the WAL, bu
14b40 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65  t as long as the
14b50 20 72 65 61 64 65 72 20 75 73 65 73 20 69 74 73   reader uses its
14b60 20 6f 72 69 67 69 6e 61 6c 20 6d 78 46 72 61 6d   original mxFram
14b70 65 20 76 61 6c 75 65 0a 61 6e 64 20 69 67 6e 6f  e value.and igno
14b80 72 65 73 20 73 75 62 73 65 71 75 65 6e 74 6c 79  res subsequently
14b90 20 61 70 70 65 6e 64 65 64 20 63 6f 6e 74 65 6e   appended conten
14ba0 74 2c 20 74 68 65 20 72 65 61 64 65 72 20 77 69  t, the reader wi
14bb0 6c 6c 20 73 65 65 20 61 20 0a 63 6f 6e 73 69 73  ll see a .consis
14bc0 74 65 6e 74 20 73 6e 61 70 73 68 6f 74 20 6f 66  tent snapshot of
14bd0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 72   the database fr
14be0 6f 6d 20 61 20 73 69 6e 67 6c 65 20 70 6f 69 6e  om a single poin
14bf0 74 20 69 6e 20 74 69 6d 65 2e 20 20 0a 5e 54 68  t in time.  .^Th
14c00 69 73 20 74 65 63 68 6e 69 71 75 65 20 61 6c 6c  is technique all
14c10 6f 77 73 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6e  ows multiple con
14c20 63 75 72 72 65 6e 74 20 72 65 61 64 65 72 73 20  current readers 
14c30 74 6f 20 76 69 65 77 20 64 69 66 66 65 72 65 6e  to view differen
14c40 74 20 0a 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  t .versions of t
14c50 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 74  he database cont
14c60 65 6e 74 20 73 69 6d 75 6c 74 61 6e 65 6f 75 73  ent simultaneous
14c70 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ly.</p>..<p>The 
14c80 72 65 61 64 65 72 20 61 6c 67 6f 72 69 74 68 6d  reader algorithm
14c90 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73   in the previous
14ca0 20 70 61 72 61 67 72 61 70 68 73 20 77 6f 72 6b   paragraphs work
14cb0 73 20 63 6f 72 72 65 63 74 6c 79 2c 20 62 75 74  s correctly, but
14cc0 20 0a 62 65 63 61 75 73 65 20 66 72 61 6d 65 73   .because frames
14cd0 20 66 6f 72 20 70 61 67 65 20 50 20 63 61 6e 20   for page P can 
14ce0 61 70 70 65 61 72 20 61 6e 79 77 68 65 72 65 20  appear anywhere 
14cf0 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 2c 20  within the WAL, 
14d00 74 68 65 0a 72 65 61 64 65 72 20 68 61 73 20 74  the.reader has t
14d10 6f 20 73 63 61 6e 20 74 68 65 20 65 6e 74 69 72  o scan the entir
14d20 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e 67 20 66 6f  e WAL looking fo
14d30 72 20 70 61 67 65 20 50 20 66 72 61 6d 65 73 2e  r page P frames.
14d40 20 20 49 66 20 74 68 65 0a 57 41 4c 20 69 73 20    If the.WAL is 
14d50 6c 61 72 67 65 20 28 6d 75 6c 74 69 70 6c 65 20  large (multiple 
14d60 6d 65 67 61 62 79 74 65 73 20 69 73 20 74 79 70  megabytes is typ
14d70 69 63 61 6c 29 20 74 68 61 74 20 73 63 61 6e 20  ical) that scan 
14d80 63 61 6e 20 62 65 20 73 6c 6f 77 2c 0a 61 6e 64  can be slow,.and
14d90 20 72 65 61 64 20 70 65 72 66 6f 72 6d 61 6e 63   read performanc
14da0 65 20 73 75 66 66 65 72 73 2e 20 20 5e 54 6f 20  e suffers.  ^To 
14db0 6f 76 65 72 63 6f 6d 65 20 74 68 69 73 20 70 72  overcome this pr
14dc0 6f 62 6c 65 6d 2c 20 61 20 73 65 70 61 72 61 74  oblem, a separat
14dd0 65 0a 64 61 74 61 20 73 74 72 75 63 74 75 72 65  e.data structure
14de0 20 63 61 6c 6c 65 64 20 74 68 65 20 77 61 6c 2d   called the wal-
14df0 69 6e 64 65 78 20 69 73 20 6d 61 69 6e 74 61 69  index is maintai
14e00 6e 65 64 20 74 6f 20 65 78 70 65 64 69 74 65 20  ned to expedite 
14e10 74 68 65 0a 73 65 61 72 63 68 20 66 6f 72 20 66  the.search for f
14e20 72 61 6d 65 73 20 6f 66 20 61 20 70 61 72 74 69  rames of a parti
14e30 63 75 6c 61 72 20 70 61 67 65 2e 3c 2f 70 3e 0a  cular page.</p>.
14e40 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
14e50 74 20 77 61 6c 69 6e 64 65 78 66 6f 72 6d 61 74  t walindexformat
14e60 20 7b 77 61 6c 2d 69 6e 64 65 78 7d 20 7b 57 41   {wal-index} {WA
14e70 4c 2d 69 6e 64 65 78 20 66 6f 72 6d 61 74 7d 3c  L-index format}<
14e80 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 35 20 57 41  /tcl>.<h3>4.5 WA
14e90 4c 2d 49 6e 64 65 78 20 46 6f 72 6d 61 74 3c 2f  L-Index Format</
14ea0 68 33 3e 0a 0a 3c 70 3e 43 6f 6e 63 65 70 74 75  h3>..<p>Conceptu
14eb0 61 6c 6c 79 2c 20 74 68 65 20 77 61 6c 2d 69 6e  ally, the wal-in
14ec0 64 65 78 20 69 73 20 73 68 61 72 65 64 20 6d 65  dex is shared me
14ed0 6d 6f 72 79 2c 20 74 68 6f 75 67 68 20 74 68 65  mory, though the
14ee0 20 63 75 72 72 65 6e 74 0a 56 46 53 20 69 6d 70   current.VFS imp
14ef0 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75 73 65  lementations use
14f00 20 61 20 6d 6d 61 70 70 65 64 20 66 69 6c 65 20   a mmapped file 
14f10 66 6f 72 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  for the wal-inde
14f20 78 2e 20 20 5e 54 68 65 20 6d 6d 61 70 70 65 64  x.  ^The mmapped
14f30 0a 66 69 6c 65 20 69 73 20 69 6e 20 74 68 65 20  .file is in the 
14f40 73 61 6d 65 20 64 69 72 65 63 74 6f 72 79 20 61  same directory a
14f50 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  s the database a
14f60 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65 20  nd has the same 
14f70 6e 61 6d 65 0a 61 73 20 74 68 65 20 64 61 74 61  name.as the data
14f80 62 61 73 65 20 77 69 74 68 20 61 20 22 3c 74 74  base with a "<tt
14f90 3e 2d 73 68 6d 3c 2f 74 74 3e 22 20 73 75 66 66  >-shm</tt>" suff
14fa0 69 78 20 61 70 70 65 6e 64 65 64 2e 20 20 42 65  ix appended.  Be
14fb0 63 61 75 73 65 0a 74 68 65 20 77 61 6c 2d 69 6e  cause.the wal-in
14fc0 64 65 78 20 69 73 20 73 68 61 72 65 64 20 6d 65  dex is shared me
14fd0 6d 6f 72 79 2c 20 53 51 4c 69 74 65 20 64 6f 65  mory, SQLite doe
14fe0 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 0a 5b  s not support .[
14ff0 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
15000 6f 64 65 20 7c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  ode | journal_mo
15010 64 65 3d 57 41 4c 5d 20 0a 6f 6e 20 61 20 6e 65  de=WAL] .on a ne
15020 74 77 6f 72 6b 20 66 69 6c 65 73 79 73 74 65 6d  twork filesystem
15030 20 77 68 65 6e 20 63 6c 69 65 6e 74 73 20 61 72   when clients ar
15040 65 20 6f 6e 20 64 69 66 66 65 72 65 6e 74 20 6d  e on different m
15050 61 63 68 69 6e 65 73 2e 0a 41 6c 6c 20 75 73 65  achines..All use
15060 72 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  rs of the databa
15070 73 65 20 6d 75 73 74 20 62 65 20 61 62 6c 65 20  se must be able 
15080 74 6f 20 73 68 61 72 65 20 74 68 65 20 73 61 6d  to share the sam
15090 65 20 6d 65 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c  e memory.</p>..<
150a0 70 3e 54 68 65 20 70 75 72 70 6f 73 65 20 6f 66  p>The purpose of
150b0 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
150c0 73 20 74 6f 20 61 6e 73 77 65 72 20 74 68 69 73  s to answer this
150d0 20 71 75 65 73 74 69 6f 6e 20 71 75 69 63 6b 6c   question quickl
150e0 79 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  y:</p>..<blockqu
150f0 6f 74 65 3e 3c 69 3e 0a 47 69 76 65 6e 20 61 20  ote><i>.Given a 
15100 70 61 67 65 20 6e 75 6d 62 65 72 20 50 20 61 6e  page number P an
15110 64 20 61 20 6d 61 78 69 6d 75 6d 20 57 41 4c 20  d a maximum WAL 
15120 66 72 61 6d 65 20 69 6e 64 65 78 20 4d 2c 0a 72  frame index M,.r
15130 65 74 75 72 6e 20 74 68 65 20 6c 61 72 67 65 73  eturn the larges
15140 74 20 57 41 4c 20 66 72 61 6d 65 20 69 6e 64 65  t WAL frame inde
15150 78 20 66 6f 72 20 70 61 67 65 20 50 20 74 68 61  x for page P tha
15160 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 63 65 65  t does not excee
15170 64 20 4d 2c 20 0a 6f 72 20 72 65 74 75 72 6e 20  d M, .or return 
15180 4e 55 4c 4c 20 69 66 20 74 68 65 72 65 20 61 72  NULL if there ar
15190 65 20 6e 6f 20 66 72 61 6d 65 73 20 66 6f 72 20  e no frames for 
151a0 70 61 67 65 20 50 20 74 68 61 74 20 64 6f 20 6e  page P that do n
151b0 6f 74 20 65 78 63 65 65 64 20 4d 2e 0a 3c 2f 69  ot exceed M..</i
151c0 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a  ></blockquote>..
151d0 3c 70 3e 54 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20  <p>The <i>M</i> 
151e0 76 61 6c 75 65 20 69 6e 20 74 68 65 20 70 72 65  value in the pre
151f0 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
15200 69 73 20 74 68 65 20 22 6d 78 46 72 61 6d 65 22  is the "mxFrame"
15210 20 76 61 6c 75 65 0a 64 65 66 69 6e 65 64 20 69   value.defined i
15220 6e 20 5b 57 41 4c 20 72 65 61 64 20 61 6c 67 6f  n [WAL read algo
15230 72 69 74 68 6d 20 7c 20 73 65 63 74 69 6f 6e 20  rithm | section 
15240 34 2e 34 5d 20 74 68 61 74 20 69 73 20 72 65 61  4.4] that is rea
15250 64 20 61 74 20 74 68 65 20 73 74 61 72 74 20 0a  d at the start .
15260 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  of a transaction
15270 20 61 6e 64 20 77 68 69 63 68 20 64 65 66 69 6e   and which defin
15280 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  es the maximum f
15290 72 61 6d 65 20 66 72 6f 6d 20 74 68 65 20 57 41  rame from the WA
152a0 4c 20 74 68 61 74 20 0a 74 68 65 20 72 65 61 64  L that .the read
152b0 65 72 20 77 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e  er will use.</p>
152c0 0a 0a 3c 70 3e 54 68 65 20 77 61 6c 2d 69 6e 64  ..<p>The wal-ind
152d0 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74 2e  ex is transient.
152e0 20 20 41 66 74 65 72 20 61 20 63 72 61 73 68 2c    After a crash,
152f0 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
15300 73 0a 72 65 63 6f 6e 73 74 72 75 63 74 65 64 20  s.reconstructed 
15310 66 72 6f 6d 20 74 68 65 20 6f 72 69 67 69 6e 61  from the origina
15320 6c 20 57 41 4c 20 66 69 6c 65 2e 20 20 5e 54 68  l WAL file.  ^Th
15330 65 20 56 46 53 20 69 73 20 72 65 71 75 69 72 65  e VFS is require
15340 64 0a 74 6f 20 65 69 74 68 65 72 20 74 72 75 6e  d.to either trun
15350 63 61 74 65 20 6f 72 20 7a 65 72 6f 20 74 68 65  cate or zero the
15360 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 77   header of the w
15370 61 6c 2d 69 6e 64 65 78 20 77 68 65 6e 20 74 68  al-index when th
15380 65 20 6c 61 73 74 0a 63 6f 6e 6e 65 63 74 69 6f  e last.connectio
15390 6e 20 74 6f 20 69 74 20 63 6c 6f 73 65 73 2e 20  n to it closes. 
153a0 20 42 65 63 61 75 73 65 20 74 68 65 20 77 61 6c   Because the wal
153b0 2d 69 6e 64 65 78 20 69 73 20 74 72 61 6e 73 69  -index is transi
153c0 65 6e 74 2c 20 69 74 20 63 61 6e 0a 75 73 65 20  ent, it can.use 
153d0 61 6e 20 61 72 63 68 69 74 65 63 74 75 72 65 2d  an architecture-
153e0 73 70 65 63 69 66 69 63 20 66 6f 72 6d 61 74 3b  specific format;
153f0 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 68 61 76   it does not hav
15400 65 20 74 6f 20 62 65 20 63 72 6f 73 73 2d 70 6c  e to be cross-pl
15410 61 74 66 6f 72 6d 2e 0a 48 65 6e 63 65 2c 20 75  atform..Hence, u
15420 6e 6c 69 6b 65 20 74 68 65 20 64 61 74 61 62 61  nlike the databa
15430 73 65 20 61 6e 64 20 57 41 4c 20 66 69 6c 65 20  se and WAL file 
15440 66 6f 72 6d 61 74 73 20 77 68 69 63 68 20 73 74  formats which st
15450 6f 72 65 20 61 6c 6c 20 76 61 6c 75 65 73 0a 61  ore all values.a
15460 73 20 62 69 67 20 65 6e 64 69 61 6e 2c 20 74 68  s big endian, th
15470 65 20 77 61 6c 2d 69 6e 64 65 78 20 73 74 6f 72  e wal-index stor
15480 65 73 20 6d 75 6c 74 69 2d 62 79 74 65 20 76 61  es multi-byte va
15490 6c 75 65 73 20 69 6e 20 74 68 65 20 6e 61 74 69  lues in the nati
154a0 76 65 0a 62 79 74 65 20 6f 72 64 65 72 20 6f 66  ve.byte order of
154b0 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70 75 74   the host comput
154c0 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73  er.</p>..<p>This
154d0 20 64 6f 63 75 6d 65 6e 74 20 69 73 20 63 6f 6e   document is con
154e0 63 65 72 6e 65 64 20 77 69 74 68 20 74 68 65 20  cerned with the 
154f0 70 65 72 73 69 73 74 65 6e 74 20 73 74 61 74 65  persistent state
15500 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
15510 0a 66 69 6c 65 2c 20 61 6e 64 20 73 69 6e 63 65  .file, and since
15520 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
15530 73 20 61 20 74 72 61 6e 73 69 65 6e 74 20 73 74  s a transient st
15540 72 75 63 74 75 72 65 2c 20 6e 6f 20 66 75 72 74  ructure, no furt
15550 68 65 72 20 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e  her .information
15560 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61   about the forma
15570 74 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64  t of the wal-ind
15580 65 78 20 77 69 6c 6c 20 62 65 20 70 72 6f 76 69  ex will be provi
15590 64 65 64 20 68 65 72 65 2e 0a 43 6f 6d 70 6c 65  ded here..Comple
155a0 74 65 20 64 65 74 61 69 6c 73 20 6f 6e 20 74 68  te details on th
155b0 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
155c0 77 61 6c 2d 69 6e 64 65 78 20 61 72 65 20 63 6f  wal-index are co
155d0 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 0a 63  ntained within.c
155e0 6f 6d 6d 65 6e 74 73 20 69 6e 20 53 51 4c 69 74  omments in SQLit
155f0 65 20 73 6f 75 72 63 65 20 63 6f 64 65 2e 3c 2f  e source code.</
15600 70 3e 0a                                         p>.