Documentation Source Text

Hex Artifact Content
Login

Artifact 4c968f9876c865f3e94607bb2680e5b9d53b1a4e:


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 20 7b 42 2d 74 72 65 65 7d 3c 2f 74 63 6c  s} {B-tree}</tcl
5490: 3e 0a 3c 68 33 3e 31 2e 35 20 42 2d 74 72 65 65  >.<h3>1.5 B-tree
54a0: 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e   Pages</h3>..<p>
54b0: 54 68 65 20 62 2d 74 72 65 65 20 61 6c 67 6f 72  The b-tree algor
54c0: 69 74 68 6d 20 70 72 6f 76 69 64 65 73 20 6b 65  ithm provides ke
54d0: 79 2f 64 61 74 61 20 73 74 6f 72 61 67 65 20 77  y/data storage w
54e0: 69 74 68 20 75 6e 69 71 75 65 20 61 6e 64 0a 6f  ith unique and.o
54f0: 72 64 65 72 65 64 20 6b 65 79 73 20 6f 6e 20 70  rdered keys on p
5500: 61 67 65 2d 6f 72 69 65 6e 74 65 64 20 73 74 6f  age-oriented sto
5510: 72 61 67 65 20 64 65 76 69 63 65 73 2e 0a 46 6f  rage devices..Fo
5520: 72 20 62 61 63 6b 67 72 6f 75 6e 64 20 69 6e 66  r background inf
5530: 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 62 2d 74 72  ormation on b-tr
5540: 65 65 73 2c 20 73 65 65 0a 4b 6e 75 74 68 2c 20  ees, see.Knuth, 
5550: 3c 75 3e 54 68 65 20 41 72 74 20 4f 66 20 43 6f  <u>The Art Of Co
5560: 6d 70 75 74 65 72 20 50 72 6f 67 72 61 6d 6d 69  mputer Programmi
5570: 6e 67 3c 2f 75 3e 2c 20 56 6f 6c 75 6d 65 20 33  ng</u>, Volume 3
5580: 20 22 53 6f 72 74 69 6e 67 0a 61 6e 64 20 53 65   "Sorting.and Se
5590: 61 72 63 68 69 6e 67 22 2c 20 70 61 67 65 73 20  arching", pages 
55a0: 34 37 31 2d 34 37 39 2e 20 20 54 77 6f 20 6b 69  471-479.  Two ki
55b0: 6e 64 73 20 6f 66 20 62 2d 74 72 65 65 73 20 61  nds of b-trees a
55c0: 72 65 20 75 73 65 64 20 62 79 0a 53 51 4c 69 74  re used by.SQLit
55d0: 65 2e 20 20 54 68 65 20 61 6c 67 6f 72 69 74 68  e.  The algorith
55e0: 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63 61 6c  m that Knuth cal
55f0: 6c 73 20 22 42 2a 2d 54 72 65 65 22 20 73 74 6f  ls "B*-Tree" sto
5600: 72 65 73 20 61 6c 6c 20 64 61 74 61 0a 69 6e 20  res all data.in 
5610: 74 68 65 20 6c 65 61 76 65 73 20 6f 66 20 74 68  the leaves of th
5620: 65 20 74 72 65 65 2e 20 20 53 51 4c 69 74 65 20  e tree.  SQLite 
5630: 63 61 6c 6c 73 20 74 68 69 73 20 76 61 72 69 65  calls this varie
5640: 74 79 20 6f 66 20 62 2d 74 72 65 65 0a 61 20 22  ty of b-tree.a "
5650: 74 61 62 6c 65 20 62 2d 74 72 65 65 22 2e 20 54  table b-tree". T
5660: 68 65 20 61 6c 67 6f 72 69 74 68 6d 20 74 68 61  he algorithm tha
5670: 74 20 4b 6e 75 74 68 20 63 61 6c 6c 73 20 73 69  t Knuth calls si
5680: 6d 70 6c 79 20 22 42 2d 54 72 65 65 22 0a 73 74  mply "B-Tree".st
5690: 6f 72 65 73 20 62 6f 74 68 20 74 68 65 20 6b 65  ores both the ke
56a0: 79 20 61 6e 64 20 74 68 65 20 64 61 74 61 20 74  y and the data t
56b0: 6f 67 65 74 68 65 72 20 69 6e 20 62 6f 74 68 20  ogether in both 
56c0: 6c 65 61 76 65 73 0a 61 6e 64 20 69 6e 20 69 6e  leaves.and in in
56d0: 74 65 72 69 6f 72 20 70 61 67 65 73 2e 20 20 49  terior pages.  I
56e0: 6e 20 74 68 65 20 53 51 4c 69 74 65 20 69 6d 70  n the SQLite imp
56f0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2c 20 74 68 65  lementation, the
5700: 20 6f 72 69 67 69 6e 61 6c 0a 42 2d 54 72 65 65   original.B-Tree
5710: 20 61 6c 67 6f 72 69 74 68 6d 20 73 74 6f 72 65   algorithm store
5720: 73 20 6b 65 79 73 20 6f 6e 6c 79 2c 20 6f 6d 69  s keys only, omi
5730: 74 74 69 6e 67 20 74 68 65 20 64 61 74 61 20 65  tting the data e
5740: 6e 74 69 72 65 6c 79 2c 20 61 6e 64 0a 69 73 20  ntirely, and.is 
5750: 63 61 6c 6c 65 64 20 61 6e 20 22 69 6e 64 65 78  called an "index
5760: 20 62 2d 74 72 65 65 22 2e 0a 0a 3c 70 3e 41 20   b-tree"...<p>A 
5770: 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 65  b-tree page is e
5780: 69 74 68 65 72 20 61 6e 20 69 6e 74 65 72 69 6f  ither an interio
5790: 72 20 70 61 67 65 20 6f 72 20 61 20 6c 65 61 66  r page or a leaf
57a0: 20 70 61 67 65 2e 0a 41 20 6c 65 61 66 20 70 61   page..A leaf pa
57b0: 67 65 20 63 6f 6e 74 61 69 6e 73 20 6b 65 79 73  ge contains keys
57c0: 20 61 6e 64 20 69 6e 20 74 68 65 20 63 61 73 65   and in the case
57d0: 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72   of a table b-tr
57e0: 65 65 20 65 61 63 68 0a 6b 65 79 20 68 61 73 20  ee each.key has 
57f0: 61 73 73 6f 63 69 61 74 65 64 20 64 61 74 61 2e  associated data.
5800: 20 20 41 6e 20 69 6e 74 65 72 69 6f 72 20 70 61    An interior pa
5810: 67 65 20 63 6f 6e 74 61 69 6e 73 0a 4b 20 6b 65  ge contains.K ke
5820: 79 73 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ys together with
5830: 20 4b 2b 31 20 70 6f 69 6e 74 65 72 73 20 74 6f   K+1 pointers to
5840: 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61   child b-tree pa
5850: 67 65 73 2e 0a 41 20 22 70 6f 69 6e 74 65 72 22  ges..A "pointer"
5860: 20 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20   in an interior 
5870: 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 6a  b-tree page is j
5880: 75 73 74 20 74 68 65 20 33 31 2d 62 69 74 20 69  ust the 31-bit i
5890: 6e 74 65 67 65 72 0a 70 61 67 65 20 6e 75 6d 62  nteger.page numb
58a0: 65 72 20 6f 66 20 74 68 65 20 63 68 69 6c 64 20  er of the child 
58b0: 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 44 65  page.</p>..<p>De
58c0: 66 69 6e 65 20 74 68 65 20 64 65 70 74 68 0a 6f  fine the depth.o
58d0: 66 20 61 20 6c 65 61 66 20 62 2d 74 72 65 65 20  f a leaf b-tree 
58e0: 74 6f 20 62 65 20 31 20 61 6e 64 20 74 68 65 20  to be 1 and the 
58f0: 64 65 70 74 68 20 6f 66 20 61 6e 79 20 69 6e 74  depth of any int
5900: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 74 6f 20  erior b-tree to 
5910: 62 65 20 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e  be one.more than
5920: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 64 65 70   the maximum dep
5930: 74 68 20 6f 66 20 61 6e 79 20 6f 66 20 69 74 73  th of any of its
5940: 20 63 68 69 6c 64 72 65 6e 2e 20 20 5e 49 6e 20   children.  ^In 
5950: 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 0a 64 61  a well-formed.da
5960: 74 61 62 61 73 65 2c 20 61 6c 6c 20 63 68 69 6c  tabase, all chil
5970: 64 72 65 6e 20 6f 66 20 61 6e 20 69 6e 74 65 72  dren of an inter
5980: 69 6f 72 20 62 2d 74 72 65 65 20 68 61 76 65 20  ior b-tree have 
5990: 74 68 65 20 73 61 6d 65 20 64 65 70 74 68 2e 3c  the same depth.<
59a0: 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 20 69 6e  /p>..<p>In an in
59b0: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
59c0: 67 65 2c 20 74 68 65 20 70 6f 69 6e 74 65 72 73  ge, the pointers
59d0: 20 61 6e 64 20 6b 65 79 73 20 6c 6f 67 69 63 61   and keys logica
59e0: 6c 6c 79 20 61 6c 74 65 72 6e 61 74 65 20 0a 77  lly alternate .w
59f0: 69 74 68 20 61 20 70 6f 69 6e 74 65 72 20 6f 6e  ith a pointer on
5a00: 20 62 6f 74 68 20 65 6e 64 73 2e 20 28 54 68 65   both ends. (The
5a10: 20 70 72 65 76 69 6f 75 73 20 73 65 6e 74 65 6e   previous senten
5a20: 63 65 20 69 73 20 74 6f 20 62 65 20 75 6e 64 65  ce is to be unde
5a30: 72 73 74 6f 6f 64 0a 63 6f 6e 63 65 70 74 75 61  rstood.conceptua
5a40: 6c 6c 79 20 2d 20 74 68 65 20 61 63 74 75 61 6c  lly - the actual
5a50: 20 6c 61 79 6f 75 74 20 6f 66 20 74 68 65 20 6b   layout of the k
5a60: 65 79 73 20 61 6e 64 0a 70 6f 69 6e 74 65 72 73  eys and.pointers
5a70: 20 77 69 74 68 69 6e 20 74 68 65 20 70 61 67 65   within the page
5a80: 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63   is more complic
5a90: 61 74 65 64 20 61 6e 64 20 77 69 6c 6c 20 62 65  ated and will be
5aa0: 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68   described in.th
5ab0: 65 20 73 65 71 75 65 6c 2e 29 20 20 41 6c 6c 20  e sequel.)  All 
5ac0: 6b 65 79 73 20 77 69 74 68 69 6e 20 74 68 65 20  keys within the 
5ad0: 73 61 6d 65 20 70 61 67 65 20 61 72 65 20 75 6e  same page are un
5ae0: 69 71 75 65 20 61 6e 64 20 61 72 65 20 6c 6f 67  ique and are log
5af0: 69 63 61 6c 6c 79 0a 6f 72 67 61 6e 69 7a 65 64  ically.organized
5b00: 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
5b10: 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  der from left to
5b20: 20 72 69 67 68 74 2e 20 20 28 41 67 61 69 6e 2c   right.  (Again,
5b30: 20 74 68 69 73 20 6f 72 64 65 72 69 6e 67 0a 69   this ordering.i
5b40: 73 20 6c 6f 67 69 63 61 6c 2c 20 6e 6f 74 20 70  s logical, not p
5b50: 68 79 73 69 63 61 6c 2e 20 20 54 68 65 20 61 63  hysical.  The ac
5b60: 74 75 61 6c 20 6c 6f 63 61 74 69 6f 6e 20 6f 66  tual location of
5b70: 20 6b 65 79 73 20 77 69 74 68 69 6e 20 74 68 65   keys within the
5b80: 20 70 61 67 65 0a 69 73 20 61 72 62 69 74 72 61   page.is arbitra
5b90: 72 79 2e 29 20 5e 46 6f 72 20 61 6e 79 20 6b 65  ry.) ^For any ke
5ba0: 79 20 58 2c 20 70 6f 69 6e 74 65 72 73 20 74 6f  y X, pointers to
5bb0: 20 74 68 65 20 6c 65 66 74 0a 6f 66 20 61 20 58   the left.of a X
5bc0: 20 72 65 66 65 72 20 74 6f 20 62 2d 74 72 65 65   refer to b-tree
5bd0: 20 70 61 67 65 73 20 6f 6e 20 77 68 69 63 68 20   pages on which 
5be0: 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 6c 65 73  all keys are les
5bf0: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
5c00: 74 6f 20 58 2e 0a 5e 50 6f 69 6e 74 65 72 73 20  to X..^Pointers 
5c10: 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f 66 20  to the right of 
5c20: 58 20 72 65 66 65 72 20 74 6f 20 70 61 67 65 73  X refer to pages
5c30: 20 77 68 65 72 65 20 61 6c 6c 20 6b 65 79 73 20   where all keys 
5c40: 61 72 65 20 0a 67 72 65 61 74 65 72 20 74 68 61  are .greater tha
5c50: 6e 20 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 69 74  n X.</p>..<p>Wit
5c60: 68 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20  hin an interior 
5c70: 62 2d 74 72 65 65 20 70 61 67 65 2c 20 65 61 63  b-tree page, eac
5c80: 68 20 6b 65 79 20 61 6e 64 20 74 68 65 20 70 6f  h key and the po
5c90: 69 6e 74 65 72 20 74 6f 20 69 74 73 0a 69 6d 6d  inter to its.imm
5ca0: 65 64 69 61 74 65 20 6c 65 66 74 20 61 72 65 20  ediate left are 
5cb0: 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20  combined into a 
5cc0: 73 74 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64  structure called
5cd0: 20 61 20 22 63 65 6c 6c 22 2e 20 20 54 68 65 0a   a "cell".  The.
5ce0: 72 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74  right-most point
5cf0: 65 72 20 69 73 20 68 65 6c 64 20 73 65 70 61 72  er is held separ
5d00: 61 74 65 6c 79 2e 20 20 41 20 6c 65 61 66 20 62  ately.  A leaf b
5d10: 2d 74 72 65 65 20 70 61 67 65 20 68 61 73 20 6e  -tree page has n
5d20: 6f 0a 70 6f 69 6e 74 65 72 73 2c 20 62 75 74 20  o.pointers, but 
5d30: 69 74 20 73 74 69 6c 6c 20 75 73 65 73 20 74 68  it still uses th
5d40: 65 20 63 65 6c 6c 20 73 74 72 75 63 74 75 72 65  e cell structure
5d50: 20 74 6f 20 68 6f 6c 64 20 6b 65 79 73 20 66 6f   to hold keys fo
5d60: 72 0a 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20  r.index b-trees 
5d70: 6f 72 20 6b 65 79 73 20 61 6e 64 20 63 6f 6e 74  or keys and cont
5d80: 65 6e 74 20 66 6f 72 20 74 61 62 6c 65 20 62 2d  ent for table b-
5d90: 74 72 65 65 73 2e 20 20 44 61 74 61 20 69 73 20  trees.  Data is 
5da0: 61 6c 73 6f 0a 63 6f 6e 74 61 69 6e 65 64 20 69  also.contained i
5db0: 6e 20 74 68 65 20 63 65 6c 6c 2e 0a 3c 2f 70 3e  n the cell..</p>
5dc0: 0a 0a 3c 70 3e 45 76 65 72 79 20 62 2d 74 72 65  ..<p>Every b-tre
5dd0: 65 20 70 61 67 65 20 68 61 73 20 61 74 20 6d 6f  e page has at mo
5de0: 73 74 20 6f 6e 65 20 70 61 72 65 6e 74 20 62 2d  st one parent b-
5df0: 74 72 65 65 20 70 61 67 65 2e 0a 41 20 62 2d 74  tree page..A b-t
5e00: 72 65 65 20 70 61 67 65 20 77 69 74 68 6f 75 74  ree page without
5e10: 20 61 20 70 61 72 65 6e 74 20 69 73 20 63 61 6c   a parent is cal
5e20: 6c 65 64 20 61 20 72 6f 6f 74 20 70 61 67 65 2e  led a root page.
5e30: 20 20 41 20 72 6f 6f 74 20 62 2d 74 72 65 65 20    A root b-tree 
5e40: 70 61 67 65 0a 74 6f 67 65 74 68 65 72 20 77 69  page.together wi
5e50: 74 68 20 74 68 65 20 63 6c 6f 73 75 72 65 20 6f  th the closure o
5e60: 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e 20 66  f its children f
5e70: 6f 72 6d 20 61 20 63 6f 6d 70 6c 65 74 65 20 62  orm a complete b
5e80: 2d 74 72 65 65 2e 0a 49 74 20 69 73 20 70 6f 73  -tree..It is pos
5e90: 73 69 62 6c 65 20 28 61 6e 64 20 69 6e 20 66 61  sible (and in fa
5ea0: 63 74 20 72 61 74 68 65 72 20 63 6f 6d 6d 6f 6e  ct rather common
5eb0: 29 20 74 6f 20 68 61 76 65 20 61 20 63 6f 6d 70  ) to have a comp
5ec0: 6c 65 74 65 20 62 2d 74 72 65 65 0a 74 68 61 74  lete b-tree.that
5ed0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73   consists of a s
5ee0: 69 6e 67 6c 65 20 70 61 67 65 20 74 68 61 74 20  ingle page that 
5ef0: 69 73 20 62 6f 74 68 20 61 20 6c 65 61 66 20 61  is both a leaf a
5f00: 6e 64 20 74 68 65 20 72 6f 6f 74 2e 0a 42 65 63  nd the root..Bec
5f10: 61 75 73 65 20 74 68 65 72 65 20 61 72 65 20 70  ause there are p
5f20: 6f 69 6e 74 65 72 73 20 66 72 6f 6d 20 70 61 72  ointers from par
5f30: 65 6e 74 73 20 74 6f 20 63 68 69 6c 64 72 65 6e  ents to children
5f40: 2c 20 65 76 65 72 79 20 70 61 67 65 20 6f 66 20  , every page of 
5f50: 61 0a 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65  a.complete b-tre
5f60: 65 20 63 61 6e 20 62 65 20 6c 6f 63 61 74 65 64  e can be located
5f70: 20 69 66 20 6f 6e 6c 79 20 74 68 65 20 72 6f 6f   if only the roo
5f80: 74 20 70 61 67 65 20 69 73 20 6b 6e 6f 77 6e 2e  t page is known.
5f90: 20 20 48 65 6e 63 65 2c 0a 62 2d 74 72 65 65 73    Hence,.b-trees
5fa0: 20 61 72 65 20 69 64 65 6e 74 69 66 69 65 64 20   are identified 
5fb0: 62 79 20 74 68 65 69 72 20 72 6f 6f 74 20 70 61  by their root pa
5fc0: 67 65 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a  ge number.</p>..
5fd0: 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65  <p>A b-tree page
5fe0: 20 69 73 20 65 69 74 68 65 72 20 61 20 74 61 62   is either a tab
5ff0: 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 6f  le b-tree page o
6000: 72 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  r an index b-tre
6010: 65 20 70 61 67 65 2e 0a 41 6c 6c 20 70 61 67 65  e page..All page
6020: 73 20 77 69 74 68 69 6e 20 65 61 63 68 20 63 6f  s within each co
6030: 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 20 61 72  mplete b-tree ar
6040: 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20 74 79  e of the same ty
6050: 70 65 3a 20 65 69 74 68 65 72 20 74 61 62 6c 65  pe: either table
6060: 0a 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 65 72  .or index.  Ther
6070: 65 20 69 73 20 6f 6e 65 20 74 61 62 6c 65 20 62  e is one table b
6080: 2d 74 72 65 65 73 20 69 6e 20 74 68 65 20 64 61  -trees in the da
6090: 74 61 62 61 73 65 20 66 69 6c 65 0a 66 6f 72 20  tabase file.for 
60a0: 65 61 63 68 20 72 6f 77 69 64 20 74 61 62 6c 65  each rowid table
60b0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
60c0: 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64 69   schema, includi
60d0: 6e 67 20 73 79 73 74 65 6d 20 74 61 62 6c 65 73  ng system tables
60e0: 0a 73 75 63 68 20 61 73 20 73 71 6c 69 74 65 5f  .such as sqlite_
60f0: 6d 61 73 74 65 72 2e 20 20 54 68 65 72 65 20 69  master.  There i
6100: 73 20 6f 6e 65 20 69 6e 64 65 78 20 62 2d 74 72  s one index b-tr
6110: 65 65 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61  ee.in the databa
6120: 73 65 20 66 69 6c 65 20 66 6f 72 20 65 61 63 68  se file for each
6130: 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 73 63   index in the sc
6140: 68 65 6d 61 2c 20 69 6e 63 6c 75 64 69 6e 67 20  hema, including 
6150: 69 6d 70 6c 69 65 64 20 69 6e 64 65 78 65 73 0a  implied indexes.
6160: 63 72 65 61 74 65 64 20 62 79 20 75 6e 69 71 75  created by uniqu
6170: 65 6e 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 74  eness constraint
6180: 73 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f  s.  There are no
6190: 20 62 2d 74 72 65 65 73 20 61 73 73 6f 63 69 61   b-trees associa
61a0: 74 65 64 20 77 69 74 68 0a 5b 76 69 72 74 75 61  ted with.[virtua
61b0: 6c 20 74 61 62 6c 65 73 5d 2e 20 20 53 70 65 63  l tables].  Spec
61c0: 69 66 69 63 20 76 69 72 74 75 61 6c 20 74 61 62  ific virtual tab
61d0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
61e0: 6e 73 20 6d 69 67 68 74 20 6d 61 6b 65 20 75 73  ns might make us
61f0: 65 0a 6f 66 20 5b 73 68 61 64 6f 77 20 74 61 62  e.of [shadow tab
6200: 6c 65 73 5d 20 66 6f 72 20 73 74 6f 72 61 67 65  les] for storage
6210: 2c 20 62 75 74 20 74 68 6f 73 65 20 73 68 61 64  , but those shad
6220: 6f 77 20 74 61 62 6c 65 73 20 77 69 6c 6c 20 68  ow tables will h
6230: 61 76 65 20 73 65 70 61 72 61 74 65 0a 65 6e 74  ave separate.ent
6240: 72 69 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  ries in the data
6250: 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 5b 57  base schema.  [W
6260: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
6270: 62 6c 65 73 20 75 73 65 20 69 6e 64 65 78 20 62  bles use index b
6280: 2d 74 72 65 65 73 0a 72 61 74 68 65 72 20 74 68  -trees.rather th
6290: 61 6e 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  an a table b-tre
62a0: 65 73 2c 20 73 6f 20 74 68 65 72 65 20 69 73 20  es, so there is 
62b0: 6f 6e 65 0a 69 6e 64 65 78 20 62 2d 74 72 65 65  one.index b-tree
62c0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
62d0: 20 66 69 6c 65 20 66 6f 72 20 65 61 63 68 20 5b   file for each [
62e0: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
62f0: 61 62 6c 65 2e 0a 54 68 65 20 62 2d 74 72 65 65  able..The b-tree
6300: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
6310: 6f 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  o the sqlite_mas
6320: 74 65 72 20 74 61 62 6c 65 20 69 73 20 61 6c 77  ter table is alw
6330: 61 79 73 20 61 20 74 61 62 6c 65 0a 62 2d 74 72  ays a table.b-tr
6340: 65 65 20 61 6e 64 20 61 6c 77 61 79 73 20 68 61  ee and always ha
6350: 73 20 61 20 72 6f 6f 74 20 70 61 67 65 20 6f 66  s a root page of
6360: 20 31 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 6d   1..The sqlite_m
6370: 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74  aster table cont
6380: 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 20 70 61  ains the root pa
6390: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 65 76  ge number for ev
63a0: 65 72 79 20 6f 74 68 65 72 20 0a 74 61 62 6c 65  ery other .table
63b0: 20 61 6e 64 20 69 6e 64 65 78 20 69 6e 20 74 68   and index in th
63c0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
63d0: 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65 6e  </p>..<p>Each en
63e0: 74 72 79 20 69 6e 20 61 20 74 61 62 6c 65 20 62  try in a table b
63f0: 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20 6f  -tree consists o
6400: 66 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  f a 64-bit signe
6410: 64 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 61 6e  d integer key.an
6420: 64 20 75 70 20 74 6f 20 32 31 34 37 34 38 33 36  d up to 21474836
6430: 34 37 20 62 79 74 65 73 20 6f 66 20 61 72 62 69  47 bytes of arbi
6440: 74 72 61 72 79 20 64 61 74 61 2e 20 20 28 54 68  trary data.  (Th
6450: 65 20 6b 65 79 20 6f 66 20 61 20 74 61 62 6c 65  e key of a table
6460: 20 62 2d 74 72 65 65 0a 63 6f 72 72 65 73 70 6f   b-tree.correspo
6470: 6e 64 73 20 74 6f 20 74 68 65 20 5b 72 6f 77 69  nds to the [rowi
6480: 64 5d 20 6f 66 20 74 68 65 20 53 51 4c 20 74 61  d] of the SQL ta
6490: 62 6c 65 20 74 68 61 74 20 74 68 65 20 62 2d 74  ble that the b-t
64a0: 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 73 2e 29  ree implements.)
64b0: 0a 49 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20  .Interior table 
64c0: 62 2d 74 72 65 65 73 20 68 6f 6c 64 20 6f 6e 6c  b-trees hold onl
64d0: 79 20 6b 65 79 73 20 61 6e 64 20 70 6f 69 6e 74  y keys and point
64e0: 65 72 73 20 74 6f 20 63 68 69 6c 64 72 65 6e 2e  ers to children.
64f0: 0a 41 6c 6c 20 64 61 74 61 20 69 73 20 63 6f 6e  .All data is con
6500: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 74 61  tained in the ta
6510: 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 76 65  ble b-tree leave
6520: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20  s.</p>..<p>Each 
6530: 65 6e 74 72 79 20 69 6e 20 61 6e 20 69 6e 64 65  entry in an inde
6540: 78 20 62 2d 74 72 65 65 20 63 6f 6e 73 69 73 74  x b-tree consist
6550: 73 20 6f 66 20 61 6e 20 61 72 62 69 74 72 61 72  s of an arbitrar
6560: 79 20 6b 65 79 20 6f 66 20 75 70 0a 74 6f 20 32  y key of up.to 2
6570: 31 34 37 34 38 33 36 34 37 20 62 79 74 65 73 20  147483647 bytes 
6580: 69 6e 20 6c 65 6e 67 74 68 20 61 6e 64 20 6e 6f  in length and no
6590: 20 64 61 74 61 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   data.</p>..<tcl
65a0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c  >hd_fragment cel
65b0: 6c 5f 70 61 79 6c 6f 61 64 20 7b 63 65 6c 6c 20  l_payload {cell 
65c0: 70 61 79 6c 6f 61 64 7d 3c 2f 74 63 6c 3e 0a 3c  payload}</tcl>.<
65d0: 70 3e 44 65 66 69 6e 65 20 74 68 65 20 22 70 61  p>Define the "pa
65e0: 79 6c 6f 61 64 22 20 6f 66 20 61 20 63 65 6c 6c  yload" of a cell
65f0: 20 74 6f 20 62 65 20 74 68 65 20 61 72 62 69 74   to be the arbit
6600: 72 61 72 79 20 6c 65 6e 67 74 68 20 73 65 63 74  rary length sect
6610: 69 6f 6e 0a 6f 66 20 74 68 65 20 63 65 6c 6c 2e  ion.of the cell.
6620: 20 20 46 6f 72 20 61 6e 20 69 6e 64 65 78 20 62    For an index b
6630: 2d 74 72 65 65 2c 20 74 68 65 20 6b 65 79 20 69  -tree, the key i
6640: 73 20 61 6c 77 61 79 73 20 61 72 62 69 74 72 61  s always arbitra
6650: 72 79 20 69 6e 20 6c 65 6e 67 74 68 0a 61 6e 64  ry in length.and
6660: 20 68 65 6e 63 65 20 74 68 65 20 70 61 79 6c 6f   hence the paylo
6670: 61 64 20 69 73 20 74 68 65 20 6b 65 79 2e 20 20  ad is the key.  
6680: 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61 72 62  There are no arb
6690: 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20 65 6c  itrary length el
66a0: 65 6d 65 6e 74 73 0a 69 6e 20 74 68 65 20 63 65  ements.in the ce
66b0: 6c 6c 73 20 6f 66 20 69 6e 74 65 72 69 6f 72 20  lls of interior 
66c0: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67  table b-tree pag
66d0: 65 73 20 61 6e 64 20 73 6f 20 74 68 6f 73 65 20  es and so those 
66e0: 63 65 6c 6c 73 20 68 61 76 65 20 6e 6f 0a 70 61  cells have no.pa
66f0: 79 6c 6f 61 64 2e 20 20 54 61 62 6c 65 20 62 2d  yload.  Table b-
6700: 74 72 65 65 20 6c 65 61 66 20 70 61 67 65 73 20  tree leaf pages 
6710: 63 6f 6e 74 61 69 6e 20 61 72 62 69 74 72 61 72  contain arbitrar
6720: 79 20 6c 65 6e 67 74 68 20 63 6f 6e 74 65 6e 74  y length content
6730: 20 61 6e 64 0a 73 6f 20 66 6f 72 20 63 65 6c 6c   and.so for cell
6740: 73 20 6f 6e 20 74 68 6f 73 65 20 70 61 67 65 73  s on those pages
6750: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 73 20   the payload is 
6760: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 0a 3c 70 3e  the content..<p>
6770: 57 68 65 6e 20 74 68 65 20 73 69 7a 65 20 6f 66  When the size of
6780: 20 70 61 79 6c 6f 61 64 20 66 6f 72 20 61 20 63   payload for a c
6790: 65 6c 6c 20 65 78 63 65 65 64 73 20 61 20 63 65  ell exceeds a ce
67a0: 72 74 61 69 6e 20 74 68 72 65 73 68 6f 6c 64 20  rtain threshold 
67b0: 28 74 6f 0a 62 65 20 64 65 66 69 6e 65 64 20 6c  (to.be defined l
67c0: 61 74 65 72 29 20 74 68 65 6e 20 6f 6e 6c 79 20  ater) then only 
67d0: 74 68 65 20 66 69 72 73 74 20 66 65 77 20 62 79  the first few by
67e0: 74 65 73 20 6f 66 20 74 68 65 20 70 61 79 6c 6f  tes of the paylo
67f0: 61 64 0a 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  ad.are stored on
6800: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
6810: 20 61 6e 64 20 74 68 65 20 62 61 6c 61 6e 63 65   and the balance
6820: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20   is stored in a 
6830: 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 6f 66 20 63  linked list.of c
6840: 6f 6e 74 65 6e 74 20 6f 76 65 72 66 6c 6f 77 20  ontent overflow 
6850: 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41  pages.</p>..<p>A
6860: 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20   b-tree page is 
6870: 64 69 76 69 64 65 64 20 69 6e 74 6f 20 72 65 67  divided into reg
6880: 69 6f 6e 73 20 69 6e 20 74 68 65 20 66 6f 6c 6c  ions in the foll
6890: 6f 77 69 6e 67 20 6f 72 64 65 72 3a 0a 0a 3c 6f  owing order:..<o
68a0: 6c 3e 0a 3c 6c 69 3e 54 68 65 20 31 30 30 2d 62  l>.<li>The 100-b
68b0: 79 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  yte database fil
68c0: 65 20 68 65 61 64 65 72 20 28 66 6f 75 6e 64 20  e header (found 
68d0: 6f 6e 20 70 61 67 65 20 31 20 6f 6e 6c 79 29 0a  on page 1 only).
68e0: 3c 6c 69 3e 54 68 65 20 38 20 6f 72 20 31 32 20  <li>The 8 or 12 
68f0: 62 79 74 65 20 62 2d 74 72 65 65 20 70 61 67 65  byte b-tree page
6900: 20 68 65 61 64 65 72 0a 3c 6c 69 3e 54 68 65 20   header.<li>The 
6910: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72  cell pointer arr
6920: 61 79 0a 3c 6c 69 3e 55 6e 61 6c 6c 6f 63 61 74  ay.<li>Unallocat
6930: 65 64 20 73 70 61 63 65 0a 3c 6c 69 3e 54 68 65  ed space.<li>The
6940: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72   cell content ar
6950: 65 61 0a 3c 6c 69 3e 54 68 65 20 72 65 73 65 72  ea.<li>The reser
6960: 76 65 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 6f 6c  ved region..</ol
6970: 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 31  >.</p>..<p>The 1
6980: 30 30 2d 62 79 74 65 20 64 61 74 61 62 61 73 65  00-byte database
6990: 20 66 69 6c 65 20 68 65 61 64 65 72 20 69 73 20   file header is 
69a0: 66 6f 75 6e 64 20 6f 6e 6c 79 20 6f 6e 20 70 61  found only on pa
69b0: 67 65 20 31 2c 20 77 68 69 63 68 20 69 73 0a 61  ge 1, which is.a
69c0: 6c 77 61 79 73 20 61 20 74 61 62 6c 65 20 62 2d  lways a table b-
69d0: 74 72 65 65 20 70 61 67 65 2e 20 20 41 6c 6c 20  tree page.  All 
69e0: 6f 74 68 65 72 20 62 2d 74 72 65 65 20 70 61 67  other b-tree pag
69f0: 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
6a00: 73 65 20 66 69 6c 65 0a 6f 6d 69 74 20 74 68 69  se file.omit thi
6a10: 73 20 31 30 30 2d 62 79 74 65 20 68 65 61 64 65  s 100-byte heade
6a20: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72  r.</p>..<p>The r
6a30: 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69  eserved region i
6a40: 73 20 61 6e 20 61 72 65 61 20 6f 66 20 75 6e 75  s an area of unu
6a50: 73 65 64 20 73 70 61 63 65 20 61 74 20 74 68 65  sed space at the
6a60: 20 65 6e 64 20 6f 66 20 65 76 65 72 79 0a 70 61   end of every.pa
6a70: 67 65 20 28 65 78 63 65 70 74 20 74 68 65 20 6c  ge (except the l
6a80: 6f 63 6b 69 6e 67 20 70 61 67 65 29 20 74 68 61  ocking page) tha
6a90: 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e  t extensions can
6aa0: 20 75 73 65 20 74 6f 20 68 6f 6c 64 20 70 65 72   use to hold per
6ab0: 2d 70 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f  -page.informatio
6ac0: 6e 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f 66  n.  ^The size of
6ad0: 20 74 68 65 20 72 65 73 65 72 76 65 64 20 72 65   the reserved re
6ae0: 67 69 6f 6e 20 69 73 20 64 65 74 65 72 6d 69 6e  gion is determin
6af0: 65 64 20 62 79 20 74 68 65 20 6f 6e 65 2d 62 79  ed by the one-by
6b00: 74 65 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te.unsigned inte
6b10: 67 65 72 20 66 6f 75 6e 64 20 61 74 20 61 6e 20  ger found at an 
6b20: 6f 66 66 73 65 74 20 6f 66 20 32 30 20 69 6e 74  offset of 20 int
6b30: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
6b40: 69 6c 65 20 68 65 61 64 65 72 2e 0a 54 68 65 20  ile header..The 
6b50: 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65  size of the rese
6b60: 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 75  rved region is u
6b70: 73 75 61 6c 6c 79 20 7a 65 72 6f 2e 3c 2f 70 3e  sually zero.</p>
6b80: 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65 65 20  ..<p>The b-tree 
6b90: 70 61 67 65 20 68 65 61 64 65 72 20 69 73 20 38  page header is 8
6ba0: 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 20 66   bytes in size f
6bb0: 6f 72 20 6c 65 61 66 20 70 61 67 65 73 20 61 6e  or leaf pages an
6bc0: 64 20 31 32 0a 62 79 74 65 73 20 66 6f 72 20 69  d 12.bytes for i
6bd0: 6e 74 65 72 69 6f 72 20 70 61 67 65 73 2e 20 20  nterior pages.  
6be0: 41 6c 6c 20 6d 75 6c 74 69 62 79 74 65 20 76 61  All multibyte va
6bf0: 6c 75 65 73 20 69 6e 20 74 68 65 20 70 61 67 65  lues in the page
6c00: 20 68 65 61 64 65 72 0a 61 72 65 20 62 69 67 2d   header.are big-
6c10: 65 6e 64 69 61 6e 2e 0a 54 68 65 20 62 2d 74 72  endian..The b-tr
6c20: 65 65 20 70 61 67 65 20 68 65 61 64 65 72 20 69  ee page header i
6c30: 73 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68  s composed of th
6c40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69 65 6c  e following fiel
6c50: 64 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  ds:</p>..<center
6c60: 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 50 61 67 65  >.<i>B-tree Page
6c70: 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f   Header Format</
6c80: 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 62 6f  i><br>.<table bo
6c90: 72 64 65 72 3d 31 20 77 69 64 74 68 3d 22 38 30  rder=1 width="80
6ca0: 25 22 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73  %">.<tr><th>Offs
6cb0: 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65  et<th>Size<th>De
6cc0: 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74  scription.<tr><t
6cd0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6ce0: 61 6c 69 67 6e 3d 74 6f 70 3e 30 3c 74 64 20 61  align=top>0<td a
6cf0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6d00: 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67  gn=top>1<td alig
6d10: 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 6f 6e 65  n=left>.^The one
6d20: 2d 62 79 74 65 20 66 6c 61 67 20 61 74 20 6f 66  -byte flag at of
6d30: 66 73 65 74 20 30 20 69 6e 64 69 63 61 74 69 6e  fset 0 indicatin
6d40: 67 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  g the b-tree pag
6d50: 65 20 74 79 70 65 2e 0a 5e 41 20 76 61 6c 75 65  e type..^A value
6d60: 20 6f 66 20 32 20 6d 65 61 6e 73 20 74 68 65 20   of 2 means the 
6d70: 70 61 67 65 20 69 73 20 61 6e 20 69 6e 74 65 72  page is an inter
6d80: 69 6f 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65  ior index b-tree
6d90: 20 70 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20   page..^A value 
6da0: 6f 66 20 35 20 6d 65 61 6e 73 20 74 68 65 20 70  of 5 means the p
6db0: 61 67 65 20 69 73 20 61 6e 20 69 6e 74 65 72 69  age is an interi
6dc0: 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  or table b-tree 
6dd0: 70 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f  page..^A value o
6de0: 66 20 31 30 20 6d 65 61 6e 73 20 74 68 65 20 70  f 10 means the p
6df0: 61 67 65 20 69 73 20 61 20 6c 65 61 66 20 69 6e  age is a leaf in
6e00: 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e  dex b-tree page.
6e10: 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 31 33 20  .^A value of 13 
6e20: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
6e30: 73 20 61 20 6c 65 61 66 20 74 61 62 6c 65 20 62  s a leaf table b
6e40: 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 6e 79  -tree page..^Any
6e50: 20 6f 74 68 65 72 20 76 61 6c 75 65 20 66 6f 72   other value for
6e60: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
6e70: 20 74 79 70 65 20 69 73 20 61 6e 20 65 72 72 6f   type is an erro
6e80: 72 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  r..<tr><td align
6e90: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
6ea0: 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 63 65  op>1<td align=ce
6eb0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6ec0: 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  2<td align=left>
6ed0: 0a 5e 54 68 65 20 74 77 6f 2d 62 79 74 65 20 69  .^The two-byte i
6ee0: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
6ef0: 20 31 20 67 69 76 65 73 20 74 68 65 20 73 74 61   1 gives the sta
6f00: 72 74 20 6f 66 20 74 68 65 0a 66 69 72 73 74 20  rt of the.first 
6f10: 66 72 65 65 62 6c 6f 63 6b 20 6f 6e 20 74 68 65  freeblock on the
6f20: 20 70 61 67 65 2c 20 6f 72 20 69 73 20 7a 65 72   page, or is zer
6f30: 6f 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  o if there are n
6f40: 6f 20 66 72 65 65 62 6c 6f 63 6b 73 2e 0a 3c 74  o freeblocks..<t
6f50: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
6f60: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 33 3c  er valign=top>3<
6f70: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6f80: 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20  valign=top>2<td 
6f90: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65  align=left>.^The
6fa0: 20 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65   two-byte intege
6fb0: 72 20 61 74 20 6f 66 66 73 65 74 20 33 20 67 69  r at offset 3 gi
6fc0: 76 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ves the number o
6fd0: 66 20 63 65 6c 6c 73 20 6f 6e 20 74 68 65 20 70  f cells on the p
6fe0: 61 67 65 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  age..<tr><td ali
6ff0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7000: 3d 74 6f 70 3e 35 3c 74 64 20 61 6c 69 67 6e 3d  =top>5<td align=
7010: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7020: 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  p>2<td align=lef
7030: 74 3e 0a 5e 28 54 68 65 20 74 77 6f 2d 62 79 74  t>.^(The two-byt
7040: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
7050: 73 65 74 20 35 20 64 65 73 69 67 6e 61 74 65 73  set 5 designates
7060: 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
7070: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 0a 61  e cell content.a
7080: 72 65 61 2e 20 20 41 20 7a 65 72 6f 20 76 61 6c  rea.  A zero val
7090: 75 65 20 66 6f 72 20 74 68 69 73 20 69 6e 74 65  ue for this inte
70a0: 67 65 72 20 69 73 20 69 6e 74 65 72 70 72 65 74  ger is interpret
70b0: 65 64 20 61 73 20 36 35 35 33 36 2e 29 5e 0a 3c  ed as 65536.)^.<
70c0: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
70d0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 37  ter valign=top>7
70e0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
70f0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64   valign=top>1<td
7100: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68   align=left>.^Th
7110: 65 20 6f 6e 65 2d 62 79 74 65 20 69 6e 74 65 67  e one-byte integ
7120: 65 72 20 61 74 20 6f 66 66 73 65 74 20 37 20 67  er at offset 7 g
7130: 69 76 65 73 20 74 68 65 20 6e 75 6d 62 65 72 20  ives the number 
7140: 6f 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72  of fragmented fr
7150: 65 65 0a 62 79 74 65 73 20 77 69 74 68 69 6e 20  ee.bytes within 
7160: 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74  the cell content
7170: 20 61 72 65 61 2e 0a 3c 74 72 3e 3c 74 64 20 61   area..<tr><td a
7180: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7190: 67 6e 3d 74 6f 70 3e 38 3c 74 64 20 61 6c 69 67  gn=top>8<td alig
71a0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
71b0: 74 6f 70 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>4<td align=l
71c0: 65 66 74 3e 0a 5e 28 54 68 65 20 66 6f 75 72 2d  eft>.^(The four-
71d0: 62 79 74 65 20 70 61 67 65 20 6e 75 6d 62 65 72  byte page number
71e0: 20 61 74 20 6f 66 66 73 65 74 20 38 20 69 73 20   at offset 8 is 
71f0: 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 70  the right-most p
7200: 6f 69 6e 74 65 72 2e 20 20 54 68 69 73 0a 76 61  ointer.  This.va
7210: 6c 75 65 20 61 70 70 65 61 72 73 20 69 6e 20 74  lue appears in t
7220: 68 65 20 68 65 61 64 65 72 20 6f 66 20 69 6e 74  he header of int
7230: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
7240: 65 73 20 6f 6e 6c 79 20 61 6e 64 20 69 73 20 6f  es only and is o
7250: 6d 69 74 74 65 64 20 66 72 6f 6d 0a 61 6c 6c 20  mitted from.all 
7260: 6f 74 68 65 72 20 70 61 67 65 73 2e 29 5e 0a 3c  other pages.)^.<
7270: 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75  /table></blockqu
7280: 6f 74 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c  ote></center>..<
7290: 70 3e 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e  p>^The cell poin
72a0: 74 65 72 20 61 72 72 61 79 20 6f 66 20 61 20 62  ter array of a b
72b0: 2d 74 72 65 65 20 70 61 67 65 20 69 6d 6d 65 64  -tree page immed
72c0: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 74  iately follows t
72d0: 68 65 20 62 2d 74 72 65 65 0a 70 61 67 65 20 68  he b-tree.page h
72e0: 65 61 64 65 72 2e 20 20 4c 65 74 20 4b 20 62 65  eader.  Let K be
72f0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
7300: 65 6c 6c 73 20 6f 6e 20 74 68 65 20 62 74 72 65  ells on the btre
7310: 65 2e 20 20 5e 54 68 65 20 63 65 6c 6c 20 70 6f  e.  ^The cell po
7320: 69 6e 74 65 72 0a 61 72 72 61 79 20 63 6f 6e 73  inter.array cons
7330: 69 73 74 73 20 6f 66 20 4b 20 32 2d 62 79 74 65  ists of K 2-byte
7340: 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74 73   integer offsets
7350: 20 74 6f 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e   to the cell con
7360: 74 65 6e 74 73 2e 20 20 5e 54 68 65 0a 63 65 6c  tents.  ^The.cel
7370: 6c 20 70 6f 69 6e 74 65 72 73 20 61 72 65 20 61  l pointers are a
7380: 72 72 61 6e 67 65 64 20 69 6e 20 6b 65 79 20 6f  rranged in key o
7390: 72 64 65 72 20 77 69 74 68 20 6c 65 66 74 2d 6d  rder with left-m
73a0: 6f 73 74 20 63 65 6c 6c 20 28 74 68 65 20 63 65  ost cell (the ce
73b0: 6c 6c 20 77 69 74 68 20 74 68 65 0a 73 6d 61 6c  ll with the.smal
73c0: 6c 65 73 74 20 6b 65 79 29 20 66 69 72 73 74 20  lest key) first 
73d0: 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 6d 6f  and the right-mo
73e0: 73 74 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c  st cell (the cel
73f0: 6c 20 77 69 74 68 20 74 68 65 20 6c 61 72 67 65  l with the large
7400: 73 74 0a 6b 65 79 29 20 6c 61 73 74 2e 3c 2f 70  st.key) last.</p
7410: 3e 0a 0a 3c 70 3e 43 65 6c 6c 20 63 6f 6e 74 65  >..<p>Cell conte
7420: 6e 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  nt is stored in 
7430: 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74  the cell content
7440: 20 72 65 67 69 6f 6e 20 6f 66 20 74 68 65 20 62   region of the b
7450: 2d 74 72 65 65 20 70 61 67 65 2e 0a 53 51 4c 69  -tree page..SQLi
7460: 74 65 20 73 74 72 69 76 65 73 20 74 6f 20 70 6c  te strives to pl
7470: 61 63 65 20 63 65 6c 6c 73 20 61 73 20 66 61 72  ace cells as far
7480: 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 20   toward the end 
7490: 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  of the b-tree pa
74a0: 67 65 20 61 73 0a 69 74 20 63 61 6e 2c 20 69 6e  ge as.it can, in
74b0: 20 6f 72 64 65 72 20 74 6f 20 6c 65 61 76 65 20   order to leave 
74c0: 73 70 61 63 65 20 66 6f 72 20 66 75 74 75 72 65  space for future
74d0: 20 67 72 6f 77 74 68 20 6f 66 20 74 68 65 20 63   growth of the c
74e0: 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61  ell pointer arra
74f0: 79 2e 0a 54 68 65 20 61 72 65 61 20 69 6e 20 62  y..The area in b
7500: 65 74 77 65 65 6e 20 74 68 65 20 6c 61 73 74 20  etween the last 
7510: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72  cell pointer arr
7520: 61 79 20 65 6e 74 72 79 20 61 6e 64 20 74 68 65  ay entry and the
7530: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 74 68   beginning of.th
7540: 65 20 66 69 72 73 74 20 63 65 6c 6c 20 69 73 20  e first cell is 
7550: 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20  the unallocated 
7560: 72 65 67 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70  region..</p>..<p
7570: 3e 5e 49 66 20 61 20 70 61 67 65 20 63 6f 6e 74  >^If a page cont
7580: 61 69 6e 73 20 6e 6f 20 63 65 6c 6c 73 20 28 77  ains no cells (w
7590: 68 69 63 68 20 69 73 20 6f 6e 6c 79 20 70 6f 73  hich is only pos
75a0: 73 69 62 6c 65 20 66 6f 72 20 61 20 72 6f 6f 74  sible for a root
75b0: 20 70 61 67 65 0a 6f 66 20 61 20 74 61 62 6c 65   page.of a table
75c0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6e   that contains n
75d0: 6f 20 72 6f 77 73 29 20 74 68 65 6e 20 74 68 65  o rows) then the
75e0: 20 6f 66 66 73 65 74 20 74 6f 20 74 68 65 0a 63   offset to the.c
75f0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
7600: 20 77 69 6c 6c 20 65 71 75 61 6c 20 74 68 65 20   will equal the 
7610: 70 61 67 65 20 73 69 7a 65 20 6d 69 6e 75 73 20  page size minus 
7620: 74 68 65 20 62 79 74 65 73 20 6f 66 20 72 65 73  the bytes of res
7630: 65 72 76 65 64 20 73 70 61 63 65 2e 0a 5e 28 49  erved space..^(I
7640: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  f the database u
7650: 73 65 73 20 61 20 36 35 35 33 36 2d 62 79 74 65  ses a 65536-byte
7660: 20 70 61 67 65 20 73 69 7a 65 20 61 6e 64 20 74   page size and t
7670: 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61 63  he reserved spac
7680: 65 20 69 73 20 7a 65 72 6f 0a 28 74 68 65 20 75  e is zero.(the u
7690: 73 75 61 6c 20 76 61 6c 75 65 20 66 6f 72 20 72  sual value for r
76a0: 65 73 65 72 76 65 64 20 73 70 61 63 65 29 20 74  eserved space) t
76b0: 68 65 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e  hen the cell con
76c0: 74 65 6e 74 20 6f 66 66 73 65 74 20 6f 66 20 61  tent offset of a
76d0: 6e 0a 65 6d 70 74 79 20 70 61 67 65 20 77 61 6e  n.empty page wan
76e0: 74 73 20 74 6f 20 62 65 20 36 35 35 33 36 2e 20  ts to be 65536. 
76f0: 20 0a 48 6f 77 65 76 65 72 2c 20 74 68 61 74 20   .However, that 
7700: 69 6e 74 65 67 65 72 20 69 73 20 74 6f 6f 20 6c  integer is too l
7710: 61 72 67 65 20 74 6f 20 62 65 20 73 74 6f 72 65  arge to be store
7720: 64 20 69 6e 20 61 0a 32 2d 62 79 74 65 20 75 6e  d in a.2-byte un
7730: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
7740: 73 6f 20 61 20 76 61 6c 75 65 20 6f 66 20 30 20  so a value of 0 
7750: 69 73 20 75 73 65 64 20 69 6e 20 69 74 73 20 70  is used in its p
7760: 6c 61 63 65 2e 29 5e 0a 0a 3c 70 3e 41 20 66 72  lace.)^..<p>A fr
7770: 65 65 62 6c 6f 63 6b 20 69 73 20 61 20 73 74 72  eeblock is a str
7780: 75 63 74 75 72 65 20 75 73 65 64 20 74 6f 20 69  ucture used to i
7790: 64 65 6e 74 69 66 79 20 75 6e 61 6c 6c 6f 63 61  dentify unalloca
77a0: 74 65 64 20 73 70 61 63 65 20 77 69 74 68 69 6e  ted space within
77b0: 0a 61 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20  .a b-tree page. 
77c0: 20 46 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20   Freeblocks are 
77d0: 6f 72 67 61 6e 69 7a 65 64 20 61 73 20 61 20 63  organized as a c
77e0: 68 61 69 6e 2e 20 20 5e 54 68 65 20 66 69 72 73  hain.  ^The firs
77f0: 74 20 32 20 62 79 74 65 73 20 6f 66 0a 61 20 66  t 2 bytes of.a f
7800: 72 65 65 62 6c 6f 63 6b 20 61 72 65 20 61 20 62  reeblock are a b
7810: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
7820: 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f  r which is the o
7830: 66 66 73 65 74 20 69 6e 20 74 68 65 20 62 2d 74  ffset in the b-t
7840: 72 65 65 20 70 61 67 65 0a 6f 66 20 74 68 65 20  ree page.of the 
7850: 6e 65 78 74 20 66 72 65 65 62 6c 6f 63 6b 20 69  next freeblock i
7860: 6e 20 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20  n the chain, or 
7870: 7a 65 72 6f 20 69 66 20 74 68 65 20 66 72 65 65  zero if the free
7880: 62 6c 6f 63 6b 20 69 73 20 74 68 65 20 6c 61 73  block is the las
7890: 74 20 6f 6e 0a 74 68 65 20 63 68 61 69 6e 2e 20  t on.the chain. 
78a0: 20 5e 54 68 65 20 74 68 69 72 64 20 61 6e 64 20   ^The third and 
78b0: 66 6f 75 72 74 68 20 62 79 74 65 73 20 6f 66 20  fourth bytes of 
78c0: 65 61 63 68 20 66 72 65 65 62 6c 6f 63 6b 20 66  each freeblock f
78d0: 6f 72 6d 0a 61 20 62 69 67 2d 65 6e 64 69 61 6e  orm.a big-endian
78e0: 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
78f0: 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
7900: 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20 62  e freeblock in b
7910: 79 74 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 0a  ytes, including.
7920: 74 68 65 20 34 2d 62 79 74 65 20 68 65 61 64 65  the 4-byte heade
7930: 72 2e 20 20 5e 46 72 65 65 62 6c 6f 63 6b 73 20  r.  ^Freeblocks 
7940: 61 72 65 20 61 6c 77 61 79 73 20 63 6f 6e 6e 65  are always conne
7950: 63 74 65 64 20 69 6e 20 6f 72 64 65 72 20 0a 6f  cted in order .o
7960: 66 20 69 6e 63 72 65 61 73 69 6e 67 20 6f 66 66  f increasing off
7970: 73 65 74 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e  set.  ^The secon
7980: 64 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 62  d field of the b
7990: 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65  -tree page heade
79a0: 72 20 69 73 20 74 68 65 0a 6f 66 66 73 65 74 20  r is the.offset 
79b0: 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72 65  of the first fre
79c0: 65 62 6c 6f 63 6b 2c 20 6f 72 20 7a 65 72 6f 20  eblock, or zero 
79d0: 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
79e0: 66 72 65 65 62 6c 6f 63 6b 73 20 6f 6e 20 74 68  freeblocks on th
79f0: 65 0a 70 61 67 65 2e 20 20 5e 49 6e 20 61 20 77  e.page.  ^In a w
7a00: 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65  ell-formed b-tre
7a10: 65 20 70 61 67 65 2c 20 74 68 65 72 65 20 77 69  e page, there wi
7a20: 6c 6c 20 61 6c 77 61 79 73 20 62 65 20 61 74 20  ll always be at 
7a30: 6c 65 61 73 74 20 6f 6e 65 20 63 65 6c 6c 0a 62  least one cell.b
7a40: 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  efore the first 
7a50: 66 72 65 65 62 6c 6f 63 6b 2e 3c 2f 70 3e 0a 0a  freeblock.</p>..
7a60: 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 72  <p>A freeblock r
7a70: 65 71 75 69 72 65 73 20 61 74 20 6c 65 61 73 74  equires at least
7a80: 20 34 20 62 79 74 65 73 20 6f 66 20 73 70 61 63   4 bytes of spac
7a90: 65 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  e.  If there is 
7aa0: 61 6e 20 69 73 6f 6c 61 74 65 64 0a 67 72 6f 75  an isolated.grou
7ab0: 70 20 6f 66 20 31 2c 20 32 2c 20 6f 72 20 33 20  p of 1, 2, or 3 
7ac0: 75 6e 75 73 65 64 20 62 79 74 65 73 20 77 69 74  unused bytes wit
7ad0: 68 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e  hin the cell con
7ae0: 74 65 6e 74 20 61 72 65 61 2c 20 74 68 6f 73 65  tent area, those
7af0: 20 62 79 74 65 73 0a 63 6f 6d 70 72 69 73 65 20   bytes.comprise 
7b00: 61 20 66 72 61 67 6d 65 6e 74 2e 20 20 5e 54 68  a fragment.  ^Th
7b10: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
7b20: 66 20 62 79 74 65 73 20 69 6e 20 61 6c 6c 20 66  f bytes in all f
7b30: 72 61 67 6d 65 6e 74 73 20 69 73 20 73 74 6f 72  ragments is stor
7b40: 65 64 0a 69 6e 20 74 68 65 20 66 69 66 74 68 20  ed.in the fifth 
7b50: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74  field of the b-t
7b60: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 2e  ree page header.
7b70: 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72    ^In a well-for
7b80: 6d 65 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c  med b-tree page,
7b90: 0a 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65  .the total numbe
7ba0: 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 66 72  r of bytes in fr
7bb0: 61 67 6d 65 6e 74 73 20 6d 61 79 20 6e 6f 74 20  agments may not 
7bc0: 65 78 63 65 65 64 20 36 30 2e 3c 2f 70 3e 0a 0a  exceed 60.</p>..
7bd0: 3c 70 3e 54 68 65 20 74 6f 74 61 6c 20 61 6d 6f  <p>The total amo
7be0: 75 6e 74 20 6f 66 20 66 72 65 65 20 73 70 61 63  unt of free spac
7bf0: 65 20 6f 6e 20 61 20 62 2d 74 72 65 65 20 70 61  e on a b-tree pa
7c00: 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  ge consists of t
7c10: 68 65 20 73 69 7a 65 0a 6f 66 20 74 68 65 20 75  he size.of the u
7c20: 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f  nallocated regio
7c30: 6e 20 70 6c 75 73 20 74 68 65 20 74 6f 74 61 6c  n plus the total
7c40: 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20 66 72 65   size of all fre
7c50: 65 62 6c 6f 63 6b 73 20 70 6c 75 73 20 74 68 65  eblocks plus the
7c60: 0a 6e 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d  .number of fragm
7c70: 65 6e 74 65 64 20 66 72 65 65 20 62 79 74 65 73  ented free bytes
7c80: 2e 20 20 5e 53 51 4c 69 74 65 20 6d 61 79 20 66  .  ^SQLite may f
7c90: 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65  rom time to time
7ca0: 20 72 65 6f 72 67 61 6e 69 7a 65 0a 61 20 62 2d   reorganize.a b-
7cb0: 74 72 65 65 20 70 61 67 65 20 73 6f 20 74 68 61  tree page so tha
7cc0: 74 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66  t there are no f
7cd0: 72 65 65 62 6c 6f 63 6b 73 20 6f 72 20 66 72 61  reeblocks or fra
7ce0: 67 6d 65 6e 74 20 62 79 74 65 73 2c 20 61 6c 6c  gment bytes, all
7cf0: 0a 75 6e 75 73 65 64 20 62 79 74 65 73 20 61 72  .unused bytes ar
7d00: 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
7d10: 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73  he unallocated s
7d20: 70 61 63 65 20 72 65 67 69 6f 6e 2c 20 61 6e 64  pace region, and
7d30: 20 61 6c 6c 0a 63 65 6c 6c 73 20 61 72 65 20 70   all.cells are p
7d40: 61 63 6b 65 64 20 74 69 67 68 74 6c 79 20 61 74  acked tightly at
7d50: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
7d60: 70 61 67 65 2e 20 20 54 68 69 73 20 69 73 20 63  page.  This is c
7d70: 61 6c 6c 65 64 20 0a 22 64 65 66 72 61 67 6d 65  alled ."defragme
7d80: 6e 74 69 6e 67 22 20 74 68 65 20 62 2d 74 72 65  nting" the b-tre
7d90: 65 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  e page.</p>..<tc
7da0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61  l>hd_fragment va
7db0: 72 69 6e 74 20 7b 76 61 72 69 61 62 6c 65 2d 6c  rint {variable-l
7dc0: 65 6e 67 74 68 20 69 6e 74 65 67 65 72 7d 20 7b  ength integer} {
7dd0: 76 61 72 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c  varint}</tcl>..<
7de0: 70 3e 41 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  p>A variable-len
7df0: 67 74 68 20 69 6e 74 65 67 65 72 20 6f 72 20 22  gth integer or "
7e00: 76 61 72 69 6e 74 22 20 69 73 20 61 20 73 74 61  varint" is a sta
7e10: 74 69 63 20 48 75 66 66 6d 61 6e 20 65 6e 63 6f  tic Huffman enco
7e20: 64 69 6e 67 0a 6f 66 20 36 34 2d 62 69 74 20 74  ding.of 64-bit t
7e30: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
7e40: 6e 74 65 67 65 72 73 20 74 68 61 74 20 75 73 65  ntegers that use
7e50: 73 20 6c 65 73 73 20 73 70 61 63 65 20 66 6f 72  s less space for
7e60: 20 73 6d 61 6c 6c 20 70 6f 73 69 74 69 76 65 20   small positive 
7e70: 0a 76 61 6c 75 65 73 2e 20 0a 41 20 76 61 72 69  .values. .A vari
7e80: 6e 74 20 69 73 20 62 65 74 77 65 65 6e 20 31 20  nt is between 1 
7e90: 61 6e 64 20 39 20 62 79 74 65 73 20 69 6e 20 6c  and 9 bytes in l
7ea0: 65 6e 67 74 68 2e 20 20 54 68 65 20 76 61 72 69  ength.  The vari
7eb0: 6e 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 65  nt consists of e
7ec0: 69 74 68 65 72 0a 7a 65 72 6f 20 6f 72 20 6d 6f  ither.zero or mo
7ed0: 72 65 20 62 79 74 65 73 20 77 68 69 63 68 20 68  re bytes which h
7ee0: 61 76 65 20 74 68 65 20 68 69 67 68 2d 6f 72 64  ave the high-ord
7ef0: 65 72 20 62 69 74 20 73 65 74 20 66 6f 6c 6c 6f  er bit set follo
7f00: 77 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20  wed by a single 
7f10: 62 79 74 65 0a 77 69 74 68 20 74 68 65 20 68 69  byte.with the hi
7f20: 67 68 2d 6f 72 64 65 72 20 62 69 74 20 63 6c 65  gh-order bit cle
7f30: 61 72 2c 20 6f 72 20 6e 69 6e 65 20 62 79 74 65  ar, or nine byte
7f40: 73 2c 20 77 68 69 63 68 65 76 65 72 20 69 73 20  s, whichever is 
7f50: 73 68 6f 72 74 65 72 2e 0a 54 68 65 20 6c 6f 77  shorter..The low
7f60: 65 72 20 73 65 76 65 6e 20 62 69 74 73 20 6f 66  er seven bits of
7f70: 20 65 61 63 68 20 6f 66 20 74 68 65 20 66 69 72   each of the fir
7f80: 73 74 20 65 69 67 68 74 20 62 79 74 65 73 20 61  st eight bytes a
7f90: 6e 64 20 61 6c 6c 20 38 20 62 69 74 73 20 6f 66  nd all 8 bits of
7fa0: 0a 74 68 65 20 6e 69 6e 74 68 20 62 79 74 65 20  .the ninth byte 
7fb0: 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
7fc0: 6e 73 74 72 75 63 74 20 74 68 65 20 36 34 2d 62  nstruct the 64-b
7fd0: 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65  it twos-compleme
7fe0: 6e 74 20 69 6e 74 65 67 65 72 2e 0a 56 61 72 69  nt integer..Vari
7ff0: 6e 74 73 20 61 72 65 20 62 69 67 2d 65 6e 64 69  nts are big-endi
8000: 61 6e 3a 20 62 69 74 73 20 74 61 6b 65 6e 20 66  an: bits taken f
8010: 72 6f 6d 20 74 68 65 20 65 61 72 6c 69 65 72 20  rom the earlier 
8020: 62 79 74 65 20 6f 66 20 74 68 65 20 76 61 72 69  byte of the vari
8030: 6e 74 0a 61 72 65 20 74 68 65 20 6d 6f 72 65 20  nt.are the more 
8040: 73 69 67 6e 69 66 69 63 61 6e 74 20 74 68 61 6e  significant than
8050: 20 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d   bits taken from
8060: 20 74 68 65 20 6c 61 74 65 72 20 62 79 74 65 73   the later bytes
8070: 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66  . </p>..<p>The f
8080: 6f 72 6d 61 74 20 6f 66 20 61 20 63 65 6c 6c 20  ormat of a cell 
8090: 64 65 70 65 6e 64 73 20 6f 6e 20 77 68 69 63 68  depends on which
80a0: 20 6b 69 6e 64 20 6f 66 20 62 2d 74 72 65 65 20   kind of b-tree 
80b0: 70 61 67 65 20 74 68 65 20 63 65 6c 6c 0a 61 70  page the cell.ap
80c0: 70 65 61 72 73 20 6f 6e 2e 20 20 54 68 65 20 66  pears on.  The f
80d0: 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 73  ollowing table s
80e0: 68 6f 77 73 20 74 68 65 20 65 6c 65 6d 65 6e 74  hows the element
80f0: 73 20 6f 66 20 61 20 63 65 6c 6c 2c 20 69 6e 0a  s of a cell, in.
8100: 6f 72 64 65 72 20 6f 66 20 61 70 70 65 61 72 61  order of appeara
8110: 6e 63 65 2c 20 66 6f 72 20 74 68 65 20 76 61 72  nce, for the var
8120: 69 6f 75 73 20 62 2d 74 72 65 65 20 70 61 67 65  ious b-tree page
8130: 20 74 79 70 65 73 2e 3c 2f 70 3e 0a 0a 3c 62 6c   types.</p>..<bl
8140: 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c 3e 0a 3c 64  ockquote><dl>.<d
8150: 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65  t><p>Table B-Tre
8160: 65 20 4c 65 61 66 20 43 65 6c 6c 20 28 68 65 61  e Leaf Cell (hea
8170: 64 65 72 20 30 78 30 64 29 3a 3c 2f 70 3e 3c 2f  der 0x0d):</p></
8180: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a  dt>.<dd><p><ul>.
8190: 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69  <li>A varint whi
81a0: 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ch is the total 
81b0: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
81c0: 6f 66 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c  of payload, incl
81d0: 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c  uding any.overfl
81e0: 6f 77 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20  ow.<li>A varint 
81f0: 77 68 69 63 68 20 69 73 20 74 68 65 20 69 6e 74  which is the int
8200: 65 67 65 72 20 6b 65 79 2c 20 61 2e 6b 2e 61 2e  eger key, a.k.a.
8210: 20 22 5b 72 6f 77 69 64 5d 22 0a 3c 6c 69 3e 54   "[rowid]".<li>T
8220: 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69  he initial porti
8230: 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  on of the payloa
8240: 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  d that does not 
8250: 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f  spill to overflo
8260: 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34  w.pages..<li>A 4
8270: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
8280: 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75   integer page nu
8290: 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69 72  mber for the fir
82a0: 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f  st page of the.o
82b0: 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73  verflow page lis
82c0: 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61  t - omitted if a
82d0: 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20  ll payload fits 
82e0: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
82f0: 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64  ge..</ul></p></d
8300: 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65  d>..<dt><p>Table
8310: 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72   B-Tree Interior
8320: 20 43 65 6c 6c 20 28 68 65 61 64 65 72 20 30 78   Cell (header 0x
8330: 30 35 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64  05):</p></dt>.<d
8340: 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20  d><p><ul>.<li>A 
8350: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
8360: 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68  n page number wh
8370: 69 63 68 20 69 73 20 74 68 65 20 6c 65 66 74 20  ich is the left 
8380: 63 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c  child pointer..<
8390: 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63  li>A varint whic
83a0: 68 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72  h is the integer
83b0: 20 6b 65 79 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f   key.</ul></p></
83c0: 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65  dd>..<dt><p>Inde
83d0: 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65  x B-Tree Leaf Ce
83e0: 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30 61 29  ll (header 0x0a)
83f0: 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  :</p></dt>.<dd><
8400: 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72  p><ul>.<li>A var
8410: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
8420: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
8430: 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20 70 61   bytes of key pa
8440: 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67  yload, including
8450: 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c   any.overflow.<l
8460: 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f  i>The initial po
8470: 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79  rtion of the pay
8480: 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e  load that does n
8490: 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72  ot spill to over
84a0: 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e  flow.pages..<li>
84b0: 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  A 4-byte big-end
84c0: 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65  ian integer page
84d0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
84e0: 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74 68  first page of th
84f0: 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  e.overflow page 
8500: 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69  list - omitted i
8510: 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69  f all payload fi
8520: 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ts on the b-tree
8530: 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e   page..</ul></p>
8540: 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e  </dd>..<dt><p>In
8550: 64 65 78 20 42 2d 54 72 65 65 20 49 6e 74 65 72  dex B-Tree Inter
8560: 69 6f 72 20 43 65 6c 6c 20 28 68 65 61 64 65 72  ior Cell (header
8570: 20 30 78 30 32 29 3a 3c 2f 70 3e 3c 2f 64 74 3e   0x02):</p></dt>
8580: 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69  .<dd><p><ul>.<li
8590: 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  >A 4-byte big-en
85a0: 64 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72  dian page number
85b0: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 65   which is the le
85c0: 66 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 65 72  ft child pointer
85d0: 2e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77  ..<li>A varint w
85e0: 68 69 63 68 20 69 73 20 74 68 65 20 74 6f 74 61  hich is the tota
85f0: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
8600: 73 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64  s of key payload
8610: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a  , including any.
8620: 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65  overflow.<li>The
8630: 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e   initial portion
8640: 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20   of the payload 
8650: 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70  that does not sp
8660: 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a  ill to overflow.
8670: 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62  pages..<li>A 4-b
8680: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
8690: 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62  nteger page numb
86a0: 65 72 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  er for the first
86b0: 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65   page of the.ove
86c0: 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20  rflow page list 
86d0: 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c  - omitted if all
86e0: 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e   payload fits on
86f0: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
8700: 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e  ..</ul></p></dd>
8710: 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  .</dl></blockquo
8720: 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 66 6f  te>..<p>The info
8730: 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20 63 61  rmation above ca
8740: 6e 20 62 65 20 72 65 63 61 73 74 20 69 6e 74 6f  n be recast into
8750: 20 61 20 74 61 62 6c 65 20 66 6f 72 6d 61 74 20   a table format 
8760: 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as follows:</p>.
8770: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
8780: 74 20 63 65 6c 6c 66 6f 72 6d 61 74 20 7b 63 65  t cellformat {ce
8790: 6c 6c 20 66 6f 72 6d 61 74 20 73 75 6d 6d 61 72  ll format summar
87a0: 79 7d 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74 65 72  y}</tcl>.<center
87b0: 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 43 65 6c 6c  >.<i>B-tree Cell
87c0: 20 46 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74 61 62   Format</i>.<tab
87d0: 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64 74  le border=1 widt
87e0: 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68  h="80%">.<tr><th
87f0: 20 72 6f 77 73 70 61 6e 3d 32 3e 44 61 74 61 74   rowspan=2>Datat
8800: 79 70 65 0a 20 20 20 20 3c 74 68 20 63 6f 6c 73  ype.    <th cols
8810: 70 61 6e 3d 34 3e 41 70 70 65 61 72 73 20 69 6e  pan=4>Appears in
8820: 2e 2e 2e 0a 20 20 20 20 3c 74 68 20 72 6f 77 73  ....    <th rows
8830: 70 61 6e 3d 32 3e 44 65 73 63 72 69 70 74 69 6f  pan=2>Descriptio
8840: 6e 0a 3c 74 72 3e 3c 74 68 3e 54 61 62 6c 65 20  n.<tr><th>Table 
8850: 4c 65 61 66 20 28 30 78 30 64 29 0a 20 20 20 20  Leaf (0x0d).    
8860: 3c 74 68 3e 54 61 62 6c 65 20 49 6e 74 65 72 69  <th>Table Interi
8870: 6f 72 20 28 30 78 30 35 29 0a 20 20 20 20 3c 74  or (0x05).    <t
8880: 68 3e 49 6e 64 65 78 20 4c 65 61 66 20 28 30 78  h>Index Leaf (0x
8890: 30 61 29 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65  0a).    <th>Inde
88a0: 78 20 49 6e 74 65 72 69 6f 72 20 28 30 78 30 32  x Interior (0x02
88b0: 29 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  ).<tr><td align=
88c0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
88d0: 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  p>4-byte integer
88e0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
88f0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8900: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
8910: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8920: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8930: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8940: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8950: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
8960: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8970: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8980: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c  .    <td align=l
8990: 65 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72 20  eft>Page number 
89a0: 6f 66 20 6c 65 66 74 20 63 68 69 6c 64 0a 3c 74  of left child.<t
89b0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
89c0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61  er valign=top>va
89d0: 72 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69  rint.    <td ali
89e0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
89f0: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8a00: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8a10: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
8a20: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
8a30: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8a40: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8a50: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8a60: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
8a70: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
8a80: 6c 69 67 6e 3d 6c 65 66 74 3e 4e 75 6d 62 65 72  lign=left>Number
8a90: 20 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61 79   of bytes of pay
8aa0: 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  load.<tr><td ali
8ab0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8ac0: 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20  =top>varint.    
8ad0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8ae0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8af0: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8b00: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8b10: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8b20: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8b30: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
8b40: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
8b50: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8b60: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8b70: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 52  <td align=left>R
8b80: 6f 77 69 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  owid.<tr><td ali
8b90: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8ba0: 3d 74 6f 70 3e 62 79 74 65 20 61 72 72 61 79 0a  =top>byte array.
8bb0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8bc0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8bd0: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8be0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8bf0: 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a  lign=top>&nbsp;.
8c00: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8c10: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8c20: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8c30: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8c40: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8c50: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8c60: 6c 65 66 74 3e 50 61 79 6c 6f 61 64 0a 3c 74 72  left>Payload.<tr
8c70: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
8c80: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62  r valign=top>4-b
8c90: 79 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20  yte integer.    
8ca0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8cb0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8cc0: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8cd0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8ce0: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8cf0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8d00: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8d10: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8d20: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8d30: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8d40: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74    <td align=left
8d50: 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20  >Page number of 
8d60: 66 69 72 73 74 20 6f 76 65 72 66 6c 6f 77 20 70  first overflow p
8d70: 61 67 65 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65  age.</table></ce
8d80: 6e 74 65 72 3e 0a 0a 0a 0a 3c 74 72 3e 3c 74 64  nter>....<tr><td
8d90: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8da0: 6c 69 67 6e 3d 74 6f 70 3e 0a 0a 3c 70 3e 54 68  lign=top>..<p>Th
8db0: 65 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c  e amount of payl
8dc0: 6f 61 64 20 74 68 61 74 20 73 70 69 6c 6c 73 20  oad that spills 
8dd0: 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61  onto overflow pa
8de0: 67 65 73 20 61 6c 73 6f 20 64 65 70 65 6e 64 73  ges also depends
8df0: 20 6f 6e 0a 74 68 65 20 70 61 67 65 20 74 79 70   on.the page typ
8e00: 65 2e 20 20 46 6f 72 20 74 68 65 20 66 6f 6c 6c  e.  For the foll
8e10: 6f 77 69 6e 67 20 63 6f 6d 70 75 74 61 74 69 6f  owing computatio
8e20: 6e 73 2c 20 6c 65 74 20 55 20 62 65 20 74 68 65  ns, let U be the
8e30: 20 75 73 61 62 6c 65 20 73 69 7a 65 0a 6f 66 20   usable size.of 
8e40: 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65 2c  a database page,
8e50: 20 74 68 65 20 74 6f 74 61 6c 20 70 61 67 65 20   the total page 
8e60: 73 69 7a 65 20 6c 65 73 73 20 74 68 65 20 72 65  size less the re
8e70: 73 65 72 76 65 64 20 73 70 61 63 65 20 61 74 20  served space at 
8e80: 74 68 65 0a 65 6e 64 20 6f 66 20 65 61 63 68 20  the.end of each 
8e90: 70 61 67 65 2e 20 20 41 6e 64 20 6c 65 74 20 50  page.  And let P
8ea0: 20 62 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20   be the payload 
8eb0: 73 69 7a 65 2e 20 20 49 6e 20 74 68 65 20 66 6f  size.  In the fo
8ec0: 6c 6c 6f 77 69 6e 67 2c 0a 73 79 6d 62 6f 6c 20  llowing,.symbol 
8ed0: 58 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  X represents the
8ee0: 20 6d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20   maximum amount 
8ef0: 6f 66 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20  of payload that 
8f00: 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 64 69  can be stored di
8f10: 72 65 63 74 6c 79 0a 6f 6e 20 74 68 65 20 62 2d  rectly.on the b-
8f20: 74 72 65 65 20 70 61 67 65 20 77 69 74 68 6f 75  tree page withou
8f30: 74 20 73 70 69 6c 6c 69 6e 67 20 6f 6e 74 6f 20  t spilling onto 
8f40: 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  an overflow page
8f50: 20 61 6e 64 20 73 79 6d 62 6f 6c 20 4d 0a 72 65   and symbol M.re
8f60: 70 72 65 73 65 6e 74 73 20 74 68 65 20 6d 69 6e  presents the min
8f70: 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 70  imum amount of p
8f80: 61 79 6c 6f 61 64 20 74 68 61 74 20 6d 75 73 74  ayload that must
8f90: 20 62 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68   be stored on th
8fa0: 65 20 62 74 72 65 65 0a 70 61 67 65 20 62 65 66  e btree.page bef
8fb0: 6f 72 65 20 73 70 69 6c 6c 69 6e 67 20 69 73 20  ore spilling is 
8fc0: 61 6c 6c 6f 77 65 64 2e 3c 2f 70 3e 0a 0a 3c 62  allowed.</p>..<b
8fd0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c 3e 0a 3c  lockquote><dl>.<
8fe0: 64 74 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20  dt>Table B-Tree 
8ff0: 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a  Leaf Cell:</dt>.
9000: 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74 20 58 20  <dd><p>.^(Let X 
9010: 62 65 20 55 2d 33 35 2e 20 20 49 66 20 74 68 65  be U-35.  If the
9020: 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50 20   payload size P 
9030: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
9040: 65 71 75 61 6c 20 74 6f 20 58 20 74 68 65 6e 0a  equal to X then.
9050: 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f  the entire paylo
9060: 61 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  ad is stored on 
9070: 74 68 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20  the b-tree leaf 
9080: 70 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20  page.)^.^(Let M 
9090: 62 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35  be ((U-12)*32/25
90a0: 35 29 2d 32 33 20 61 6e 64 20 6c 65 74 20 4b 20  5)-23 and let K 
90b0: 62 65 20 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34  be M+((P-M)%(U-4
90c0: 29 29 2e 0a 49 66 20 50 20 69 73 20 67 72 65 61  ))..If P is grea
90d0: 74 65 72 20 74 68 61 6e 20 58 0a 74 68 65 6e 20  ter than X.then 
90e0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
90f0: 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68  tes stored on th
9100: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c  e table b-tree l
9110: 65 61 66 20 70 61 67 65 20 69 73 20 4b 0a 69 66  eaf page is K.if
9120: 20 4b 20 69 73 20 6c 65 73 73 20 6f 72 20 65 71   K is less or eq
9130: 75 61 6c 20 74 6f 20 58 20 6f 72 20 4d 20 6f 74  ual to X or M ot
9140: 68 65 72 77 69 73 65 2e 29 5e 0a 5e 28 4e 6f 74  herwise.)^.^(Not
9150: 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20 6f 66  e that number of
9160: 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e   bytes stored on
9170: 20 74 68 65 20 6c 65 61 66 20 70 61 67 65 20 69   the leaf page i
9180: 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68 61  s never less tha
9190: 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e  n M.)^.</p></dd>
91a0: 0a 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54 72  ..<dt>Table B-Tr
91b0: 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c  ee Interior Cell
91c0: 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 49  :</dt>.<dd><p>.I
91d0: 6e 74 65 72 69 6f 72 20 70 61 67 65 73 20 6f 66  nterior pages of
91e0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68   table b-trees h
91f0: 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61 64 20 61  ave no payload a
9200: 6e 64 20 73 6f 20 74 68 65 72 65 20 69 73 20 6e  nd so there is n
9210: 65 76 65 72 0a 61 6e 79 20 70 61 79 6c 6f 61 64  ever.any payload
9220: 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70 3e 3c   to spill..</p><
9230: 2f 64 64 3e 0a 0a 3c 64 74 3e 49 6e 64 65 78 20  /dd>..<dt>Index 
9240: 42 2d 54 72 65 65 20 4c 65 61 66 20 4f 72 20 49  B-Tree Leaf Or I
9250: 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64  nterior Cell:</d
9260: 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74  t>.<dd><p>.^(Let
9270: 20 58 20 62 65 20 28 28 55 2d 31 32 29 2a 36 34   X be ((U-12)*64
9280: 2f 32 35 35 29 2d 32 33 29 2e 20 20 49 66 20 74  /255)-23).  If t
9290: 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20  he payload size 
92a0: 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 6f  P is less than.o
92b0: 72 20 65 71 75 61 6c 20 74 6f 20 58 20 74 68 65  r equal to X the
92c0: 6e 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 79  n the entire pay
92d0: 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20 6f  load is stored o
92e0: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
92f0: 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62 65 20  e.)^.^(Let M be 
9300: 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d  ((U-12)*32/255)-
9310: 32 33 20 61 6e 64 20 6c 65 74 20 4b 20 62 65 20  23 and let K be 
9320: 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 2e  M+((P-M)%(U-4)).
9330: 0a 49 66 20 50 20 69 73 20 67 72 65 61 74 65 72  .If P is greater
9340: 20 74 68 61 6e 20 58 20 74 68 65 6e 20 74 68 65   than X then the
9350: 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73   number.of bytes
9360: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 69   stored on the i
9370: 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65  ndex b-tree page
9380: 20 69 73 20 4b 20 69 66 20 4b 20 69 73 20 6c 65   is K if K is le
9390: 73 73 20 74 68 61 6e 20 6f 72 0a 65 71 75 61 6c  ss than or.equal
93a0: 20 74 6f 20 58 20 6f 72 20 4d 20 6f 74 68 65 72   to X or M other
93b0: 77 69 73 65 2e 29 5e 0a 5e 28 4e 6f 74 65 20 74  wise.)^.^(Note t
93c0: 68 61 74 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  hat number of by
93d0: 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68  tes stored on th
93e0: 65 20 69 6e 64 65 78 20 70 61 67 65 20 69 73 20  e index page is 
93f0: 6e 65 76 65 72 20 6c 65 73 73 20 74 68 61 6e 20  never less than 
9400: 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c  M.)^.</p></dd>.<
9410: 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  /dl></blockquote
9420: 3e 0a 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 6e  >..<p>Here is an
9430: 20 61 6c 74 65 72 6e 61 74 69 76 65 20 64 65 73   alternative des
9440: 63 72 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20  cription of the 
9450: 73 61 6d 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e  same computation
9460: 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 58 20 69 73  :..<ul>.<li>X is
9470: 20 55 2d 33 35 20 66 6f 72 20 74 61 62 6c 65 20   U-35 for table 
9480: 62 74 72 65 65 20 6c 65 61 66 20 70 61 67 65 73  btree leaf pages
9490: 20 6f 72 0a 20 20 20 20 28 28 55 2d 31 32 29 2a   or.    ((U-12)*
94a0: 36 34 2f 32 35 35 29 2d 32 33 20 66 6f 72 20 69  64/255)-23 for i
94b0: 6e 64 65 78 20 70 61 67 65 73 2e 0a 3c 6c 69 3e  ndex pages..<li>
94c0: 4d 20 69 73 20 61 6c 77 61 79 73 20 28 28 55 2d  M is always ((U-
94d0: 31 32 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e 0a  12)*32/255)-23..
94e0: 3c 6c 69 3e 4c 65 74 20 4b 20 62 65 20 4d 2b 28  <li>Let K be M+(
94f0: 28 50 2d 4d 29 25 28 55 2d 34 29 29 2e 0a 3c 6c  (P-M)%(U-4))..<l
9500: 69 3e 5e 49 66 20 50 3c 3d 58 20 74 68 65 6e 20  i>^If P<=X then 
9510: 61 6c 6c 20 50 20 62 79 74 65 73 20 6f 66 20 70  all P bytes of p
9520: 61 79 6c 6f 61 64 20 61 72 65 20 73 74 6f 72 65  ayload are store
9530: 64 20 64 69 72 65 63 74 6c 79 20 6f 6e 20 74 68  d directly on th
9540: 65 20 0a 20 20 20 20 62 74 72 65 65 20 70 61 67  e .    btree pag
9550: 65 20 77 69 74 68 6f 75 74 20 6f 76 65 72 66 6c  e without overfl
9560: 6f 77 2e 0a 3c 6c 69 3e 5e 49 66 20 50 3e 58 20  ow..<li>^If P>X 
9570: 61 6e 64 20 4b 3c 3d 58 20 74 68 65 6e 20 74 68  and K<=X then th
9580: 65 20 66 69 72 73 74 20 4b 20 62 79 74 65 73 20  e first K bytes 
9590: 6f 66 20 50 20 61 72 65 20 73 74 6f 72 65 64 20  of P are stored 
95a0: 6f 6e 20 74 68 65 20 0a 20 20 20 20 62 74 72 65  on the .    btre
95b0: 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20 72  e page and the r
95c0: 65 6d 61 69 6e 69 6e 67 20 50 2d 4b 20 62 79 74  emaining P-K byt
95d0: 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  es are stored on
95e0: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e   overflow pages.
95f0: 0a 3c 6c 69 3e 5e 49 66 20 50 3e 58 20 61 6e 64  .<li>^If P>X and
9600: 20 4b 3e 58 20 74 68 65 6e 20 74 68 65 20 66 69   K>X then the fi
9610: 72 73 74 20 4d 20 62 79 74 65 73 20 6f 66 20 50  rst M bytes of P
9620: 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74   are stored on t
9630: 68 65 0a 20 20 20 20 62 74 72 65 65 20 70 61 67  he.    btree pag
9640: 65 20 61 6e 64 20 74 68 65 20 72 65 6d 61 69 6e  e and the remain
9650: 69 6e 67 20 50 2d 4d 20 62 79 74 65 73 20 61 72  ing P-M bytes ar
9660: 65 20 73 74 6f 72 65 64 20 6f 6e 20 6f 76 65 72  e stored on over
9670: 66 6c 6f 77 20 70 61 67 65 73 2e 0a 3c 2f 75 6c  flow pages..</ul
9680: 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76 65 72 66 6c  >..<p>The overfl
9690: 6f 77 20 74 68 72 65 73 68 6f 6c 64 73 20 61 72  ow thresholds ar
96a0: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 67 69  e designed to gi
96b0: 76 65 20 61 20 6d 69 6e 69 6d 75 6d 20 66 61 6e  ve a minimum fan
96c0: 6f 75 74 20 6f 66 0a 34 20 66 6f 72 20 69 6e 64  out of.4 for ind
96d0: 65 78 20 62 2d 74 72 65 65 73 20 61 6e 64 20 74  ex b-trees and t
96e0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 6e 6f 75  o make sure enou
96f0: 67 68 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  gh of the payloa
9700: 64 0a 69 73 20 6f 6e 20 74 68 65 20 62 2d 74 72  d.is on the b-tr
9710: 65 65 20 70 61 67 65 20 74 68 61 74 20 74 68 65  ee page that the
9720: 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 63   record header c
9730: 61 6e 20 75 73 75 61 6c 6c 79 20 62 65 20 61 63  an usually be ac
9740: 63 65 73 73 65 64 0a 77 69 74 68 6f 75 74 20 63  cessed.without c
9750: 6f 6e 73 75 6c 74 69 6e 67 20 61 6e 20 6f 76 65  onsulting an ove
9760: 72 66 6c 6f 77 20 70 61 67 65 2e 20 20 49 6e 20  rflow page.  In 
9770: 68 69 6e 64 73 69 67 68 74 2c 20 74 68 65 20 64  hindsight, the d
9780: 65 73 69 67 6e 65 72 73 20 6f 66 0a 74 68 65 20  esigners of.the 
9790: 53 51 4c 69 74 65 20 62 2d 74 72 65 65 20 6c 6f  SQLite b-tree lo
97a0: 67 69 63 20 72 65 61 6c 69 7a 65 20 74 68 61 74  gic realize that
97b0: 20 74 68 65 73 65 20 74 68 72 65 73 68 6f 6c 64   these threshold
97c0: 73 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65  s could have bee
97d0: 6e 0a 6d 61 64 65 20 6d 75 63 68 20 73 69 6d 70  n.made much simp
97e0: 6c 65 72 2e 20 20 48 6f 77 65 76 65 72 2c 20 74  ler.  However, t
97f0: 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20  he computations 
9800: 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65  cannot be change
9810: 64 0a 77 69 74 68 6f 75 74 20 72 65 73 75 6c 74  d.without result
9820: 69 6e 67 20 69 6e 20 61 6e 20 69 6e 63 6f 6d 70  ing in an incomp
9830: 61 74 69 62 6c 65 20 66 69 6c 65 20 66 6f 72 6d  atible file form
9840: 61 74 2e 20 20 41 6e 64 20 74 68 65 20 63 75 72  at.  And the cur
9850: 72 65 6e 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e  rent computation
9860: 73 0a 77 6f 72 6b 20 77 65 6c 6c 2c 20 65 76 65  s.work well, eve
9870: 6e 20 69 66 20 74 68 65 79 20 61 72 65 20 61 20  n if they are a 
9880: 6c 69 74 74 6c 65 20 63 6f 6d 70 6c 65 78 2e 3c  little complex.<
9890: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
98a0: 67 6d 65 6e 74 20 6f 76 66 6c 70 67 73 20 7b 6f  gment ovflpgs {o
98b0: 76 65 72 66 6c 6f 77 20 70 61 67 65 7d 20 7b 6f  verflow page} {o
98c0: 76 65 72 66 6c 6f 77 20 70 61 67 65 73 7d 3c 2f  verflow pages}</
98d0: 74 63 6c 3e 0a 3c 68 33 3e 31 2e 36 20 43 65 6c  tcl>.<h3>1.6 Cel
98e0: 6c 20 50 61 79 6c 6f 61 64 20 4f 76 65 72 66 6c  l Payload Overfl
98f0: 6f 77 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c  ow Pages</h3>..<
9900: 70 3e 5e 57 68 65 6e 20 74 68 65 20 70 61 79 6c  p>^When the payl
9910: 6f 61 64 20 6f 66 20 61 20 62 2d 74 72 65 65 20  oad of a b-tree 
9920: 63 65 6c 6c 20 69 73 20 74 6f 6f 20 6c 61 72 67  cell is too larg
9930: 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72 65 65  e for the b-tree
9940: 20 70 61 67 65 2c 0a 74 68 65 20 73 75 72 70 6c   page,.the surpl
9950: 75 73 20 69 73 20 73 70 69 6c 6c 65 64 20 6f 6e  us is spilled on
9960: 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  to overflow page
9970: 73 2e 20 20 5e 4f 76 65 72 66 6c 6f 77 20 70 61  s.  ^Overflow pa
9980: 67 65 73 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65  ges form a linke
9990: 64 0a 6c 69 73 74 2e 20 20 5e 54 68 65 20 66 69  d.list.  ^The fi
99a0: 72 73 74 20 66 6f 75 72 20 62 79 74 65 73 20 6f  rst four bytes o
99b0: 66 20 65 61 63 68 20 6f 76 65 72 66 6c 6f 77 20  f each overflow 
99c0: 70 61 67 65 20 61 72 65 20 61 20 62 69 67 2d 65  page are a big-e
99d0: 6e 64 69 61 6e 0a 69 6e 74 65 67 65 72 20 77 68  ndian.integer wh
99e0: 69 63 68 20 69 73 20 74 68 65 20 70 61 67 65 20  ich is the page 
99f0: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
9a00: 78 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 63  xt page in the c
9a10: 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 0a 66 6f  hain, or zero.fo
9a20: 72 20 74 68 65 20 66 69 6e 61 6c 20 70 61 67 65  r the final page
9a30: 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e 20 20   in the chain.  
9a40: 5e 54 68 65 20 66 69 66 74 68 20 62 79 74 65 20  ^The fifth byte 
9a50: 74 68 72 6f 75 67 68 20 74 68 65 20 6c 61 73 74  through the last
9a60: 20 75 73 61 62 6c 65 0a 62 79 74 65 20 61 72 65   usable.byte are
9a70: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 6f 76   used to hold ov
9a80: 65 72 66 6c 6f 77 20 63 6f 6e 74 65 6e 74 2e 3c  erflow content.<
9a90: 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 37 20 50 6f 69  /p>..<h3>1.7 Poi
9aa0: 6e 74 65 72 20 4d 61 70 20 6f 72 20 50 74 72 6d  nter Map or Ptrm
9ab0: 61 70 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c  ap Pages</h3>..<
9ac0: 70 3e 50 6f 69 6e 74 65 72 20 6d 61 70 20 6f 72  p>Pointer map or
9ad0: 20 70 74 72 6d 61 70 20 70 61 67 65 73 20 61 72   ptrmap pages ar
9ae0: 65 20 65 78 74 72 61 20 70 61 67 65 73 20 69 6e  e extra pages in
9af0: 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
9b00: 64 61 74 61 62 61 73 65 0a 74 6f 20 6d 61 6b 65  database.to make
9b10: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
9b20: 66 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  f [auto_vacuum] 
9b30: 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e 74 61 6c  and [incremental
9b40: 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 73 0a 6d  _vacuum] modes.m
9b50: 6f 72 65 20 65 66 66 69 63 69 65 6e 74 2e 20 20  ore efficient.  
9b60: 4f 74 68 65 72 20 70 61 67 65 20 74 79 70 65 73  Other page types
9b70: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
9b80: 20 74 79 70 69 63 61 6c 6c 79 20 68 61 76 65 20   typically have 
9b90: 70 6f 69 6e 74 65 72 73 0a 66 72 6f 6d 20 70 61  pointers.from pa
9ba0: 72 65 6e 74 20 74 6f 20 63 68 69 6c 64 2e 20 20  rent to child.  
9bb0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6e 20  For example, an 
9bc0: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
9bd0: 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 70 6f  page contains po
9be0: 69 6e 74 65 72 73 0a 74 6f 20 69 74 73 20 63 68  inters.to its ch
9bf0: 69 6c 64 20 62 2d 74 72 65 65 20 70 61 67 65 73  ild b-tree pages
9c00: 20 61 6e 64 20 61 6e 20 6f 76 65 72 66 6c 6f 77   and an overflow
9c10: 20 63 68 61 69 6e 20 68 61 73 20 61 20 70 6f 69   chain has a poi
9c20: 6e 74 65 72 0a 66 72 6f 6d 20 65 61 72 6c 69 65  nter.from earlie
9c30: 72 20 74 6f 20 6c 61 74 65 72 20 6c 69 6e 6b 73  r to later links
9c40: 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e 20 20   in the chain.  
9c50: 41 20 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f  A ptrmap page co
9c60: 6e 74 61 69 6e 73 20 6c 69 6e 6b 61 67 65 0a 69  ntains linkage.i
9c70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6f 69 6e 67  nformation going
9c80: 20 69 6e 20 74 68 65 20 6f 70 70 6f 73 69 74 65   in the opposite
9c90: 20 64 69 72 65 63 74 69 6f 6e 2c 20 66 72 6f 6d   direction, from
9ca0: 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74   child to parent
9cb0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50 74 72 6d 61  .</p>..<p>^Ptrma
9cc0: 70 20 70 61 67 65 73 20 6d 75 73 74 20 65 78 69  p pages must exi
9cd0: 73 74 20 69 6e 20 61 6e 79 20 64 61 74 61 62 61  st in any databa
9ce0: 73 65 20 66 69 6c 65 20 77 68 69 63 68 20 68 61  se file which ha
9cf0: 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a 6c 61 72  s a non-zero.lar
9d00: 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65  gest root b-tree
9d10: 20 70 61 67 65 20 76 61 6c 75 65 20 61 74 20 6f   page value at o
9d20: 66 66 73 65 74 20 35 32 20 69 6e 20 74 68 65 20  ffset 52 in the 
9d30: 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 2e  database header.
9d40: 0a 5e 49 66 20 74 68 65 20 6c 61 72 67 65 73 74  .^If the largest
9d50: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
9d60: 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2c  e value is zero,
9d70: 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
9d80: 73 65 20 6d 75 73 74 20 6e 6f 74 0a 63 6f 6e 74  se must not.cont
9d90: 61 69 6e 20 70 74 72 6d 61 70 20 70 61 67 65 73  ain ptrmap pages
9da0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  .</p>..<p>^In a 
9db0: 64 61 74 61 62 61 73 65 20 77 69 74 68 20 70 74  database with pt
9dc0: 72 6d 61 70 20 70 61 67 65 73 2c 20 74 68 65 20  rmap pages, the 
9dd0: 66 69 72 73 74 20 70 74 72 6d 61 70 20 70 61 67  first ptrmap pag
9de0: 65 20 69 73 20 70 61 67 65 20 32 2e 0a 41 20 70  e is page 2..A p
9df0: 74 72 6d 61 70 20 70 61 67 65 20 63 6f 6e 73 69  trmap page consi
9e00: 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61 79 20  sts of an array 
9e10: 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72 69 65  of 5-byte entrie
9e20: 73 2e 20 20 4c 65 74 20 4a 20 62 65 20 74 68 65  s.  Let J be the
9e30: 0a 6e 75 6d 62 65 72 20 6f 66 20 35 2d 62 79 74  .number of 5-byt
9e40: 65 20 65 6e 74 72 69 65 73 20 74 68 61 74 20 77  e entries that w
9e50: 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75  ill fit in the u
9e60: 73 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20 61  sable space of a
9e70: 20 70 61 67 65 2e 0a 28 49 6e 20 6f 74 68 65 72   page..(In other
9e80: 20 77 6f 72 64 73 2c 20 4a 3d 55 2f 35 2e 29 20   words, J=U/5.) 
9e90: 20 5e 54 68 65 20 66 69 72 73 74 20 70 74 72 6d   ^The first ptrm
9ea0: 61 70 20 70 61 67 65 20 77 69 6c 6c 20 63 6f 6e  ap page will con
9eb0: 74 61 69 6e 20 62 61 63 6b 20 70 6f 69 6e 74 65  tain back pointe
9ec0: 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  r.information fo
9ed0: 72 20 70 61 67 65 73 20 33 20 74 68 72 6f 75 67  r pages 3 throug
9ee0: 68 20 4a 2b 32 2c 20 69 6e 63 6c 75 73 69 76 65  h J+2, inclusive
9ef0: 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 70  .  ^The second p
9f00: 6f 69 6e 74 65 72 20 6d 61 70 0a 70 61 67 65 20  ointer map.page 
9f10: 77 69 6c 6c 20 62 65 20 6f 6e 20 70 61 67 65 20  will be on page 
9f20: 4a 2b 33 20 61 6e 64 20 74 68 61 74 20 70 74 72  J+3 and that ptr
9f30: 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20 70 72  map page will pr
9f40: 6f 76 69 64 65 20 62 61 63 6b 20 70 6f 69 6e 74  ovide back point
9f50: 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  er.information f
9f60: 6f 72 20 70 61 67 65 73 20 4a 2b 34 20 74 68 72  or pages J+4 thr
9f70: 6f 75 67 68 20 32 2a 4a 2b 33 20 69 6e 63 6c 75  ough 2*J+3 inclu
9f80: 73 69 76 65 2e 20 20 41 6e 64 20 73 6f 20 66 6f  sive.  And so fo
9f90: 72 74 68 20 66 6f 72 0a 74 68 65 20 65 6e 74 69  rth for.the enti
9fa0: 72 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  re database file
9fb0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 61  .</p>..<p>^(In a
9fc0: 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20 75   database that u
9fd0: 73 65 73 20 70 74 72 6d 61 70 20 70 61 67 65 73  ses ptrmap pages
9fe0: 2c 20 61 6c 6c 20 70 61 67 65 73 20 61 74 20 6c  , all pages at l
9ff0: 6f 63 61 74 69 6f 6e 73 20 69 64 65 6e 74 69 66  ocations identif
a000: 69 65 64 0a 62 79 20 74 68 65 20 63 6f 6d 70 75  ied.by the compu
a010: 74 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 70 72  tation in the pr
a020: 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68  evious paragraph
a030: 20 6d 75 73 74 20 62 65 20 70 74 72 6d 61 70 20   must be ptrmap 
a040: 70 61 67 65 20 61 6e 64 20 6e 6f 0a 6f 74 68 65  page and no.othe
a050: 72 20 70 61 67 65 20 6d 61 79 20 62 65 20 61 20  r page may be a 
a060: 70 74 72 6d 61 70 20 70 61 67 65 2e 20 20 45 78  ptrmap page.  Ex
a070: 63 65 70 74 2c 20 69 66 20 74 68 65 20 62 79 74  cept, if the byt
a080: 65 2d 6c 6f 63 6b 20 70 61 67 65 20 68 61 70 70  e-lock page happ
a090: 65 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f 6e 20 74  ens to.fall on t
a0a0: 68 65 20 73 61 6d 65 20 70 61 67 65 20 6e 75 6d  he same page num
a0b0: 62 65 72 20 61 73 20 61 20 70 74 72 6d 61 70 20  ber as a ptrmap 
a0c0: 70 61 67 65 2c 20 74 68 65 6e 20 74 68 65 20 70  page, then the p
a0d0: 74 72 6d 61 70 20 69 73 20 6d 6f 76 65 64 0a 74  trmap is moved.t
a0e0: 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
a0f0: 70 61 67 65 20 66 6f 72 20 74 68 61 74 20 6f 6e  page for that on
a100: 65 20 63 61 73 65 2e 29 5e 3c 2f 70 3e 0a 0a 3c  e case.)^</p>..<
a110: 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20 65 6e  p>Each 5-byte en
a120: 74 72 79 20 6f 6e 20 61 20 70 74 72 6d 61 70 20  try on a ptrmap 
a130: 70 61 67 65 20 70 72 6f 76 69 64 65 73 20 62 61  page provides ba
a140: 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74  ck-link informat
a150: 69 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e 65 20 6f  ion about .one o
a160: 66 20 74 68 65 20 70 61 67 65 73 20 74 68 61 74  f the pages that
a170: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
a180: 6c 6f 77 20 74 68 65 20 70 6f 69 6e 74 65 72 20  low the pointer 
a190: 6d 61 70 2e 20 20 5e 28 49 66 20 70 61 67 65 20  map.  ^(If page 
a1a0: 42 20 69 73 20 61 0a 70 74 72 6d 61 70 20 70 61  B is a.ptrmap pa
a1b0: 67 65 20 74 68 65 6e 20 62 61 63 6b 2d 6c 69 6e  ge then back-lin
a1c0: 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  k information ab
a1d0: 6f 75 74 20 70 61 67 65 20 42 2b 31 20 69 73 20  out page B+1 is 
a1e0: 70 72 6f 76 69 64 65 64 20 62 79 0a 74 68 65 20  provided by.the 
a1f0: 66 69 72 73 74 20 65 6e 74 72 79 20 6f 6e 20 74  first entry on t
a200: 68 65 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20  he pointer map. 
a210: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
a220: 75 74 20 70 61 67 65 20 42 2b 32 20 69 73 0a 70  ut page B+2 is.p
a230: 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 73  rovided by the s
a240: 65 63 6f 6e 64 20 65 6e 74 72 79 2e 20 20 41 6e  econd entry.  An
a250: 64 20 73 6f 20 66 6f 72 74 68 2e 29 5e 3c 2f 70  d so forth.)^</p
a260: 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74  >..<p>Each 5-byt
a270: 65 20 70 74 72 6d 61 70 20 65 6e 74 72 79 20 63  e ptrmap entry c
a280: 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e 65 20 62  onsists of one b
a290: 79 74 65 20 6f 66 20 22 70 61 67 65 20 74 79 70  yte of "page typ
a2a0: 65 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 66  e" information.f
a2b0: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 34 2d 62  ollowed by a 4-b
a2c0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70  yte big-endian p
a2d0: 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 46 69 76  age number.  Fiv
a2e0: 65 20 70 61 67 65 20 74 79 70 65 73 20 61 72 65  e page types are
a2f0: 20 72 65 63 6f 67 6e 69 7a 65 64 3a 0a 3c 2f 70   recognized:.</p
a300: 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20 62 2d  >..<ol>.<li>A b-
a310: 74 72 65 65 20 72 6f 6f 74 20 70 61 67 65 2e 20  tree root page. 
a320: 20 54 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72   The.page number
a330: 20 73 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 2e   should be zero.
a340: 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20  .<li>A freelist 
a350: 70 61 67 65 2e 20 20 54 68 65 20 70 61 67 65 20  page.  The page 
a360: 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65  number should be
a370: 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e 54 68 65 20 66  .zero..<li>The f
a380: 69 72 73 74 20 70 61 67 65 20 6f 66 20 61 0a 63  irst page of a.c
a390: 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72  ell payload over
a3a0: 66 6c 6f 77 20 63 68 61 69 6e 2e 20 20 54 68 65  flow chain.  The
a3b0: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20   page number is 
a3c0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
a3d0: 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 74 68  that.contains th
a3e0: 65 20 63 65 6c 6c 20 77 68 6f 73 65 20 63 6f 6e  e cell whose con
a3f0: 74 65 6e 74 20 68 61 73 20 6f 76 65 72 66 6c 6f  tent has overflo
a400: 77 65 64 2e 0a 3c 6c 69 3e 41 20 70 61 67 65 20  wed..<li>A page 
a410: 69 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63  in an overflow c
a420: 68 61 69 6e 0a 6f 74 68 65 72 20 74 68 61 6e 20  hain.other than 
a430: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 2e 20  the first page. 
a440: 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   The page number
a450: 20 69 73 20 74 68 65 20 70 72 69 6f 72 20 70 61   is the prior pa
a460: 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c  ge of the.overfl
a470: 6f 77 20 63 68 61 69 6e 2e 0a 3c 6c 69 3e 41 20  ow chain..<li>A 
a480: 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20  non-root b-tree 
a490: 70 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20  page.  The.page 
a4a0: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20 70 61  number is the pa
a4b0: 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65  rent b-tree page
a4c0: 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20  ..</ol>..<p>^In 
a4d0: 61 6e 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  any database fil
a4e0: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
a4f0: 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c  ptrmap pages, al
a500: 6c 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61  l b-tree root pa
a510: 67 65 73 20 0a 6d 75 73 74 20 63 6f 6d 65 20 62  ges .must come b
a520: 65 66 6f 72 65 20 61 6e 79 20 6e 6f 6e 2d 72 6f  efore any non-ro
a530: 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20  ot b-tree page, 
a540: 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65  cell payload ove
a550: 72 66 6c 6f 77 20 70 61 67 65 2c 20 6f 72 0a 66  rflow page, or.f
a560: 72 65 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54  reelist page.  T
a570: 68 69 73 20 72 65 73 74 72 69 63 74 69 6f 6e 20  his restriction 
a580: 65 6e 73 75 72 65 73 20 74 68 61 74 20 61 20 72  ensures that a r
a590: 6f 6f 74 20 70 61 67 65 20 77 69 6c 6c 20 6e 65  oot page will ne
a5a0: 76 65 72 0a 62 65 20 6d 6f 76 65 64 20 64 75 72  ver.be moved dur
a5b0: 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75  ing an auto-vacu
a5c0: 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61  um or incrementa
a5d0: 6c 2d 76 61 63 75 75 6d 2e 20 20 54 68 65 20 61  l-vacuum.  The a
a5e0: 75 74 6f 2d 76 61 63 75 75 6d 0a 6c 6f 67 69 63  uto-vacuum.logic
a5f0: 20 64 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 68   does not know h
a600: 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  ow to update the
a610: 20 72 6f 6f 74 5f 70 61 67 65 20 66 69 65 6c 64   root_page field
a620: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   of the sqlite_m
a630: 61 73 74 65 72 0a 74 61 62 6c 65 20 61 6e 64 20  aster.table and 
a640: 73 6f 20 69 74 20 69 73 20 6e 65 63 65 73 73 61  so it is necessa
a650: 72 79 20 74 6f 20 70 72 65 76 65 6e 74 20 72 6f  ry to prevent ro
a660: 6f 74 20 70 61 67 65 73 20 66 72 6f 6d 20 62 65  ot pages from be
a670: 69 6e 67 20 6d 6f 76 65 64 0a 64 75 72 69 6e 67  ing moved.during
a680: 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   an auto-vacuum 
a690: 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 72 65 73  in order to pres
a6a0: 65 72 76 65 20 74 68 65 20 69 6e 74 65 67 72 69  erve the integri
a6b0: 74 79 20 6f 66 20 74 68 65 0a 73 71 6c 69 74 65  ty of the.sqlite
a6c0: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20 20  _master table.  
a6d0: 5e 52 6f 6f 74 20 70 61 67 65 73 20 61 72 65 20  ^Root pages are 
a6e0: 6d 6f 76 65 64 20 74 6f 20 74 68 65 20 62 65 67  moved to the beg
a6f0: 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 0a 64 61  inning of the.da
a700: 74 61 62 61 73 65 20 66 69 6c 65 20 62 79 20 74  tabase file by t
a710: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c  he CREATE TABLE,
a720: 20 43 52 45 41 54 45 20 49 4e 44 45 58 2c 20 44   CREATE INDEX, D
a730: 52 4f 50 20 54 41 42 4c 45 2c 20 61 6e 64 0a 44  ROP TABLE, and.D
a740: 52 4f 50 20 49 4e 44 45 58 20 6f 70 65 72 61 74  ROP INDEX operat
a750: 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 32  ions.</p>..<h2>2
a760: 2e 30 20 53 63 68 65 6d 61 20 4c 61 79 65 72 3c  .0 Schema Layer<
a770: 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72  /h2>..<p>The for
a780: 65 67 6f 69 6e 67 20 74 65 78 74 20 64 65 73 63  egoing text desc
a790: 72 69 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c 20  ribes low-level 
a7a0: 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 53  aspects of the S
a7b0: 51 4c 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d 61  QLite file.forma
a7c0: 74 2e 20 20 54 68 65 20 62 2d 74 72 65 65 20 6d  t.  The b-tree m
a7d0: 65 63 68 61 6e 69 73 6d 20 70 72 6f 76 69 64 65  echanism provide
a7e0: 73 20 61 20 70 6f 77 65 72 66 75 6c 20 61 6e 64  s a powerful and
a7f0: 20 65 66 66 69 63 69 65 6e 74 20 6d 65 61 6e 73   efficient means
a800: 20 6f 66 0a 61 63 63 65 73 73 69 6e 67 20 61 20   of.accessing a 
a810: 6c 61 72 67 65 20 64 61 74 61 20 73 65 74 2e 20  large data set. 
a820: 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 77 69   This section wi
a830: 6c 6c 20 64 65 73 63 72 69 62 65 20 68 6f 77 20  ll describe how 
a840: 74 68 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d  the.low-level b-
a850: 74 72 65 65 20 6c 61 79 65 72 20 69 73 20 75 73  tree layer is us
a860: 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
a870: 68 69 67 68 65 72 2d 6c 65 76 65 6c 20 53 51 4c  higher-level SQL
a880: 0a 63 61 70 61 62 69 6c 69 74 69 65 73 2e 3c 2f  .capabilities.</
a890: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
a8a0: 6d 65 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72 6d  ment record_form
a8b0: 61 74 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d 61  at {record forma
a8c0: 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32 2e 31  t}</tcl>.<h3>2.1
a8d0: 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f   Record Format</
a8e0: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61  h3>..<p>The data
a8f0: 20 66 6f 72 20 61 20 74 61 62 6c 65 20 62 2d 74   for a table b-t
a900: 72 65 65 20 6c 65 61 66 20 70 61 67 65 20 61 6e  ree leaf page an
a910: 64 20 74 68 65 20 6b 65 79 0a 6f 66 20 61 6e 20  d the key.of an 
a920: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67  index b-tree pag
a930: 65 20 77 61 73 20 63 68 61 72 61 63 74 65 72 69  e was characteri
a940: 7a 65 64 20 61 62 6f 76 65 0a 61 73 20 61 6e 20  zed above.as an 
a950: 61 72 62 69 74 72 61 72 79 20 73 65 71 75 65 6e  arbitrary sequen
a960: 63 65 20 6f 66 20 62 79 74 65 73 2e 0a 54 68 65  ce of bytes..The
a970: 20 70 72 69 6f 72 20 64 69 73 63 75 73 73 69 6f   prior discussio
a980: 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 6f 6e 65 20  n mentioned one 
a990: 6b 65 79 20 62 65 69 6e 67 20 6c 65 73 73 20 74  key being less t
a9a0: 68 61 6e 20 61 6e 6f 74 68 65 72 2c 20 62 75 74  han another, but
a9b0: 0a 64 69 64 20 6e 6f 74 20 64 65 66 69 6e 65 20  .did not define 
a9c0: 77 68 61 74 20 22 6c 65 73 73 20 74 68 61 6e 22  what "less than"
a9d0: 20 6d 65 61 6e 74 2e 20 20 54 68 65 20 63 75 72   meant.  The cur
a9e0: 72 65 6e 74 20 73 65 63 74 69 6f 6e 20 77 69 6c  rent section wil
a9f0: 6c 20 61 64 64 72 65 73 73 0a 74 68 65 73 65 20  l address.these 
aa00: 6f 6d 69 73 73 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a  omissions.</p>..
aa10: 3c 70 3e 50 61 79 6c 6f 61 64 2c 20 65 69 74 68  <p>Payload, eith
aa20: 65 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  er table b-tree 
aa30: 64 61 74 61 20 6f 72 20 69 6e 64 65 78 20 62 2d  data or index b-
aa40: 74 72 65 65 20 6b 65 79 73 2c 20 0a 69 73 20 61  tree keys, .is a
aa50: 6c 77 61 79 73 20 69 6e 20 74 68 65 20 22 72 65  lways in the "re
aa60: 63 6f 72 64 20 66 6f 72 6d 61 74 22 2e 0a 54 68  cord format"..Th
aa70: 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
aa80: 64 65 66 69 6e 65 73 20 61 20 73 65 71 75 65 6e  defines a sequen
aa90: 63 65 20 6f 66 20 76 61 6c 75 65 73 20 63 6f 72  ce of values cor
aaa0: 72 65 73 70 6f 6e 64 69 6e 67 0a 74 6f 20 63 6f  responding.to co
aab0: 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65  lumns in a table
aac0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 65 20   or index.  The 
aad0: 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 73 70  record format sp
aae0: 65 63 69 66 69 65 73 20 74 68 65 20 6e 75 6d 62  ecifies the numb
aaf0: 65 72 0a 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 74  er.of columns, t
ab00: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 65  he datatype of e
ab10: 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20  ach column, and 
ab20: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65  the content of e
ab30: 61 63 68 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a  ach column.</p>.
ab40: 0a 3c 70 3e 54 68 65 20 72 65 63 6f 72 64 20 66  .<p>The record f
ab50: 6f 72 6d 61 74 20 6d 61 6b 65 73 20 65 78 74 65  ormat makes exte
ab60: 6e 73 69 76 65 20 75 73 65 20 6f 66 20 74 68 65  nsive use of the
ab70: 20 0a 5b 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67   .[variable-leng
ab80: 74 68 20 69 6e 74 65 67 65 72 5d 20 6f 72 20 5b  th integer] or [
ab90: 76 61 72 69 6e 74 5d 0a 72 65 70 72 65 73 65 6e  varint].represen
aba0: 74 61 74 69 6f 6e 20 6f 66 20 36 34 2d 62 69 74  tation of 64-bit
abb0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
abc0: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 3c   defined above.<
abd0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
abe0: 67 6d 65 6e 74 20 73 65 72 69 61 6c 74 79 70 65  gment serialtype
abf0: 20 7b 73 65 72 69 61 6c 20 74 79 70 65 7d 20 7b   {serial type} {
ac00: 73 65 72 69 61 6c 20 74 79 70 65 73 7d 3c 2f 74  serial types}</t
ac10: 63 6c 3e 0a 3c 70 3e 41 20 72 65 63 6f 72 64 20  cl>.<p>A record 
ac20: 63 6f 6e 74 61 69 6e 73 20 61 20 68 65 61 64 65  contains a heade
ac30: 72 20 61 6e 64 20 61 20 62 6f 64 79 2c 20 69 6e  r and a body, in
ac40: 20 74 68 61 74 20 6f 72 64 65 72 2e 20 20 0a 5e   that order.  .^
ac50: 28 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69  (The header begi
ac60: 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ns with a single
ac70: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 64 65   varint which de
ac80: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74  termines the tot
ac90: 61 6c 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74  al number.of byt
aca0: 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  es in the header
acb0: 2e 20 20 54 68 65 20 76 61 72 69 6e 74 20 76 61  .  The varint va
acc0: 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20  lue is the size 
acd0: 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e  of the header in
ace0: 0a 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67  .bytes including
acf0: 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
ad00: 20 69 74 73 65 6c 66 2e 29 5e 20 20 5e 46 6f 6c   itself.)^  ^Fol
ad10: 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20  lowing the size 
ad20: 76 61 72 69 6e 74 20 61 72 65 0a 6f 6e 65 20 6f  varint are.one o
ad30: 72 20 6d 6f 72 65 20 61 64 64 69 74 69 6f 6e 61  r more additiona
ad40: 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70  l varints, one p
ad50: 65 72 20 63 6f 6c 75 6d 6e 2e 20 20 54 68 65 73  er column.  Thes
ad60: 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72  e additional var
ad70: 69 6e 74 73 0a 61 72 65 20 63 61 6c 6c 65 64 20  ints.are called 
ad80: 22 73 65 72 69 61 6c 20 74 79 70 65 22 20 6e 75  "serial type" nu
ad90: 6d 62 65 72 73 20 61 6e 64 0a 64 65 74 65 72 6d  mbers and.determ
ada0: 69 6e 65 20 74 68 65 20 64 61 74 61 74 79 70 65  ine the datatype
adb0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c   of each column,
adc0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
add0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72  e following char
ade0: 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  t:</p>..<center>
adf0: 0a 3c 69 3e 53 65 72 69 61 6c 20 54 79 70 65 20  .<i>Serial Type 
ae00: 43 6f 64 65 73 20 4f 66 20 54 68 65 20 52 65 63  Codes Of The Rec
ae10: 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62  ord Format</i><b
ae20: 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  r>.<table width=
ae30: 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a  "80%" border=1>.
ae40: 3c 74 72 3e 3c 74 68 3e 53 65 72 69 61 6c 20 54  <tr><th>Serial T
ae50: 79 70 65 3c 74 68 3e 43 6f 6e 74 65 6e 74 20 53  ype<th>Content S
ae60: 69 7a 65 3c 74 68 3e 4d 65 61 6e 69 6e 67 0a 3c  ize<th>Meaning.<
ae70: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
ae80: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
ae90: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
aea0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
aeb0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
aec0: 6c 75 65 20 69 73 20 61 20 4e 55 4c 4c 2e 0a 3c  lue is a NULL..<
aed0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
aee0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
aef0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
af00: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
af10: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
af20: 6c 75 65 20 69 73 20 61 6e 20 38 2d 62 69 74 20  lue is an 8-bit 
af30: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
af40: 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64  integer..<tr><td
af50: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
af60: 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 76 61  n=center>2<td va
af70: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
af80: 65 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e  enter>2<td align
af90: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
afa0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 31 36   a big-endian 16
afb0: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
afc0: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
afd0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
afe0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c   align=center>3<
aff0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b000: 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20  ign=center>3<td 
b010: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
b020: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
b030: 61 6e 20 32 34 2d 62 69 74 20 74 77 6f 73 2d 63  an 24-bit twos-c
b040: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
b050: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
b060: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b070: 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>4<td valign=t
b080: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b090: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
b0a0: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
b0b0: 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 74  -endian 32-bit t
b0c0: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
b0d0: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
b0e0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b0f0: 3d 63 65 6e 74 65 72 3e 35 3c 74 64 20 76 61 6c  =center>5<td val
b100: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b110: 6e 74 65 72 3e 36 3c 74 64 20 61 6c 69 67 6e 3d  nter>6<td align=
b120: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
b130: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 34 38 2d  a big-endian 48-
b140: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
b150: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72  ent integer..<tr
b160: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b170: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74  align=center>6<t
b180: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b190: 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 61  gn=center>8<td a
b1a0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
b1b0: 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61  e is a big-endia
b1c0: 6e 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f  n 64-bit twos-co
b1d0: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
b1e0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
b1f0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b200: 72 3e 37 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>7<td valign=to
b210: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
b220: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
b230: 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d  ^Value is a big-
b240: 65 6e 64 69 61 6e 20 49 45 45 45 20 37 35 34 2d  endian IEEE 754-
b250: 32 30 30 38 20 36 34 2d 62 69 74 20 66 6c 6f 61  2008 64-bit floa
b260: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
b270: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
b280: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b290: 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>8<td valign=t
b2a0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b2b0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
b2c0: 0a 5e 56 61 6c 75 65 20 69 73 20 74 68 65 20 69  .^Value is the i
b2d0: 6e 74 65 67 65 72 20 30 2e 20 28 4f 6e 6c 79 20  nteger 0. (Only 
b2e0: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 5b 73  available for [s
b2f0: 63 68 65 6d 61 20 66 6f 72 6d 61 74 5d 20 34 20  chema format] 4 
b300: 61 6e 64 20 68 69 67 68 65 72 2e 29 0a 3c 74 72  and higher.).<tr
b310: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b320: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 39 3c 74  align=center>9<t
b330: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b340: 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61  gn=center>0<td a
b350: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
b360: 65 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72  e is the integer
b370: 20 31 2e 20 28 4f 6e 6c 79 20 61 76 61 69 6c 61   1. (Only availa
b380: 62 6c 65 20 66 6f 72 20 5b 73 63 68 65 6d 61 20  ble for [schema 
b390: 66 6f 72 6d 61 74 5d 20 34 20 61 6e 64 20 68 69  format] 4 and hi
b3a0: 67 68 65 72 2e 29 0a 3c 74 72 3e 3c 74 64 20 76  gher.).<tr><td v
b3b0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b3c0: 63 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20 20 20  center>10,11.   
b3d0: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
b3e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 26 6e 62  align=center>&nb
b3f0: 73 70 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  sp;<td align=lef
b400: 74 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65 64 2e 20  t>.<i>Not used. 
b410: 20 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78   Reserved for ex
b420: 70 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72  pansion.</i>.<tr
b430: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b440: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23  align=center>N&#
b450: 78 32 32 36 35 3b 31 32 20 61 6e 64 20 65 76 65  x2265;12 and eve
b460: 6e 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  n.    <td valign
b470: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b480: 72 3e 28 4e 2d 31 32 29 2f 32 3c 74 64 20 61 6c  r>(N-12)/2<td al
b490: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65  ign=left>.^Value
b4a0: 20 69 73 20 61 20 42 4c 4f 42 20 74 68 61 74 20   is a BLOB that 
b4b0: 69 73 20 28 4e 2d 31 32 29 2f 32 20 62 79 74 65  is (N-12)/2 byte
b4c0: 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 3c 74 72  s in length..<tr
b4d0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b4e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23  align=center>N&#
b4f0: 78 32 32 36 35 3b 31 33 20 61 6e 64 20 6f 64 64  x2265;13 and odd
b500: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
b510: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
b520: 3e 28 4e 2d 31 33 29 2f 32 3c 74 64 20 61 6c 69  >(N-13)/2<td ali
b530: 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20  gn=left>.^Value 
b540: 69 73 20 61 20 73 74 72 69 6e 67 20 69 6e 20 74  is a string in t
b550: 68 65 20 5b 74 65 78 74 20 65 6e 63 6f 64 69 6e  he [text encodin
b560: 67 5d 20 61 6e 64 20 28 4e 2d 31 33 29 2f 32 20  g] and (N-13)/2 
b570: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e  bytes in length.
b580: 0a 5e 54 68 65 20 6e 75 6c 20 74 65 72 6d 69 6e  .^The nul termin
b590: 61 74 6f 72 20 69 73 20 6e 6f 74 20 73 74 6f 72  ator is not stor
b5a0: 65 64 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65  ed..</table></ce
b5b0: 6e 74 65 72 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74  nter>..<p>Note t
b5c0: 68 61 74 20 62 65 63 61 75 73 65 20 6f 66 20 74  hat because of t
b5d0: 68 65 20 77 61 79 20 76 61 72 69 6e 74 73 20 61  he way varints a
b5e0: 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20  re defined, the 
b5f0: 68 65 61 64 65 72 20 73 69 7a 65 20 76 61 72 69  header size vari
b600: 6e 74 0a 61 6e 64 20 73 65 72 69 61 6c 20 74 79  nt.and serial ty
b610: 70 65 20 76 61 72 69 6e 74 73 20 77 69 6c 6c 20  pe varints will 
b620: 75 73 75 61 6c 6c 79 20 63 6f 6e 73 69 73 74 20  usually consist 
b630: 6f 66 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  of a single byte
b640: 2e 20 20 54 68 65 0a 73 65 72 69 61 6c 20 74 79  .  The.serial ty
b650: 70 65 20 76 61 72 69 6e 74 73 20 66 6f 72 20 6c  pe varints for l
b660: 61 72 67 65 20 73 74 72 69 6e 67 73 20 61 6e 64  arge strings and
b670: 20 42 4c 4f 42 73 20 6d 69 67 68 74 20 65 78 74   BLOBs might ext
b680: 65 6e 64 20 74 6f 20 74 77 6f 20 6f 72 20 74 68  end to two or th
b690: 72 65 65 0a 62 79 74 65 20 76 61 72 69 6e 74 73  ree.byte varints
b6a0: 2c 20 62 75 74 20 74 68 61 74 20 69 73 20 74 68  , but that is th
b6b0: 65 20 65 78 63 65 70 74 69 6f 6e 20 72 61 74 68  e exception rath
b6c0: 65 72 20 74 68 61 6e 20 74 68 65 20 72 75 6c 65  er than the rule
b6d0: 2e 20 0a 54 68 65 20 76 61 72 69 6e 74 20 66 6f  . .The varint fo
b6e0: 72 6d 61 74 20 69 73 20 76 65 72 79 20 65 66 66  rmat is very eff
b6f0: 69 63 69 65 6e 74 20 61 74 20 63 6f 64 69 6e 67  icient at coding
b700: 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
b710: 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  er.</p>..<p>^The
b720: 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
b730: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
b740: 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c  ecord immediatel
b750: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
b760: 64 65 72 2e 0a 5e 28 4e 6f 74 65 20 74 68 61 74  der..^(Note that
b770: 20 66 6f 72 20 73 65 72 69 61 6c 20 74 79 70 65   for serial type
b780: 73 20 30 2c 20 38 2c 20 39 2c 20 31 32 2c 20 61  s 0, 8, 9, 12, a
b790: 6e 64 20 31 33 2c 20 74 68 65 20 76 61 6c 75 65  nd 13, the value
b7a0: 20 69 73 20 7a 65 72 6f 20 62 79 74 65 73 20 69   is zero bytes i
b7b0: 6e 0a 6c 65 6e 67 74 68 2e 20 20 49 66 20 61 6c  n.length.  If al
b7c0: 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6f 66  l columns are of
b7d0: 20 74 68 65 73 65 20 74 79 70 65 73 20 74 68 65   these types the
b7e0: 6e 20 74 68 65 20 62 6f 64 79 20 73 65 63 74 69  n the body secti
b7f0: 6f 6e 20 6f 66 20 74 68 65 0a 72 65 63 6f 72 64  on of the.record
b800: 20 69 73 20 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e   is empty.)^</p>
b810: 0a 0a 3c 68 33 3e 32 2e 32 20 52 65 63 6f 72 64  ..<h3>2.2 Record
b820: 20 53 6f 72 74 20 4f 72 64 65 72 3c 2f 68 33 3e   Sort Order</h3>
b830: 0a 0a 3c 70 3e 54 68 65 20 6f 72 64 65 72 20 6f  ..<p>The order o
b840: 66 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  f keys in an ind
b850: 65 78 20 62 2d 74 72 65 65 20 69 73 20 64 65 74  ex b-tree is det
b860: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 73  ermined by the s
b870: 6f 72 74 20 6f 72 64 65 72 20 6f 66 0a 74 68 65  ort order of.the
b880: 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 74 68   records that th
b890: 65 20 6b 65 79 73 20 72 65 70 72 65 73 65 6e 74  e keys represent
b8a0: 2e 20 20 52 65 63 6f 72 64 20 63 6f 6d 70 61 72  .  Record compar
b8b0: 69 73 6f 6e 20 70 72 6f 67 72 65 73 73 65 73 20  ison progresses 
b8c0: 63 6f 6c 75 6d 6e 0a 62 79 20 63 6f 6c 75 6d 6e  column.by column
b8d0: 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20 61 20  .  Columns of a 
b8e0: 72 65 63 6f 72 64 20 61 72 65 20 65 78 61 6d 69  record are exami
b8f0: 6e 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  ned from left to
b900: 20 72 69 67 68 74 2e 20 20 54 68 65 0a 66 69 72   right.  The.fir
b910: 73 74 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d  st pair of colum
b920: 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  ns that are not 
b930: 65 71 75 61 6c 20 64 65 74 65 72 6d 69 6e 65 73  equal determines
b940: 20 74 68 65 20 72 65 6c 61 74 69 76 65 20 6f 72   the relative or
b950: 64 65 72 0a 6f 66 20 74 68 65 20 74 77 6f 20 72  der.of the two r
b960: 65 63 6f 72 64 73 2e 20 20 54 68 65 20 73 6f 72  ecords.  The sor
b970: 74 20 6f 72 64 65 72 20 6f 66 20 69 6e 64 69 76  t order of indiv
b980: 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 69 73  idual columns is
b990: 20 61 73 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as.follows:</p>
b9a0: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 4e 55 4c  ..<ol>.<li>^(NUL
b9b0: 4c 20 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c  L values (serial
b9c0: 20 74 79 70 65 20 30 29 20 73 6f 72 74 20 66 69   type 0) sort fi
b9d0: 72 73 74 2e 29 5e 0a 3c 6c 69 3e 5e 28 4e 75 6d  rst.)^.<li>^(Num
b9e0: 65 72 69 63 20 76 61 6c 75 65 73 20 28 73 65 72  eric values (ser
b9f0: 69 61 6c 20 74 79 70 65 73 20 31 20 74 68 72 6f  ial types 1 thro
ba00: 75 67 68 20 39 29 20 73 6f 72 74 20 61 66 74 65  ugh 9) sort afte
ba10: 72 20 4e 55 4c 4c 73 0a 20 20 20 20 20 20 61 6e  r NULLs.      an
ba20: 64 20 69 6e 20 6e 75 6d 65 72 69 63 20 6f 72 64  d in numeric ord
ba30: 65 72 2e 29 5e 0a 3c 6c 69 3e 5e 28 54 65 78 74  er.)^.<li>^(Text
ba40: 20 76 61 6c 75 65 73 20 28 6f 64 64 20 73 65 72   values (odd ser
ba50: 69 61 6c 20 74 79 70 65 73 20 31 33 20 61 6e 64  ial types 13 and
ba60: 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20 61 66   larger) sort af
ba70: 74 65 72 20 6e 75 6d 65 72 69 63 0a 20 20 20 20  ter numeric.    
ba80: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 6f 72  values in the or
ba90: 64 65 72 20 64 65 74 65 72 6d 69 6e 65 64 20 62  der determined b
baa0: 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 5b 63  y the columns [c
bab0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
bac0: 6e 5d 2e 29 5e 0a 3c 6c 69 3e 5e 28 42 4c 4f 42  n].)^.<li>^(BLOB
bad0: 20 76 61 6c 75 65 73 20 28 65 76 65 6e 20 73 65   values (even se
bae0: 72 69 61 6c 20 74 79 70 65 73 20 31 32 20 61 6e  rial types 12 an
baf0: 64 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20 6c  d larger) sort l
bb00: 61 73 74 20 61 6e 64 20 69 6e 20 74 68 65 20 6f  ast and in the o
bb10: 72 64 65 72 20 0a 20 20 20 20 64 65 74 65 72 6d  rder .    determ
bb20: 69 6e 65 64 20 62 79 20 6d 65 6d 63 6d 70 28 29  ined by memcmp()
bb30: 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20  .)^.</ol>..<p>A 
bb40: 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74  [collating funct
bb50: 69 6f 6e 5d 20 66 6f 72 20 65 61 63 68 20 63 6f  ion] for each co
bb60: 6c 75 6d 6e 20 69 73 20 6e 65 63 65 73 73 61 72  lumn is necessar
bb70: 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f  y in order to co
bb80: 6d 70 75 74 65 0a 74 68 65 20 6f 72 64 65 72 20  mpute.the order 
bb90: 6f 66 20 74 65 78 74 20 66 69 65 6c 64 73 2e 0a  of text fields..
bba0: 5e 28 53 51 4c 69 74 65 20 64 65 66 69 6e 65 73  ^(SQLite defines
bbb0: 20 74 68 72 65 65 20 62 75 69 6c 74 2d 69 6e 20   three built-in 
bbc0: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
bbd0: 6f 6e 73 3a 29 5e 0a 3c 2f 70 3e 0a 0a 3c 62 6c  ons:)^.</p>..<bl
bbe0: 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20  ockquote><table 
bbf0: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 73 70 61  border=0 cellspa
bc00: 63 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 3c 74 64  cing=10>.<tr><td
bc10: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 42 49 4e 41   valign=top>BINA
bc20: 52 59 0a 20 20 20 20 3c 74 64 3e 20 5e 28 54 68  RY.    <td> ^(Th
bc30: 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52  e built-in BINAR
bc40: 59 20 63 6f 6c 6c 61 74 69 6f 6e 20 63 6f 6d 70  Y collation comp
bc50: 61 72 65 73 20 73 74 72 69 6e 67 73 20 62 79 74  ares strings byt
bc60: 65 20 62 79 20 62 79 74 65 0a 20 20 20 20 20 20  e by byte.      
bc70: 20 20 75 73 69 6e 67 20 74 68 65 20 6d 65 6d 63    using the memc
bc80: 6d 70 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  mp() function.  
bc90: 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 73        from the s
bca0: 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72  tandard C librar
bcb0: 79 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  y.)^.<tr><td val
bcc0: 69 67 6e 3d 74 6f 70 3e 4e 4f 43 41 53 45 0a 20  ign=top>NOCASE. 
bcd0: 20 20 20 3c 74 64 3e 20 5e 28 54 68 65 20 4e 4f     <td> ^(The NO
bce0: 43 41 53 45 20 63 6f 6c 6c 61 74 69 6f 6e 20 69  CASE collation i
bcf0: 73 20 6c 69 6b 65 20 42 49 4e 41 52 59 20 65 78  s like BINARY ex
bd00: 63 65 70 74 20 74 68 61 74 20 75 70 70 65 72 63  cept that upperc
bd10: 61 73 65 0a 20 20 20 20 20 20 20 20 41 53 43 49  ase.        ASCI
bd20: 49 20 63 68 61 72 61 63 74 65 72 73 20 28 27 41  I characters ('A
bd30: 27 20 74 68 72 6f 75 67 68 20 27 5a 27 29 0a 20  ' through 'Z'). 
bd40: 20 20 20 20 20 20 20 61 72 65 20 66 6f 6c 64 65         are folde
bd50: 64 20 69 6e 74 6f 20 74 68 65 69 72 20 6c 6f 77  d into their low
bd60: 65 72 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e  ercase equivalen
bd70: 74 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e  ts prior to runn
bd80: 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20 20 20  ing the.        
bd90: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4e 6f 74  comparison.  Not
bda0: 65 20 74 68 61 74 20 6f 6e 6c 79 20 41 53 43 49  e that only ASCI
bdb0: 49 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65  I characters are
bdc0: 20 63 61 73 65 2d 66 6f 6c 64 65 64 2e 29 5e 0a   case-folded.)^.
bdd0: 20 20 20 20 20 20 20 20 5e 28 4e 4f 43 41 53 45          ^(NOCASE
bde0: 0a 20 20 20 20 20 20 20 20 64 6f 65 73 20 6e 6f  .        does no
bdf0: 74 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 67 65  t implement a ge
be00: 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 20 75 6e  neral purpose un
be10: 69 63 6f 64 65 20 63 61 73 65 6c 65 73 73 20 63  icode caseless c
be20: 6f 6d 70 61 72 69 73 6f 6e 2e 29 5e 0a 3c 74 72  omparison.)^.<tr
be30: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  ><td valign=top>
be40: 52 54 52 49 4d 0a 20 20 20 20 3c 74 64 3e 20 5e  RTRIM.    <td> ^
be50: 28 52 54 52 49 4d 20 69 73 20 6c 69 6b 65 20 42  (RTRIM is like B
be60: 49 4e 41 52 59 20 65 78 63 65 70 74 20 74 68 61  INARY except tha
be70: 74 20 65 78 74 72 61 20 73 70 61 63 65 73 20 61  t extra spaces a
be80: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65 69 74  t the end of eit
be90: 68 65 72 0a 20 20 20 20 20 20 20 20 20 73 74 72  her.         str
bea0: 69 6e 67 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67  ing do not chang
beb0: 65 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 49  e the result.  I
bec0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 73  n other words, s
bed0: 74 72 69 6e 67 73 20 77 69 6c 6c 0a 20 20 20 20  trings will.    
bee0: 20 20 20 20 20 63 6f 6d 70 61 72 65 20 65 71 75       compare equ
bef0: 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65  al to one anothe
bf00: 72 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65  r as long as the
bf10: 79 0a 20 20 20 20 20 20 20 20 20 64 69 66 66 65  y.         diffe
bf20: 72 20 6f 6e 6c 79 20 69 6e 20 74 68 65 20 6e 75  r only in the nu
bf30: 6d 62 65 72 20 6f 66 20 73 70 61 63 65 73 20 61  mber of spaces a
bf40: 74 20 74 68 65 20 65 6e 64 2e 29 5e 0a 3c 2f 74  t the end.)^.</t
bf50: 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  able></blockquot
bf60: 65 3e 0a 0a 3c 70 3e 5e 41 64 64 69 74 69 6f 6e  e>..<p>^Addition
bf70: 61 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 73  al application-s
bf80: 70 65 63 69 66 69 63 20 63 6f 6c 6c 61 74 69 6e  pecific collatin
bf90: 67 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20  g functions can 
bfa0: 62 65 20 61 64 64 65 64 20 74 6f 0a 53 51 4c 69  be added to.SQLi
bfb0: 74 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71  te using the [sq
bfc0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
bfd0: 6c 61 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  lation()] interf
bfe0: 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ace.</p>..<p>^Th
bff0: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
c000: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  ing function for
c010: 20 61 6c 6c 20 73 74 72 69 6e 67 73 20 69 73 20   all strings is 
c020: 42 49 4e 41 52 59 2e 0a 5e 41 6c 74 65 72 6e 61  BINARY..^Alterna
c030: 74 69 76 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  tive collating f
c040: 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 74 61 62  unctions for tab
c050: 6c 65 20 63 6f 6c 75 6d 6e 73 20 63 61 6e 20 62  le columns can b
c060: 65 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  e specified in t
c070: 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he.[CREATE TABLE
c080: 5d 20 73 74 61 74 65 6d 65 6e 74 20 75 73 69 6e  ] statement usin
c090: 67 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  g the COLLATE cl
c0a0: 61 75 73 65 20 6f 6e 20 74 68 65 20 5b 63 6f 6c  ause on the [col
c0b0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e  umn definition].
c0c0: 0a 5e 57 68 65 6e 20 61 20 63 6f 6c 75 6d 6e 20  .^When a column 
c0d0: 69 73 20 69 6e 64 65 78 65 64 2c 20 74 68 65 20  is indexed, the 
c0e0: 73 61 6d 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  same collating f
c0f0: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
c100: 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45  d in the.[CREATE
c110: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
c120: 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  t is used for th
c130: 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  e column in the 
c140: 69 6e 64 65 78 2c 20 62 79 20 64 65 66 61 75 6c  index, by defaul
c150: 74 2c 0a 74 68 6f 75 67 68 20 74 68 69 73 20 63  t,.though this c
c160: 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e  an be overridden
c170: 20 75 73 69 6e 67 20 61 20 43 4f 4c 4c 41 54 45   using a COLLATE
c180: 20 63 6c 61 75 73 65 20 69 6e 20 74 68 65 20 0a   clause in the .
c190: 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73  [CREATE INDEX] s
c1a0: 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 68 33 3e 32  tatement...<h3>2
c1b0: 2e 33 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f  .3 Representatio
c1c0: 6e 20 4f 66 20 53 51 4c 20 54 61 62 6c 65 73 3c  n Of SQL Tables<
c1d0: 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 45 61 63 68 20  /h3>..<p> ^Each 
c1e0: 6f 72 64 69 6e 61 72 79 20 53 51 4c 20 74 61 62  ordinary SQL tab
c1f0: 6c 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  le in the databa
c200: 73 65 20 73 63 68 65 6d 61 20 69 73 20 72 65 70  se schema is rep
c210: 72 65 73 65 6e 74 65 64 20 6f 6e 2d 64 69 73 6b  resented on-disk
c220: 0a 62 79 20 61 20 74 61 62 6c 65 20 62 2d 74 72  .by a table b-tr
c230: 65 65 2e 20 20 5e 45 61 63 68 20 65 6e 74 72 79  ee.  ^Each entry
c240: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   in the table b-
c250: 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64 73  tree corresponds
c260: 20 74 6f 20 61 20 72 6f 77 0a 6f 66 20 74 68 65   to a row.of the
c270: 20 53 51 4c 20 74 61 62 6c 65 2e 20 20 5e 54 68   SQL table.  ^Th
c280: 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65  e [rowid] of the
c290: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 74 68   SQL table is th
c2a0: 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 0a  e 64-bit signed.
c2b0: 69 6e 74 65 67 65 72 20 6b 65 79 20 66 6f 72 20  integer key for 
c2c0: 65 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68  each entry in th
c2d0: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 3c  e table b-tree.<
c2e0: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 63 6f  /p>..<p> ^The co
c2f0: 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20 53 51  ntent of each SQ
c300: 4c 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 73  L table row is s
c310: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
c320: 61 62 61 73 65 20 66 69 6c 65 20 62 79 0a 66 69  abase file by.fi
c330: 72 73 74 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68  rst combining th
c340: 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  e values in the 
c350: 76 61 72 69 6f 75 73 20 63 6f 6c 75 6d 6e 73 20  various columns 
c360: 69 6e 74 6f 20 61 20 62 79 74 65 20 61 72 72 61  into a byte arra
c370: 79 0a 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  y.in the record 
c380: 66 6f 72 6d 61 74 2c 20 74 68 65 6e 20 73 74 6f  format, then sto
c390: 72 69 6e 67 20 74 68 61 74 20 62 79 74 65 20 61  ring that byte a
c3a0: 72 72 61 79 20 61 73 20 74 68 65 20 70 61 79 6c  rray as the payl
c3b0: 6f 61 64 20 69 6e 0a 61 6e 20 65 6e 74 72 79 20  oad in.an entry 
c3c0: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74  in the table b-t
c3d0: 72 65 65 2e 20 20 5e 54 68 65 20 6f 72 64 65 72  ree.  ^The order
c3e0: 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68   of values in th
c3f0: 65 20 72 65 63 6f 72 64 20 69 73 0a 74 68 65 20  e record is.the 
c400: 73 61 6d 65 20 61 73 20 74 68 65 20 6f 72 64 65  same as the orde
c410: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
c420: 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 64 65  the SQL table de
c430: 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57 68 65 6e 20  finition..^When 
c440: 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 6e 63  an SQL table inc
c450: 6c 75 64 65 73 20 61 6e 0a 5b 49 4e 54 45 47 45  ludes an.[INTEGE
c460: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63  R PRIMARY KEY] c
c470: 6f 6c 75 6d 6e 20 28 77 68 69 63 68 20 61 6c 69  olumn (which ali
c480: 61 73 65 73 20 74 68 65 20 5b 72 6f 77 69 64 5d  ases the [rowid]
c490: 29 20 74 68 65 6e 20 74 68 61 74 0a 63 6f 6c 75  ) then that.colu
c4a0: 6d 6e 20 61 70 70 65 61 72 73 20 69 6e 20 74 68  mn appears in th
c4b0: 65 20 72 65 63 6f 72 64 20 61 73 20 61 20 4e 55  e record as a NU
c4c0: 4c 4c 20 76 61 6c 75 65 2e 20 20 5e 53 51 4c 69  LL value.  ^SQLi
c4d0: 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 75  te will always u
c4e0: 73 65 0a 74 68 65 20 74 61 62 6c 65 20 62 2d 74  se.the table b-t
c4f0: 72 65 65 20 6b 65 79 20 72 61 74 68 65 72 20 74  ree key rather t
c500: 68 61 6e 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c  han the NULL val
c510: 75 65 20 77 68 65 6e 20 72 65 66 65 72 65 6e 63  ue when referenc
c520: 69 6e 67 20 74 68 65 0a 5b 49 4e 54 45 47 45 52  ing the.[INTEGER
c530: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f   PRIMARY KEY] co
c540: 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  lumn.</p>..<p> ^
c550: 49 66 20 74 68 65 20 5b 61 66 66 69 6e 69 74 79  If the [affinity
c560: 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  ] of a column is
c570: 20 52 45 41 4c 20 61 6e 64 20 74 68 61 74 20 63   REAL and that c
c580: 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61  olumn contains a
c590: 0a 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20  .value that can 
c5a0: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  be converted to 
c5b0: 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f  an integer witho
c5c0: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
c5d0: 6d 61 74 69 6f 6e 0a 28 69 66 20 74 68 65 20 76  mation.(if the v
c5e0: 61 6c 75 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f  alue contains no
c5f0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
c600: 20 61 6e 64 20 69 73 20 6e 6f 74 20 74 6f 6f 20   and is not too 
c610: 6c 61 72 67 65 20 74 6f 20 62 65 0a 72 65 70 72  large to be.repr
c620: 65 73 65 6e 74 65 64 20 61 73 20 61 6e 20 69 6e  esented as an in
c630: 74 65 67 65 72 29 20 74 68 65 6e 20 74 68 65 20  teger) then the 
c640: 63 6f 6c 75 6d 6e 20 6d 61 79 20 62 65 20 73 74  column may be st
c650: 6f 72 65 64 20 69 6e 20 74 68 65 20 72 65 63 6f  ored in the reco
c660: 72 64 0a 61 73 20 61 6e 20 69 6e 74 65 67 65 72  rd.as an integer
c670: 2e 20 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20  .  ^SQLite will 
c680: 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75  convert the valu
c690: 65 20 62 61 63 6b 20 74 6f 20 66 6c 6f 61 74 69  e back to floati
c6a0: 6e 67 0a 70 6f 69 6e 74 20 77 68 65 6e 20 65 78  ng.point when ex
c6b0: 74 72 61 63 74 69 6e 67 20 69 74 20 66 72 6f 6d  tracting it from
c6c0: 20 74 68 65 20 72 65 63 6f 72 64 2e 3c 2f 70 3e   the record.</p>
c6d0: 0a 0a 3c 68 33 3e 32 2e 34 20 52 65 70 72 65 73  ..<h3>2.4 Repres
c6e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 57 49 54 48  entation of WITH
c6f0: 4f 55 54 20 52 4f 57 49 44 20 54 61 62 6c 65 73  OUT ROWID Tables
c700: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e  </h3>..<p>^If an
c710: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 63 72   SQL table is cr
c720: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  eated using the 
c730: 22 57 49 54 48 4f 55 54 20 52 4f 57 49 44 22 20  "WITHOUT ROWID" 
c740: 63 6c 61 75 73 65 20 61 74 20 74 68 65 0a 65 6e  clause at the.en
c750: 64 20 6f 66 20 69 74 73 20 43 52 45 41 54 45 20  d of its CREATE 
c760: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2c  TABLE statement,
c770: 20 74 68 65 6e 20 74 68 61 74 20 74 61 62 6c 65   then that table
c780: 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54 20 52   is a [WITHOUT R
c790: 4f 57 49 44 5d 0a 74 61 62 6c 65 20 61 6e 64 20  OWID].table and 
c7a0: 75 73 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  uses a different
c7b0: 20 6f 6e 2d 64 69 73 6b 20 72 65 70 72 65 73 65   on-disk represe
c7c0: 6e 74 61 74 69 6f 6e 2e 20 20 5e 41 20 57 49 54  ntation.  ^A WIT
c7d0: 48 4f 55 54 20 52 4f 57 49 44 0a 74 61 62 6c 65  HOUT ROWID.table
c7e0: 20 75 73 65 73 20 61 6e 20 69 6e 64 65 78 20 62   uses an index b
c7f0: 2d 74 72 65 65 20 72 61 74 68 65 72 20 74 68 61  -tree rather tha
c800: 6e 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  n a table b-tree
c810: 20 66 6f 72 20 73 74 6f 72 61 67 65 2e 0a 5e 54   for storage..^T
c820: 68 65 20 6b 65 79 20 66 6f 72 20 65 61 63 68 20  he key for each 
c830: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 57 49 54  entry in the WIT
c840: 48 4f 55 54 20 52 4f 57 49 44 20 62 2d 74 72 65  HOUT ROWID b-tre
c850: 65 20 69 73 20 61 20 72 65 63 6f 72 64 20 63 6f  e is a record co
c860: 6d 70 6f 73 65 64 0a 6f 66 20 74 68 65 20 63 6f  mposed.of the co
c870: 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 50 52 49  lumns of the PRI
c880: 4d 41 52 59 20 4b 45 59 20 66 6f 6c 6c 6f 77 65  MARY KEY followe
c890: 64 20 62 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69  d by all remaini
c8a0: 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74 68  ng columns of.th
c8b0: 65 20 74 61 62 6c 65 2e 20 20 5e 54 68 65 20 70  e table.  ^The p
c8c0: 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d  rimary key colum
c8d0: 6e 73 20 61 70 70 65 61 72 20 69 6e 20 74 68 65  ns appear in the
c8e0: 20 6f 72 64 65 72 20 74 68 65 79 20 74 68 65 79   order they they
c8f0: 20 77 65 72 65 0a 64 65 63 6c 61 72 65 64 20 69   were.declared i
c900: 6e 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  n the PRIMARY KE
c910: 59 20 63 6c 61 75 73 65 20 61 6e 64 20 74 68 65  Y clause and the
c920: 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d   remaining colum
c930: 6e 73 20 61 70 70 65 61 72 20 69 6e 0a 74 68 65  ns appear in.the
c940: 20 6f 72 64 65 72 20 74 68 65 79 20 6f 63 63 75   order they occu
c950: 72 20 69 6e 20 74 68 65 20 43 52 45 41 54 45 20  r in the CREATE 
c960: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e  TABLE statement.
c970: 0a 0a 3c 70 3e 5e 48 65 6e 63 65 2c 20 74 68 65  ..<p>^Hence, the
c980: 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e   content encodin
c990: 67 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54 20  g for a WITHOUT 
c9a0: 52 4f 57 49 44 20 74 61 62 6c 65 20 69 73 20 74  ROWID table is t
c9b0: 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65 20 63  he same.as the c
c9c0: 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20  ontent encoding 
c9d0: 66 6f 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  for an ordinary 
c9e0: 72 6f 77 69 64 20 74 61 62 6c 65 2c 20 65 78 63  rowid table, exc
c9f0: 65 70 74 20 74 68 61 74 20 74 68 65 0a 6f 72 64  ept that the.ord
ca00: 65 72 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  er of the column
ca10: 73 20 69 73 20 72 65 61 72 72 61 6e 67 65 64 20  s is rearranged 
ca20: 73 6f 20 74 68 61 74 20 50 52 49 4d 41 52 59 20  so that PRIMARY 
ca30: 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65  KEY columns come
ca40: 0a 66 69 72 73 74 2c 20 61 6e 64 20 74 68 65 20  .first, and the 
ca50: 63 6f 6e 74 65 6e 74 20 69 73 20 75 73 65 64 20  content is used 
ca60: 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 61 6e  as the key in an
ca70: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 72 61   index b-tree ra
ca80: 74 68 65 72 0a 74 68 61 6e 20 61 73 20 74 68 65  ther.than as the
ca90: 20 64 61 74 61 20 69 6e 20 61 20 74 61 62 6c 65   data in a table
caa0: 20 62 2d 74 72 65 65 2e 0a 5e 54 68 65 20 73 70   b-tree..^The sp
cab0: 65 63 69 61 6c 20 65 6e 63 6f 64 69 6e 67 20 72  ecial encoding r
cac0: 75 6c 65 73 20 66 6f 72 20 63 6f 6c 75 6d 6e 73  ules for columns
cad0: 20 77 69 74 68 20 52 45 41 4c 20 61 66 66 69 6e   with REAL affin
cae0: 69 74 79 0a 61 70 70 6c 79 20 74 6f 20 57 49 54  ity.apply to WIT
caf0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
cb00: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s the same as th
cb10: 65 79 20 64 6f 20 77 69 74 68 20 72 6f 77 69 64  ey do with rowid
cb20: 20 74 61 62 6c 65 73 2e 0a 0a 3c 68 33 3e 32 2e   tables...<h3>2.
cb30: 35 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  5 Representation
cb40: 20 4f 66 20 53 51 4c 20 49 6e 64 69 63 65 73 3c   Of SQL Indices<
cb50: 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 53  /h3>..<p>^Each S
cb60: 51 4c 20 69 6e 64 65 78 2c 20 77 68 65 74 68 65  QL index, whethe
cb70: 72 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63  r explicitly dec
cb80: 6c 61 72 65 64 20 76 69 61 20 61 20 5b 43 52 45  lared via a [CRE
cb90: 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65  ATE INDEX] state
cba0: 6d 65 6e 74 0a 6f 72 20 69 6d 70 6c 69 65 64 20  ment.or implied 
cbb0: 62 79 20 61 20 55 4e 49 51 55 45 20 6f 72 20 50  by a UNIQUE or P
cbc0: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
cbd0: 72 61 69 6e 74 2c 20 63 6f 72 72 65 73 70 6f 6e  raint, correspon
cbe0: 64 73 20 74 6f 20 61 6e 20 0a 69 6e 64 65 78 20  ds to an .index 
cbf0: 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 64 61  b-tree in the da
cc00: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e 45 61  tabase file..^Ea
cc10: 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  ch entry in the 
cc20: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 63 6f 72  index b-tree cor
cc30: 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 73 69  responds to a si
cc40: 6e 67 6c 65 20 72 6f 77 20 69 6e 20 74 68 65 20  ngle row in the 
cc50: 0a 61 73 73 6f 63 69 61 74 65 64 20 53 51 4c 20  .associated SQL 
cc60: 74 61 62 6c 65 2e 0a 5e 54 68 65 20 6b 65 79 20  table..^The key 
cc70: 74 6f 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  to an index b-tr
cc80: 65 65 20 69 73 0a 61 20 72 65 63 6f 72 64 20 63  ee is.a record c
cc90: 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65 20 63  omposed of the c
cca0: 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20  olumns that are 
ccb0: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 66 6f  being indexed fo
ccc0: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 0a 6b 65  llowed by the.ke
ccd0: 79 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  y of the corresp
cce0: 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 72 6f 77  onding table row
ccf0: 2e 20 20 46 6f 72 20 6f 72 64 69 6e 61 72 79 20  .  For ordinary 
cd00: 74 61 62 6c 65 73 2c 20 74 68 65 20 72 6f 77 20  tables, the row 
cd10: 6b 65 79 20 69 73 0a 74 68 65 20 5b 72 6f 77 69  key is.the [rowi
cd20: 64 5d 2c 20 61 6e 64 20 66 6f 72 20 5b 57 49 54  d], and for [WIT
cd30: 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c  HOUT ROWID] tabl
cd40: 65 73 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69  es the row key i
cd50: 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
cd60: 59 2e 0a 42 65 63 61 75 73 65 20 65 76 65 72 79  Y..Because every
cd70: 20 72 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c   row in the tabl
cd80: 65 20 68 61 73 20 61 20 75 6e 69 71 75 65 20 72  e has a unique r
cd90: 6f 77 20 6b 65 79 2c 0a 61 6c 6c 20 6b 65 79 73  ow key,.all keys
cda0: 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 61 72 65   in an index are
cdb0: 20 75 6e 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70   unique.</p>..<p
cdc0: 3e 5e 49 6e 20 61 20 6e 6f 72 6d 61 6c 20 69 6e  >^In a normal in
cdd0: 64 65 78 2c 20 74 68 65 72 65 20 69 73 20 61 20  dex, there is a 
cde0: 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69  one-to-one mappi
cdf0: 6e 67 20 62 65 74 77 65 65 6e 20 72 6f 77 73 20  ng between rows 
ce00: 69 6e 20 61 20 0a 74 61 62 6c 65 20 61 6e 64 20  in a .table and 
ce10: 65 6e 74 72 69 65 73 20 69 6e 20 65 61 63 68 20  entries in each 
ce20: 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
ce30: 20 77 69 74 68 20 74 68 61 74 20 74 61 62 6c 65   with that table
ce40: 2e 0a 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20 61  ..^However, in a
ce50: 20 5b 70 61 72 74 69 61 6c 20 69 6e 64 65 78 5d   [partial index]
ce60: 2c 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72  , the index b-tr
ce70: 65 65 20 6f 6e 6c 79 20 63 6f 6e 74 61 69 6e 73  ee only contains
ce80: 20 65 6e 74 72 69 65 73 0a 63 6f 72 72 65 73 70   entries.corresp
ce90: 6f 6e 64 69 6e 67 20 74 6f 20 74 61 62 6c 65 20  onding to table 
cea0: 72 6f 77 73 20 66 6f 72 20 77 68 69 63 68 20 74  rows for which t
ceb0: 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
cec0: 65 78 70 72 65 73 73 69 6f 6e 20 6f 6e 20 74 68  expression on th
ced0: 65 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  e.CREATE INDEX s
cee0: 74 61 74 65 6d 65 6e 74 20 69 73 20 74 72 75 65  tatement is true
cef0: 2e 0a 5e 43 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ..^Corresponding
cf00: 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
cf10: 65 78 20 61 6e 64 20 74 61 62 6c 65 20 62 2d 74  ex and table b-t
cf20: 72 65 65 73 20 73 68 61 72 65 20 74 68 65 20 73  rees share the s
cf30: 61 6d 65 20 72 6f 77 69 64 0a 6f 72 20 70 72 69  ame rowid.or pri
cf40: 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 20  mary key values 
cf50: 61 6e 64 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  and contain the 
cf60: 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 61  same value for a
cf70: 6c 6c 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  ll indexed colum
cf80: 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 32 2e 35  ns.</p>..<h4>2.5
cf90: 2e 31 20 53 75 70 70 72 65 73 73 69 6f 6e 20 6f  .1 Suppression o
cfa0: 66 20 72 65 64 75 6e 64 61 6e 74 20 63 6f 6c 75  f redundant colu
cfb0: 6d 6e 73 20 69 6e 20 57 49 54 48 4f 55 54 20 52  mns in WITHOUT R
cfc0: 4f 57 49 44 20 73 65 63 6f 6e 64 61 72 79 20 69  OWID secondary i
cfd0: 6e 64 65 78 65 64 0a 3c 2f 68 34 3e 0a 0a 3c 70  ndexed.</h4>..<p
cfe0: 3e 20 5e 49 6e 20 61 6e 20 69 6e 64 65 78 20 6f  > ^In an index o
cff0: 6e 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49  n a WITHOUT ROWI
d000: 44 20 74 61 62 6c 65 2c 20 69 66 20 6f 6e 65 20  D table, if one 
d010: 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 63  or more of the c
d020: 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20 74 61  olumns.of the ta
d030: 62 6c 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  ble PRIMARY KEY 
d040: 61 72 65 20 61 6c 73 6f 20 63 6f 6c 75 6d 6e 73  are also columns
d050: 20 6f 66 20 74 68 65 20 69 6e 64 65 78 2c 20 74   of the index, t
d060: 68 65 6e 20 74 68 65 0a 69 6e 64 65 78 65 64 20  hen the.indexed 
d070: 63 6f 6c 75 6d 6e 20 69 73 20 6e 6f 74 20 72 65  column is not re
d080: 70 65 61 74 65 64 20 69 6e 20 74 68 65 20 74 61  peated in the ta
d090: 62 6c 65 2d 6b 65 79 20 73 75 66 66 69 78 20 6f  ble-key suffix o
d0a0: 6e 20 74 68 65 20 65 6e 64 20 6f 66 0a 74 68 65  n the end of.the
d0b0: 20 69 6e 64 65 78 20 72 65 63 6f 72 64 2e 20 20   index record.  
d0c0: 5e 28 41 73 20 61 6e 20 65 78 61 6d 70 6c 65 2c  ^(As an example,
d0d0: 20 63 6f 6e 73 69 64 65 72 20 74 68 65 20 66 6f   consider the fo
d0e0: 6c 6c 6f 77 69 6e 67 20 53 51 4c 3a 0a 0a 3c 62  llowing SQL:..<b
d0f0: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a  lockquote><pre>.
d100: 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 32  CREATE TABLE ex2
d110: 35 28 61 2c 62 2c 63 2c 64 2c 65 2c 50 52 49 4d  5(a,b,c,d,e,PRIM
d120: 41 52 59 20 4b 45 59 28 64 2c 63 2c 61 29 29 20  ARY KEY(d,c,a)) 
d130: 57 49 54 48 4f 55 54 20 72 6f 77 69 64 3b 0a 43  WITHOUT rowid;.C
d140: 52 45 41 54 45 20 49 4e 44 45 58 20 65 78 32 35  REATE INDEX ex25
d150: 63 65 20 4f 4e 20 65 78 32 35 28 63 2c 65 29 3b  ce ON ex25(c,e);
d160: 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20 65 78  .CREATE INDEX ex
d170: 32 35 61 63 64 65 20 4f 4e 20 65 78 32 35 28 61  25acde ON ex25(a
d180: 2c 63 2c 64 2c 65 29 3b 0a 3c 2f 70 72 65 3e 3c  ,c,d,e);.</pre><
d190: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
d1a0: 3e 45 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65  >Each row in the
d1b0: 20 65 78 32 35 63 65 20 69 6e 64 65 78 20 69 73   ex25ce index is
d1c0: 20 61 20 72 65 63 6f 72 64 0a 77 69 74 68 20 74   a record.with t
d1d0: 68 65 73 65 20 63 6f 6c 75 6d 6e 73 3a 20 63 2c  hese columns: c,
d1e0: 20 65 2c 20 64 2c 20 61 2e 20 20 54 68 65 20 66   e, d, a.  The f
d1f0: 69 72 73 74 20 74 77 6f 20 63 6f 6c 75 6d 6e 73  irst two columns
d200: 20 61 72 65 0a 74 68 65 20 63 6f 6c 75 6d 6e 73   are.the columns
d210: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2c 20   being indexed, 
d220: 63 20 61 6e 64 20 65 2e 20 20 54 68 65 20 72 65  c and e.  The re
d230: 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  maining columns 
d240: 61 72 65 20 74 68 65 20 70 72 69 6d 61 72 79 0a  are the primary.
d250: 6b 65 79 20 6f 66 20 74 68 65 20 63 6f 72 72 65  key of the corre
d260: 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 72  sponding table r
d270: 6f 77 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74  ow.  Normally, t
d280: 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 77  he primary key w
d290: 6f 75 6c 64 20 62 65 0a 63 6f 6c 75 6d 6e 73 20  ould be.columns 
d2a0: 64 2c 20 63 2c 20 61 6e 64 20 61 2c 20 62 75 74  d, c, and a, but
d2b0: 20 62 65 63 61 75 73 65 20 63 6f 6c 75 6d 6e 20   because column 
d2c0: 63 20 61 6c 72 65 61 64 79 20 61 70 70 65 61 72  c already appear
d2d0: 73 20 65 61 72 6c 69 65 72 20 69 6e 20 74 68 65  s earlier in the
d2e0: 0a 69 6e 64 65 78 2c 20 69 74 20 69 73 20 6f 6d  .index, it is om
d2f0: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6b  itted from the k
d300: 65 79 20 73 75 66 66 69 78 2e 29 5e 3c 2f 70 3e  ey suffix.)^</p>
d310: 0a 0a 3c 70 3e 5e 28 49 6e 20 74 68 65 20 65 78  ..<p>^(In the ex
d320: 74 72 65 6d 65 20 63 61 73 65 20 77 68 65 72 65  treme case where
d330: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62 65 69   the columns bei
d340: 6e 67 20 69 6e 64 65 78 65 64 20 63 6f 76 65 72  ng indexed cover
d350: 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20   all columns.of 
d360: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  the PRIMARY KEY,
d370: 20 74 68 65 20 69 6e 64 65 78 20 77 69 6c 6c 20   the index will 
d380: 63 6f 6e 73 69 73 74 20 6f 66 20 6f 6e 6c 79 20  consist of only 
d390: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62 65 69 6e  the columns bein
d3a0: 67 0a 69 6e 64 65 78 65 64 2e 20 20 54 68 65 20  g.indexed.  The 
d3b0: 65 78 32 35 61 63 64 65 20 65 78 61 6d 70 6c 65  ex25acde example
d3c0: 20 61 62 6f 76 65 20 64 65 6d 6f 6e 73 74 72 61   above demonstra
d3d0: 74 65 73 20 74 68 69 73 2e 29 5e 20 20 5e 45 61  tes this.)^  ^Ea
d3e0: 63 68 20 65 6e 74 72 79 20 69 6e 0a 74 68 65 20  ch entry in.the 
d3f0: 65 78 32 35 61 63 64 65 20 69 6e 64 65 78 20 63  ex25acde index c
d400: 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e 6c 79 20  onsists of only 
d410: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 61 2c 20 63  the columns a, c
d420: 2c 20 64 2c 20 61 6e 64 20 65 2c 20 69 6e 20 74  , d, and e, in t
d430: 68 61 74 0a 6f 72 64 65 72 2e 3c 2f 70 3e 0a 0a  hat.order.</p>..
d440: 3c 70 3e 20 5e 54 68 65 20 73 75 70 70 72 65 73  <p> ^The suppres
d450: 73 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e  sion of redundan
d460: 74 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  t columns in the
d470: 20 6b 65 79 20 73 75 66 66 69 78 20 6f 66 20 61   key suffix of a
d480: 6e 20 69 6e 64 65 78 0a 65 6e 74 72 79 20 6f 6e  n index.entry on
d490: 6c 79 20 6f 63 63 75 72 73 20 69 6e 20 57 49 54  ly occurs in WIT
d4a0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
d4b0: 73 2e 20 20 5e 49 6e 20 61 6e 20 6f 72 64 69 6e  s.  ^In an ordin
d4c0: 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65 2c  ary rowid table,
d4d0: 0a 74 68 65 20 69 6e 64 65 78 20 65 6e 74 72 79  .the index entry
d4e0: 20 61 6c 77 61 79 73 20 65 6e 64 73 20 77 69 74   always ends wit
d4f0: 68 20 74 68 65 20 72 6f 77 69 64 20 65 76 65 6e  h the rowid even
d500: 20 69 66 20 74 68 65 20 5b 49 4e 54 45 47 45 52   if the [INTEGER
d510: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 0a 63 6f   PRIMARY KEY].co
d520: 6c 75 6d 6e 20 69 73 20 6f 6e 65 20 6f 66 20 74  lumn is one of t
d530: 68 65 20 63 6f 6c 75 6d 6e 73 20 62 65 69 6e 67  he columns being
d540: 20 69 6e 64 65 78 65 64 2e 3c 2f 70 3e 0a 0a 3c   indexed.</p>..<
d550: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
d560: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7b 73  sqlite_master {s
d570: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20 7b 73  qlite_master} {s
d580: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
d590: 6c 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32 2e  le}</tcl>.<h3>2.
d5a0: 36 20 53 74 6f 72 61 67 65 20 4f 66 20 54 68 65  6 Storage Of The
d5b0: 20 53 51 4c 20 44 61 74 61 62 61 73 65 20 53 63   SQL Database Sc
d5c0: 68 65 6d 61 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 50  hema</h3>..<p>^P
d5d0: 61 67 65 20 31 20 6f 66 20 61 20 64 61 74 61 62  age 1 of a datab
d5e0: 61 73 65 20 66 69 6c 65 20 69 73 20 74 68 65 20  ase file is the 
d5f0: 72 6f 6f 74 20 70 61 67 65 20 6f 66 20 61 20 74  root page of a t
d600: 61 62 6c 65 20 62 2d 74 72 65 65 20 74 68 61 74  able b-tree that
d610: 0a 68 6f 6c 64 73 20 61 20 73 70 65 63 69 61 6c  .holds a special
d620: 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 73 71   table named "sq
d630: 6c 69 74 65 5f 6d 61 73 74 65 72 22 20 28 6f 72  lite_master" (or
d640: 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61   "sqlite_temp_ma
d650: 73 74 65 72 22 20 69 6e 0a 74 68 65 20 63 61 73  ster" in.the cas
d660: 65 20 6f 66 20 61 20 54 45 4d 50 20 64 61 74 61  e of a TEMP data
d670: 62 61 73 65 29 20 77 68 69 63 68 20 73 74 6f 72  base) which stor
d680: 65 73 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a  es the complete.
d690: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
d6a0: 20 20 5e 28 54 68 65 20 73 74 72 75 63 74 75 72    ^(The structur
d6b0: 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f  e of the sqlite_
d6c0: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69 73 20  master table is 
d6d0: 61 73 0a 69 66 20 69 74 20 68 61 64 20 62 65 65  as.if it had bee
d6e0: 6e 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  n created using 
d6f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51  the following SQ
d700: 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  L:</p>..<blockqu
d710: 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45  ote><pre>.CREATE
d720: 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61   TABLE sqlite_ma
d730: 73 74 65 72 28 0a 20 20 74 79 70 65 20 74 65 78  ster(.  type tex
d740: 74 2c 0a 20 20 6e 61 6d 65 20 74 65 78 74 2c 0a  t,.  name text,.
d750: 20 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c    tbl_name text,
d760: 0a 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65  .  rootpage inte
d770: 67 65 72 2c 0a 20 20 73 71 6c 20 74 65 78 74 0a  ger,.  sql text.
d780: 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
d790: 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68  quote>)^..<p>^Th
d7a0: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
d7b0: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6f  table contains o
d7c0: 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20  ne row for each 
d7d0: 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 76 69  table, index, vi
d7e0: 65 77 2c 0a 61 6e 64 20 74 72 69 67 67 65 72 20  ew,.and trigger 
d7f0: 28 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 22 6f  (collectively "o
d800: 62 6a 65 63 74 73 22 29 20 69 6e 20 74 68 65 20  bjects") in the 
d810: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
d820: 20 65 78 63 65 70 74 20 74 68 65 72 65 0a 69 73   except there.is
d830: 20 6e 6f 20 65 6e 74 72 79 20 66 6f 72 20 74 68   no entry for th
d840: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
d850: 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 20 20 5e  table itself.  ^
d860: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
d870: 72 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 73  r table.contains
d880: 20 65 6e 74 72 69 65 73 20 66 6f 72 20 5b 69 6e   entries for [in
d890: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
d8a0: 6a 65 63 74 73 5d 20 69 6e 20 61 64 64 69 74 69  jects] in additi
d8b0: 6f 6e 20 74 6f 20 61 70 70 6c 69 63 61 74 69 6f  on to applicatio
d8c0: 6e 2d 0a 61 6e 64 20 70 72 6f 67 72 61 6d 6d 65  n-.and programme
d8d0: 72 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74  r-defined object
d8e0: 73 2e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71  s....<p>^(The sq
d8f0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 79 70 65  lite_master.type
d900: 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 20   column will be 
d910: 6f 6e 65 0a 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one.of the follo
d920: 77 69 6e 67 20 74 65 78 74 20 73 74 72 69 6e 67  wing text string
d930: 73 3a 20 20 27 74 61 62 6c 65 27 2c 20 27 69 6e  s:  'table', 'in
d940: 64 65 78 27 2c 20 27 76 69 65 77 27 2c 20 6f 72  dex', 'view', or
d950: 20 27 74 72 69 67 67 65 72 27 0a 61 63 63 6f 72   'trigger'.accor
d960: 64 69 6e 67 20 74 6f 20 74 68 65 20 74 79 70 65  ding to the type
d970: 20 6f 66 20 6f 62 6a 65 63 74 20 64 65 66 69 6e   of object defin
d980: 65 64 2e 20 20 54 68 65 20 27 74 61 62 6c 65 27  ed.  The 'table'
d990: 20 73 74 72 69 6e 67 20 69 73 20 75 73 65 64 0a   string is used.
d9a0: 66 6f 72 20 62 6f 74 68 20 6f 72 64 69 6e 61 72  for both ordinar
d9b0: 79 20 61 6e 64 20 5b 76 69 72 74 75 61 6c 20 74  y and [virtual t
d9c0: 61 62 6c 65 73 5d 2e 29 5e 3c 2f 70 3e 0a 0a 3c  ables].)^</p>..<
d9d0: 2f 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  /p>^(The sqlite_
d9e0: 6d 61 73 74 65 72 2e 6e 61 6d 65 20 63 6f 6c 75  master.name colu
d9f0: 6d 6e 20 77 69 6c 6c 20 68 6f 6c 64 20 74 68 65  mn will hold the
da00: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f 62 6a   name of the obj
da10: 65 63 74 2e 29 5e 0a 5e 28 5b 55 4e 49 51 55 45  ect.)^.^([UNIQUE
da20: 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b  ] and [PRIMARY K
da30: 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  EY] constraints 
da40: 6f 6e 20 74 61 62 6c 65 73 20 63 61 75 73 65 20  on tables cause 
da50: 53 51 4c 69 74 65 20 74 6f 20 63 72 65 61 74 65  SQLite to create
da60: 0a 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78  .[internal index
da70: 65 73 5d 20 77 69 74 68 20 6e 61 6d 65 73 20 6f  es] with names o
da80: 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c 69  f the form "sqli
da90: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42  te_autoindex_TAB
daa0: 4c 45 5f 4e 22 0a 77 68 65 72 65 20 54 41 42 4c  LE_N".where TABL
dab0: 45 20 69 73 20 72 65 70 6c 61 63 65 64 20 62 79  E is replaced by
dac0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
dad0: 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
dae0: 61 69 6e 73 20 74 68 65 0a 63 6f 6e 73 74 72 61  ains the.constra
daf0: 69 6e 74 20 61 6e 64 20 4e 20 69 73 20 61 6e 20  int and N is an 
db00: 69 6e 74 65 67 65 72 20 62 65 67 69 6e 6e 69 6e  integer beginnin
db10: 67 20 77 69 74 68 20 31 20 61 6e 64 20 69 6e 63  g with 1 and inc
db20: 72 65 61 73 69 6e 67 20 62 79 20 6f 6e 65 0a 77  reasing by one.w
db30: 69 74 68 20 65 61 63 68 20 63 6f 6e 73 74 72 61  ith each constra
db40: 69 6e 74 20 73 65 65 6e 20 69 6e 20 74 68 65 20  int seen in the 
db50: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
db60: 2e 29 5e 0a 5e 28 49 6e 20 61 20 5b 57 49 54 48  .)^.^(In a [WITH
db70: 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
db80: 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 71  , there is no sq
db90: 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74 72  lite_master entr
dba0: 79 20 66 6f 72 20 74 68 65 0a 50 52 49 4d 41 52  y for the.PRIMAR
dbb0: 59 20 4b 45 59 2c 20 62 75 74 20 74 68 65 20 22  Y KEY, but the "
dbc0: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
dbd0: 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d 65 20 69  _TABLE_N" name i
dbe0: 73 20 73 65 74 20 61 73 69 64 65 0a 66 6f 72 20  s set aside.for 
dbf0: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
dc00: 61 73 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  as if the sqlite
dc10: 5f 6d 61 73 74 65 72 20 65 6e 74 72 79 20 64 69  _master entry di
dc20: 64 20 65 78 69 73 74 2e 20 20 54 68 69 73 0a 77  d exist.  This.w
dc30: 69 6c 6c 20 61 66 66 65 63 74 20 74 68 65 20 6e  ill affect the n
dc40: 75 6d 62 65 72 69 6e 67 20 6f 66 20 73 75 62 73  umbering of subs
dc50: 65 71 75 65 6e 74 20 55 4e 49 51 55 45 20 63 6f  equent UNIQUE co
dc60: 6e 73 74 72 61 69 6e 74 73 2e 29 5e 0a 5e 54 68  nstraints.)^.^Th
dc70: 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  e "sqlite_autoin
dc80: 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d  dex_TABLE_N" nam
dc90: 65 20 69 73 20 6e 65 76 65 72 20 61 6c 6c 6f 63  e is never alloc
dca0: 61 74 65 64 20 66 6f 72 20 61 6e 0a 5b 49 4e 54  ated for an.[INT
dcb0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
dcc0: 5d 2c 20 65 69 74 68 65 72 20 69 6e 20 72 6f 77  ], either in row
dcd0: 69 64 20 74 61 62 6c 65 73 20 6f 72 20 57 49 54  id tables or WIT
dce0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
dcf0: 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  s..</p>..<p>The 
dd00: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 62  sqlite_master.tb
dd10: 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 68 6f  l_name column ho
dd20: 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  lds the name of 
dd30: 61 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 0a  a table or view.
dd40: 74 68 61 74 20 74 68 65 20 6f 62 6a 65 63 74 20  that the object 
dd50: 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  is associated wi
dd60: 74 68 2e 20 20 5e 46 6f 72 20 61 20 74 61 62 6c  th.  ^For a tabl
dd70: 65 20 6f 72 20 76 69 65 77 2c 20 74 68 65 0a 74  e or view, the.t
dd80: 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 69  bl_name column i
dd90: 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  s a copy of the 
dda0: 6e 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 46  name column.  ^F
ddb0: 6f 72 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65  or an index, the
ddc0: 20 74 62 6c 5f 6e 61 6d 65 0a 69 73 20 74 68 65   tbl_name.is the
ddd0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
dde0: 6c 65 20 74 68 61 74 20 69 73 20 69 6e 64 65 78  le that is index
ddf0: 65 64 2e 20 20 5e 46 6f 72 20 61 20 74 72 69 67  ed.  ^For a trig
de00: 67 65 72 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d  ger, the tbl_nam
de10: 65 0a 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20  e.column stores 
de20: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
de30: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 68  table or view th
de40: 61 74 20 63 61 75 73 65 73 20 74 68 65 20 74 72  at causes the tr
de50: 69 67 67 65 72 20 0a 74 6f 20 66 69 72 65 2e 3c  igger .to fire.<
de60: 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71  /p>..<p>^(The sq
de70: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 72 6f 6f 74  lite_master.root
de80: 70 61 67 65 20 63 6f 6c 75 6d 6e 20 73 74 6f 72  page column stor
de90: 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  es the page numb
dea0: 65 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 0a 62  er of the root.b
deb0: 2d 74 72 65 65 20 70 61 67 65 20 66 6f 72 20 74  -tree page for t
dec0: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65 78 65  ables and indexe
ded0: 73 2e 29 5e 20 20 5e 46 6f 72 20 72 6f 77 73 20  s.)^  ^For rows 
dee0: 74 68 61 74 20 64 65 66 69 6e 65 20 76 69 65 77  that define view
def0: 73 2c 20 74 72 69 67 67 65 72 73 2c 0a 61 6e 64  s, triggers,.and
df00: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c   virtual tables,
df10: 20 74 68 65 20 72 6f 6f 74 70 61 67 65 20 63 6f   the rootpage co
df20: 6c 75 6d 6e 20 69 73 20 30 20 6f 72 20 4e 55 4c  lumn is 0 or NUL
df30: 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65  L.</p>..<p>^(The
df40: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73   sqlite_master.s
df50: 71 6c 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73  ql column stores
df60: 20 53 51 4c 20 74 65 78 74 20 74 68 61 74 20 64   SQL text that d
df70: 65 73 63 72 69 62 65 73 20 74 68 65 0a 6f 62 6a  escribes the.obj
df80: 65 63 74 2e 20 20 54 68 69 73 20 53 51 4c 20 74  ect.  This SQL t
df90: 65 78 74 20 69 73 20 61 20 5b 43 52 45 41 54 45  ext is a [CREATE
dfa0: 20 54 41 42 4c 45 5d 2c 20 5b 43 52 45 41 54 45   TABLE], [CREATE
dfb0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 5d 2c   VIRTUAL TABLE],
dfc0: 0a 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 2c  .[CREATE INDEX],
dfd0: 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2c 20  .[CREATE VIEW], 
dfe0: 6f 72 20 5b 43 52 45 41 54 45 20 54 52 49 47 47  or [CREATE TRIGG
dff0: 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68  ER] statement th
e000: 61 74 20 69 66 20 65 76 61 6c 75 61 74 65 64 20  at if evaluated 
e010: 61 67 61 69 6e 73 74 0a 74 68 65 20 64 61 74 61  against.the data
e020: 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20 69  base file when i
e030: 74 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  t is the main da
e040: 74 61 62 61 73 65 20 6f 66 20 61 20 5b 64 61 74  tabase of a [dat
e050: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
e060: 5d 0a 77 6f 75 6c 64 20 72 65 63 72 65 61 74 65  ].would recreate
e070: 20 74 68 65 20 6f 62 6a 65 63 74 2e 29 5e 20 20   the object.)^  
e080: 54 68 65 20 74 65 78 74 20 69 73 20 75 73 75 61  The text is usua
e090: 6c 6c 79 20 61 20 63 6f 70 79 20 6f 66 20 74 68  lly a copy of th
e0a0: 65 20 6f 72 69 67 69 6e 61 6c 0a 73 74 61 74 65  e original.state
e0b0: 6d 65 6e 74 20 75 73 65 64 20 74 6f 20 63 72 65  ment used to cre
e0c0: 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74 20 62  ate the object b
e0d0: 75 74 20 77 69 74 68 20 6e 6f 72 6d 61 6c 69 7a  ut with normaliz
e0e0: 61 74 69 6f 6e 73 20 61 70 70 6c 69 65 64 20 73  ations applied s
e0f0: 6f 0a 74 68 61 74 20 74 68 65 20 74 65 78 74 20  o.that the text 
e100: 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 74 68 65 20  conforms to the 
e110: 66 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c 65 73 3a  following rules:
e120: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20  ..<ul>.<li>^The 
e130: 43 52 45 41 54 45 2c 20 54 41 42 4c 45 2c 20 56  CREATE, TABLE, V
e140: 49 45 57 2c 20 54 52 49 47 47 45 52 2c 20 61 6e  IEW, TRIGGER, an
e150: 64 20 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 73  d INDEX keywords
e160: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
e170: 67 0a 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65  g.of the stateme
e180: 6e 74 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64  nt are converted
e190: 20 74 6f 20 61 6c 6c 20 75 70 70 65 72 20 63 61   to all upper ca
e1a0: 73 65 20 6c 65 74 74 65 72 73 2e 0a 3c 6c 69 3e  se letters..<li>
e1b0: 5e 54 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d  ^The TEMP or TEM
e1c0: 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64 20 69  PORARY keyword i
e1d0: 73 20 72 65 6d 6f 76 65 64 20 69 66 20 69 74 20  s removed if it 
e1e0: 6f 63 63 75 72 73 20 61 66 74 65 72 20 74 68 65  occurs after the
e1f0: 20 0a 69 6e 69 74 69 61 6c 20 43 52 45 41 54 45   .initial CREATE
e200: 20 6b 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e 5e 41   keyword..<li>^A
e210: 6e 79 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  ny database name
e220: 20 71 75 61 6c 69 66 69 65 72 20 74 68 61 74 20   qualifier that 
e230: 6f 63 63 75 72 73 20 70 72 69 6f 72 20 74 6f 20  occurs prior to 
e240: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 0a  the name of the.
e250: 6f 62 6a 65 63 74 20 62 65 69 6e 67 20 63 72 65  object being cre
e260: 61 74 65 64 20 69 73 20 72 65 6d 6f 76 65 64 2e  ated is removed.
e270: 0a 3c 6c 69 3e 5e 4c 65 61 64 69 6e 67 20 73 70  .<li>^Leading sp
e280: 61 63 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64  aces are removed
e290: 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20 73 70 61 63 65  ..<li>^All space
e2a0: 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  s following the 
e2b0: 66 69 72 73 74 20 74 77 6f 20 6b 65 79 77 6f 72  first two keywor
e2c0: 64 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64  ds are converted
e2d0: 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 0a 73   into a single.s
e2e0: 70 61 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e  pace..</ul>..<p>
e2f0: 5e 28 54 68 65 20 74 65 78 74 20 69 6e 20 74 68  ^(The text in th
e300: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
e310: 73 71 6c 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20  sql column is a 
e320: 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69 67  copy of the orig
e330: 69 6e 61 6c 0a 43 52 45 41 54 45 20 73 74 61 74  inal.CREATE stat
e340: 65 6d 65 6e 74 20 74 65 78 74 20 74 68 61 74 20  ement text that 
e350: 63 72 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65  created the obje
e360: 63 74 2c 20 65 78 63 65 70 74 20 6e 6f 72 6d 61  ct, except norma
e370: 6c 69 7a 65 64 20 61 73 0a 64 65 73 63 72 69 62  lized as.describ
e380: 65 64 20 61 62 6f 76 65 20 61 6e 64 20 61 73 20  ed above and as 
e390: 6d 6f 64 69 66 69 65 64 20 62 79 20 73 75 62 73  modified by subs
e3a0: 65 71 75 65 6e 74 20 5b 41 4c 54 45 52 20 54 41  equent [ALTER TA
e3b0: 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e  BLE] statements.
e3c0: 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  )^.^(The sqlite_
e3d0: 6d 61 73 74 65 72 2e 73 71 6c 20 69 73 20 4e 55  master.sql is NU
e3e0: 4c 4c 20 66 6f 72 20 74 68 65 20 5b 69 6e 74 65  LL for the [inte
e3f0: 72 6e 61 6c 20 69 6e 64 65 78 65 73 5d 20 74 68  rnal indexes] th
e400: 61 74 20 61 72 65 0a 61 75 74 6f 6d 61 74 69 63  at are.automatic
e410: 61 6c 6c 79 20 63 72 65 61 74 65 64 20 62 79 20  ally created by 
e420: 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b 50 52 49  [UNIQUE] or [PRI
e430: 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72  MARY KEY] constr
e440: 61 69 6e 74 73 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c  aints.)^</p>...<
e450: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
e460: 69 6e 74 73 63 68 65 6d 61 20 7b 69 6e 74 65 72  intschema {inter
e470: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
e480: 74 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20  ts} \.{internal 
e490: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 7d 20 7b  schema object} {
e4a0: 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 7d 20  internal index} 
e4b0: 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 65  {internal indexe
e4c0: 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20 74  s} \.{internal t
e4d0: 61 62 6c 65 7d 20 7b 69 6e 74 65 72 6e 61 6c 20  able} {internal 
e4e0: 74 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68  tables}</tcl>.<h
e4f0: 34 3e 32 2e 36 2e 31 20 49 6e 74 65 72 6e 61 6c  4>2.6.1 Internal
e500: 20 53 63 68 65 6d 61 20 4f 62 6a 65 63 74 73 3c   Schema Objects<
e510: 2f 68 34 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 64 64  /h4>..<p>^In add
e520: 69 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 61 62  ition to the tab
e530: 6c 65 73 2c 20 69 6e 64 65 78 65 73 2c 20 76 69  les, indexes, vi
e540: 65 77 73 2c 20 61 6e 64 20 74 72 69 67 67 65 72  ews, and trigger
e550: 73 20 63 72 65 61 74 65 64 20 62 79 0a 74 68 65  s created by.the
e560: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 61 6e 64   application and
e570: 2f 6f 72 20 74 68 65 20 64 65 76 65 6c 6f 70 65  /or the develope
e580: 72 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 73  r using CREATE s
e590: 74 61 74 65 6d 65 6e 74 73 20 53 51 4c 2c 20 74  tatements SQL, t
e5a0: 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he.sqlite_master
e5b0: 20 74 61 62 6c 65 20 6d 61 79 20 63 6f 6e 74 61   table may conta
e5c0: 69 6e 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  in zero or more 
e5d0: 65 6e 74 72 69 65 73 20 66 6f 72 20 0a 3c 69 3e  entries for .<i>
e5e0: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
e5f0: 6f 62 6a 65 63 74 73 3c 2f 69 3e 20 74 68 61 74  objects</i> that
e600: 20 61 72 65 20 63 72 65 61 74 65 64 20 62 79 20   are created by 
e610: 53 51 4c 69 74 65 20 66 6f 72 20 69 74 73 20 0a  SQLite for its .
e620: 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 75 73 65  own internal use
e630: 2e 20 20 5e 54 68 65 20 6e 61 6d 65 73 20 6f 66  .  ^The names of
e640: 20 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61   internal schema
e650: 20 6f 62 6a 65 63 74 73 0a 61 6c 77 61 79 73 20   objects.always 
e660: 62 65 67 69 6e 20 77 69 74 68 20 22 73 71 6c 69  begin with "sqli
e670: 74 65 5f 22 20 61 6e 64 20 61 6e 79 20 74 61 62  te_" and any tab
e680: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 69 65 77 2c  le, index, view,
e690: 20 6f 72 20 74 72 69 67 67 65 72 0a 77 68 6f 73   or trigger.whos
e6a0: 65 20 6e 61 6d 65 20 62 65 67 69 6e 73 20 77 69  e name begins wi
e6b0: 74 68 20 22 73 71 6c 69 74 65 5f 22 20 69 73 20  th "sqlite_" is 
e6c0: 61 6e 20 69 6e 74 65 72 6e 61 6c 20 73 63 68 65  an internal sche
e6d0: 6d 61 20 6f 62 6a 65 63 74 2e 0a 5e 53 51 4c 69  ma object..^SQLi
e6e0: 74 65 20 70 72 6f 68 69 62 69 74 73 20 61 70 70  te prohibits app
e6f0: 6c 69 63 61 74 69 6f 6e 73 20 66 72 6f 6d 20 63  lications from c
e700: 72 65 61 74 69 6e 67 20 6f 62 6a 65 63 74 73 20  reating objects 
e710: 77 68 6f 73 65 20 6e 61 6d 65 73 20 62 65 67 69  whose names begi
e720: 6e 0a 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22  n.with "sqlite_"
e730: 2e 20 20 0a 0a 3c 70 3e 49 6e 74 65 72 6e 61 6c  .  ..<p>Internal
e740: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   schema objects 
e750: 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 20 6d  used by SQLite m
e760: 61 79 20 69 6e 63 6c 75 64 65 20 74 68 65 20 66  ay include the f
e770: 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a 3c 75 6c 3e 0a  ollowing:..<ul>.
e780: 3c 6c 69 3e 3c 70 3e 49 6e 64 69 63 65 73 20 77  <li><p>Indices w
e790: 69 74 68 20 6e 61 6d 65 73 20 6f 66 20 74 68 65  ith names of the
e7a0: 20 66 6f 72 6d 20 22 73 71 6c 69 74 65 5f 61 75   form "sqlite_au
e7b0: 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22  toindex_TABLE_N"
e7c0: 20 74 68 61 74 0a 20 20 20 20 20 20 20 61 72 65   that.       are
e7d0: 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   used to impleme
e7e0: 6e 74 20 5b 55 4e 49 51 55 45 5d 20 61 6e 64 20  nt [UNIQUE] and 
e7f0: 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f  [PRIMARY KEY] co
e800: 6e 73 74 72 61 69 6e 74 73 20 6f 6e 0a 20 20 20  nstraints on.   
e810: 20 20 20 20 6f 72 64 69 6e 61 72 79 20 74 61 62      ordinary tab
e820: 6c 65 73 2e 0a 0a 3c 6c 69 3e 3c 70 3e 41 20 74  les...<li><p>A t
e830: 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 6e 61  able with the na
e840: 6d 65 20 22 73 71 6c 69 74 65 5f 73 65 71 75 65  me "sqlite_seque
e850: 6e 63 65 22 20 74 68 61 74 20 69 73 20 75 73 65  nce" that is use
e860: 64 20 74 6f 20 6b 65 65 70 20 74 72 61 63 6b 0a  d to keep track.
e870: 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 6d 61         of the ma
e880: 78 69 6d 75 6d 20 68 69 73 74 6f 72 69 63 61 6c  ximum historical
e890: 20 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52   [INTEGER PRIMAR
e8a0: 59 20 4b 45 59 5d 20 66 6f 72 20 61 20 74 61 62  Y KEY] for a tab
e8b0: 6c 65 0a 20 20 20 20 20 20 20 75 73 69 6e 67 20  le.       using 
e8c0: 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e  [AUTOINCREMENT].
e8d0: 0a 0a 3c 6c 69 3e 3c 70 3e 54 61 62 6c 65 73 20  ..<li><p>Tables 
e8e0: 77 69 74 68 20 6e 61 6d 65 73 20 6f 66 20 74 68  with names of th
e8f0: 65 20 66 6f 72 6d 20 22 73 71 6c 69 74 65 5f 73  e form "sqlite_s
e900: 74 61 74 4e 22 20 77 68 65 72 65 20 4e 20 69 73  tatN" where N is
e910: 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 20 20 20   an integer..   
e920: 20 20 20 20 53 75 63 68 20 74 61 62 6c 65 73 20      Such tables 
e930: 73 74 6f 72 65 20 64 61 74 61 62 61 73 65 20 73  store database s
e940: 74 61 74 69 73 74 69 63 73 20 67 61 74 68 65 72  tatistics gather
e950: 65 64 20 62 79 20 74 68 65 20 5b 41 4e 41 4c 59  ed by the [ANALY
e960: 5a 45 5d 0a 20 20 20 20 20 20 20 63 6f 6d 6d 61  ZE].       comma
e970: 6e 64 20 61 6e 64 20 75 73 65 64 20 62 79 20 74  nd and used by t
e980: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
e990: 20 74 6f 20 68 65 6c 70 20 64 65 74 65 72 6d 69   to help determi
e9a0: 6e 65 20 74 68 65 20 62 65 73 74 0a 20 20 20 20  ne the best.    
e9b0: 20 20 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20     algorithm to 
e9c0: 75 73 65 20 66 6f 72 20 65 61 63 68 20 71 75 65  use for each que
e9d0: 72 79 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 4e 65  ry..</ul>..<p>Ne
e9e0: 77 20 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d  w internal schem
e9f0: 61 20 6f 62 6a 65 63 74 73 20 6e 61 6d 65 73 2c  a objects names,
ea00: 20 61 6c 77 61 79 73 20 62 65 67 69 6e 6e 69 6e   always beginnin
ea10: 67 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22  g with "sqlite_"
ea20: 2c 0a 6d 61 79 20 62 65 20 61 64 64 65 64 20 74  ,.may be added t
ea30: 6f 20 74 68 65 20 53 51 4c 69 74 65 20 66 69 6c  o the SQLite fil
ea40: 65 20 66 6f 72 6d 61 74 20 69 6e 20 66 75 74 75  e format in futu
ea50: 72 65 20 72 65 6c 65 61 73 65 73 2e 0a 0a 3c 74  re releases...<t
ea60: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
ea70: 65 71 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 65  eqtab {sqlite_se
ea80: 71 75 65 6e 63 65 7d 3c 2f 74 63 6c 3e 0a 3c 68  quence}</tcl>.<h
ea90: 34 3e 32 2e 36 2e 32 20 54 68 65 20 73 71 6c 69  4>2.6.2 The sqli
eaa0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
eab0: 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20  e</h4>..<p>^The 
eac0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
ead0: 74 61 62 6c 65 20 69 73 20 61 6e 20 69 6e 74 65  table is an inte
eae0: 72 6e 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20  rnal table used 
eaf0: 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e  to help implemen
eb00: 74 0a 5b 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  t.[AUTOINCREMENT
eb10: 5d 2e 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  ].  ^The sqlite_
eb20: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 69  sequence table i
eb30: 73 20 63 72 65 61 74 65 64 20 61 75 74 6f 6d 61  s created automa
eb40: 74 69 63 61 6c 6c 79 0a 77 68 65 6e 65 76 65 72  tically.whenever
eb50: 20 61 6e 79 20 6f 72 64 69 6e 61 72 79 20 74 61   any ordinary ta
eb60: 62 6c 65 20 77 69 74 68 20 61 6e 20 41 55 54 4f  ble with an AUTO
eb70: 49 4e 43 52 45 4d 45 4e 54 20 69 6e 74 65 67 65  INCREMENT intege
eb80: 72 20 70 72 69 6d 61 72 79 0a 6b 65 79 20 69 73  r primary.key is
eb90: 20 63 72 65 61 74 65 64 2e 20 20 5e 4f 6e 63 65   created.  ^Once
eba0: 20 63 72 65 61 74 65 64 2c 20 74 68 65 20 73 71   created, the sq
ebb0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
ebc0: 62 6c 65 20 65 78 69 73 74 73 20 69 6e 20 74 68  ble exists in th
ebd0: 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e.sqlite_master 
ebe0: 74 61 62 6c 65 20 66 6f 72 65 76 65 72 3b 20 69  table forever; i
ebf0: 74 20 63 61 6e 6e 6f 74 20 62 65 20 64 72 6f 70  t cannot be drop
ec00: 70 65 64 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d  ped..^(The schem
ec10: 61 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  a for the sqlite
ec20: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
ec30: 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  is:..<blockquote
ec40: 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
ec50: 42 4c 45 20 73 71 6c 69 74 65 5f 73 65 71 75 65  BLE sqlite_seque
ec60: 6e 63 65 28 6e 61 6d 65 2c 73 65 71 29 3b 0a 3c  nce(name,seq);.<
ec70: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
ec80: 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20  e>)^..<p>^There 
ec90: 69 73 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  is a single row 
eca0: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  in the sqlite_se
ecb0: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 66 6f 72  quence table for
ecc0: 20 65 61 63 68 20 6f 72 64 69 6e 61 72 79 0a 74   each ordinary.t
ecd0: 61 62 6c 65 20 74 68 61 74 20 75 73 65 73 20 41  able that uses A
ece0: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2e 20 20 5e  UTOINCREMENT.  ^
ecf0: 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65  (The name of the
ed00: 20 74 61 62 6c 65 20 28 61 73 20 69 74 20 61 70   table (as it ap
ed10: 70 65 61 72 73 20 69 6e 0a 73 71 6c 69 74 65 5f  pears in.sqlite_
ed20: 6d 61 73 74 65 72 2e 6e 61 6d 65 29 20 69 73 20  master.name) is 
ed30: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  in the sqlite_se
ed40: 71 75 65 6e 63 65 2e 6d 61 69 6e 20 66 69 65 6c  quence.main fiel
ed50: 64 20 61 6e 64 20 74 68 65 20 6c 61 72 67 65 73  d and the larges
ed60: 74 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  t.[INTEGER PRIMA
ed70: 52 59 20 4b 45 59 5d 20 65 76 65 72 20 75 73 65  RY KEY] ever use
ed80: 64 20 62 79 20 74 68 61 74 20 74 61 62 6c 65 20  d by that table 
ed90: 69 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  is in the sqlite
eda0: 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 0a 66 69  _sequence.seq.fi
edb0: 65 6c 64 2e 29 5e 20 20 5e 4e 65 77 20 61 75 74  eld.)^  ^New aut
edc0: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
edd0: 61 74 65 64 20 69 6e 74 65 67 65 72 20 70 72 69  ated integer pri
ede0: 6d 61 72 79 20 6b 65 79 73 20 66 6f 72 20 41 55  mary keys for AU
edf0: 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 74 61 62 6c  TOINCREMENT.tabl
ee00: 65 73 20 61 72 65 20 67 75 61 72 61 6e 74 65 65  es are guarantee
ee10: 64 20 74 6f 20 62 65 20 6c 61 72 67 65 72 20 74  d to be larger t
ee20: 68 61 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73  han the sqlite_s
ee30: 65 71 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c  equence.seq fiel
ee40: 64 20 66 6f 72 0a 74 68 61 74 20 74 61 62 6c 65  d for.that table
ee50: 2e 0a 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74  ..^(If the sqlit
ee60: 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 20 66  e_sequence.seq f
ee70: 69 65 6c 64 20 6f 66 20 61 6e 20 41 55 54 4f 49  ield of an AUTOI
ee80: 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69  NCREMENT table i
ee90: 73 20 61 6c 72 65 61 64 79 20 61 74 0a 74 68 65  s already at.the
eea0: 20 6c 61 72 67 65 73 74 20 69 6e 74 65 67 65 72   largest integer
eeb0: 20 76 61 6c 75 65 20 28 39 32 32 33 33 37 32 30   value (92233720
eec0: 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65  36854775807) the
eed0: 6e 20 61 74 74 65 6d 70 74 73 20 74 6f 20 61 64  n attempts to ad
eee0: 64 20 6e 65 77 0a 72 6f 77 73 20 74 6f 20 74 68  d new.rows to th
eef0: 61 74 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e  at table with an
ef00: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67   automatically g
ef10: 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67 65 72  enerated integer
ef20: 20 70 72 69 6d 61 72 79 20 77 69 6c 6c 20 66 61   primary will fa
ef30: 69 6c 0a 77 69 74 68 20 61 6e 20 5b 53 51 4c 49  il.with an [SQLI
ef40: 54 45 5f 46 55 4c 4c 5d 20 65 72 72 6f 72 2e 29  TE_FULL] error.)
ef50: 5e 0a 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65  ^.^The sqlite_se
ef60: 71 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64  quence.seq field
ef70: 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   is automaticall
ef80: 79 20 75 70 64 61 74 65 64 20 69 66 20 72 65 71  y updated if req
ef90: 75 69 72 65 64 20 77 68 65 6e 0a 6e 65 77 20 65  uired when.new e
efa0: 6e 74 72 69 65 73 20 61 72 65 20 61 64 64 65 64  ntries are added
efb0: 20 74 6f 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   to an AUTOINCRE
efc0: 4d 45 4e 54 20 74 61 62 6c 65 2e 20 20 0a 5e 54  MENT table.  .^T
efd0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
efe0: 63 65 20 72 6f 77 20 66 6f 72 20 61 6e 20 41 55  ce row for an AU
eff0: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
f000: 65 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  e is automatical
f010: 6c 79 20 64 65 6c 65 74 65 64 0a 77 68 65 6e 20  ly deleted.when 
f020: 74 68 65 20 74 61 62 6c 65 20 69 73 20 64 72 6f  the table is dro
f030: 70 70 65 64 2e 0a 5e 49 66 20 74 68 65 20 73 71  pped..^If the sq
f040: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f  lite_sequence ro
f050: 77 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43  w for an AUTOINC
f060: 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 64 6f 65  REMENT table doe
f070: 73 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  s not exist when
f080: 0a 74 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45  .the AUTOINCREME
f090: 4e 54 20 74 61 62 6c 65 20 69 73 20 75 70 64 61  NT table is upda
f0a0: 74 65 64 2c 20 74 68 65 6e 20 61 20 6e 65 77 20  ted, then a new 
f0b0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
f0c0: 72 6f 77 20 69 73 20 63 72 65 61 74 65 64 2e 0a  row is created..
f0d0: 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  ^(If the sqlite_
f0e0: 73 65 71 75 65 6e 63 65 2e 73 65 71 20 76 61 6c  sequence.seq val
f0f0: 75 65 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e  ue for an AUTOIN
f100: 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73  CREMENT table is
f110: 20 6d 61 6e 75 61 6c 6c 79 20 0a 73 65 74 20 74   manually .set t
f120: 6f 20 73 6f 6d 65 74 68 69 6e 67 20 6f 74 68 65  o something othe
f130: 72 20 74 68 61 6e 20 61 6e 20 69 6e 74 65 67 65  r than an intege
f140: 72 20 61 6e 64 20 74 68 65 72 65 20 69 73 20 61  r and there is a
f150: 20 73 75 62 73 65 71 75 65 6e 74 20 61 74 74 65   subsequent atte
f160: 6d 70 74 20 74 6f 0a 69 6e 73 65 72 74 20 74 68  mpt to.insert th
f170: 65 20 6f 72 20 75 70 64 61 74 65 20 74 68 65 20  e or update the 
f180: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
f190: 62 6c 65 2c 20 74 68 65 6e 20 74 68 65 20 62 65  ble, then the be
f1a0: 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
f1b0: 6e 65 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 70 70 6c  ned.)^..<p>^Appl
f1c0: 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 69 73 20  ication code is 
f1d0: 61 6c 6c 6f 77 65 64 20 74 6f 20 6d 6f 64 69 66  allowed to modif
f1e0: 79 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  y the sqlite_seq
f1f0: 75 65 6e 63 65 20 74 61 62 6c 65 2c 20 74 6f 20  uence table, to 
f200: 61 64 64 0a 6e 65 77 20 72 6f 77 73 2c 20 74 6f  add.new rows, to
f210: 20 64 65 6c 65 74 65 20 72 6f 77 73 2c 20 6f 72   delete rows, or
f220: 20 74 6f 20 6d 6f 64 69 66 79 20 65 78 69 73 74   to modify exist
f230: 69 6e 67 20 72 6f 77 73 2e 20 20 5e 48 6f 77 65  ing rows.  ^Howe
f240: 76 65 72 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e  ver, application
f250: 0a 63 6f 64 65 20 63 61 6e 6e 6f 74 20 63 72 65  .code cannot cre
f260: 61 74 65 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ate the sqlite_s
f270: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 69 66  equence table if
f280: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72   it does not alr
f290: 65 61 64 79 20 65 78 69 73 74 2e 0a 5e 41 70 70  eady exist..^App
f2a0: 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 63 61  lication code ca
f2b0: 6e 20 64 65 6c 65 74 65 20 61 6c 6c 20 65 6e 74  n delete all ent
f2c0: 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 73 71  ries from the sq
f2d0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
f2e0: 62 6c 65 2c 0a 62 75 74 20 61 70 70 6c 69 63 61  ble,.but applica
f2f0: 74 69 6f 6e 20 63 6f 64 65 20 63 61 6e 6e 6f 74  tion code cannot
f300: 20 64 72 6f 70 20 74 68 65 20 73 71 6c 69 74 65   drop the sqlite
f310: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2e  _sequence table.
f320: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
f330: 6e 74 20 73 74 61 74 31 74 61 62 20 7b 73 71 6c  nt stat1tab {sql
f340: 69 74 65 5f 73 74 61 74 31 7d 20 53 51 4c 49 54  ite_stat1} SQLIT
f350: 45 5f 53 54 41 54 31 20 3c 2f 74 63 6c 3e 0a 3c  E_STAT1 </tcl>.<
f360: 68 34 3e 32 2e 36 2e 33 20 54 68 65 20 73 71 6c  h4>2.6.3 The sql
f370: 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 3c  ite_stat1 table<
f380: 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71  /h4>..<p>^The sq
f390: 6c 69 74 65 5f 73 74 61 74 31 20 69 73 20 61 6e  lite_stat1 is an
f3a0: 20 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20   internal table 
f3b0: 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20 5b  created by the [
f3c0: 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64  ANALYZE] command
f3d0: 0a 61 6e 64 20 75 73 65 64 20 74 6f 20 68 6f 6c  .and used to hol
f3e0: 64 20 73 75 70 70 6c 65 6d 65 6e 74 61 6c 20 69  d supplemental i
f3f0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
f400: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65   tables and inde
f410: 78 65 73 20 74 68 61 74 20 74 68 65 0a 71 75 65  xes that the.que
f420: 72 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75  ry planner can u
f430: 73 65 20 74 6f 20 68 65 6c 70 20 69 74 20 66 69  se to help it fi
f440: 6e 64 20 62 65 74 74 65 72 20 77 61 79 73 20 6f  nd better ways o
f450: 66 20 70 65 72 66 6f 72 6d 69 6e 67 20 71 75 65  f performing que
f460: 72 69 65 73 2e 0a 5e 41 70 70 6c 69 63 61 74 69  ries..^Applicati
f470: 6f 6e 73 20 63 61 6e 20 75 70 64 61 74 65 2c 20  ons can update, 
f480: 64 65 6c 65 74 65 20 66 72 6f 6d 2c 20 69 6e 73  delete from, ins
f490: 65 72 74 20 69 6e 74 6f 20 6f 72 20 64 72 6f 70  ert into or drop
f4a0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
f4b0: 31 0a 74 61 62 6c 65 2c 20 62 75 74 20 6d 61 79  1.table, but may
f4c0: 20 6e 6f 74 20 63 72 65 61 74 65 20 6f 72 20 61   not create or a
f4d0: 6c 74 65 72 20 74 68 65 20 73 71 6c 69 74 65 5f  lter the sqlite_
f4e0: 73 74 61 74 31 20 74 61 62 6c 65 2e 0a 5e 28 54  stat1 table..^(T
f4f0: 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65  he schema of the
f500: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
f510: 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ble is as follow
f520: 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
f530: 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
f540: 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 31 28  LE sqlite_stat1(
f550: 74 62 6c 2c 69 64 78 2c 73 74 61 74 29 3b 0a 3c  tbl,idx,stat);.<
f560: 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
f570: 65 3e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65 72  e>)^..<p> ^(Ther
f580: 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e  e is normally on
f590: 65 20 72 6f 77 20 70 65 72 20 69 6e 64 65 78 2c  e row per index,
f5a0: 20 77 69 74 68 20 74 68 65 20 69 6e 64 65 78 20   with the index 
f5b0: 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74 68  identified by th
f5c0: 65 0a 6e 61 6d 65 20 69 6e 20 74 68 65 20 73 71  e.name in the sq
f5d0: 6c 69 74 65 5f 73 74 61 74 31 2e 69 64 78 20 63  lite_stat1.idx c
f5e0: 6f 6c 75 6d 6e 2e 29 5e 20 20 5e 28 54 68 65 20  olumn.)^  ^(The 
f5f0: 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c  sqlite_stat1.tbl
f600: 20 63 6f 6c 75 6d 6e 20 69 73 0a 74 68 65 20 6e   column is.the n
f610: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
f620: 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 69 6e   to which the in
f630: 64 65 78 20 62 65 6c 6f 6e 67 73 2e 29 5e 20 20  dex belongs.)^  
f640: 5e 28 49 6e 20 65 61 63 68 20 73 75 63 68 20 72  ^(In each such r
f650: 6f 77 2c 20 0a 74 68 65 20 73 71 6c 69 74 65 5f  ow, .the sqlite_
f660: 73 74 61 74 2e 73 74 61 74 20 63 6f 6c 75 6d 6e  stat.stat column
f670: 20 77 69 6c 6c 20 62 65 0a 61 20 73 74 72 69 6e   will be.a strin
f680: 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  g consisting of 
f690: 61 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65  a list of intege
f6a0: 72 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a  rs followed by z
f6b0: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 0a 61 72 67  ero or more .arg
f6c0: 75 6d 65 6e 74 73 2e 29 5e 20 20 5e 54 68 65 20  uments.)^  ^The 
f6d0: 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e  first integer in
f6e0: 20 74 68 69 73 0a 6c 69 73 74 20 69 73 20 74 68   this.list is th
f6f0: 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75  e approximate nu
f700: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
f710: 74 68 65 20 69 6e 64 65 78 2e 20 20 28 54 68 65  the index.  (The
f720: 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20   number of.rows 
f730: 69 6e 20 74 68 65 20 69 6e 64 65 78 20 69 73 20  in the index is 
f740: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
f750: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
f760: 6e 20 74 68 65 20 74 61 62 6c 65 2c 0a 65 78 63  n the table,.exc
f770: 65 70 74 20 66 6f 72 20 5b 70 61 72 74 69 61 6c  ept for [partial
f780: 20 69 6e 64 65 78 65 73 5d 2e 29 0a 5e 54 68 65   indexes].).^The
f790: 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20   second integer 
f7a0: 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  is the approxima
f7b0: 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  te number of row
f7c0: 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a 74  s in the index.t
f7d0: 68 61 74 20 68 61 76 65 20 74 68 65 20 73 61 6d  hat have the sam
f7e0: 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 66  e value in the f
f7f0: 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  irst column of t
f800: 68 65 20 69 6e 64 65 78 2e 20 20 5e 54 68 65 20  he index.  ^The 
f810: 74 68 69 72 64 20 0a 69 6e 74 65 67 65 72 20 69  third .integer i
f820: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6e 75 6d  s the number num
f830: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
f840: 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 68 61  he index that ha
f850: 76 65 20 0a 74 68 65 20 73 61 6d 65 20 76 61 6c  ve .the same val
f860: 75 65 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  ue for the first
f870: 20 74 77 6f 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e   two columns.  ^
f880: 54 68 65 20 4e 2d 74 68 20 69 6e 74 65 67 65 72  The N-th integer
f890: 20 28 66 6f 72 20 4e 3e 31 29 20 0a 69 73 20 74   (for N>1) .is t
f8a0: 68 65 20 65 73 74 69 6d 61 74 65 64 20 61 76 65  he estimated ave
f8b0: 72 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 72  rage number of r
f8c0: 6f 77 73 20 69 6e 20 0a 74 68 65 20 69 6e 64 65  ows in .the inde
f8d0: 78 20 77 68 69 63 68 20 68 61 76 65 20 74 68 65  x which have the
f8e0: 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20   same value for 
f8f0: 74 68 65 20 66 69 72 73 74 20 4e 2d 31 20 63 6f  the first N-1 co
f900: 6c 75 6d 6e 73 2e 20 20 5e 46 6f 72 0a 61 20 4b  lumns.  ^For.a K
f910: 2d 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2c 20 74  -column index, t
f920: 68 65 72 65 20 77 69 6c 6c 20 62 65 20 4b 2b 31  here will be K+1
f930: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 65   integers in the
f940: 20 73 74 61 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e   stat column.  ^
f950: 49 66 0a 74 68 65 20 69 6e 64 65 78 20 69 73 20  If.the index is 
f960: 75 6e 69 71 75 65 2c 20 74 68 65 6e 20 74 68 65  unique, then the
f970: 20 6c 61 73 74 20 69 6e 74 65 67 65 72 20 77 69   last integer wi
f980: 6c 6c 20 62 65 20 31 2e 0a 0a 3c 70 3e 5e 54 68  ll be 1...<p>^Th
f990: 65 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65  e list of intege
f9a0: 72 73 20 69 6e 20 74 68 65 20 73 74 61 74 20 63  rs in the stat c
f9b0: 6f 6c 75 6d 6e 20 63 61 6e 20 6f 70 74 69 6f 6e  olumn can option
f9c0: 61 6c 6c 79 20 62 65 20 66 6f 6c 6c 6f 77 65 64  ally be followed
f9d0: 0a 62 79 20 61 72 67 75 6d 65 6e 74 73 2c 20 65  .by arguments, e
f9e0: 61 63 68 20 6f 66 20 77 68 69 63 68 20 69 73 20  ach of which is 
f9f0: 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 6e 6f  a sequence of no
fa00: 6e 2d 73 70 61 63 65 20 63 68 61 72 61 63 74 65  n-space characte
fa10: 72 73 2e 0a 5e 41 6c 6c 20 61 72 67 75 6d 65 6e  rs..^All argumen
fa20: 74 73 20 61 72 65 20 70 72 65 63 65 64 65 64 20  ts are preceded 
fa30: 62 79 20 61 20 73 69 6e 67 6c 65 20 73 70 61 63  by a single spac
fa40: 65 2e 0a 5e 55 6e 72 65 63 6f 67 6e 69 7a 65 64  e..^Unrecognized
fa50: 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 73   arguments are s
fa60: 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e  ilently ignored.
fa70: 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 75 6e  ..<p>^If the "un
fa80: 6f 72 64 65 72 65 64 22 20 61 72 67 75 6d 65 6e  ordered" argumen
fa90: 74 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68  t is present, th
faa0: 65 6e 20 74 68 65 20 71 75 65 72 79 20 70 6c 61  en the query pla
fab0: 6e 6e 65 72 20 61 73 73 75 6d 65 73 0a 74 68 61  nner assumes.tha
fac0: 74 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 75  t the index is u
fad0: 6e 6f 72 64 65 72 65 64 20 61 6e 64 20 77 69 6c  nordered and wil
fae0: 6c 20 6e 6f 74 20 75 73 65 20 74 68 65 20 69 6e  l not use the in
faf0: 64 65 78 20 66 6f 72 20 61 20 72 61 6e 67 65 20  dex for a range 
fb00: 71 75 65 72 79 0a 6f 72 20 66 6f 72 20 73 6f 72  query.or for sor
fb10: 74 69 6e 67 2e 0a 0a 3c 70 3e 5e 54 68 65 20 22  ting...<p>^The "
fb20: 73 7a 3d 4e 4e 4e 22 20 61 72 67 75 6d 65 6e 74  sz=NNN" argument
fb30: 20 28 77 68 65 72 65 20 4e 4e 4e 20 72 65 70 72   (where NNN repr
fb40: 65 73 65 6e 74 73 20 61 20 73 65 71 75 65 6e 63  esents a sequenc
fb50: 65 20 6f 66 20 31 20 6f 72 20 6d 6f 72 65 20 64  e of 1 or more d
fb60: 69 67 69 74 73 29 0a 6d 65 61 6e 73 20 74 68 61  igits).means tha
fb70: 74 20 74 68 65 20 61 76 65 72 61 67 65 20 72 6f  t the average ro
fb80: 77 20 73 69 7a 65 20 6f 76 65 72 20 61 6c 6c 20  w size over all 
fb90: 72 65 63 6f 72 64 73 20 6f 66 20 74 68 65 20 74  records of the t
fba0: 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 69 73  able or.index is
fbb0: 20 4e 4e 4e 20 62 79 74 65 73 20 70 65 72 20 72   NNN bytes per r
fbc0: 6f 77 2e 20 20 5e 54 68 65 20 53 51 4c 69 74 65  ow.  ^The SQLite
fbd0: 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 6d   query planner m
fbe0: 69 67 68 74 20 75 73 65 20 74 68 65 0a 65 73 74  ight use the.est
fbf0: 69 6d 61 74 65 64 20 72 6f 77 20 73 69 7a 65 20  imated row size 
fc00: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 6f 76  information prov
fc10: 69 64 65 64 20 62 79 20 74 68 65 20 22 73 7a 3d  ided by the "sz=
fc20: 4e 4e 4e 22 20 74 6f 6b 65 6e 0a 74 6f 20 68 65  NNN" token.to he
fc30: 6c 70 20 69 74 20 63 68 6f 6f 73 65 20 73 6d 61  lp it choose sma
fc40: 6c 6c 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  ller tables and 
fc50: 69 6e 64 65 78 65 73 20 74 68 61 74 20 72 65 71  indexes that req
fc60: 75 69 72 65 20 6c 65 73 73 20 64 69 73 6b 20 49  uire less disk I
fc70: 2f 4f 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 70 72  /O...<p>^(The pr
fc80: 65 73 65 6e 63 65 20 6f 66 20 74 68 65 20 22 6e  esence of the "n
fc90: 6f 73 6b 69 70 73 63 61 6e 22 20 74 6f 6b 65 6e  oskipscan" token
fca0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   on the sqlite_s
fcb0: 74 61 74 31 2e 73 74 61 74 20 66 69 65 6c 64 0a  tat1.stat field.
fcc0: 6f 66 20 61 6e 20 69 6e 64 65 78 20 70 72 65 76  of an index prev
fcd0: 65 6e 74 73 20 74 68 61 74 20 69 6e 64 65 78 20  ents that index 
fce0: 66 72 6f 6d 20 62 65 69 6e 67 20 75 73 65 64 20  from being used 
fcf0: 77 69 74 68 20 74 68 65 0a 5b 73 6b 69 70 2d 73  with the.[skip-s
fd00: 63 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  can optimization
fd10: 5d 2e 29 5e 0a 0a 3c 70 3e 4e 65 77 20 74 65 78  ].)^..<p>New tex
fd20: 74 20 74 6f 6b 65 6e 73 20 6d 61 79 20 62 65 20  t tokens may be 
fd30: 61 64 64 65 64 20 74 6f 20 74 68 65 20 65 6e 64  added to the end
fd40: 20 6f 66 20 74 68 65 20 73 74 61 74 20 63 6f 6c   of the stat col
fd50: 75 6d 6e 20 69 6e 20 66 75 74 75 72 65 0a 65 6e  umn in future.en
fd60: 68 61 6e 63 65 6d 65 6e 74 73 20 74 6f 20 53 51  hancements to SQ
fd70: 4c 69 74 65 2e 20 20 46 6f 72 20 63 6f 6d 70 61  Lite.  For compa
fd80: 74 69 62 69 6c 69 74 79 2c 20 75 6e 72 65 63 6f  tibility, unreco
fd90: 67 6e 69 7a 65 64 20 74 6f 6b 65 6e 73 20 61 74  gnized tokens at
fda0: 20 74 68 65 20 65 6e 64 0a 6f 66 20 74 68 65 20   the end.of the 
fdb0: 73 74 61 74 20 63 6f 6c 75 6d 6e 20 61 72 65 20  stat column are 
fdc0: 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64  silently ignored
fdd0: 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20 73  ...<p>^(If the s
fde0: 71 6c 69 74 65 5f 73 74 61 74 31 2e 69 64 78 20  qlite_stat1.idx 
fdf0: 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2c 20  column is NULL, 
fe00: 74 68 65 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  then the sqlite_
fe10: 73 74 61 74 31 2e 73 74 61 74 0a 63 6f 6c 75 6d  stat1.stat.colum
fe20: 6e 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  n contains a sin
fe30: 67 6c 65 20 69 6e 74 65 67 65 72 20 77 68 69 63  gle integer whic
fe40: 68 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69  h is the approxi
fe50: 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72  mate number of.r
fe60: 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
fe70: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 73   identified by s
fe80: 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c 2e  qlite_stat1.tbl.
fe90: 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  )^..<tcl>hd_frag
fea0: 6d 65 6e 74 20 73 74 61 74 32 74 61 62 20 7b 73  ment stat2tab {s
feb0: 71 6c 69 74 65 5f 73 74 61 74 32 7d 3c 2f 74 63  qlite_stat2}</tc
fec0: 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 34 20 54 68 65  l>.<h4>2.6.4 The
fed0: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
fee0: 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65  ble</h4>..<p>The
fef0: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 69 73   sqlite_stat2 is
ff00: 20 6f 6e 6c 79 20 63 72 65 61 74 65 64 20 61 6e   only created an
ff10: 64 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  d is only used i
ff20: 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
ff30: 69 6c 65 64 0a 77 69 74 68 20 53 51 4c 49 54 45  iled.with SQLITE
ff40: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32 20 61 6e  _ENABLE_STAT2 an
ff50: 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  d if the SQLite 
ff60: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69  version number i
ff70: 73 20 62 65 74 77 65 65 6e 0a 33 2e 36 2e 31 38  s between.3.6.18
ff80: 20 61 6e 64 20 33 2e 37 2e 38 2e 20 20 54 68 65   and 3.7.8.  The
ff90: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
ffa0: 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20 72  ble is neither r
ffb0: 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20  ead nor written 
ffc0: 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f  by any.version o
ffd0: 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20  f SQLite before 
ffe0: 33 2e 36 2e 31 38 20 6e 6f 72 20 61 66 74 65 72  3.6.18 nor after
fff0: 20 33 2e 37 2e 38 2e 0a 54 68 65 20 73 71 6c 69   3.7.8..The sqli
10000 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20 63  te_stat2 table c
10010 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e  ontains addition
10020 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61  al information.a
10030 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69 62  bout the distrib
10040 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69  ution of keys wi
10050 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2e 0a 54  thin an index..T
10060 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65  he schema of the
10070 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
10080 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ble is as follow
10090 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
100a0 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
100b0 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 32 28  LE sqlite_stat2(
100c0 74 62 6c 2c 69 64 78 2c 73 61 6d 70 6c 65 6e 6f  tbl,idx,sampleno
100d0 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e  ,sample);.</pre>
100e0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
100f0 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  p>The sqlite_sta
10100 74 32 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 61 6e  t2.idx column an
10110 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
10120 74 32 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 6e  t2.tbl column in
10130 20 65 61 63 68 20 0a 72 6f 77 20 6f 66 20 74 68   each .row of th
10140 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
10150 61 62 6c 65 20 69 64 65 6e 74 69 66 79 20 61 6e  able identify an
10160 20 69 6e 64 65 78 20 64 65 73 63 72 69 62 65 64   index described
10170 20 62 79 20 74 68 61 74 20 72 6f 77 2e 0a 54 68   by that row..Th
10180 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c 79 20  ere are usually 
10190 31 30 20 72 6f 77 73 20 69 6e 20 74 68 65 20 73  10 rows in the s
101a0 71 6c 69 74 65 5f 73 74 61 74 32 0a 74 61 62 6c  qlite_stat2.tabl
101b0 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78  e for each index
101c0 2e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65  ...<p>The sqlite
101d0 5f 73 74 61 74 32 20 65 6e 74 72 69 65 73 20 66  _stat2 entries f
101e0 6f 72 20 61 6e 20 69 6e 64 65 78 20 74 68 61 74  or an index that
101f0 20 68 61 76 65 20 73 71 6c 69 74 65 5f 73 74 61   have sqlite_sta
10200 74 32 2e 73 61 6d 70 6c 65 6e 6f 0a 62 65 74 77  t2.sampleno.betw
10210 65 65 6e 20 30 20 61 6e 64 20 39 20 69 6e 63 6c  een 0 and 9 incl
10220 75 73 69 76 65 20 61 72 65 20 73 61 6d 70 6c 65  usive are sample
10230 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
10240 73 74 20 6b 65 79 20 76 61 6c 75 65 20 69 6e 20  st key value in 
10250 74 68 65 0a 69 6e 64 65 78 20 74 61 6b 65 6e 20  the.index taken 
10260 61 74 20 65 76 65 6e 6c 79 20 73 70 61 63 65 64  at evenly spaced
10270 20 70 6f 69 6e 74 73 20 61 6c 6f 6e 67 20 74 68   points along th
10280 65 20 69 6e 64 65 78 2e 0a 4c 65 74 20 43 20 62  e index..Let C b
10290 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
102a0 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
102b0 78 2e 0a 54 68 65 6e 20 74 68 65 20 73 61 6d 70  x..Then the samp
102c0 6c 65 64 20 72 6f 77 73 20 61 72 65 20 67 69 76  led rows are giv
102d0 65 6e 20 62 79 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  en by..<blockquo
102e0 74 65 3e 0a 20 20 20 20 20 72 6f 77 6e 75 6d 62  te>.     rownumb
102f0 65 72 20 3d 20 28 69 2a 43 2a 32 20 2b 20 43 29  er = (i*C*2 + C)
10300 2f 32 30 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  /20.</blockquote
10310 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 72 69 61 62  >..<p>The variab
10320 6c 65 20 69 20 69 6e 20 74 68 65 20 70 72 65 76  le i in the prev
10330 69 6f 75 73 20 65 78 70 72 65 73 73 69 6f 6e 20  ious expression 
10340 76 61 72 69 65 73 20 62 65 74 77 65 65 6e 20 30  varies between 0
10350 20 61 6e 64 20 39 2e 0a 43 6f 6e 63 65 70 74 75   and 9..Conceptu
10360 61 6c 6c 79 2c 20 74 68 65 20 69 6e 64 65 78 20  ally, the index 
10370 73 70 61 63 65 20 69 73 20 64 69 76 69 64 65 64  space is divided
10380 20 69 6e 74 6f 0a 31 30 20 75 6e 69 66 6f 72 6d   into.10 uniform
10390 20 62 75 63 6b 65 74 73 20 61 6e 64 20 74 68 65   buckets and the
103a0 20 73 61 6d 70 6c 65 73 20 61 72 65 20 74 68 65   samples are the
103b0 20 6d 69 64 64 6c 65 20 72 6f 77 20 66 72 6f 6d   middle row from
103c0 20 65 61 63 68 20 62 75 63 6b 65 74 2e 0a 0a 3c   each bucket...<
103d0 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 66 6f 72  p>The format for
103e0 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 69 73   sqlite_stat2 is
103f0 20 72 65 63 6f 72 64 65 64 20 68 65 72 65 20 66   recorded here f
10400 6f 72 20 6c 65 67 61 63 79 20 72 65 66 65 72 65  or legacy refere
10410 6e 63 65 2e 20 20 0a 52 65 63 65 6e 74 20 76 65  nce.  .Recent ve
10420 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
10430 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
10440 72 74 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  rt sqlite_stat2 
10450 61 6e 64 20 74 68 65 0a 73 71 6c 69 74 65 5f 73  and the.sqlite_s
10460 74 61 74 32 20 74 61 62 6c 65 2c 20 69 74 20 69  tat2 table, it i
10470 73 20 65 78 69 73 74 73 2c 20 69 73 20 73 69 6d  s exists, is sim
10480 70 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 74  ply ignored...<t
10490 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
104a0 74 61 74 33 74 61 62 20 7b 73 71 6c 69 74 65 5f  tat3tab {sqlite_
104b0 73 74 61 74 33 7d 20 53 51 4c 49 54 45 5f 53 54  stat3} SQLITE_ST
104c0 41 54 33 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e  AT3</tcl>.<h4>2.
104d0 36 2e 35 20 54 68 65 20 73 71 6c 69 74 65 5f 73  6.5 The sqlite_s
104e0 74 61 74 33 20 74 61 62 6c 65 3c 2f 68 34 3e 0a  tat3 table</h4>.
104f0 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  .<p>The sqlite_s
10500 74 61 74 33 20 69 73 20 6f 6e 6c 79 20 75 73 65  tat3 is only use
10510 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 63  d if SQLite is c
10520 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b 53 51  ompiled.with [SQ
10530 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
10540 33 5d 20 6f 72 20 5b 53 51 4c 49 54 45 5f 45 4e  3] or [SQLITE_EN
10550 41 42 4c 45 5f 53 54 41 54 34 5d 0a 61 6e 64 20  ABLE_STAT4].and 
10560 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 76 65  if the SQLite ve
10570 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20  rsion number is 
10580 33 2e 37 2e 39 20 6f 72 20 67 72 65 61 74 65 72  3.7.9 or greater
10590 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ..The sqlite_sta
105a0 74 33 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74  t3 table is neit
105b0 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69  her read nor wri
105c0 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73  tten by any.vers
105d0 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65  ion of SQLite be
105e0 66 6f 72 65 20 33 2e 37 2e 39 2e 0a 49 66 20 74  fore 3.7.9..If t
105f0 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  he [SQLITE_ENABL
10600 45 5f 53 54 41 54 34 5d 20 63 6f 6d 70 69 6c 65  E_STAT4] compile
10610 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
10620 75 73 65 64 20 61 6e 64 20 74 68 65 0a 53 51 4c  used and the.SQL
10630 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ite version numb
10640 65 72 20 69 73 20 33 2e 38 2e 31 20 6f 72 20 67  er is 3.8.1 or g
10650 72 65 61 74 65 72 2c 20 74 68 65 6e 20 73 71 6c  reater, then sql
10660 69 74 65 5f 73 74 61 74 33 20 6d 69 67 68 74 0a  ite_stat3 might.
10670 62 65 20 72 65 61 64 20 62 75 74 20 6e 6f 74 20  be read but not 
10680 77 72 69 74 74 65 6e 2e 0a 54 68 65 20 73 71 6c  written..The sql
10690 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
106a0 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f  contains additio
106b0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  nal information.
106c0 61 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69  about the distri
106d0 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77  bution of keys w
106e0 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2c 20  ithin an index, 
106f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
10700 20 74 68 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e   the.query plann
10710 65 72 20 63 61 6e 20 75 73 65 20 74 6f 20 64 65  er can use to de
10720 76 69 73 65 20 62 65 74 74 65 72 20 61 6e 64 20  vise better and 
10730 66 61 73 74 65 72 20 71 75 65 72 79 20 61 6c 67  faster query alg
10740 6f 72 69 74 68 6d 73 2e 0a 5e 28 54 68 65 20 73  orithms..^(The s
10750 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c  chema of the sql
10760 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20  ite_stat3 table 
10770 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
10780 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
10790 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
107a0 71 6c 69 74 65 5f 73 74 61 74 33 28 74 62 6c 2c  qlite_stat3(tbl,
107b0 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74  idx,nEq,nLt,nDLt
107c0 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e  ,sample);.</pre>
107d0 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
107e0 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 75 73  .<p>There are us
107f0 75 61 6c 6c 79 20 6d 75 6c 74 69 70 6c 65 20 65  ually multiple e
10800 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 73 71  ntries in the sq
10810 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
10820 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 2e   for each index.
10830 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .^(The sqlite_st
10840 61 74 33 2e 73 61 6d 70 6c 65 20 63 6f 6c 75 6d  at3.sample colum
10850 6e 20 68 6f 6c 64 73 20 74 68 65 20 76 61 6c 75  n holds the valu
10860 65 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  e of the left-mo
10870 73 74 20 66 69 65 6c 64 20 6f 66 20 61 6e 0a 69  st field of an.i
10880 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65 64 20  ndex identified 
10890 62 79 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e  by sqlite_stat3.
108a0 69 64 78 20 61 6e 64 20 73 71 6c 69 74 65 5f 73  idx and sqlite_s
108b0 74 61 74 33 2e 74 62 6c 2e 29 5e 0a 5e 28 54 68  tat3.tbl.)^.^(Th
108c0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e  e sqlite_stat3.n
108d0 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  Eq column holds 
108e0 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a  the approximate.
108f0 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
10900 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 77  s in the index w
10910 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63  hose left-most c
10920 6f 6c 75 6d 6e 20 65 78 61 63 74 6c 79 20 6d 61  olumn exactly ma
10930 74 63 68 65 73 0a 74 68 65 20 73 61 6d 70 6c 65  tches.the sample
10940 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65  .)^.^(The sqlite
10950 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f 6c 64 73  _stat3.nLt holds
10960 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
10970 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
10980 65 73 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 20  es in the.index 
10990 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20  whose left-most 
109a0 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73 73 20 74  column is less t
109b0 68 61 6e 20 74 68 65 20 73 61 6d 70 6c 65 2e 29  han the sample.)
109c0 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  ^.^(The sqlite_s
109d0 74 61 74 33 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e  tat3.nDLt column
109e0 20 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f   holds the appro
109f0 78 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66  ximate.number of
10a00 20 64 69 73 74 69 6e 63 74 20 6c 65 66 74 2d 6d   distinct left-m
10a10 6f 73 74 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ost entries in t
10a20 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 61 72  he index that ar
10a30 65 20 6c 65 73 73 20 74 68 61 6e 0a 74 68 65 20  e less than.the 
10a40 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54  sample.)^..<p>^T
10a50 68 65 72 65 20 63 61 6e 20 62 65 20 61 6e 20 61  here can be an a
10a60 72 62 69 74 72 61 72 79 20 6e 75 6d 62 65 72 20  rbitrary number 
10a70 6f 66 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  of sqlite_stat3 
10a80 65 6e 74 72 69 65 73 20 70 65 72 20 69 6e 64 65  entries per inde
10a90 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d  x..The [ANALYZE]
10aa0 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 74 79   command will ty
10ab0 70 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  pically generate
10ac0 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
10ad0 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74 61 69  bles.that contai
10ae0 6e 20 62 65 74 77 65 65 6e 20 31 30 20 61 6e 64  n between 10 and
10af0 20 34 30 20 73 61 6d 70 6c 65 73 20 74 68 61 74   40 samples that
10b00 20 61 72 65 20 64 69 73 74 72 69 62 75 74 65 64   are distributed
10b10 20 61 63 72 6f 73 73 0a 74 68 65 20 6b 65 79 20   across.the key 
10b20 73 70 61 63 65 20 61 6e 64 20 77 69 74 68 20 6c  space and with l
10b30 61 72 67 65 20 6e 45 71 20 76 61 6c 75 65 73 2e  arge nEq values.
10b40 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 77 65 6c 6c  ..<p>^(In a well
10b50 2d 66 6f 72 6d 65 64 20 73 71 6c 69 74 65 5f 73  -formed sqlite_s
10b60 74 61 74 33 20 74 61 62 6c 65 2c 20 74 68 65 20  tat3 table, the 
10b70 73 61 6d 70 6c 65 73 20 66 6f 72 20 61 6e 79 20  samples for any 
10b80 73 69 6e 67 6c 65 0a 69 6e 64 65 78 20 6d 75 73  single.index mus
10b90 74 20 61 70 70 65 61 72 20 69 6e 20 74 68 65 20  t appear in the 
10ba0 73 61 6d 65 20 6f 72 64 65 72 20 74 68 61 74 20  same order that 
10bb0 74 68 65 79 20 6f 63 63 75 72 20 69 6e 20 74 68  they occur in th
10bc0 65 20 69 6e 64 65 78 2e 20 20 0a 49 6e 20 6f 74  e index.  .In ot
10bd0 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
10be0 65 20 65 6e 74 72 79 20 77 69 74 68 20 6c 65 66  e entry with lef
10bf0 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 53 31  t-most column S1
10c00 20 69 73 20 65 61 72 6c 69 65 72 20 69 6e 0a 74   is earlier in.t
10c10 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  he index b-tree 
10c20 74 68 61 6e 20 74 68 65 0a 65 6e 74 72 79 20 77  than the.entry w
10c30 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f  ith left-most co
10c40 6c 75 6d 6e 20 53 32 2c 20 74 68 65 6e 20 69 6e  lumn S2, then in
10c50 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
10c60 33 20 74 61 62 6c 65 2c 20 0a 73 61 6d 70 6c 65  3 table, .sample
10c70 20 53 31 20 6d 75 73 74 20 68 61 76 65 20 61 20   S1 must have a 
10c80 73 6d 61 6c 6c 65 72 20 72 6f 77 69 64 20 74 68  smaller rowid th
10c90 61 6e 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e 0a  an sample S2.)^.
10ca0 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
10cb0 74 20 73 74 61 74 34 74 61 62 20 7b 73 71 6c 69  t stat4tab {sqli
10cc0 74 65 5f 73 74 61 74 34 7d 20 53 51 4c 49 54 45  te_stat4} SQLITE
10cd0 5f 53 54 41 54 34 3c 2f 74 63 6c 3e 0a 3c 68 34  _STAT4</tcl>.<h4
10ce0 3e 32 2e 36 2e 36 20 54 68 65 20 73 71 6c 69 74  >2.6.6 The sqlit
10cf0 65 5f 73 74 61 74 34 20 74 61 62 6c 65 3c 2f 68  e_stat4 table</h
10d00 34 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74  4>..<p>The sqlit
10d10 65 5f 73 74 61 74 34 20 69 73 20 6f 6e 6c 79 20  e_stat4 is only 
10d20 63 72 65 61 74 65 64 20 61 6e 64 20 69 73 20 6f  created and is o
10d30 6e 6c 79 20 75 73 65 64 20 69 66 20 53 51 4c 69  nly used if SQLi
10d40 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77  te is compiled.w
10d50 69 74 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42  ith [SQLITE_ENAB
10d60 4c 45 5f 53 54 41 54 34 5d 20 61 6e 64 20 69 66  LE_STAT4] and if
10d70 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72 73   the SQLite vers
10d80 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 0a 33 2e  ion number is.3.
10d90 38 2e 31 20 6f 72 20 67 72 65 61 74 65 72 2e 20  8.1 or greater. 
10da0 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   The sqlite_stat
10db0 34 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68  4 table is neith
10dc0 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69 74  er read nor writ
10dd0 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73 69  ten by any.versi
10de0 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 66  on of SQLite bef
10df0 6f 72 65 20 33 2e 38 2e 31 2e 0a 54 68 65 20 73  ore 3.8.1..The s
10e00 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
10e10 65 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74  e contains addit
10e20 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
10e30 6e 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73 74  n.about the dist
10e40 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73  ribution of keys
10e50 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78   within an index
10e60 20 6f 72 20 74 68 65 20 64 69 73 74 72 69 62 75   or the distribu
10e70 74 69 6f 6e 20 6f 66 0a 6b 65 79 73 20 69 6e 20  tion of.keys in 
10e80 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
10e90 6f 66 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f  of a [WITHOUT RO
10ea0 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20  WID] table..The 
10eb0 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 61  query planner ca
10ec0 6e 20 73 6f 6d 65 74 69 6d 65 73 20 75 73 65 20  n sometimes use 
10ed0 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  the additional i
10ee0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 0a 74 68  nformation in.th
10ef0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  e sqlite_stat4 t
10f00 61 62 6c 65 20 74 6f 20 64 65 76 69 73 65 20 62  able to devise b
10f10 65 74 74 65 72 20 61 6e 64 20 66 61 73 74 65 72  etter and faster
10f20 20 71 75 65 72 79 20 61 6c 67 6f 72 69 74 68 6d   query algorithm
10f30 73 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20  s..^(The schema 
10f40 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  of the sqlite_st
10f50 61 74 34 20 74 61 62 6c 65 20 69 73 20 61 73 20  at4 table is as 
10f60 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b  follows:..<block
10f70 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
10f80 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
10f90 73 74 61 74 34 28 74 62 6c 2c 69 64 78 2c 6e 45  stat4(tbl,idx,nE
10fa0 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c  q,nLt,nDLt,sampl
10fb0 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  e);.</pre></bloc
10fc0 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 54 68  kquote>)^..<p>Th
10fd0 65 72 65 20 61 72 65 20 74 79 70 69 63 61 6c 6c  ere are typicall
10fe0 79 20 62 65 74 77 65 65 6e 20 31 30 20 74 6f 20  y between 10 to 
10ff0 34 30 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  40 entries in th
11000 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  e sqlite_stat4 t
11010 61 62 6c 65 20 66 6f 72 0a 65 61 63 68 20 69 6e  able for.each in
11020 64 65 78 20 66 6f 72 20 77 68 69 63 68 20 73 74  dex for which st
11030 61 74 69 73 74 69 63 73 20 61 72 65 20 61 76 61  atistics are ava
11040 69 6c 61 62 6c 65 2c 20 68 6f 77 65 76 65 72 20  ilable, however 
11050 74 68 65 73 65 20 6c 69 6d 69 74 73 20 61 72 65  these limits are
11060 0a 6e 6f 74 20 68 61 72 64 20 62 6f 75 6e 64 73  .not hard bounds
11070 2e 0a 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  ..The meanings o
11080 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  f the columns in
11090 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
110a0 34 20 74 61 62 6c 65 20 61 72 65 20 61 73 20 66  4 table are as f
110b0 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72  ollows:..<center
110c0 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  >.<table border=
110d0 22 30 22 20 77 69 64 74 68 3d 22 31 30 30 25 22  "0" width="100%"
110e0 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30   cellpadding="10
110f0 22 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ">.<tr><td valig
11100 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72  n="top" align="r
11110 69 67 68 74 22 3e 74 62 6c 3a 3c 2f 74 64 3e 0a  ight">tbl:</td>.
11120 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71      <td>^(The sq
11130 6c 69 74 65 5f 73 74 61 74 34 2e 74 62 6c 20 63  lite_stat4.tbl c
11140 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d 65  olumn holds name
11150 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
11160 61 74 20 6f 77 6e 73 0a 20 20 20 20 74 68 65 20  at owns.    the 
11170 69 6e 64 65 78 20 74 68 61 74 20 74 68 65 20 72  index that the r
11180 6f 77 20 64 65 73 63 72 69 62 65 73 29 5e 0a 0a  ow describes)^..
11190 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22  <tr><td valign="
111a0 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
111b0 74 22 3e 69 64 78 3a 3c 2f 74 64 3e 0a 20 20 20  t">idx:</td>.   
111c0 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74   <td>^(The sqlit
111d0 65 5f 73 74 61 74 34 2e 69 64 78 20 63 6f 6c 75  e_stat4.idx colu
111e0 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d 65 20 6f 66  mn holds name of
111f0 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
11200 74 68 65 0a 20 20 20 20 72 6f 77 20 64 65 73 63  the.    row desc
11210 72 69 62 65 73 2c 20 6f 72 20 69 6e 20 74 68 65  ribes, or in the
11220 20 63 61 73 65 20 6f 66 0a 20 20 20 20 61 6e 20   case of.    an 
11230 73 71 6c 69 74 65 5f 73 74 61 74 34 20 65 6e 74  sqlite_stat4 ent
11240 72 79 20 66 6f 72 20 61 20 5b 57 49 54 48 4f 55  ry for a [WITHOU
11250 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 20  T ROWID] table, 
11260 74 68 65 0a 20 20 20 20 6e 61 6d 65 20 6f 66 20  the.    name of 
11270 74 68 65 20 74 61 62 6c 65 20 69 74 73 65 6c 66  the table itself
11280 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  .)^..<tr><td val
11290 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d  ign="top" align=
112a0 22 72 69 67 68 74 22 3e 73 61 6d 70 6c 65 3a 3c  "right">sample:<
112b0 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54  /td>.    <td>^(T
112c0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
112d0 73 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f  sample column ho
112e0 6c 64 73 20 61 20 42 4c 4f 42 0a 20 20 20 20 69  lds a BLOB.    i
112f0 6e 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f  n the [record fo
11300 72 6d 61 74 5d 20 74 68 61 74 20 65 6e 63 6f 64  rmat] that encod
11310 65 73 20 74 68 65 20 69 6e 64 65 78 65 64 20 63  es the indexed c
11320 6f 6c 75 6d 6e 73 20 66 6f 6c 6c 6f 77 65 64 20  olumns followed 
11330 62 79 0a 20 20 20 20 74 68 65 20 72 6f 77 69 64  by.    the rowid
11340 20 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61 62   for a rowid tab
11350 6c 65 20 6f 72 20 62 79 20 74 68 65 20 63 6f 6c  le or by the col
11360 75 6d 6e 73 20 6f 66 20 74 68 65 20 70 72 69 6d  umns of the prim
11370 61 72 79 20 6b 65 79 20 0a 20 20 20 20 66 6f 72  ary key .    for
11380 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44   a WITHOUT ROWID
11390 20 74 61 62 6c 65 2e 29 5e 0a 20 20 20 20 5e 28   table.)^.    ^(
113a0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
113b0 2e 73 61 6d 70 6c 65 20 42 4c 4f 42 20 66 6f 72  .sample BLOB for
113c0 20 74 68 65 20 57 49 54 48 4f 55 54 20 52 4f 57   the WITHOUT ROW
113d0 49 44 20 74 61 62 6c 65 20 69 74 73 65 6c 66 20  ID table itself 
113e0 0a 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 6a 75  .    contains ju
113f0 73 74 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  st the columns o
11400 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  f the primary ke
11410 79 2e 29 5e 0a 20 20 20 20 4c 65 74 20 74 68 65  y.)^.    Let the
11420 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
11430 6e 73 20 65 6e 63 6f 64 65 64 20 62 79 20 74 68  ns encoded by th
11440 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73  e sqlite_stat4.s
11450 61 6d 70 6c 65 20 62 6c 6f 62 20 62 65 20 4e 2e  ample blob be N.
11460 0a 20 20 20 20 5e 46 6f 72 20 69 6e 64 65 78 65  .    ^For indexe
11470 73 20 6f 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79  s on an ordinary
11480 20 72 6f 77 69 64 20 74 61 62 6c 65 2c 20 4e 20   rowid table, N 
11490 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65  will be one more
114a0 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72   than the number
114b0 20 0a 20 20 20 20 6f 66 20 63 6f 6c 75 6d 6e 73   .    of columns
114c0 20 69 6e 64 65 78 65 64 2e 0a 20 20 20 20 5e 46   indexed..    ^F
114d0 6f 72 20 69 6e 64 65 78 65 73 20 6f 6e 20 57 49  or indexes on WI
114e0 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
114f0 65 73 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74 68  es, N will be th
11500 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
11510 6d 6e 73 0a 20 20 20 20 69 6e 64 65 78 65 64 20  mns.    indexed 
11520 70 6c 75 73 20 74 68 65 20 6e 75 6d 62 65 72 20  plus the number 
11530 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
11540 65 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 20  e primary key.. 
11550 20 20 20 5e 46 6f 72 20 61 20 57 49 54 48 4f 55     ^For a WITHOU
11560 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 4e  T ROWID table, N
11570 20 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d   will be the num
11580 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
11590 6e 20 74 68 65 0a 20 20 20 20 70 72 69 6d 61 72  n the.    primar
115a0 79 20 6b 65 79 2e 0a 0a 3c 74 72 3e 3c 74 64 20  y key...<tr><td 
115b0 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69  valign="top" ali
115c0 67 6e 3d 22 72 69 67 68 74 22 3e 6e 45 71 3a 3c  gn="right">nEq:<
115d0 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54  /td>.    <td>^(T
115e0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
115f0 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73  nEq column holds
11600 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74   a list of N int
11610 65 67 65 72 73 20 77 68 65 72 65 20 0a 20 20 20  egers where .   
11620 20 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65   the K-th intege
11630 72 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69  r is the approxi
11640 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65  mate number of e
11650 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e  ntries in the in
11660 64 65 78 0a 20 20 20 20 77 68 6f 73 65 20 6c 65  dex.    whose le
11670 66 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e  ft-most K column
11680 73 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20  s exactly match 
11690 74 68 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20  the K left-most 
116a0 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 6f 66 20 74  columns.    of t
116b0 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74  he sample.)^..<t
116c0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
116d0 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
116e0 3e 6e 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c  >nLt:</td>.    <
116f0 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  td>^(The sqlite_
11700 73 74 61 74 34 2e 6e 4c 74 20 63 6f 6c 75 6d 6e  stat4.nLt column
11710 20 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66   holds a list of
11720 20 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65 72   N integers wher
11730 65 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69  e.    the K-th i
11740 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61 70  nteger is the ap
11750 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72  proximate number
11760 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74   of entries in t
11770 68 65 0a 20 20 20 20 69 6e 64 65 78 20 77 68 6f  he.    index who
11780 73 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63  se K left-most c
11790 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c 65  olumns are colle
117a0 63 74 69 76 65 6c 79 20 6c 65 73 73 20 74 68 61  ctively less tha
117b0 6e 20 74 68 65 20 0a 20 20 20 20 4b 20 6c 65 66  n the .    K lef
117c0 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 20 6f  t-most columns o
117d0 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a  f the sample.)^.
117e0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
117f0 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
11800 68 74 22 3e 6e 44 4c 74 3a 3c 2f 74 64 3e 0a 20  ht">nDLt:</td>. 
11810 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c     <td>^(The sql
11820 69 74 65 5f 73 74 61 74 34 2e 6e 44 4c 74 20 63  ite_stat4.nDLt c
11830 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69  olumn holds a li
11840 73 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73  st of N integers
11850 20 77 68 65 72 65 0a 20 20 20 20 74 68 65 20 4b   where.    the K
11860 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73 20 74  -th integer is t
11870 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a 20  he approximate. 
11880 20 20 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74     number of ent
11890 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65  ries in the inde
118a0 78 20 74 68 61 74 20 61 72 65 20 64 69 73 74 69  x that are disti
118b0 6e 63 74 20 69 6e 20 74 68 65 20 66 69 72 73 74  nct in the first
118c0 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 0a 20   K columns and. 
118d0 20 20 20 77 68 65 72 65 20 74 68 65 20 6c 65 66     where the lef
118e0 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e 73  t-most K columns
118f0 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65 6c   are collectivel
11900 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  y less than the 
11910 6c 65 66 74 2d 6d 6f 73 74 0a 20 20 20 20 4b 20  left-most.    K 
11920 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 73  columns of the s
11930 61 6d 70 6c 65 2e 29 5e 0a 3c 2f 74 61 62 6c 65  ample.)^.</table
11940 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e  >.</center>..<p>
11950 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
11960 20 69 73 20 61 20 67 65 6e 65 72 61 6c 69 7a 61   is a generaliza
11970 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 71 6c 69  tion of the sqli
11980 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 2e 20  te_stat3 table. 
11990 20 54 68 65 0a 73 71 6c 69 74 65 5f 73 74 61 74   The.sqlite_stat
119a0 33 20 74 61 62 6c 65 20 70 72 6f 76 69 64 65 73  3 table provides
119b0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
119c0 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  ut the left-most
119d0 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 0a 69 6e   column of an.in
119e0 64 65 78 20 77 68 65 72 65 61 73 20 74 68 65 20  dex whereas the 
119f0 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
11a00 6c 65 20 70 72 6f 76 69 64 65 73 20 69 6e 66 6f  le provides info
11a10 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 6c  rmation about al
11a20 6c 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65  l columns.of the
11a30 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 5e 54 68 65   index...<p>^The
11a40 72 65 20 63 61 6e 20 62 65 20 61 6e 20 61 72 62  re can be an arb
11a50 69 74 72 61 72 79 20 6e 75 6d 62 65 72 20 6f 66  itrary number of
11a60 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 65 6e   sqlite_stat4 en
11a70 74 72 69 65 73 20 70 65 72 20 69 6e 64 65 78 2e  tries per index.
11a80 0a 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63  .The [ANALYZE] c
11a90 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 74 79 70 69  ommand will typi
11aa0 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 20 73  cally generate s
11ab0 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
11ac0 65 73 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  es.that contain 
11ad0 62 65 74 77 65 65 6e 20 31 30 20 61 6e 64 20 34  between 10 and 4
11ae0 30 20 73 61 6d 70 6c 65 73 20 74 68 61 74 20 61  0 samples that a
11af0 72 65 20 64 69 73 74 72 69 62 75 74 65 64 20 61  re distributed a
11b00 63 72 6f 73 73 0a 74 68 65 20 6b 65 79 20 73 70  cross.the key sp
11b10 61 63 65 20 61 6e 64 20 77 69 74 68 20 6c 61 72  ace and with lar
11b20 67 65 20 6e 45 71 20 76 61 6c 75 65 73 2e 0a 0a  ge nEq values...
11b30 3c 70 3e 5e 28 49 6e 20 61 20 77 65 6c 6c 2d 66  <p>^(In a well-f
11b40 6f 72 6d 65 64 20 73 71 6c 69 74 65 5f 73 74 61  ormed sqlite_sta
11b50 74 34 20 74 61 62 6c 65 2c 20 74 68 65 20 73 61  t4 table, the sa
11b60 6d 70 6c 65 73 20 66 6f 72 20 61 6e 79 20 73 69  mples for any si
11b70 6e 67 6c 65 0a 69 6e 64 65 78 20 6d 75 73 74 20  ngle.index must 
11b80 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 73 61  appear in the sa
11b90 6d 65 20 6f 72 64 65 72 20 74 68 61 74 20 74 68  me order that th
11ba0 65 79 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20  ey occur in the 
11bb0 69 6e 64 65 78 2e 20 20 0a 49 6e 20 6f 74 68 65  index.  .In othe
11bc0 72 20 77 6f 72 64 73 2c 20 69 66 20 65 6e 74 72  r words, if entr
11bd0 79 20 53 31 20 69 73 20 65 61 72 6c 69 65 72 20  y S1 is earlier 
11be0 69 6e 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74  in the index b-t
11bf0 72 65 65 20 74 68 61 6e 20 0a 65 6e 74 72 79 20  ree than .entry 
11c00 53 32 2c 20 74 68 65 6e 20 69 6e 20 74 68 65 20  S2, then in the 
11c10 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
11c20 6c 65 2c 20 73 61 6d 70 6c 65 20 53 31 20 6d 75  le, sample S1 mu
11c30 73 74 20 68 61 76 65 20 61 0a 73 6d 61 6c 6c 65  st have a.smalle
11c40 72 20 72 6f 77 69 64 20 74 68 61 6e 20 73 61 6d  r rowid than sam
11c50 70 6c 65 20 53 32 2e 29 5e 0a 0a 3c 74 63 6c 3e  ple S2.)^..<tcl>
11c60 68 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 6c 6c  hd_fragment roll
11c70 62 61 63 6b 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c  backjournal {rol
11c80 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f  lback journal fo
11c90 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e  rmat}</tcl>.<h2>
11ca0 33 2e 30 20 54 68 65 20 52 6f 6c 6c 62 61 63 6b  3.0 The Rollback
11cb0 20 4a 6f 75 72 6e 61 6c 3c 2f 68 32 3e 0a 0a 3c   Journal</h2>..<
11cc0 70 3e 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  p>The rollback j
11cd0 6f 75 72 6e 61 6c 20 69 73 20 61 20 66 69 6c 65  ournal is a file
11ce0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
11cf0 20 65 61 63 68 20 53 51 4c 69 74 65 20 64 61 74   each SQLite dat
11d00 61 62 61 73 65 0a 66 69 6c 65 20 74 68 61 74 20  abase.file that 
11d10 68 6f 6c 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hold information
11d20 20 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65   used to restore
11d30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
11d40 6c 65 20 74 6f 20 69 74 73 20 69 6e 69 74 69 61  le to its initia
11d50 6c 0a 73 74 61 74 65 20 64 75 72 69 6e 67 20 74  l.state during t
11d60 68 65 20 63 6f 75 72 73 65 20 6f 66 20 61 20 74  he course of a t
11d70 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e 54 68 65  ransaction..^The
11d80 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
11d90 6c 20 66 69 6c 65 20 69 73 20 61 6c 77 61 79 73  l file is always
11da0 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 20   located in the 
11db0 73 61 6d 65 20 0a 64 69 72 65 63 74 6f 72 79 20  same .directory 
11dc0 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  as the database.
11dd0 66 69 6c 65 20 61 6e 64 20 68 61 73 20 74 68 65  file and has the
11de0 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 74 68   same name as th
11df0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
11e00 62 75 74 20 77 69 74 68 20 74 68 65 20 73 74 72  but with the str
11e10 69 6e 67 0a 22 3c 74 74 3e 2d 6a 6f 75 72 6e 61  ing."<tt>-journa
11e20 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64  l</tt>" appended
11e30 2e 20 20 54 68 65 72 65 20 63 61 6e 20 6f 6e 6c  .  There can onl
11e40 79 20 62 65 20 61 20 73 69 6e 67 6c 65 20 72 6f  y be a single ro
11e50 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 61  llback journal.a
11e60 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
11e70 20 67 69 76 65 20 64 61 74 61 62 61 73 65 20 61   give database a
11e80 6e 64 20 68 65 6e 63 65 20 74 68 65 72 65 20 63  nd hence there c
11e90 61 6e 20 6f 6e 6c 79 20 62 65 20 6f 6e 65 20 77  an only be one w
11ea0 72 69 74 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e  rite.transaction
11eb0 20 6f 70 65 6e 20 61 67 61 69 6e 73 74 20 61 20   open against a 
11ec0 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65 20  single database 
11ed0 61 74 20 6f 6e 65 20 74 69 6d 65 2e 3c 2f 70 3e  at one time.</p>
11ee0 0a 0a 3c 70 3e 49 66 20 61 20 74 72 61 6e 73 61  ..<p>If a transa
11ef0 63 74 69 6f 6e 20 69 73 20 61 62 6f 72 74 65 64  ction is aborted
11f00 20 64 75 65 20 74 6f 20 61 6e 20 61 70 70 6c 69   due to an appli
11f10 63 61 74 69 6f 6e 20 63 72 61 73 68 2c 20 61 6e  cation crash, an
11f20 20 6f 70 65 72 61 74 69 6e 67 0a 73 79 73 74 65   operating.syste
11f30 6d 20 63 72 61 73 68 2c 20 6f 72 20 61 20 68 61  m crash, or a ha
11f40 72 64 77 61 72 65 20 70 6f 77 65 72 20 66 61 69  rdware power fai
11f50 6c 75 72 65 20 6f 72 20 63 72 61 73 68 2c 20 74  lure or crash, t
11f60 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
11f70 20 6d 61 79 0a 62 65 20 6c 65 66 74 20 69 6e 20   may.be left in 
11f80 61 6e 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20  an inconsistent 
11f90 73 74 61 74 65 2e 20 20 5e 54 68 65 20 6e 65 78  state.  ^The nex
11fa0 74 20 74 69 6d 65 20 53 51 4c 69 74 65 20 61 74  t time SQLite at
11fb0 74 65 6d 70 74 73 20 74 6f 20 6f 70 65 6e 0a 74  tempts to open.t
11fc0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
11fd0 2c 20 74 68 65 20 70 72 65 73 65 6e 63 65 20 6f  , the presence o
11fe0 66 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  f the rollback j
11ff0 6f 75 72 6e 61 6c 20 66 69 6c 65 20 77 69 6c 6c  ournal file will
12000 20 62 65 20 0a 64 65 74 65 63 74 65 64 20 61 6e   be .detected an
12010 64 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 77 69  d the journal wi
12020 6c 6c 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61  ll be automatica
12030 6c 6c 79 20 70 6c 61 79 65 64 20 62 61 63 6b 20  lly played back 
12040 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65 0a 64  to restore the.d
12050 61 74 61 62 61 73 65 20 74 6f 20 69 74 73 20 73  atabase to its s
12060 74 61 74 65 20 61 74 20 74 68 65 20 73 74 61 72  tate at the star
12070 74 20 6f 66 20 74 68 65 20 69 6e 63 6f 6d 70 6c  t of the incompl
12080 65 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ete transaction.
12090 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c  </p>..<p>^A roll
120a0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20  back journal is 
120b0 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65 64 20  only considered 
120c0 74 6f 20 62 65 20 76 61 6c 69 64 20 69 66 20 69  to be valid if i
120d0 74 20 65 78 69 73 74 73 20 61 6e 64 0a 63 6f 6e  t exists and.con
120e0 74 61 69 6e 73 20 61 20 76 61 6c 69 64 20 68 65  tains a valid he
120f0 61 64 65 72 2e 20 20 48 65 6e 63 65 20 61 20 74  ader.  Hence a t
12100 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 6e 20 62  ransaction can b
12110 65 20 63 6f 6d 6d 69 74 74 65 64 20 69 6e 20 6f  e committed in o
12120 6e 65 0a 6f 66 20 74 68 72 65 65 20 77 61 79 73  ne.of three ways
12130 3a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 54 68 65  :.<ol>.<li>^(The
12140 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
12150 6c 20 66 69 6c 65 20 63 61 6e 20 62 65 20 64 65  l file can be de
12160 6c 65 74 65 64 29 5e 2c 0a 3c 6c 69 3e 5e 28 54  leted)^,.<li>^(T
12170 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
12180 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20 62 65 20  nal file can be 
12190 74 72 75 6e 63 61 74 65 64 20 74 6f 20 7a 65 72  truncated to zer
121a0 6f 20 6c 65 6e 67 74 68 29 5e 2c 20 6f 72 0a 3c  o length)^, or.<
121b0 6c 69 3e 5e 28 54 68 65 20 68 65 61 64 65 72 20  li>^(The header 
121c0 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20  of the rollback 
121d0 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 62 65 20 6f  journal can be o
121e0 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 0a  verwritten with.
121f0 69 6e 76 61 6c 69 64 20 68 65 61 64 65 72 20 74  invalid header t
12200 65 78 74 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ext (for example
12210 2c 20 61 6c 6c 20 7a 65 72 6f 73 29 2e 29 5e 0a  , all zeros).)^.
12220 3c 2f 6f 6c 3e 0a 5e 54 68 65 73 65 20 74 68 72  </ol>.^These thr
12230 65 65 20 77 61 79 73 20 6f 66 20 63 6f 6d 6d 69  ee ways of commi
12240 74 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74  tting a transact
12250 69 6f 6e 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  ion correspond t
12260 6f 20 74 68 65 20 44 45 4c 45 54 45 2c 0a 54 52  o the DELETE,.TR
12270 55 4e 43 41 54 45 2c 20 61 6e 64 20 50 45 52 53  UNCATE, and PERS
12280 49 53 54 20 73 65 74 74 69 6e 67 73 2c 20 72 65  IST settings, re
12290 73 70 65 63 74 69 76 65 6c 79 2c 20 6f 66 20 74  spectively, of t
122a0 68 65 20 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  he [journal_mode
122b0 20 70 72 61 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a 0a   pragma]..</p>..
122c0 0a 3c 70 3e 41 20 76 61 6c 69 64 20 72 6f 6c 6c  .<p>A valid roll
122d0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 62 65 67  back journal beg
122e0 69 6e 73 20 77 69 74 68 20 61 20 68 65 61 64 65  ins with a heade
122f0 72 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  r in the followi
12300 6e 67 20 66 6f 72 6d 61 74 3a 3c 2f 70 3e 0a 0a  ng format:</p>..
12310 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c  <center>.<i>Roll
12320 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 48 65 61  back Journal Hea
12330 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62  der Format</i><b
12340 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  r>.<table width=
12350 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a  "80%" border=1>.
12360 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74  <tr><th>Offset<t
12370 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69  h>Size<th>Descri
12380 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61  ption.<tr><td va
12390 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
123a0 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20  enter>0.    <td 
123b0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
123c0 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74  =center>8.    <t
123d0 64 3e 48 65 61 64 65 72 20 73 74 72 69 6e 67 3a  d>Header string:
123e0 20 20 30 78 64 39 2c 20 30 78 64 35 2c 20 30 78    0xd9, 0xd5, 0x
123f0 30 35 2c 20 30 78 66 39 2c 20 30 78 32 30 2c 20  05, 0xf9, 0x20, 
12400 30 78 61 31 2c 20 30 78 36 33 2c 20 30 78 64 37  0xa1, 0x63, 0xd7
12410 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
12420 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12430 3e 38 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  >8.    <td valig
12440 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12450 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65  er>4.    <td>The
12460 20 22 50 61 67 65 20 43 6f 75 6e 74 22 20 2d 20   "Page Count" - 
12470 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  The number of pa
12480 67 65 73 20 69 6e 20 74 68 65 20 6e 65 78 74 20  ges in the next 
12490 73 65 67 6d 65 6e 74 20 6f 66 20 74 68 65 20 0a  segment of the .
124a0 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2c          journal,
124b0 20 6f 72 20 2d 31 20 74 6f 0a 20 20 20 20 20 20   or -1 to.      
124c0 20 20 6d 65 61 6e 20 61 6c 6c 20 63 6f 6e 74 65    mean all conte
124d0 6e 74 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  nt to the end of
124e0 20 74 68 65 20 66 69 6c 65 0a 3c 74 72 3e 3c 74   the file.<tr><t
124f0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12500 67 6e 3d 63 65 6e 74 65 72 3e 31 32 0a 20 20 20  gn=center>12.   
12510 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
12520 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
12530 20 20 20 3c 74 64 3e 41 20 72 61 6e 64 6f 6d 20     <td>A random 
12540 6e 6f 6e 63 65 20 66 6f 72 20 74 68 65 20 63 68  nonce for the ch
12550 65 63 6b 73 75 6d 0a 3c 74 72 3e 3c 74 64 20 76  ecksum.<tr><td v
12560 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12570 63 65 6e 74 65 72 3e 31 36 0a 20 20 20 20 3c 74  center>16.    <t
12580 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12590 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
125a0 3c 74 64 3e 49 6e 69 74 69 61 6c 20 73 69 7a 65  <td>Initial size
125b0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
125c0 20 69 6e 20 70 61 67 65 73 0a 3c 74 72 3e 3c 74   in pages.<tr><t
125d0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
125e0 67 6e 3d 63 65 6e 74 65 72 3e 32 30 0a 20 20 20  gn=center>20.   
125f0 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
12600 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
12610 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20 61     <td>Size of a
12620 20 64 69 73 6b 20 73 65 63 74 6f 72 20 61 73 73   disk sector ass
12630 75 6d 65 64 20 62 79 20 74 68 65 20 70 72 6f 63  umed by the proc
12640 65 73 73 20 74 68 61 74 20 77 72 6f 74 65 20 74  ess that wrote t
12650 68 69 73 0a 20 20 20 20 20 20 20 20 6a 6f 75 72  his.        jour
12660 6e 61 6c 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  nal..<tr><td val
12670 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12680 6e 74 65 72 3e 32 34 0a 20 20 20 20 3c 74 64 20  nter>24.    <td 
12690 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
126a0 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
126b0 64 3e 53 69 7a 65 20 6f 66 20 70 61 67 65 73 20  d>Size of pages 
126c0 69 6e 20 74 68 69 73 20 6a 6f 75 72 6e 61 6c 2e  in this journal.
126d0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74  .</table>.</cent
126e0 65 72 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62  er>..<p>^A rollb
126f0 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  ack journal head
12700 65 72 20 69 73 20 70 61 64 64 65 64 20 77 69 74  er is padded wit
12710 68 20 7a 65 72 6f 73 20 6f 75 74 20 74 6f 20 74  h zeros out to t
12720 68 65 20 73 69 7a 65 20 6f 66 20 61 20 0a 73 69  he size of a .si
12730 6e 67 6c 65 20 73 65 63 74 6f 72 20 28 61 73 20  ngle sector (as 
12740 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 73  defined by the s
12750 65 63 74 6f 72 20 73 69 7a 65 20 69 6e 74 65 67  ector size integ
12760 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 30 29  er at offset 20)
12770 2e 0a 54 68 65 20 68 65 61 64 65 72 20 69 73 20  ..The header is 
12780 69 6e 20 61 20 73 65 63 74 6f 72 20 62 79 20 69  in a sector by i
12790 74 73 65 6c 66 20 73 6f 20 74 68 61 74 20 69 66  tself so that if
127a0 20 61 20 70 6f 77 65 72 20 6c 6f 73 73 20 6f 63   a power loss oc
127b0 63 75 72 73 20 77 68 69 6c 65 0a 77 72 69 74 69  curs while.writi
127c0 6e 67 20 74 68 65 20 73 65 63 74 6f 72 2c 20 69  ng the sector, i
127d0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
127e0 66 6f 6c 6c 6f 77 73 20 74 68 65 20 68 65 61 64  follows the head
127f0 65 72 20 77 69 6c 6c 20 62 65 0a 28 68 6f 70 65  er will be.(hope
12800 66 75 6c 6c 79 29 20 75 6e 64 61 6d 61 67 65 64  fully) undamaged
12810 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72  .</p>..<p>^After
12820 20 74 68 65 20 68 65 61 64 65 72 20 61 6e 64 20   the header and 
12830 7a 65 72 6f 20 70 61 64 64 69 6e 67 20 61 72 65  zero padding are
12840 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61   zero or more pa
12850 67 65 20 72 65 63 6f 72 64 73 2e 20 20 5e 45 61  ge records.  ^Ea
12860 63 68 0a 70 61 67 65 20 72 65 63 6f 72 64 20 73  ch.page record s
12870 74 6f 72 65 73 20 61 20 63 6f 70 79 20 6f 66 20  tores a copy of 
12880 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
12890 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64   page from the d
128a0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 62 65 66  atabase file.bef
128b0 6f 72 65 20 69 74 20 77 61 73 20 63 68 61 6e 67  ore it was chang
128c0 65 64 2e 20 20 5e 54 68 65 20 73 61 6d 65 20 70  ed.  ^The same p
128d0 61 67 65 20 6d 61 79 20 6e 6f 74 20 61 70 70 65  age may not appe
128e0 61 72 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63  ar more than onc
128f0 65 0a 77 69 74 68 69 6e 20 61 20 73 69 6e 67 6c  e.within a singl
12900 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
12910 61 6c 2e 0a 54 6f 20 72 6f 6c 6c 62 61 63 6b 20  al..To rollback 
12920 61 6e 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72  an incomplete tr
12930 61 6e 73 61 63 74 69 6f 6e 2c 20 61 20 70 72 6f  ansaction, a pro
12940 63 65 73 73 0a 68 61 73 20 6d 65 72 65 6c 79 20  cess.has merely 
12950 74 6f 20 72 65 61 64 20 74 68 65 20 72 6f 6c 6c  to read the roll
12960 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 72 6f  back journal fro
12970 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 20 65  m beginning to e
12980 6e 64 20 61 6e 64 0a 77 72 69 74 65 20 70 61 67  nd and.write pag
12990 65 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20  es found in the 
129a0 6a 6f 75 72 6e 61 6c 20 62 61 63 6b 20 69 6e 74  journal back int
129b0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
129c0 69 6c 65 20 61 74 20 74 68 65 0a 61 70 70 72 6f  ile at the.appro
129d0 70 72 69 61 74 65 20 6c 6f 63 61 74 69 6f 6e 2e  priate location.
129e0 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65  </p>..<p>Let the
129f0 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
12a00 69 7a 65 20 28 74 68 65 20 76 61 6c 75 65 20 6f  ize (the value o
12a10 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74  f the integer at
12a20 20 6f 66 66 73 65 74 20 32 34 20 0a 69 6e 20 74   offset 24 .in t
12a30 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  he journal heade
12a40 72 29 20 62 65 20 4e 2e 0a 54 68 65 6e 20 74 68  r) be N..Then th
12a50 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 70 61  e format of a pa
12a60 67 65 20 72 65 63 6f 72 64 20 69 73 20 61 73 20  ge record is as 
12a70 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 63  follows:</p>..<c
12a80 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61  enter>.<i>Rollba
12a90 63 6b 20 4a 6f 75 72 6e 61 6c 20 50 61 67 65 20  ck Journal Page 
12aa0 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69  Record Format</i
12ab0 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64  ><br>.<table wid
12ac0 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d  th="80%" border=
12ad0 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65  1>.<tr><th>Offse
12ae0 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73  t<th>Size<th>Des
12af0 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64  cription.<tr><td
12b00 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12b10 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c  n=center>0.    <
12b20 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12b30 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
12b40 20 3c 74 64 3e 54 68 65 20 70 61 67 65 20 6e 75   <td>The page nu
12b50 6d 62 65 72 20 69 6e 20 74 68 65 20 64 61 74 61  mber in the data
12b60 62 61 73 65 20 66 69 6c 65 0a 3c 74 72 3e 3c 74  base file.<tr><t
12b70 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12b80 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
12b90 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12ba0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 0a 20 20  lign=center>N.  
12bb0 20 20 3c 74 64 3e 4f 72 69 67 69 6e 61 6c 20 63    <td>Original c
12bc0 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 70 61  ontent of the pa
12bd0 67 65 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ge prior to the 
12be0 73 74 61 72 74 20 6f 66 20 74 68 65 20 74 72 61  start of the tra
12bf0 6e 73 61 63 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64  nsaction.<tr><td
12c00 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12c10 6e 3d 63 65 6e 74 65 72 3e 4e 2b 34 0a 20 20 20  n=center>N+4.   
12c20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
12c30 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
12c40 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 0a     <td>Checksum.
12c50 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65  </table>.</cente
12c60 72 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 63 68  r>...<p>^(The ch
12c70 65 63 6b 73 75 6d 20 69 73 20 61 6e 20 75 6e 73  ecksum is an uns
12c80 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74  igned 32-bit int
12c90 65 67 65 72 20 63 6f 6d 70 75 74 65 64 20 61 73  eger computed as
12ca0 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c   follows:</p>..<
12cb0 6f 6c 3e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69  ol>.<li>Initiali
12cc0 7a 65 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20  ze the checksum 
12cd0 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20  to the checksum 
12ce0 6e 6f 6e 63 65 20 76 61 6c 75 65 20 66 6f 75 6e  nonce value foun
12cf0 64 20 69 6e 20 74 68 65 0a 6a 6f 75 72 6e 61 6c  d in the.journal
12d00 20 68 65 61 64 65 72 20 61 74 20 6f 66 66 73 65   header at offse
12d10 74 20 31 32 2e 0a 3c 6c 69 3e 49 6e 69 74 69 61  t 12..<li>Initia
12d20 6c 69 7a 65 20 69 6e 64 65 78 20 58 20 74 6f 20  lize index X to 
12d30 62 65 20 4e 2d 32 30 30 20 28 77 68 65 72 65 20  be N-200 (where 
12d40 4e 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66  N is the size of
12d50 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65   a database page
12d60 0a 69 6e 20 62 79 74 65 73 2e 0a 3c 6c 69 3e 49  .in bytes..<li>I
12d70 6e 74 65 72 70 72 65 74 20 74 68 65 20 66 6f 75  nterpret the fou
12d80 72 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65  r bytes at offse
12d90 74 20 58 20 69 6e 74 6f 20 74 68 65 20 70 61 67  t X into the pag
12da0 65 20 61 73 20 61 20 34 2d 62 79 74 65 20 62 69  e as a 4-byte bi
12db0 67 2d 65 6e 64 69 61 6e 0a 75 6e 73 69 67 6e 65  g-endian.unsigne
12dc0 64 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20  d integer.  Add 
12dd0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 61  the value of tha
12de0 74 20 69 6e 74 65 67 65 72 20 74 6f 20 74 68 65  t integer to the
12df0 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53   checksum..<li>S
12e00 75 62 74 72 61 63 65 20 32 30 30 20 66 72 6f 6d  ubtrace 200 from
12e10 20 58 2e 0a 3c 6c 69 3e 49 66 20 58 20 69 73 20   X..<li>If X is 
12e20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
12e30 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 67  equal to zero, g
12e40 6f 20 62 61 63 6b 20 74 6f 20 73 74 65 70 20 33  o back to step 3
12e50 2e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54 68  ..</ol>)^..<p>Th
12e60 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65  e checksum value
12e70 20 69 73 20 75 73 65 64 20 74 6f 20 67 75 61 72   is used to guar
12e80 64 20 61 67 61 69 6e 73 74 20 69 6e 63 6f 6d 70  d against incomp
12e90 6c 65 74 65 20 77 72 69 74 65 73 20 6f 66 0a 61  lete writes of.a
12ea0 20 6a 6f 75 72 6e 61 6c 20 70 61 67 65 20 72 65   journal page re
12eb0 63 6f 72 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  cord following a
12ec0 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 2e 20   power failure. 
12ed0 20 41 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e   A different ran
12ee0 64 6f 6d 20 6e 6f 6e 63 65 0a 69 73 20 75 73 65  dom nonce.is use
12ef0 64 20 65 61 63 68 20 74 69 6d 65 20 61 20 74 72  d each time a tr
12f00 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
12f10 72 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  rted in order to
12f20 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 69   minimize the ri
12f30 73 6b 0a 74 68 61 74 20 75 6e 77 72 69 74 74 65  sk.that unwritte
12f40 6e 20 73 65 63 74 6f 72 73 20 6d 69 67 68 74 20  n sectors might 
12f50 62 79 20 63 68 61 6e 63 65 20 63 6f 6e 74 61 69  by chance contai
12f60 6e 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20  n data from the 
12f70 73 61 6d 65 20 70 61 67 65 0a 74 68 61 74 20 77  same page.that w
12f80 61 73 20 61 20 70 61 72 74 20 6f 66 20 70 72 69  as a part of pri
12f90 6f 72 20 6a 6f 75 72 6e 61 6c 73 2e 20 20 42 79  or journals.  By
12fa0 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 6e 6f   changing the no
12fb0 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 74 72 61  nce for each.tra
12fc0 6e 73 61 63 74 69 6f 6e 2c 20 73 74 61 6c 65 20  nsaction, stale 
12fd0 64 61 74 61 20 6f 6e 20 64 69 73 6b 20 77 69 6c  data on disk wil
12fe0 6c 20 73 74 69 6c 6c 20 67 65 6e 65 72 61 74 65  l still generate
12ff0 20 61 6e 20 69 6e 63 6f 72 72 65 63 74 20 63 68   an incorrect ch
13000 65 63 6b 73 75 6d 0a 61 6e 64 20 62 65 20 64 65  ecksum.and be de
13010 74 65 63 74 65 64 20 77 69 74 68 20 68 69 67 68  tected with high
13020 20 70 72 6f 62 61 62 69 6c 69 74 79 2e 20 20 54   probability.  T
13030 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e 6c 79  he checksum only
13040 20 75 73 65 73 20 61 20 73 70 61 72 73 65 20 73   uses a sparse s
13050 61 6d 70 6c 65 0a 6f 66 20 33 32 2d 62 69 74 20  ample.of 32-bit 
13060 77 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20 64  words from the d
13070 61 74 61 20 72 65 63 6f 72 64 20 66 6f 72 20 70  ata record for p
13080 65 72 66 6f 72 6d 61 6e 63 65 20 72 65 61 73 6f  erformance reaso
13090 6e 73 20 2d 20 64 65 73 69 67 6e 20 73 74 75 64  ns - design stud
130a0 69 65 73 20 0a 64 75 72 69 6e 67 20 74 68 65 20  ies .during the 
130b0 70 6c 61 6e 6e 69 6e 67 20 70 68 61 73 65 73 20  planning phases 
130c0 6f 66 20 53 51 4c 69 74 65 20 33 2e 30 2e 30 20  of SQLite 3.0.0 
130d0 73 68 6f 77 65 64 0a 61 20 73 69 67 6e 69 66 69  showed.a signifi
130e0 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
130f0 20 68 69 74 20 69 6e 20 63 68 65 63 6b 73 75 6d   hit in checksum
13100 6d 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20  ming the entire 
13110 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65  page.</p>..<p>Le
13120 74 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74  t the page count
13130 20 76 61 6c 75 65 20 61 74 20 6f 66 66 73 65 74   value at offset
13140 20 38 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61   8 in the journa
13150 6c 20 68 65 61 64 65 72 20 62 65 20 4d 2e 0a 5e  l header be M..^
13160 49 66 20 4d 20 69 73 20 67 72 65 61 74 65 72 20  If M is greater 
13170 74 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e 20 61  than zero then a
13180 66 74 65 72 20 4d 20 70 61 67 65 20 72 65 63 6f  fter M page reco
13190 72 64 73 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  rds the journal 
131a0 66 69 6c 65 0a 6d 61 79 20 62 65 20 7a 65 72 6f  file.may be zero
131b0 20 70 61 64 64 65 64 20 6f 75 74 20 74 6f 20 74   padded out to t
131c0 68 65 20 6e 65 78 74 20 6d 75 6c 74 69 70 6c 65  he next multiple
131d0 20 6f 66 20 74 68 65 20 73 65 63 74 6f 72 20 73   of the sector s
131e0 69 7a 65 20 61 6e 64 20 61 6e 6f 74 68 65 72 0a  ize and another.
131f0 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 6d  journal header m
13200 61 79 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  ay be inserted. 
13210 20 5e 41 6c 6c 20 6a 6f 75 72 6e 61 6c 20 68 65   ^All journal he
13220 61 64 65 72 73 20 77 69 74 68 69 6e 20 74 68 65  aders within the
13230 20 73 61 6d 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75   same.journal mu
13240 73 74 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73  st contain the s
13250 61 6d 65 20 64 61 74 61 62 61 73 65 20 70 61 67  ame database pag
13260 65 20 73 69 7a 65 20 61 6e 64 20 73 65 63 74 6f  e size and secto
13270 72 20 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  r size.</p>..<p>
13280 5e 49 66 20 4d 20 69 73 20 2d 31 20 69 6e 20 74  ^If M is -1 in t
13290 68 65 20 69 6e 69 74 69 61 6c 20 6a 6f 75 72 6e  he initial journ
132a0 61 6c 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  al header, then 
132b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
132c0 67 65 20 72 65 63 6f 72 64 73 0a 74 68 61 74 20  ge records.that 
132d0 66 6f 6c 6c 6f 77 20 69 73 20 63 6f 6d 70 75 74  follow is comput
132e0 65 64 20 62 79 20 63 6f 6d 70 75 74 69 6e 67 20  ed by computing 
132f0 68 6f 77 20 6d 61 6e 79 20 70 61 67 65 20 72 65  how many page re
13300 63 6f 72 64 73 20 77 69 6c 6c 20 66 69 74 20 69  cords will fit i
13310 6e 0a 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20  n.the available 
13320 73 70 61 63 65 20 6f 66 20 74 68 65 20 72 65 6d  space of the rem
13330 61 69 6e 64 65 72 20 6f 66 20 74 68 65 20 6a 6f  ainder of the jo
13340 75 72 6e 61 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a  urnal file.</p>.
13350 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
13360 74 20 77 61 6c 66 6f 72 6d 61 74 20 7b 57 41 4c  t walformat {WAL
13370 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c   format}</tcl>.<
13380 68 32 3e 34 2e 30 20 54 68 65 20 57 72 69 74 65  h2>4.0 The Write
13390 2d 41 68 65 61 64 20 4c 6f 67 3c 2f 68 32 3e 0a  -Ahead Log</h2>.
133a0 0a 3c 70 3e 42 65 67 69 6e 6e 69 6e 67 20 77 69  .<p>Beginning wi
133b0 74 68 20 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e  th [version 3.7.
133c0 30 5d 2c 20 53 51 4c 69 74 65 20 73 75 70 70 6f  0], SQLite suppo
133d0 72 74 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61  rts a new transa
133e0 63 74 69 6f 6e 0a 63 6f 6e 74 72 6f 6c 20 6d 65  ction.control me
133f0 63 68 61 6e 69 73 6d 20 63 61 6c 6c 65 64 20 22  chanism called "
13400 5b 57 41 4c 20 7c 20 77 72 69 74 65 2d 61 68 65  [WAL | write-ahe
13410 61 64 20 6c 6f 67 5d 22 20 6f 72 20 22 5b 57 41  ad log]" or "[WA
13420 4c 5d 22 2e 0a 5e 57 68 65 6e 20 61 20 64 61 74  L]"..^When a dat
13430 61 62 61 73 65 20 69 73 20 69 6e 20 57 41 4c 20  abase is in WAL 
13440 6d 6f 64 65 2c 20 61 6c 6c 20 63 6f 6e 6e 65 63  mode, all connec
13450 74 69 6f 6e 73 20 74 6f 20 74 68 61 74 20 64 61  tions to that da
13460 74 61 62 61 73 65 20 6d 75 73 74 0a 75 73 65 20  tabase must.use 
13470 74 68 65 20 57 41 4c 2e 20 20 5e 41 20 70 61 72  the WAL.  ^A par
13480 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73 65  ticular database
13490 20 77 69 6c 6c 20 75 73 65 20 65 69 74 68 65 72   will use either
134a0 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
134b0 6e 61 6c 0a 6f 72 20 61 20 57 41 4c 2c 20 62 75  nal.or a WAL, bu
134c0 74 20 6e 6f 74 20 62 6f 74 68 20 61 74 20 74 68  t not both at th
134d0 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 5e 54 68  e same time..^Th
134e0 65 20 57 41 4c 20 69 73 20 61 6c 77 61 79 73 20  e WAL is always 
134f0 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 20 73  located in the s
13500 61 6d 65 20 64 69 72 65 63 74 6f 72 79 20 61 73  ame directory as
13510 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69   the database.fi
13520 6c 65 20 61 6e 64 20 68 61 73 20 74 68 65 20 73  le and has the s
13530 61 6d 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20  ame name as the 
13540 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 75  database file bu
13550 74 20 77 69 74 68 20 74 68 65 20 73 74 72 69 6e  t with the strin
13560 67 0a 22 3c 74 74 3e 2d 77 61 6c 3c 2f 74 74 3e  g."<tt>-wal</tt>
13570 22 20 61 70 70 65 6e 64 65 64 2e 3c 2f 70 3e 0a  " appended.</p>.
13580 0a 3c 68 33 3e 34 2e 31 20 57 41 4c 20 46 69 6c  .<h3>4.1 WAL Fil
13590 65 20 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c  e Format</h3>..<
135a0 70 3e 41 20 57 41 4c 20 66 69 6c 65 20 63 6f 6e  p>A WAL file con
135b0 73 69 73 74 73 20 6f 66 20 61 20 68 65 61 64 65  sists of a heade
135c0 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65  r followed by ze
135d0 72 6f 20 6f 72 20 6d 6f 72 65 20 22 66 72 61 6d  ro or more "fram
135e0 65 73 22 2e 0a 45 61 63 68 20 66 72 61 6d 65 20  es"..Each frame 
135f0 72 65 63 6f 72 64 73 20 74 68 65 20 72 65 76 69  records the revi
13600 73 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  sed content of a
13610 20 73 69 6e 67 6c 65 20 70 61 67 65 20 66 72 6f   single page fro
13620 6d 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  m the.database f
13630 69 6c 65 2e 20 20 41 6c 6c 20 63 68 61 6e 67 65  ile.  All change
13640 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  s to the databas
13650 65 20 61 72 65 20 72 65 63 6f 72 64 65 64 20 62  e are recorded b
13660 79 20 77 72 69 74 69 6e 67 0a 66 72 61 6d 65 73  y writing.frames
13670 20 69 6e 74 6f 20 74 68 65 20 57 41 4c 2e 20 20   into the WAL.  
13680 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6d  Transactions com
13690 6d 69 74 20 77 68 65 6e 20 61 20 66 72 61 6d 65  mit when a frame
136a0 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 61 74   is written that
136b0 0a 63 6f 6e 74 61 69 6e 73 20 61 20 63 6f 6d 6d  .contains a comm
136c0 69 74 20 6d 61 72 6b 65 72 2e 20 20 5e 41 20 73  it marker.  ^A s
136d0 69 6e 67 6c 65 20 57 41 4c 20 63 61 6e 20 61 6e  ingle WAL can an
136e0 64 20 75 73 75 61 6c 6c 79 20 64 6f 65 73 20 72  d usually does r
136f0 65 63 6f 72 64 20 0a 6d 75 6c 74 69 70 6c 65 20  ecord .multiple 
13700 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 50  transactions.  P
13710 65 72 69 6f 64 69 63 61 6c 6c 79 2c 20 74 68 65  eriodically, the
13720 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
13730 57 41 4c 20 69 73 0a 74 72 61 6e 73 66 65 72 72  WAL is.transferr
13740 65 64 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ed back into the
13750 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
13760 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20 63  n an operation c
13770 61 6c 6c 65 64 20 61 0a 22 63 68 65 63 6b 70 6f  alled a."checkpo
13780 69 6e 74 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  int".</p>..<p>^A
13790 20 73 69 6e 67 6c 65 20 57 41 4c 20 66 69 6c 65   single WAL file
137a0 20 63 61 6e 20 62 65 20 72 65 75 73 65 64 20 6d   can be reused m
137b0 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e 20 20  ultiple times.  
137c0 5e 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  ^In other words,
137d0 20 74 68 65 0a 57 41 4c 20 63 61 6e 20 66 69 6c   the.WAL can fil
137e0 6c 20 75 70 20 77 69 74 68 20 66 72 61 6d 65 73  l up with frames
137f0 20 61 6e 64 20 74 68 65 6e 20 62 65 20 63 68 65   and then be che
13800 63 6b 70 6f 69 6e 74 65 64 20 61 6e 64 20 74 68  ckpointed and th
13810 65 6e 20 6e 65 77 0a 66 72 61 6d 65 73 20 63 61  en new.frames ca
13820 6e 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20  n overwrite the 
13830 6f 6c 64 20 6f 6e 65 73 2e 20 20 5e 41 20 57 41  old ones.  ^A WA
13840 4c 20 61 6c 77 61 79 73 20 67 72 6f 77 73 20 66  L always grows f
13850 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 0a 74 6f  rom beginning.to
13860 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 43  ward the end.  C
13870 68 65 63 6b 73 75 6d 73 20 61 6e 64 20 63 6f 75  hecksums and cou
13880 6e 74 65 72 73 20 61 74 74 61 63 68 65 64 20 74  nters attached t
13890 6f 20 65 61 63 68 20 66 72 61 6d 65 20 61 72 65  o each frame are
138a0 0a 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69  .used to determi
138b0 6e 65 20 77 68 69 63 68 20 66 72 61 6d 65 73 20  ne which frames 
138c0 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c 20 61  within the WAL a
138d0 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77 68 69  re valid and whi
138e0 63 68 0a 61 72 65 20 6c 65 66 74 6f 76 65 72 73  ch.are leftovers
138f0 20 66 72 6f 6d 20 70 72 69 6f 72 20 63 68 65 63   from prior chec
13900 6b 70 6f 69 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70  kpoints.</p>..<p
13910 3e 5e 28 54 68 65 20 57 41 4c 20 68 65 61 64 65  >^(The WAL heade
13920 72 20 69 73 20 33 32 20 62 79 74 65 73 20 69 6e  r is 32 bytes in
13930 20 73 69 7a 65 20 61 6e 64 20 63 6f 6e 73 69 73   size and consis
13940 74 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ts of the follow
13950 69 6e 67 20 65 69 67 68 74 0a 62 69 67 2d 65 6e  ing eight.big-en
13960 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e 73 69  dian 32-bit unsi
13970 67 6e 65 64 20 69 6e 74 65 67 65 72 20 76 61 6c  gned integer val
13980 75 65 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  ues:</p>..<cente
13990 72 3e 0a 3c 69 3e 57 41 4c 20 48 65 61 64 65 72  r>.<i>WAL Header
139a0 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
139b0 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
139c0 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
139d0 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
139e0 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
139f0 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
13a00 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13a10 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>0<td valign=t
13a20 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13a30 34 0a 20 20 20 20 3c 74 64 3e 4d 61 67 69 63 20  4.    <td>Magic 
13a40 6e 75 6d 62 65 72 2e 20 20 30 78 33 37 37 66 30  number.  0x377f0
13a50 36 38 32 20 6f 72 20 30 78 33 37 37 66 30 36 38  682 or 0x377f068
13a60 33 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  3.<tr><td valign
13a70 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13a80 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>4<td valign=to
13a90 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13aa0 0a 20 20 20 20 3c 74 64 3e 46 69 6c 65 20 66 6f  .    <td>File fo
13ab0 72 6d 61 74 20 76 65 72 73 69 6f 6e 2e 20 20 43  rmat version.  C
13ac0 75 72 72 65 6e 74 6c 79 20 33 30 30 37 30 30 30  urrently 3007000
13ad0 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
13ae0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13af0 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>8<td valign=to
13b00 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13b10 0a 20 20 20 20 3c 74 64 3e 44 61 74 61 62 61 73  .    <td>Databas
13b20 65 20 70 61 67 65 20 73 69 7a 65 2e 20 20 45 78  e page size.  Ex
13b30 61 6d 70 6c 65 3a 20 31 30 32 34 0a 3c 74 72 3e  ample: 1024.<tr>
13b40 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13b50 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74  lign=center>12<t
13b60 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13b70 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
13b80 3c 74 64 3e 43 68 65 63 6b 70 6f 69 6e 74 20 73  <td>Checkpoint s
13b90 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 0a 3c  equence number.<
13ba0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13bb0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
13bc0 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  6<td valign=top 
13bd0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
13be0 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 3a 20 72     <td>Salt-1: r
13bf0 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72 20 69 6e  andom integer in
13c00 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
13c10 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c  ach checkpoint.<
13c20 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13c30 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
13c40 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
13c50 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
13c60 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 3a 20 61     <td>Salt-2: a
13c70 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f   different rando
13c80 6d 20 6e 75 6d 62 65 72 20 66 6f 72 20 65 61 63  m number for eac
13c90 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72  h checkpoint.<tr
13ca0 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
13cb0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 3c  align=center>24<
13cc0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13cd0 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
13ce0 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a   <td>Checksum-1:
13cf0 20 46 69 72 73 74 20 70 61 72 74 20 6f 66 20 61   First part of a
13d00 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65   checksum on the
13d10 20 66 69 72 73 74 20 32 34 20 62 79 74 65 73 20   first 24 bytes 
13d20 6f 66 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74  of header.<tr><t
13d30 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13d40 67 6e 3d 63 65 6e 74 65 72 3e 32 38 3c 74 64 20  gn=center>28<td 
13d50 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13d60 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
13d70 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20 53 65  d>Checksum-2: Se
13d80 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 74 68 65  cond part of the
13d90 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65   checksum on the
13da0 20 66 69 72 73 74 20 32 34 20 62 79 74 65 73 20   first 24 bytes 
13db0 6f 66 20 68 65 61 64 65 72 0a 3c 2f 74 61 62 6c  of header.</tabl
13dc0 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  e>.</center>)^..
13dd0 3c 70 3e 5e 49 6d 6d 65 64 69 61 74 65 6c 79 20  <p>^Immediately 
13de0 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 77 61  following the wa
13df0 6c 2d 68 65 61 64 65 72 20 61 72 65 20 7a 65 72  l-header are zer
13e00 6f 20 6f 72 20 6d 6f 72 65 20 66 72 61 6d 65 73  o or more frames
13e10 2e 20 5e 45 61 63 68 0a 66 72 61 6d 65 20 63 6f  . ^Each.frame co
13e20 6e 73 69 73 74 73 20 6f 66 20 61 20 32 34 2d 62  nsists of a 24-b
13e30 79 74 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72  yte frame-header
13e40 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 3c   followed by a <
13e50 69 3e 70 61 67 65 2d 73 69 7a 65 3c 2f 69 3e 20  i>page-size</i> 
13e60 62 79 74 65 73 0a 6f 66 20 70 61 67 65 20 64 61  bytes.of page da
13e70 74 61 2e 20 5e 28 54 68 65 20 66 72 61 6d 65 2d  ta. ^(The frame-
13e80 68 65 61 64 65 72 20 69 73 20 73 69 78 20 62 69  header is six bi
13e90 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20  g-endian 32-bit 
13ea0 75 6e 73 69 67 6e 65 64 20 0a 69 6e 74 65 67 65  unsigned .intege
13eb0 72 20 76 61 6c 75 65 73 2c 20 61 73 20 66 6f 6c  r values, as fol
13ec0 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a  lows:..<center>.
13ed0 3c 69 3e 57 41 4c 20 46 72 61 6d 65 20 48 65 61  <i>WAL Frame Hea
13ee0 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62  der Format</i><b
13ef0 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  r>.<table width=
13f00 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a  "80%" border=1>.
13f10 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74  <tr><th>Offset<t
13f20 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69  h>Size<th>Descri
13f30 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61  ption.<tr><td va
13f40 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13f50 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67  enter>0<td valig
13f60 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13f70 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 50 61 67  er>4.    <td>Pag
13f80 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64  e number.<tr><td
13f90 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13fa0 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61  n=center>4<td va
13fb0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13fc0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13fd0 46 6f 72 20 63 6f 6d 6d 69 74 20 72 65 63 6f 72  For commit recor
13fe0 64 73 2c 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ds, the size of 
13ff0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
14000 65 20 69 6e 20 70 61 67 65 73 0a 20 20 20 20 20  e in pages.     
14010 20 20 20 61 66 74 65 72 20 74 68 65 20 63 6f 6d     after the com
14020 6d 69 74 2e 20 20 46 6f 72 20 61 6c 6c 20 6f 74  mit.  For all ot
14030 68 65 72 20 72 65 63 6f 72 64 73 2c 20 7a 65 72  her records, zer
14040 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  o..<tr><td valig
14050 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
14060 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>8<td valign=t
14070 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
14080 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31  4.    <td>Salt-1
14090 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
140a0 20 57 41 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e   WAL header.<tr>
140b0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
140c0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74  lign=center>12<t
140d0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
140e0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
140f0 3c 74 64 3e 53 61 6c 74 2d 32 20 63 6f 70 69 65  <td>Salt-2 copie
14100 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 68  d from the WAL h
14110 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  eader.<tr><td va
14120 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
14130 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69  enter>16<td vali
14140 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
14150 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
14160 65 63 6b 73 75 6d 2d 31 3a 20 20 43 75 6d 75 6c  ecksum-1:  Cumul
14170 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d 20 75  ative checksum u
14180 70 20 74 68 72 6f 75 67 68 20 61 6e 64 20 69 6e  p through and in
14190 63 6c 75 64 69 6e 67 20 74 68 69 73 20 70 61 67  cluding this pag
141a0 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  e.<tr><td valign
141b0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
141c0 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>20<td valign=t
141d0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
141e0 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73  4.    <td>Checks
141f0 75 6d 2d 32 3a 20 20 53 65 63 6f 6e 64 20 68 61  um-2:  Second ha
14200 6c 66 20 6f 66 20 74 68 65 20 63 75 6d 75 6c 61  lf of the cumula
14210 74 69 76 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c  tive checksum..<
14220 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
14230 3e 29 5e 0a 0a 5e 28 3c 70 3e 41 20 66 72 61 6d  >)^..^(<p>A fram
14240 65 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  e is considered 
14250 76 61 6c 69 64 20 69 66 20 61 6e 64 20 6f 6e 6c  valid if and onl
14260 79 20 69 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  y if the followi
14270 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72  ng conditions ar
14280 65 0a 74 72 75 65 3a 3c 2f 70 3e 0a 0a 3c 6f 6c  e.true:</p>..<ol
14290 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 61 6c  >.<li><p>The sal
142a0 74 2d 31 20 61 6e 64 20 73 61 6c 74 2d 32 20 76  t-1 and salt-2 v
142b0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66 72 61  alues in the fra
142c0 6d 65 2d 68 65 61 64 65 72 20 6d 61 74 63 68 0a  me-header match.
142d0 20 20 20 20 20 20 20 73 61 6c 74 20 76 61 6c 75         salt valu
142e0 65 73 20 69 6e 20 74 68 65 20 77 61 6c 2d 68 65  es in the wal-he
142f0 61 64 65 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c  ader</p></li>..<
14300 6c 69 3e 3c 70 3e 54 68 65 20 63 68 65 63 6b 73  li><p>The checks
14310 75 6d 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  um values in the
14320 20 66 69 6e 61 6c 20 38 20 62 79 74 65 73 20 6f   final 8 bytes o
14330 66 20 74 68 65 20 66 72 61 6d 65 2d 68 65 61 64  f the frame-head
14340 65 72 0a 20 20 20 20 20 20 20 65 78 61 63 74 6c  er.       exactl
14350 79 20 6d 61 74 63 68 20 74 68 65 20 63 68 65 63  y match the chec
14360 6b 73 75 6d 20 63 6f 6d 70 75 74 65 64 20 63 6f  ksum computed co
14370 6e 73 65 63 75 74 69 76 65 6c 79 20 6f 6e 20 74  nsecutively on t
14380 68 65 0a 20 20 20 20 20 20 20 66 69 72 73 74 20  he.       first 
14390 32 34 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  24 bytes of the 
143a0 57 41 4c 20 68 65 61 64 65 72 20 61 6e 64 20 74  WAL header and t
143b0 68 65 20 66 69 72 73 74 20 38 20 62 79 74 65 73  he first 8 bytes
143c0 20 61 6e 64 0a 20 20 20 20 20 20 20 74 68 65 20   and.       the 
143d0 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6c 6c 20 66  content of all f
143e0 72 61 6d 65 73 0a 20 20 20 20 20 20 20 75 70 20  rames.       up 
143f0 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67  to and including
14400 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
14410 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f 6c 69  me.</p></li></li
14420 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e  >.</ol>)^..<tcl>
14430 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 63  hd_fragment walc
14440 6b 73 6d 20 7b 57 41 4c 20 63 68 65 63 6b 73 75  ksm {WAL checksu
14450 6d 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63  m algorithm}</tc
14460 6c 3e 0a 3c 68 33 3e 34 2e 32 20 43 68 65 63 6b  l>.<h3>4.2 Check
14470 73 75 6d 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68  sum Algorithm</h
14480 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b  3>..<p>The check
14490 73 75 6d 20 69 73 20 63 6f 6d 70 75 74 65 64 20  sum is computed 
144a0 62 79 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20  by interpreting 
144b0 74 68 65 20 69 6e 70 75 74 20 61 73 0a 61 6e 20  the input as.an 
144c0 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75  even number of u
144d0 6e 73 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69  nsigned 32-bit i
144e0 6e 74 65 67 65 72 73 3a 20 78 28 30 29 20 74 68  ntegers: x(0) th
144f0 72 6f 75 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65  rough x(N)..^The
14500 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73   32-bit integers
14510 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 20   are big-endian 
14520 69 66 20 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d  if the.magic num
14530 62 65 72 20 69 6e 20 74 68 65 20 66 69 72 73 74  ber in the first
14540 20 34 20 62 79 74 65 73 20 6f 66 20 74 68 65 20   4 bytes of the 
14550 57 41 4c 20 68 65 61 64 65 72 20 69 73 20 30 78  WAL header is 0x
14560 33 37 37 66 30 36 38 33 20 61 6e 64 0a 74 68 65  377f0683 and.the
14570 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 6c 69   integers are li
14580 74 74 6c 65 2d 65 6e 64 69 61 6e 20 69 66 20 74  ttle-endian if t
14590 68 65 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20  he magic number 
145a0 69 73 20 30 78 33 37 37 66 30 36 38 32 2e 0a 5e  is 0x377f0682..^
145b0 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c  The checksum val
145c0 75 65 73 20 61 72 65 20 61 6c 77 61 79 73 20 73  ues are always s
145d0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 66 72 61  tored in the fra
145e0 6d 65 20 68 65 61 64 65 72 20 69 6e 20 61 0a 62  me header in a.b
145f0 69 67 2d 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74  ig-endian format
14600 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
14610 68 69 63 68 20 62 79 74 65 20 6f 72 64 65 72 20  hich byte order 
14620 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 75  is used to compu
14630 74 65 0a 74 68 65 20 63 68 65 63 6b 73 75 6d 2e  te.the checksum.
14640 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65  </p>..<p>The che
14650 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20  cksum algorithm 
14660 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63  only works for c
14670 6f 6e 74 65 6e 74 20 77 68 69 63 68 20 69 73 20  ontent which is 
14680 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20  a multiple of.8 
14690 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e  bytes in length.
146a0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
146b0 2c 20 69 66 20 74 68 65 20 69 6e 70 75 74 73 20  , if the inputs 
146c0 61 72 65 20 78 28 30 29 20 74 68 72 6f 75 67 68  are x(0) through
146d0 20 78 28 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73   x(N).then N mus
146e0 74 20 62 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20  t be odd..^(The 
146f0 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74  checksum algorit
14700 68 6d 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73  hm is as follows
14710 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
14720 70 72 65 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20  pre> .s0 = s1 = 
14730 30 0a 66 6f 72 20 69 20 66 72 6f 6d 20 30 20 74  0.for i from 0 t
14740 6f 20 6e 2d 31 20 73 74 65 70 20 32 3a 0a 20 20  o n-1 step 2:.  
14750 20 73 30 20 2b 3d 20 78 28 69 29 20 2b 20 73 31   s0 += x(i) + s1
14760 3b 0a 20 20 20 73 31 20 2b 3d 20 78 28 69 2b 31  ;.   s1 += x(i+1
14770 29 20 2b 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23  ) + s0;.endfor.#
14780 20 72 65 73 75 6c 74 20 69 6e 20 73 30 20 61 6e   result in s0 an
14790 64 20 73 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  d s1.</pre></blo
147a0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e  ckquote>)^..<p>^
147b0 54 68 65 20 6f 75 74 70 75 74 73 20 73 30 20 61  The outputs s0 a
147c0 6e 64 20 73 31 20 61 72 65 20 62 6f 74 68 20 77  nd s1 are both w
147d0 65 69 67 68 74 65 64 20 63 68 65 63 6b 73 75 6d  eighted checksum
147e0 73 20 75 73 69 6e 67 20 46 69 62 6f 6e 61 63 63  s using Fibonacc
147f0 69 20 77 65 69 67 68 74 73 0a 69 6e 20 72 65 76  i weights.in rev
14800 65 72 73 65 20 6f 72 64 65 72 2e 20 20 28 5e 54  erse order.  (^T
14810 68 65 20 6c 61 72 67 65 73 74 20 46 69 62 6f 6e  he largest Fibon
14820 61 63 63 69 20 77 65 69 67 68 74 20 6f 63 63 75  acci weight occu
14830 72 73 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20  rs on the first 
14840 65 6c 65 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73  element.of the s
14850 65 71 75 65 6e 63 65 20 62 65 69 6e 67 20 73 75  equence being su
14860 6d 6d 65 64 2e 29 20 20 5e 54 68 65 20 73 31 20  mmed.)  ^The s1 
14870 76 61 6c 75 65 20 73 70 61 6e 73 20 61 6c 6c 20  value spans all 
14880 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 74  32-bit integer.t
14890 65 72 6d 73 20 6f 66 20 74 68 65 20 73 65 71 75  erms of the sequ
148a0 65 6e 63 65 20 77 68 65 72 65 61 73 20 73 30 20  ence whereas s0 
148b0 6f 6d 69 74 73 20 74 68 65 20 66 69 6e 61 6c 20  omits the final 
148c0 74 65 72 6d 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34  term.</p>..<h3>4
148d0 2e 33 20 43 68 65 63 6b 70 6f 69 6e 74 20 41 6c  .3 Checkpoint Al
148e0 67 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70  gorithm</h3>..<p
148f0 3e 5e 4f 6e 20 61 20 5b 63 68 65 63 6b 70 6f 69  >^On a [checkpoi
14900 6e 74 5d 2c 20 74 68 65 20 57 41 4c 20 69 73 20  nt], the WAL is 
14910 66 69 72 73 74 20 66 6c 75 73 68 65 64 20 74 6f  first flushed to
14920 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 6f 72   persistent stor
14930 61 67 65 20 75 73 69 6e 67 0a 74 68 65 20 78 53  age using.the xS
14940 79 6e 63 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  ync method of th
14950 65 20 5b 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65  e [sqlite3_io_me
14960 74 68 6f 64 73 20 7c 20 56 46 53 5d 2e 20 0a 5e  thods | VFS]. .^
14970 54 68 65 6e 20 76 61 6c 69 64 20 63 6f 6e 74 65  Then valid conte
14980 6e 74 20 6f 66 20 74 68 65 20 57 41 4c 20 69 73  nt of the WAL is
14990 20 74 72 61 6e 73 66 65 72 72 65 64 20 69 6e 74   transferred int
149a0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
149b0 69 6c 65 2e 0a 5e 46 69 6e 61 6c 6c 79 2c 20 74  ile..^Finally, t
149c0 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 66  he database is f
149d0 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73 69 73  lushed to persis
149e0 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73 69  tent storage usi
149f0 6e 67 20 61 6e 6f 74 68 65 72 0a 78 53 79 6e 63  ng another.xSync
14a00 20 6d 65 74 68 6f 64 20 63 61 6c 6c 2e 0a 54 68   method call..Th
14a10 65 20 78 53 79 6e 63 20 6f 70 65 72 61 74 69 6f  e xSync operatio
14a20 6e 73 20 73 65 72 76 65 20 61 73 20 77 72 69 74  ns serve as writ
14a30 65 20 62 61 72 72 69 65 72 73 20 2d 20 61 6c 6c  e barriers - all
14a40 20 77 72 69 74 65 73 20 6c 61 75 6e 63 68 65 64   writes launched
14a50 0a 62 65 66 6f 72 65 20 74 68 65 20 78 53 79 6e  .before the xSyn
14a60 63 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  c must complete 
14a70 62 65 66 6f 72 65 20 61 6e 79 20 77 72 69 74 65  before any write
14a80 20 74 68 61 74 20 6c 61 75 6e 63 68 65 73 20 61   that launches a
14a90 66 74 65 72 20 74 68 65 0a 78 53 79 6e 63 20 62  fter the.xSync b
14aa0 65 67 69 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  egins.</p>..<p>^
14ab0 41 66 74 65 72 20 61 20 63 68 65 63 6b 70 6f 69  After a checkpoi
14ac0 6e 74 2c 20 6e 65 77 20 77 72 69 74 65 20 74 72  nt, new write tr
14ad0 61 6e 73 61 63 74 69 6f 6e 73 20 6f 76 65 72 77  ansactions overw
14ae0 72 69 74 65 0a 74 68 65 20 57 41 4c 20 66 69 6c  rite.the WAL fil
14af0 65 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  e from the begin
14b00 6e 69 6e 67 2e 20 20 5e 41 74 20 74 68 65 20 73  ning.  ^At the s
14b10 74 61 72 74 20 6f 66 20 74 68 65 20 66 69 72 73  tart of the firs
14b20 74 20 6e 65 77 0a 77 72 69 74 65 20 74 72 61 6e  t new.write tran
14b30 73 61 63 74 69 6f 6e 2c 20 74 68 65 20 57 41 4c  saction, the WAL
14b40 20 68 65 61 64 65 72 20 73 61 6c 74 2d 31 20 76   header salt-1 v
14b50 61 6c 75 65 20 69 73 20 69 6e 63 72 65 6d 65 6e  alue is incremen
14b60 74 65 64 0a 61 6e 64 20 74 68 65 20 73 61 6c 74  ted.and the salt
14b70 2d 32 20 76 61 6c 75 65 20 69 73 20 72 61 6e 64  -2 value is rand
14b80 6f 6d 69 7a 65 64 2e 20 20 54 68 65 73 65 20 63  omized.  These c
14b90 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 73 61  hanges to the sa
14ba0 6c 74 73 20 69 6e 76 61 6c 69 64 61 74 65 0a 6f  lts invalidate.o
14bb0 6c 64 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65  ld frames in the
14bc0 20 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 61   WAL that have a
14bd0 6c 72 65 61 64 79 20 62 65 65 6e 20 63 68 65 63  lready been chec
14be0 6b 70 6f 69 6e 74 65 64 20 62 75 74 20 6e 6f 74  kpointed but not
14bf0 20 79 65 74 0a 6f 76 65 72 77 72 69 74 74 65 6e   yet.overwritten
14c00 2c 20 61 6e 64 20 70 72 65 76 65 6e 74 20 74 68  , and prevent th
14c10 65 6d 20 66 72 6f 6d 20 62 65 69 6e 67 20 63 68  em from being ch
14c20 65 63 6b 70 6f 69 6e 74 65 64 20 61 67 61 69 6e  eckpointed again
14c30 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
14c40 72 61 67 6d 65 6e 74 20 77 61 6c 72 65 61 64 20  ragment walread 
14c50 7b 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69  {WAL read algori
14c60 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34  thm}</tcl>.<h3>4
14c70 2e 34 20 52 65 61 64 65 72 20 41 6c 67 6f 72 69  .4 Reader Algori
14c80 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54  thm</h3>..<p>^(T
14c90 6f 20 72 65 61 64 20 61 20 70 61 67 65 20 66 72  o read a page fr
14ca0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
14cb0 28 63 61 6c 6c 20 69 74 20 70 61 67 65 20 6e 75  (call it page nu
14cc0 6d 62 65 72 20 50 29 2c 20 61 20 72 65 61 64 65  mber P), a reade
14cd0 72 0a 66 69 72 73 74 20 63 68 65 63 6b 73 20 74  r.first checks t
14ce0 68 65 20 57 41 4c 20 74 6f 20 73 65 65 20 69 66  he WAL to see if
14cf0 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 70 61 67   it contains pag
14d00 65 20 50 2e 20 20 49 66 20 73 6f 2c 20 74 68 65  e P.  If so, the
14d10 6e 20 74 68 65 0a 6c 61 73 74 20 76 61 6c 69 64  n the.last valid
14d20 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 70 61 67   instance of pag
14d30 65 20 50 20 74 68 61 74 20 69 73 20 66 6f 6c 6c  e P that is foll
14d40 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 69 74  owed by a commit
14d50 20 66 72 61 6d 65 0a 6f 72 20 69 73 20 61 20 63   frame.or is a c
14d60 6f 6d 6d 69 74 20 66 72 61 6d 65 20 69 74 73 65  ommit frame itse
14d70 6c 66 20 62 65 63 6f 6d 65 73 20 74 68 65 20 76  lf becomes the v
14d80 61 6c 75 65 20 72 65 61 64 2e 29 5e 20 20 5e 49  alue read.)^  ^I
14d90 66 20 74 68 65 20 57 41 4c 0a 63 6f 6e 74 61 69  f the WAL.contai
14da0 6e 73 20 6e 6f 20 63 6f 70 69 65 73 20 6f 66 20  ns no copies of 
14db0 70 61 67 65 20 50 20 74 68 61 74 20 61 72 65 20  page P that are 
14dc0 76 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68 20  valid and which 
14dd0 61 72 65 20 61 20 63 6f 6d 6d 69 74 0a 66 72 61  are a commit.fra
14de0 6d 65 20 6f 72 20 61 72 65 20 66 6f 6c 6c 6f 77  me or are follow
14df0 65 64 20 62 79 20 61 20 63 6f 6d 6d 69 74 20 66  ed by a commit f
14e00 72 61 6d 65 2c 20 74 68 65 6e 20 70 61 67 65 20  rame, then page 
14e10 50 20 69 73 20 72 65 61 64 20 66 72 6f 6d 0a 74  P is read from.t
14e20 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
14e30 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20 73 74 61  .</p>..<p>To sta
14e40 72 74 20 61 20 72 65 61 64 20 74 72 61 6e 73 61  rt a read transa
14e50 63 74 69 6f 6e 2c 20 74 68 65 20 72 65 61 64 65  ction, the reade
14e60 72 20 72 65 63 6f 72 64 73 20 74 68 65 20 69 6e  r records the in
14e70 64 65 78 20 6f 66 20 74 68 65 20 6c 61 73 74 0a  dex of the last.
14e80 76 61 6c 69 64 20 66 72 61 6d 65 20 69 6e 20 74  valid frame in t
14e90 68 65 20 57 41 4c 2e 20 20 54 68 65 20 72 65 61  he WAL.  The rea
14ea0 64 65 72 20 75 73 65 73 20 74 68 69 73 20 72 65  der uses this re
14eb0 63 6f 72 64 65 64 20 22 6d 78 46 72 61 6d 65 22  corded "mxFrame"
14ec0 20 76 61 6c 75 65 0a 66 6f 72 20 61 6c 6c 20 73   value.for all s
14ed0 75 62 73 65 71 75 65 6e 74 20 72 65 61 64 20 6f  ubsequent read o
14ee0 70 65 72 61 74 69 6f 6e 73 2e 20 20 4e 65 77 20  perations.  New 
14ef0 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e  transactions can
14f00 20 62 65 20 61 70 70 65 6e 64 65 64 0a 74 6f 20   be appended.to 
14f10 74 68 65 20 57 41 4c 2c 20 62 75 74 20 61 73 20  the WAL, but as 
14f20 6c 6f 6e 67 20 61 73 20 74 68 65 20 72 65 61 64  long as the read
14f30 65 72 20 75 73 65 73 20 69 74 73 20 6f 72 69 67  er uses its orig
14f40 69 6e 61 6c 20 6d 78 46 72 61 6d 65 20 76 61 6c  inal mxFrame val
14f50 75 65 0a 61 6e 64 20 69 67 6e 6f 72 65 73 20 73  ue.and ignores s
14f60 75 62 73 65 71 75 65 6e 74 6c 79 20 61 70 70 65  ubsequently appe
14f70 6e 64 65 64 20 63 6f 6e 74 65 6e 74 2c 20 74 68  nded content, th
14f80 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20 73 65  e reader will se
14f90 65 20 61 20 0a 63 6f 6e 73 69 73 74 65 6e 74 20  e a .consistent 
14fa0 73 6e 61 70 73 68 6f 74 20 6f 66 20 74 68 65 20  snapshot of the 
14fb0 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 61 20  database from a 
14fc0 73 69 6e 67 6c 65 20 70 6f 69 6e 74 20 69 6e 20  single point in 
14fd0 74 69 6d 65 2e 20 20 0a 5e 54 68 69 73 20 74 65  time.  .^This te
14fe0 63 68 6e 69 71 75 65 20 61 6c 6c 6f 77 73 20 6d  chnique allows m
14ff0 75 6c 74 69 70 6c 65 20 63 6f 6e 63 75 72 72 65  ultiple concurre
15000 6e 74 20 72 65 61 64 65 72 73 20 74 6f 20 76 69  nt readers to vi
15010 65 77 20 64 69 66 66 65 72 65 6e 74 20 0a 76 65  ew different .ve
15020 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 64 61  rsions of the da
15030 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74 20 73  tabase content s
15040 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 2e 3c 2f  imultaneously.</
15050 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 61 64 65  p>..<p>The reade
15060 72 20 61 6c 67 6f 72 69 74 68 6d 20 69 6e 20 74  r algorithm in t
15070 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
15080 67 72 61 70 68 73 20 77 6f 72 6b 73 20 63 6f 72  graphs works cor
15090 72 65 63 74 6c 79 2c 20 62 75 74 20 0a 62 65 63  rectly, but .bec
150a0 61 75 73 65 20 66 72 61 6d 65 73 20 66 6f 72 20  ause frames for 
150b0 70 61 67 65 20 50 20 63 61 6e 20 61 70 70 65 61  page P can appea
150c0 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68 69  r anywhere withi
150d0 6e 20 74 68 65 20 57 41 4c 2c 20 74 68 65 0a 72  n the WAL, the.r
150e0 65 61 64 65 72 20 68 61 73 20 74 6f 20 73 63 61  eader has to sca
150f0 6e 20 74 68 65 20 65 6e 74 69 72 65 20 57 41 4c  n the entire WAL
15100 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 70 61 67   looking for pag
15110 65 20 50 20 66 72 61 6d 65 73 2e 20 20 49 66 20  e P frames.  If 
15120 74 68 65 0a 57 41 4c 20 69 73 20 6c 61 72 67 65  the.WAL is large
15130 20 28 6d 75 6c 74 69 70 6c 65 20 6d 65 67 61 62   (multiple megab
15140 79 74 65 73 20 69 73 20 74 79 70 69 63 61 6c 29  ytes is typical)
15150 20 74 68 61 74 20 73 63 61 6e 20 63 61 6e 20 62   that scan can b
15160 65 20 73 6c 6f 77 2c 0a 61 6e 64 20 72 65 61 64  e slow,.and read
15170 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 73 75 66   performance suf
15180 66 65 72 73 2e 20 20 5e 54 6f 20 6f 76 65 72 63  fers.  ^To overc
15190 6f 6d 65 20 74 68 69 73 20 70 72 6f 62 6c 65 6d  ome this problem
151a0 2c 20 61 20 73 65 70 61 72 61 74 65 0a 64 61 74  , a separate.dat
151b0 61 20 73 74 72 75 63 74 75 72 65 20 63 61 6c 6c  a structure call
151c0 65 64 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  ed the wal-index
151d0 20 69 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 74   is maintained t
151e0 6f 20 65 78 70 65 64 69 74 65 20 74 68 65 0a 73  o expedite the.s
151f0 65 61 72 63 68 20 66 6f 72 20 66 72 61 6d 65 73  earch for frames
15200 20 6f 66 20 61 20 70 61 72 74 69 63 75 6c 61 72   of a particular
15210 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c   page.</p>..<tcl
15220 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c  >hd_fragment wal
15230 69 6e 64 65 78 66 6f 72 6d 61 74 20 7b 77 61 6c  indexformat {wal
15240 2d 69 6e 64 65 78 7d 20 7b 57 41 4c 2d 69 6e 64  -index} {WAL-ind
15250 65 78 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e  ex format}</tcl>
15260 0a 3c 68 33 3e 34 2e 35 20 57 41 4c 2d 49 6e 64  .<h3>4.5 WAL-Ind
15270 65 78 20 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a  ex Format</h3>..
15280 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c  <p>Conceptually,
15290 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
152a0 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c  s shared memory,
152b0 20 74 68 6f 75 67 68 20 74 68 65 20 63 75 72 72   though the curr
152c0 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65 6d 65 6e  ent.VFS implemen
152d0 74 61 74 69 6f 6e 73 20 75 73 65 20 61 20 6d 6d  tations use a mm
152e0 61 70 70 65 64 20 66 69 6c 65 20 66 6f 72 20 74  apped file for t
152f0 68 65 20 77 61 6c 2d 69 6e 64 65 78 2e 20 20 5e  he wal-index.  ^
15300 54 68 65 20 6d 6d 61 70 70 65 64 0a 66 69 6c 65  The mmapped.file
15310 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d 65 20   is in the same 
15320 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68 65  directory as the
15330 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68 61   database and ha
15340 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 0a  s the same name.
15350 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  as the database 
15360 77 69 74 68 20 61 20 22 3c 74 74 3e 2d 73 68 6d  with a "<tt>-shm
15370 3c 2f 74 74 3e 22 20 73 75 66 66 69 78 20 61 70  </tt>" suffix ap
15380 70 65 6e 64 65 64 2e 20 20 42 65 63 61 75 73 65  pended.  Because
15390 0a 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69  .the wal-index i
153a0 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 2c  s shared memory,
153b0 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
153c0 20 73 75 70 70 6f 72 74 20 0a 5b 50 52 41 47 4d   support .[PRAGM
153d0 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 7c  A journal_mode |
153e0 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
153f0 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74 77 6f 72 6b  L] .on a network
15400 20 66 69 6c 65 73 79 73 74 65 6d 20 77 68 65 6e   filesystem when
15410 20 63 6c 69 65 6e 74 73 20 61 72 65 20 6f 6e 20   clients are on 
15420 64 69 66 66 65 72 65 6e 74 20 6d 61 63 68 69 6e  different machin
15430 65 73 2e 0a 41 6c 6c 20 75 73 65 72 73 20 6f 66  es..All users of
15440 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 75   the database mu
15450 73 74 20 62 65 20 61 62 6c 65 20 74 6f 20 73 68  st be able to sh
15460 61 72 65 20 74 68 65 20 73 61 6d 65 20 6d 65 6d  are the same mem
15470 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ory.</p>..<p>The
15480 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65 20   purpose of the 
15490 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 6f 20  wal-index is to 
154a0 61 6e 73 77 65 72 20 74 68 69 73 20 71 75 65 73  answer this ques
154b0 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a 3c 2f 70  tion quickly:</p
154c0 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
154d0 69 3e 0a 47 69 76 65 6e 20 61 20 70 61 67 65 20  i>.Given a page 
154e0 6e 75 6d 62 65 72 20 50 20 61 6e 64 20 61 20 6d  number P and a m
154f0 61 78 69 6d 75 6d 20 57 41 4c 20 66 72 61 6d 65  aximum WAL frame
15500 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74 75 72 6e   index M,.return
15510 20 74 68 65 20 6c 61 72 67 65 73 74 20 57 41 4c   the largest WAL
15520 20 66 72 61 6d 65 20 69 6e 64 65 78 20 66 6f 72   frame index for
15530 20 70 61 67 65 20 50 20 74 68 61 74 20 64 6f 65   page P that doe
15540 73 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2c 20  s not exceed M, 
15550 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c 20  .or return NULL 
15560 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
15570 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67 65 20  frames for page 
15580 50 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 65 78  P that do not ex
15590 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62 6c  ceed M..</i></bl
155a0 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
155b0 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61 6c 75 65  e <i>M</i> value
155c0 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73   in the previous
155d0 20 70 61 72 61 67 72 61 70 68 20 69 73 20 74 68   paragraph is th
155e0 65 20 22 6d 78 46 72 61 6d 65 22 20 76 61 6c 75  e "mxFrame" valu
155f0 65 0a 64 65 66 69 6e 65 64 20 69 6e 20 5b 57 41  e.defined in [WA
15600 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68 6d  L read algorithm
15610 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e 34 5d 20   | section 4.4] 
15620 74 68 61 74 20 69 73 20 72 65 61 64 20 61 74 20  that is read at 
15630 74 68 65 20 73 74 61 72 74 20 0a 6f 66 20 61 20  the start .of a 
15640 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20  transaction and 
15650 77 68 69 63 68 20 64 65 66 69 6e 65 73 20 74 68  which defines th
15660 65 20 6d 61 78 69 6d 75 6d 20 66 72 61 6d 65 20  e maximum frame 
15670 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 74 68 61  from the WAL tha
15680 74 20 0a 74 68 65 20 72 65 61 64 65 72 20 77 69  t .the reader wi
15690 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ll use.</p>..<p>
156a0 54 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73  The wal-index is
156b0 20 74 72 61 6e 73 69 65 6e 74 2e 20 20 41 66 74   transient.  Aft
156c0 65 72 20 61 20 63 72 61 73 68 2c 20 74 68 65 20  er a crash, the 
156d0 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a 72 65 63  wal-index is.rec
156e0 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d 20  onstructed from 
156f0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 57 41 4c  the original WAL
15700 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 56 46 53   file.  ^The VFS
15710 20 69 73 20 72 65 71 75 69 72 65 64 0a 74 6f 20   is required.to 
15720 65 69 74 68 65 72 20 74 72 75 6e 63 61 74 65 20  either truncate 
15730 6f 72 20 7a 65 72 6f 20 74 68 65 20 68 65 61 64  or zero the head
15740 65 72 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e  er of the wal-in
15750 64 65 78 20 77 68 65 6e 20 74 68 65 20 6c 61 73  dex when the las
15760 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  t.connection to 
15770 69 74 20 63 6c 6f 73 65 73 2e 20 20 42 65 63 61  it closes.  Beca
15780 75 73 65 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  use the wal-inde
15790 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74 2c 20  x is transient, 
157a0 69 74 20 63 61 6e 0a 75 73 65 20 61 6e 20 61 72  it can.use an ar
157b0 63 68 69 74 65 63 74 75 72 65 2d 73 70 65 63 69  chitecture-speci
157c0 66 69 63 20 66 6f 72 6d 61 74 3b 20 69 74 20 64  fic format; it d
157d0 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20  oes not have to 
157e0 62 65 20 63 72 6f 73 73 2d 70 6c 61 74 66 6f 72  be cross-platfor
157f0 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c 69 6b 65  m..Hence, unlike
15800 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
15810 64 20 57 41 4c 20 66 69 6c 65 20 66 6f 72 6d 61  d WAL file forma
15820 74 73 20 77 68 69 63 68 20 73 74 6f 72 65 20 61  ts which store a
15830 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20 62 69 67  ll values.as big
15840 20 65 6e 64 69 61 6e 2c 20 74 68 65 20 77 61 6c   endian, the wal
15850 2d 69 6e 64 65 78 20 73 74 6f 72 65 73 20 6d 75  -index stores mu
15860 6c 74 69 2d 62 79 74 65 20 76 61 6c 75 65 73 20  lti-byte values 
15870 69 6e 20 74 68 65 20 6e 61 74 69 76 65 0a 62 79  in the native.by
15880 74 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20  te order of the 
15890 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 2e 3c 2f  host computer.</
158a0 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63 75  p>..<p>This docu
158b0 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65 72 6e 65  ment is concerne
158c0 64 20 77 69 74 68 20 74 68 65 20 70 65 72 73 69  d with the persi
158d0 73 74 65 6e 74 20 73 74 61 74 65 20 6f 66 20 74  stent state of t
158e0 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  he database.file
158f0 2c 20 61 6e 64 20 73 69 6e 63 65 20 74 68 65 20  , and since the 
15900 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 61 20 74  wal-index is a t
15910 72 61 6e 73 69 65 6e 74 20 73 74 72 75 63 74 75  ransient structu
15920 72 65 2c 20 6e 6f 20 66 75 72 74 68 65 72 20 0a  re, no further .
15930 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
15940 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
15950 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 77 69  the wal-index wi
15960 6c 6c 20 62 65 20 70 72 6f 76 69 64 65 64 20 68  ll be provided h
15970 65 72 65 2e 0a 43 6f 6d 70 6c 65 74 65 20 64 65  ere..Complete de
15980 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 66 6f 72  tails on the for
15990 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c 2d 69  mat of the wal-i
159a0 6e 64 65 78 20 61 72 65 20 63 6f 6e 74 61 69 6e  ndex are contain
159b0 65 64 20 77 69 74 68 69 6e 0a 63 6f 6d 6d 65 6e  ed within.commen
159c0 74 73 20 69 6e 20 53 51 4c 69 74 65 20 73 6f 75  ts in SQLite sou
159d0 72 63 65 20 63 6f 64 65 2e 3c 2f 70 3e 0a        rce code.</p>.