Documentation Source Text

Hex Artifact Content
Login

Artifact fdba8bbdb0dc1e8925978ce46c28fd28a15377b7:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 7d 20 7b   {file format} {
0050: 73 65 63 6f 6e 64 20 65 64 69 74 69 6f 6e 20 66  second edition f
0060: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0070: 65 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 20  ent}</tcl>..<h1 
0080: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 0a 54 68  align=center>.Th
0090: 65 20 53 51 4c 69 74 65 20 44 61 74 61 62 61 73  e SQLite Databas
00a0: 65 20 46 69 6c 65 20 46 6f 72 6d 61 74 0a 3c 2f  e File Format.</
00b0: 68 31 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  h1>..<p>This doc
00c0: 75 6d 65 6e 74 20 64 65 73 63 72 69 62 65 73 20  ument describes 
00d0: 61 6e 64 20 64 65 66 69 6e 65 73 20 74 68 65 20  and defines the 
00e0: 6f 6e 2d 64 69 73 6b 20 64 61 74 61 62 61 73 65  on-disk database
00f0: 20 66 69 6c 65 0a 66 6f 72 6d 61 74 20 75 73 65   file.format use
0100: 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  d by SQLite.</p>
0110: 0a 0a 3c 68 32 3e 31 2e 30 20 54 68 65 20 44 61  ..<h2>1.0 The Da
0120: 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68 32 3e  tabase File</h2>
0130: 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 6c 65 74  ..<p>The complet
0140: 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51  e state of an SQ
0150: 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69 73  Lite database is
0160: 20 75 73 75 61 6c 6c 79 0a 63 6f 6e 74 61 69 6e   usually.contain
0170: 65 64 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  ed a single file
0180: 20 6f 6e 20 64 69 73 6b 20 63 61 6c 6c 65 64 20   on disk called 
0190: 74 68 65 20 22 6d 61 69 6e 20 64 61 74 61 62 61  the "main databa
01a0: 73 65 20 66 69 6c 65 22 2e 3c 2f 70 3e 0a 0a 3c  se file".</p>..<
01b0: 70 3e 44 75 72 69 6e 67 20 61 20 74 72 61 6e 73  p>During a trans
01c0: 61 63 74 69 6f 6e 2c 20 53 51 4c 69 74 65 20 73  action, SQLite s
01d0: 74 6f 72 65 73 20 61 64 64 69 74 69 6f 6e 61 6c  tores additional
01e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 0a 69 6e   information .in
01f0: 20 61 20 73 65 63 6f 6e 64 20 66 69 6c 65 20 63   a second file c
0200: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 6c 6c 62  alled the "rollb
0210: 61 63 6b 20 6a 6f 75 72 6e 61 6c 22 2c 20 6f 72  ack journal", or
0220: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e   if SQLite is in
0230: 0a 5b 57 41 4c 20 6d 6f 64 65 5d 2c 20 61 20 77  .[WAL mode], a w
0240: 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20 66  rite-ahead log f
0250: 69 6c 65 2e 0a 49 66 20 74 68 65 20 61 70 70 6c  ile..If the appl
0260: 69 63 61 74 69 6f 6e 20 6f 72 0a 68 6f 73 74 20  ication or.host 
0270: 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73  computer crashes
0280: 20 62 65 66 6f 72 65 20 74 68 65 20 74 72 61 6e   before the tran
0290: 73 61 63 74 69 6f 6e 20 63 6f 6d 70 6c 65 74 65  saction complete
02a0: 73 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 6c 6c  s, then the roll
02b0: 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20  back.journal or 
02c0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
02d0: 63 6f 6e 74 61 69 6e 73 20 63 72 69 74 69 63 61  contains critica
02e0: 6c 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  l state informat
02f0: 69 6f 6e 20 6e 65 65 64 65 64 20 0a 74 6f 20 72  ion needed .to r
0300: 65 73 74 6f 72 65 20 74 68 65 20 6d 61 69 6e 20  estore the main 
0310: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
0320: 20 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 73 74   a consistent st
0330: 61 74 65 2e 20 20 57 68 65 6e 20 61 20 72 6f 6c  ate.  When a rol
0340: 6c 62 61 63 6b 20 0a 6a 6f 75 72 6e 61 6c 20 6f  lback .journal o
0350: 72 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f  r write-ahead lo
0360: 67 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  g contains infor
0370: 6d 61 74 69 6f 6e 20 6e 65 63 65 73 73 61 72 79  mation necessary
0380: 20 66 6f 72 20 72 65 63 6f 76 65 72 69 6e 67 20   for recovering 
0390: 0a 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68  .the state of th
03a0: 65 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 79  e database, they
03b0: 20 61 72 65 20 63 61 6c 6c 65 64 20 61 20 22 68   are called a "h
03c0: 6f 74 20 6a 6f 75 72 6e 61 6c 22 20 6f 72 20 22  ot journal" or "
03d0: 68 6f 74 20 57 41 4c 20 66 69 6c 65 22 2e 0a 48  hot WAL file"..H
03e0: 6f 74 20 6a 6f 75 72 6e 61 6c 73 20 61 6e 64 20  ot journals and 
03f0: 57 41 4c 20 66 69 6c 65 73 20 61 72 65 20 6f 6e  WAL files are on
0400: 6c 79 20 61 20 66 61 63 74 6f 72 20 64 75 72 69  ly a factor duri
0410: 6e 67 20 65 72 72 6f 72 20 72 65 63 6f 76 65 72  ng error recover
0420: 79 0a 73 63 65 6e 61 72 69 6f 73 20 61 6e 64 20  y.scenarios and 
0430: 73 6f 20 61 72 65 20 75 6e 63 6f 6d 6d 6f 6e 2c  so are uncommon,
0440: 20 62 75 74 20 74 68 65 79 20 61 72 65 20 70 61   but they are pa
0450: 72 74 20 6f 66 20 74 68 65 20 73 74 61 74 65 20  rt of the state 
0460: 6f 66 20 61 6e 20 53 51 4c 69 74 65 0a 64 61 74  of an SQLite.dat
0470: 61 62 61 73 65 20 61 6e 64 20 73 6f 20 63 61 6e  abase and so can
0480: 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 2e 20  not be ignored. 
0490: 20 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 64   This document d
04a0: 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
04b0: 74 0a 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20  t.of a rollback 
04c0: 6a 6f 75 72 6e 61 6c 20 61 6e 64 20 74 68 65 20  journal and the 
04d0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
04e0: 66 69 6c 65 2c 20 62 75 74 20 74 68 65 20 66 6f  file, but the fo
04f0: 63 75 73 20 69 73 0a 6f 6e 20 74 68 65 20 6d 61  cus is.on the ma
0500: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
0510: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 31 20 50  .</p>..<h3>1.1 P
0520: 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ages</h3>..<p>Th
0530: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
0540: 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  file consists of
0550: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67   one or more pag
0560: 65 73 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f  es.  ^The size o
0570: 66 20 61 0a 70 61 67 65 20 69 73 20 61 20 70 6f  f a.page is a po
0580: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
0590: 65 6e 20 35 31 32 20 61 6e 64 20 36 35 35 33 36  en 512 and 65536
05a0: 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6c 6c   inclusive.  All
05b0: 20 70 61 67 65 73 20 77 69 74 68 69 6e 0a 74 68   pages within.th
05c0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
05d0: 61 72 65 20 74 68 65 20 73 61 6d 65 20 73 69 7a  are the same siz
05e0: 65 2e 20 20 5e 54 68 65 20 70 61 67 65 20 73 69  e.  ^The page si
05f0: 7a 65 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ze for a databas
0600: 65 20 66 69 6c 65 0a 69 73 20 64 65 74 65 72 6d  e file.is determ
0610: 69 6e 65 64 20 62 79 20 74 68 65 20 32 2d 62 79  ined by the 2-by
0620: 74 65 20 69 6e 74 65 67 65 72 20 6c 6f 63 61 74  te integer locat
0630: 65 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  ed at an offset 
0640: 6f 66 0a 31 36 20 62 79 74 65 73 20 66 72 6f 6d  of.16 bytes from
0650: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
0660: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
0670: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 67  ile.</p>..<p>Pag
0680: 65 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20  es are numbered 
0690: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31  beginning with 1
06a0: 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 70  .  The maximum p
06b0: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 0a 32 31  age number is.21
06c0: 34 37 34 38 33 36 34 36 20 28 32 3c 73 75 70 3e  47483646 (2<sup>
06d0: 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61 6c 6c  <small>31</small
06e0: 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20 20 54  ></sup> - 2).  T
06f0: 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a 65 0a  he minimum size.
0700: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0710: 69 73 20 61 20 73 69 6e 67 6c 65 20 35 31 32 2d  is a single 512-
0720: 62 79 74 65 20 70 61 67 65 2e 0a 54 68 65 20 6d  byte page..The m
0730: 61 78 69 6d 75 6d 20 73 69 7a 65 20 64 61 74 61  aximum size data
0740: 62 61 73 65 20 77 6f 75 6c 64 20 62 65 20 32 31  base would be 21
0750: 34 37 34 38 33 36 34 36 20 70 61 67 65 73 20 61  47483646 pages a
0760: 74 20 36 35 35 33 36 20 62 79 74 65 73 20 70 65  t 65536 bytes pe
0770: 72 0a 70 61 67 65 20 6f 72 20 31 34 30 2c 37 33  r.page or 140,73
0780: 37 2c 34 38 38 2c 32 32 34 2c 32 35 36 20 62 79  7,488,224,256 by
0790: 74 65 73 20 28 61 62 6f 75 74 20 31 34 30 20 74  tes (about 140 t
07a0: 65 72 61 62 79 74 65 73 29 2e 20 20 55 73 75 61  erabytes).  Usua
07b0: 6c 6c 79 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a  lly SQLite will.
07c0: 68 69 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  hit the maximum 
07d0: 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69 74 20  file size limit 
07e0: 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  of the underlyin
07f0: 67 20 66 69 6c 65 73 79 73 74 65 6d 20 6f 72 20  g filesystem or 
0800: 64 69 73 6b 0a 68 61 72 64 77 61 72 65 20 73 69  disk.hardware si
0810: 7a 65 20 6c 69 6d 69 74 20 6c 6f 6e 67 20 62 65  ze limit long be
0820: 66 6f 72 65 20 69 74 20 68 69 74 73 20 69 74 73  fore it hits its
0830: 20 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 73 69   own internal si
0840: 7a 65 20 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c  ze limit.</p>..<
0850: 70 3e 49 6e 20 63 6f 6d 6d 6f 6e 20 75 73 65 2c  p>In common use,
0860: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
0870: 73 20 74 65 6e 64 20 74 6f 20 72 61 6e 67 65 20  s tend to range 
0880: 69 6e 20 73 69 7a 65 20 66 72 6f 6d 20 61 20 66  in size from a f
0890: 65 77 20 6b 69 6c 6f 62 79 74 65 73 0a 74 6f 20  ew kilobytes.to 
08a0: 61 20 66 65 77 20 67 69 67 61 62 79 74 65 73 2e  a few gigabytes.
08b0: 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20 61 6e 79 20  </p>..<p>At any 
08c0: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 65  point in time, e
08d0: 76 65 72 79 20 70 61 67 65 20 69 6e 20 74 68 65  very page in the
08e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68   main database h
08f0: 61 73 20 61 20 73 69 6e 67 6c 65 0a 75 73 65 20  as a single.use 
0900: 77 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66 20  which is one of 
0910: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 3c  the following:.<
0920: 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 6c 6f 63 6b  ul>.<li>The lock
0930: 2d 62 79 74 65 20 70 61 67 65 0a 3c 6c 69 3e 41  -byte page.<li>A
0940: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 0a 3c   freelist page.<
0950: 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ul>.<li>A freeli
0960: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 0a 3c 6c  st trunk page.<l
0970: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 6c 65 61  i>A freelist lea
0980: 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69  f page.</ul>.<li
0990: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 0a 3c  >A b-tree page.<
09a0: 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61 62 6c 65 20  ul>.<li>A table 
09b0: 62 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20  b-tree interior 
09c0: 70 61 67 65 0a 3c 6c 69 3e 41 20 74 61 62 6c 65  page.<li>A table
09d0: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
09e0: 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20 62  e.<li>An index b
09f0: 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20 70  -tree interior p
0a00: 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78  age.<li>An index
0a10: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
0a20: 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 70 61  e.</ul>.<li>A pa
0a30: 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70  yload overflow p
0a40: 61 67 65 0a 3c 6c 69 3e 41 20 70 6f 69 6e 74 65  age.<li>A pointe
0a50: 72 20 6d 61 70 20 70 61 67 65 0a 3c 2f 75 6c 3e  r map page.</ul>
0a60: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6c 6c 20 72  .</p>..<p>^All r
0a70: 65 61 64 73 20 66 72 6f 6d 20 61 6e 64 20 77 72  eads from and wr
0a80: 69 74 65 73 20 74 6f 20 74 68 65 20 6d 61 69 6e  ites to the main
0a90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
0aa0: 65 67 69 6e 20 61 74 20 61 20 70 61 67 65 0a 62  egin at a page.b
0ab0: 6f 75 6e 64 61 72 79 20 61 6e 64 20 61 6c 6c 20  oundary and all 
0ac0: 77 72 69 74 65 73 20 61 72 65 20 61 6e 20 69 6e  writes are an in
0ad0: 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20  teger number of 
0ae0: 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2e 20 20  pages in size.  
0af0: 5e 52 65 61 64 73 0a 61 72 65 20 61 6c 73 6f 20  ^Reads.are also 
0b00: 75 73 75 61 6c 6c 79 20 61 6e 20 69 6e 74 65 67  usually an integ
0b10: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  er number of pag
0b20: 65 73 20 69 6e 20 73 69 7a 65 2c 20 77 69 74 68  es in size, with
0b30: 20 74 68 65 20 6f 6e 65 20 65 78 63 65 70 74 69   the one excepti
0b40: 6f 6e 0a 74 68 61 74 20 77 68 65 6e 20 74 68 65  on.that when the
0b50: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
0b60: 73 74 20 6f 70 65 6e 65 64 2c 20 74 68 65 20 66  st opened, the f
0b70: 69 72 73 74 20 31 30 30 20 62 79 74 65 73 20 6f  irst 100 bytes o
0b80: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  f the.database f
0b90: 69 6c 65 20 28 74 68 65 20 64 61 74 61 62 61 73  ile (the databas
0ba0: 65 20 66 69 6c 65 20 68 65 61 64 65 72 29 20 61  e file header) a
0bb0: 72 65 20 72 65 61 64 20 61 73 20 61 20 73 75 62  re read as a sub
0bc0: 2d 70 61 67 65 20 73 69 7a 65 20 75 6e 69 74 2e  -page size unit.
0bd0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42 65 66 6f 72 65  </p>..<p>^Before
0be0: 20 61 6e 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   any information
0bf0: 2d 62 65 61 72 69 6e 67 20 70 61 67 65 20 6f 66  -bearing page of
0c00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
0c10: 20 6d 6f 64 69 66 69 65 64 2c 20 0a 74 68 65 20   modified, .the 
0c20: 6f 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66  original unmodif
0c30: 69 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  ied content of t
0c40: 68 61 74 20 70 61 67 65 20 69 73 20 77 72 69 74  hat page is writ
0c50: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 0a 72 6f  ten into the .ro
0c60: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
0c70: 20 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   If a transactio
0c80: 6e 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64  n is interrupted
0c90: 20 61 6e 64 20 6e 65 65 64 73 20 74 6f 20 62 65   and needs to be
0ca0: 20 0a 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 20 74   .rolled back, t
0cb0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
0cc0: 6e 61 6c 20 63 61 6e 20 74 68 65 6e 20 62 65 20  nal can then be 
0cd0: 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20  used to restore 
0ce0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
0cf0: 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 73 74 61  its original sta
0d00: 74 65 2e 20 20 5e 46 72 65 65 6c 69 73 74 20 6c  te.  ^Freelist l
0d10: 65 61 66 20 70 61 67 65 73 20 62 65 61 72 20 6e  eaf pages bear n
0d20: 6f 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  o.information th
0d30: 61 74 20 77 6f 75 6c 64 20 6e 65 65 64 20 74 6f  at would need to
0d40: 20 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 20   be restored on 
0d50: 61 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 73  a rollback and s
0d60: 6f 20 74 68 65 79 0a 61 72 65 20 6e 6f 74 20 77  o they.are not w
0d70: 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 6a 6f  ritten to the jo
0d80: 75 72 6e 61 6c 20 70 72 69 6f 72 20 74 6f 20 6d  urnal prior to m
0d90: 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 69 6e 20  odification, in 
0da0: 6f 72 64 65 72 20 74 6f 0a 72 65 64 75 63 65 20  order to.reduce 
0db0: 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c  disk I/O.</p>..<
0dc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
0dd0: 64 61 74 61 62 61 73 65 5f 68 65 61 64 65 72 20  database_header 
0de0: 7b 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72  {database header
0df0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 32 20  }</tcl>.<h3>1.2 
0e00: 54 68 65 20 44 61 74 61 62 61 73 65 20 48 65 61  The Database Hea
0e10: 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  der</h3>..<p>The
0e20: 20 66 69 72 73 74 20 31 30 30 20 62 79 74 65 73   first 100 bytes
0e30: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0e40: 20 66 69 6c 65 20 63 6f 6d 70 72 69 73 65 20 74   file comprise t
0e50: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
0e60: 20 0a 68 65 61 64 65 72 2e 20 20 54 68 65 20 64   .header.  The d
0e70: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
0e80: 64 65 72 20 69 73 20 64 69 76 69 64 65 64 20 69  der is divided i
0e90: 6e 74 6f 20 66 69 65 6c 64 73 20 61 73 20 73 68  nto fields as sh
0ea0: 6f 77 6e 20 62 79 0a 74 68 65 20 74 61 62 6c 65  own by.the table
0eb0: 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20 6d 75 6c   below.  All mul
0ec0: 74 69 62 79 74 65 20 66 69 65 6c 64 73 20 69 6e  tibyte fields in
0ed0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0ee0: 6c 65 20 68 65 61 64 65 72 20 61 72 65 0a 73 74  le header are.st
0ef0: 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 6d 6f  ored with the mo
0f00: 73 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  st significant b
0f10: 79 74 65 20 66 69 72 73 74 20 28 62 69 67 2d 65  yte first (big-e
0f20: 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63 65  ndian).</p>..<ce
0f30: 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61 62 61 73  nter>.<i>Databas
0f40: 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
0f50: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
0f60: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
0f70: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
0f80: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
0f90: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
0fa0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
0fb0: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
0fc0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
0fd0: 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 61 6c  =center>16<td al
0fe0: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 68 65  ign=left>.The he
0ff0: 61 64 65 72 20 73 74 72 69 6e 67 3a 20 22 53 51  ader string: "SQ
1000: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 5c 30 30  Lite format 3\00
1010: 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0".<tr><td valig
1020: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1030: 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
1040: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1050: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
1060: 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65 20 70  >.The database p
1070: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
1080: 73 2e 20 20 4d 75 73 74 20 62 65 20 61 20 70 6f  s.  Must be a po
1090: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
10a0: 65 6e 20 35 31 32 0a 61 6e 64 20 33 32 37 36 38  en 512.and 32768
10b0: 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f 72 20 74   inclusive, or t
10c0: 68 65 20 76 61 6c 75 65 20 31 20 72 65 70 72 65  he value 1 repre
10d0: 73 65 6e 74 69 6e 67 20 61 20 70 61 67 65 20 73  senting a page s
10e0: 69 7a 65 20 6f 66 20 36 35 35 33 36 2e 0a 3c 74  ize of 65536..<t
10f0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1100: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 38   align=center>18
1110: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1120: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
1130: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c   align=left>.Fil
1140: 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76  e format write v
1150: 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20 6c  ersion.  1 for l
1160: 65 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57 41  egacy; 2 for [WA
1170: 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  L]..<tr><td vali
1180: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1190: 74 65 72 3e 31 39 3c 74 64 20 76 61 6c 69 67 6e  ter>19<td valign
11a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11b0: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
11c0: 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 72  t>.File format r
11d0: 65 61 64 20 76 65 72 73 69 6f 6e 2e 20 20 31 20  ead version.  1 
11e0: 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f  for legacy; 2 fo
11f0: 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64  r [WAL]..<tr><td
1200: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1210: 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
1220: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1230: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
1240: 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73 20 6f 66  n=left>.Bytes of
1250: 20 75 6e 75 73 65 64 20 22 72 65 73 65 72 76 65   unused "reserve
1260: 64 22 20 73 70 61 63 65 20 61 74 20 74 68 65 20  d" space at the 
1270: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
1280: 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e 0a 3c 74  .  Usually 0..<t
1290: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 31   align=center>21
12b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
12d0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 61 78   align=left>.Max
12e0: 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61  imum embedded pa
12f0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20  yload fraction. 
1300: 20 4d 75 73 74 20 62 65 20 36 34 2e 0a 3c 74 72   Must be 64..<tr
1310: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1320: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 32 3c  align=center>22<
1330: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1340: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
1350: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 69 6e 69  align=left>.Mini
1360: 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79  mum embedded pay
1370: 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20 20  load fraction.  
1380: 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72 3e  Must be 32..<tr>
1390: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 33 3c 74  lign=center>23<t
13b0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13c0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
13d0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65 61 66 20  lign=left>.Leaf 
13e0: 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e  payload fraction
13f0: 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c  .  Must be 32..<
1400: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1410: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1420: 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
1430: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1440: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69  d align=left>.Fi
1450: 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  le change counte
1460: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
1470: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1480: 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>28<td valign=
1490: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14a0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
14b0: 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65 20 64 61  >.Size of the da
14c0: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70  tabase file in p
14d0: 61 67 65 73 2e 20 20 54 68 65 20 22 69 6e 2d 68  ages.  The "in-h
14e0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
14f0: 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  ize"..<tr><td va
1500: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1510: 65 6e 74 65 72 3e 33 32 3c 74 64 20 76 61 6c 69  enter>32<td vali
1520: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1530: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1540: 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d 62 65 72  eft>.Page number
1550: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
1560: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
1570: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1580: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1590: 65 72 3e 33 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>36<td valign=
15a0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
15b0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
15c0: 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  >.Total number o
15d0: 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 73  f freelist pages
15e0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
15f0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1600: 72 3e 34 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>40<td valign=t
1610: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1620: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1630: 0a 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .The schema cook
1640: 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ie..<tr><td vali
1650: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1660: 74 65 72 3e 34 34 3c 74 64 20 76 61 6c 69 67 6e  ter>44<td valign
1670: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1680: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1690: 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f  t>.The schema fo
16a0: 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20 20 53 75  rmat number.  Su
16b0: 70 70 6f 72 74 65 64 20 73 63 68 65 6d 61 20 66  pported schema f
16c0: 6f 72 6d 61 74 73 20 61 72 65 20 31 2c 20 32 2c  ormats are 1, 2,
16d0: 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72 3e 3c   3, and 4..<tr><
16e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
16f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c 74 64  ign=center>48<td
1700: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1710: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1720: 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61 75 6c  ign=left>.Defaul
1730: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
1740: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1750: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1760: 65 72 3e 35 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>52<td valign=
1770: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1780: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1790: 3e 0a 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65  >.The page numbe
17a0: 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  r of the largest
17b0: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
17c0: 65 20 77 68 65 6e 20 69 6e 20 61 75 74 6f 2d 76  e when in auto-v
17d0: 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65 6d 65  acuum or.increme
17e0: 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64 65  ntal-vacuum mode
17f0: 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68 65 72  s, or zero other
1800: 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  wise..<tr><td va
1810: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1820: 65 6e 74 65 72 3e 35 36 3c 74 64 20 76 61 6c 69  enter>56<td vali
1830: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1840: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1850: 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73  eft>.The databas
1860: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
1870: 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20 6d    A value of 1 m
1880: 65 61 6e 73 20 55 54 46 2d 38 2e 20 20 41 20 76  eans UTF-8.  A v
1890: 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e 73 20  alue of 2.means 
18a0: 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61 6c  UTF-16le.  A val
18b0: 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54  ue of 3 means UT
18c0: 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74 64 20  F-16be..<tr><td 
18d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
18e0: 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64 20 76 61  =center>60<td va
18f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1900: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1910: 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75 73 65 72  =left>.The "user
1920: 20 76 65 72 73 69 6f 6e 22 20 61 73 20 72 65 61   version" as rea
1930: 64 20 61 6e 64 20 73 65 74 20 62 79 20 74 68 65  d and set by the
1940: 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70   [user_version p
1950: 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74 64 20  ragma]..<tr><td 
1960: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1970: 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64 20 76 61  =center>64<td va
1980: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1990: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
19a0: 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e 6f 6e  =left>.True (non
19b0: 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63 72 65  -zero) for incre
19c0: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f  mental-vacuum mo
19d0: 64 65 2e 20 20 46 61 6c 73 65 20 28 7a 65 72 6f  de.  False (zero
19e0: 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72  ) otherwise..<tr
19f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1a00: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 38 3c  align=center>68<
1a10: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1a20: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1a30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
1a40: 22 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 22  "Application ID"
1a50: 20 73 65 74 20 62 79 20 5b 50 52 41 47 4d 41 20   set by [PRAGMA 
1a60: 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 5d 2e  application_id].
1a70: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1a80: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1a90: 3e 37 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >72<td valign=to
1aa0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1ab0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
1ac0: 0a 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78  .Reserved for ex
1ad0: 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20 62  pansion.  Must b
1ae0: 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  e zero..<tr><td 
1af0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1b00: 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64 20 76 61  =center>92<td va
1b10: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1b20: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1b30: 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76 65 72 73  =left>.The [vers
1b40: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
1b50: 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  mber]..<tr><td v
1b60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1b70: 63 65 6e 74 65 72 3e 39 36 3c 74 64 20 76 61 6c  center>96<td val
1b80: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1b90: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1ba0: 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45 5f 56 45  left>.[SQLITE_VE
1bb0: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f  RSION_NUMBER].</
1bc0: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  table></center>.
1bd0: 0a 3c 68 34 3e 31 2e 32 2e 31 20 4d 61 67 69 63  .<h4>1.2.1 Magic
1be0: 20 48 65 61 64 65 72 20 53 74 72 69 6e 67 3c 2f   Header String</
1bf0: 68 34 3e 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76  h4>..<p>^Every v
1c00: 61 6c 69 64 20 53 51 4c 69 74 65 20 64 61 74 61  alid SQLite data
1c10: 62 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 73  base file begins
1c20: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
1c30: 69 6e 67 20 31 36 20 62 79 74 65 73 20 0a 28 69  ing 16 bytes .(i
1c40: 6e 20 68 65 78 29 3a 20 35 33 20 35 31 20 34 63  n hex): 53 51 4c
1c50: 20 36 39 20 37 34 20 36 35 20 32 30 20 36 36 20   69 74 65 20 66 
1c60: 36 66 20 37 32 20 36 64 20 36 31 20 37 34 20 32  6f 72 6d 61 74 2
1c70: 30 20 33 33 20 30 30 2e 20 20 54 68 69 73 20 62  0 33 00.  This b
1c80: 79 74 65 20 73 65 71 75 65 6e 63 65 0a 63 6f 72  yte sequence.cor
1c90: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
1ca0: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 22 53 51  UTF-8 string "SQ
1cb0: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22 20 69  Lite format 3" i
1cc0: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 75 6c  ncluding the nul
1cd0: 0a 74 65 72 6d 69 6e 61 74 6f 72 20 63 68 61 72  .terminator char
1ce0: 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64  acter at the end
1cf0: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 32  .</p>..<h4>1.2.2
1d00: 20 50 61 67 65 20 53 69 7a 65 3c 2f 68 34 3e 0a   Page Size</h4>.
1d10: 0a 3c 70 3e 54 68 65 20 74 77 6f 2d 62 79 74 65  .<p>The two-byte
1d20: 20 76 61 6c 75 65 20 62 65 67 69 6e 6e 69 6e 67   value beginning
1d30: 20 61 74 20 6f 66 66 73 65 74 20 31 36 20 64 65   at offset 16 de
1d40: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 70 61 67  termines the pag
1d50: 65 20 73 69 7a 65 20 6f 66 20 0a 74 68 65 20 64  e size of .the d
1d60: 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20 53 51  atabase.  For SQ
1d70: 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 33 2e  Lite versions 3.
1d80: 37 2e 30 2e 31 20 61 6e 64 20 65 61 72 6c 69 65  7.0.1 and earlie
1d90: 72 2c 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  r, this value is
1da0: 20 0a 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   .interpreted as
1db0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e   a big-endian in
1dc0: 74 65 67 65 72 20 61 6e 64 20 6d 75 73 74 20 62  teger and must b
1dd0: 65 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  e a power of two
1de0: 20 62 65 74 77 65 65 6e 0a 35 31 32 20 61 6e 64   between.512 and
1df0: 20 33 32 37 36 38 2c 20 69 6e 63 6c 75 73 69 76   32768, inclusiv
1e00: 65 2e 20 20 42 65 67 69 6e 6e 69 6e 67 20 77 69  e.  Beginning wi
1e10: 74 68 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  th SQLite versio
1e20: 6e 20 33 2e 37 2e 31 2c 20 61 20 70 61 67 65 0a  n 3.7.1, a page.
1e30: 73 69 7a 65 20 6f 66 20 36 35 35 33 36 20 62 79  size of 65536 by
1e40: 74 65 73 20 69 73 20 73 75 70 70 6f 72 74 65 64  tes is supported
1e50: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 36 35 35  .  The value 655
1e60: 33 36 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20  36 will not fit 
1e70: 69 6e 20 61 0a 74 77 6f 2d 62 79 74 65 20 69 6e  in a.two-byte in
1e80: 74 65 67 65 72 2c 20 73 6f 20 74 6f 20 73 70 65  teger, so to spe
1e90: 63 69 66 79 20 61 20 36 35 35 33 36 2d 62 79 74  cify a 65536-byt
1ea0: 65 20 70 61 67 65 20 73 69 7a 65 2c 20 74 68 65  e page size, the
1eb0: 20 76 61 6c 75 65 0a 61 74 20 6f 66 66 73 65 74   value.at offset
1ec0: 20 31 36 20 69 73 20 30 78 30 30 20 30 78 30 31   16 is 0x00 0x01
1ed0: 2e 0a 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  ..This value can
1ee0: 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
1ef0: 61 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a  as a big-endian.
1f00: 31 20 61 6e 64 20 74 68 6f 75 67 68 74 20 6f 66  1 and thought of
1f10: 20 69 73 20 61 73 20 61 20 6d 61 67 69 63 20 6e   is as a magic n
1f20: 75 6d 62 65 72 20 74 6f 20 72 65 70 72 65 73 65  umber to represe
1f30: 6e 74 20 74 68 65 20 36 35 35 33 36 20 70 61 67  nt the 65536 pag
1f40: 65 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e 65 20 63  e size..Or one c
1f50: 61 6e 20 76 69 65 77 20 74 68 65 20 74 77 6f 2d  an view the two-
1f60: 62 79 74 65 20 66 69 65 6c 64 20 61 73 20 61 20  byte field as a 
1f70: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 6e 75  little endian nu
1f80: 6d 62 65 72 20 61 6e 64 20 73 61 79 0a 74 68 61  mber and say.tha
1f90: 74 20 69 74 20 72 65 70 72 65 73 65 6e 74 73 20  t it represents 
1fa0: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 64 69  the page size di
1fb0: 76 69 64 65 64 20 62 79 20 32 35 36 2e 20 20 54  vided by 256.  T
1fc0: 68 65 73 65 20 74 77 6f 20 0a 69 6e 74 65 72 70  hese two .interp
1fd0: 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  retations of the
1fe0: 20 70 61 67 65 2d 73 69 7a 65 20 66 69 65 6c 64   page-size field
1ff0: 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 2e   are equivalent.
2000: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 33 20  </p>..<h4>1.2.3 
2010: 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73  File format vers
2020: 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 34 3e  ion numbers</h4>
2030: 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 66 6f  ..<p>The file fo
2040: 72 6d 61 74 20 77 72 69 74 65 20 76 65 72 73 69  rmat write versi
2050: 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66 6f 72 6d  on and file form
2060: 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 20  at read version 
2070: 61 74 20 6f 66 66 73 65 74 73 0a 31 38 20 61 6e  at offsets.18 an
2080: 64 20 31 39 20 61 72 65 20 69 6e 74 65 6e 64 65  d 19 are intende
2090: 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 65  d to allow for e
20a0: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20 74  nhancements of t
20b0: 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 69  he file format.i
20c0: 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  n future version
20d0: 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 49 6e  s of SQLite.  In
20e0: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
20f0: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f 74  s of SQLite, bot
2100: 68 20 6f 66 0a 74 68 65 73 65 20 76 61 6c 75 65  h of.these value
2110: 73 20 61 72 65 20 31 20 66 6f 72 20 72 6f 6c 6c  s are 1 for roll
2120: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e 67  back journalling
2130: 20 6d 6f 64 65 73 20 61 6e 64 20 32 20 66 6f 72   modes and 2 for
2140: 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c 69   [WAL].journalli
2150: 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20 61 20 76  ng mode.  If a v
2160: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
2170: 20 63 6f 64 65 64 20 74 6f 20 74 68 65 20 63 75   coded to the cu
2180: 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d 61  rrent.file forma
2190: 74 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  t specification 
21a0: 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 64 61 74  encounters a dat
21b0: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 72 65  abase file where
21c0: 20 74 68 65 20 72 65 61 64 0a 76 65 72 73 69 6f   the read.versio
21d0: 6e 20 69 73 20 31 20 6f 72 20 32 20 62 75 74 20  n is 1 or 2 but 
21e0: 74 68 65 20 77 72 69 74 65 20 76 65 72 73 69 6f  the write versio
21f0: 6e 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  n is greater tha
2200: 6e 20 32 2c 20 74 68 65 6e 20 74 68 65 20 64 61  n 2, then the da
2210: 74 61 62 61 73 65 0a 66 69 6c 65 20 6d 75 73 74  tabase.file must
2220: 20 62 65 20 74 72 65 61 74 65 64 20 61 73 20 72   be treated as r
2230: 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61 20  ead-only.  If a 
2240: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69  database file wi
2250: 74 68 20 61 20 72 65 61 64 20 76 65 72 73 69 6f  th a read versio
2260: 6e 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 32  n.greater than 2
2270: 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c   is encountered,
2280: 20 74 68 65 6e 20 74 68 61 74 20 64 61 74 61 62   then that datab
2290: 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  ase cannot be re
22a0: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c 2f  ad or written.</
22b0: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 34 20 52 65  p>..<h4>1.2.4 Re
22c0: 73 65 72 76 65 64 20 62 79 74 65 73 20 70 65 72  served bytes per
22d0: 20 70 61 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 53   page</h4>..<p>S
22e0: 51 4c 69 74 65 20 68 61 73 20 74 68 65 20 61 62  QLite has the ab
22f0: 69 6c 69 74 79 20 74 6f 20 73 65 74 20 61 73 69  ility to set asi
2300: 64 65 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65  de a small numbe
2310: 72 20 6f 66 20 65 78 74 72 61 20 62 79 74 65 73  r of extra bytes
2320: 20 61 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 65   at.the end of e
2330: 76 65 72 79 20 70 61 67 65 20 66 6f 72 20 75 73  very page for us
2340: 65 20 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e  e by extensions.
2350: 20 20 54 68 65 73 65 20 65 78 74 72 61 20 62 79    These extra by
2360: 74 65 73 20 61 72 65 0a 75 73 65 64 2c 20 66 6f  tes are.used, fo
2370: 72 20 65 78 61 6d 70 6c 65 2c 20 62 79 20 74 68  r example, by th
2380: 65 20 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74  e SQLite Encrypt
2390: 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f  ion Extension to
23a0: 20 73 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61   store a nonce.a
23b0: 6e 64 2f 6f 72 20 63 72 79 70 74 6f 67 72 61 70  nd/or cryptograp
23c0: 68 69 63 20 63 68 65 63 6b 73 75 6d 20 61 73 73  hic checksum ass
23d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63  ociated with eac
23e0: 68 20 70 61 67 65 2e 20 20 5e 54 68 65 20 0a 22  h page.  ^The ."
23f0: 72 65 73 65 72 76 65 64 20 73 70 61 63 65 22 20  reserved space" 
2400: 73 69 7a 65 20 69 6e 20 74 68 65 20 31 2d 62 79  size in the 1-by
2410: 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  te integer at of
2420: 66 73 65 74 20 32 30 20 69 73 20 74 68 65 20 6e  fset 20 is the n
2430: 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 6f  umber.of bytes o
2440: 66 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65  f space at the e
2450: 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  nd of each page 
2460: 74 6f 20 72 65 73 65 72 76 65 20 66 6f 72 20 65  to reserve for e
2470: 78 74 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20  xtensions..This 
2480: 76 61 6c 75 65 20 69 73 20 75 73 75 61 6c 6c 79  value is usually
2490: 20 30 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63   0.  The value c
24a0: 61 6e 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a  an be odd.</p>..
24b0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
24c0: 20 75 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73   usable_size {us
24d0: 61 62 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e  able size}</tcl>
24e0: 0a 3c 70 3e 54 68 65 20 22 75 73 61 62 6c 65 20  .<p>The "usable 
24f0: 73 69 7a 65 22 20 6f 66 20 61 20 64 61 74 61 62  size" of a datab
2500: 61 73 65 20 70 61 67 65 20 69 73 20 74 68 65 20  ase page is the 
2510: 70 61 67 65 20 73 69 7a 65 20 73 70 65 63 69 66  page size specif
2520: 79 20 62 79 20 74 68 65 0a 32 2d 62 79 74 65 20  y by the.2-byte 
2530: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
2540: 74 20 31 36 20 69 6e 20 74 68 65 20 68 65 61 64  t 16 in the head
2550: 65 72 20 6c 65 73 73 20 74 68 65 20 22 72 65 73  er less the "res
2560: 65 72 76 65 64 22 20 73 70 61 63 65 20 73 69 7a  erved" space siz
2570: 65 0a 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68  e.recorded in th
2580: 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72  e 1-byte integer
2590: 20 61 74 20 6f 66 66 73 65 74 20 32 30 20 69 6e   at offset 20 in
25a0: 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68   the header.  Th
25b0: 65 20 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66  e usable.size of
25c0: 20 61 20 70 61 67 65 20 6d 69 67 68 74 20 62 65   a page might be
25d0: 20 61 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20   an odd number. 
25e0: 20 5e 28 48 6f 77 65 76 65 72 2c 20 74 68 65 20   ^(However, the 
25f0: 75 73 61 62 6c 65 20 73 69 7a 65 20 69 73 20 6e  usable size is n
2600: 6f 74 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ot.allowed to be
2610: 20 6c 65 73 73 20 74 68 61 6e 20 34 38 30 2e 20   less than 480. 
2620: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2630: 20 69 66 20 74 68 65 20 70 61 67 65 20 73 69 7a   if the page siz
2640: 65 20 69 73 20 35 31 32 2c 0a 74 68 65 6e 20 74  e is 512,.then t
2650: 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61 63  he reserved spac
2660: 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65 78  e size cannot ex
2670: 63 65 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a  ceed 32.)^</p>..
2680: 3c 68 34 3e 31 2e 32 2e 35 20 50 61 79 6c 6f 61  <h4>1.2.5 Payloa
2690: 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f 68 34 3e  d fractions</h4>
26a0: 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
26b0: 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20 65 6d  m and minimum em
26c0: 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20 66  bedded payload f
26d0: 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74 68 65  ractions and the
26e0: 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20 66 72   leaf.payload fr
26f0: 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20 6d 75  action values mu
2700: 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20 61 6e  st be 64, 32, an
2710: 64 20 33 32 2e 20 20 54 68 65 73 65 20 76 61 6c  d 32.  These val
2720: 75 65 73 20 77 65 72 65 0a 6f 72 69 67 69 6e 61  ues were.origina
2730: 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  lly intended to 
2740: 62 65 20 74 75 6e 61 62 6c 65 20 70 61 72 61 6d  be tunable param
2750: 65 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c 64  eters that could
2760: 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64 69   be used to.modi
2770: 66 79 20 74 68 65 20 73 74 6f 72 61 67 65 20 66  fy the storage f
2780: 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d 74  ormat of the b-t
2790: 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20 20  ree algorithm.  
27a0: 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66 75  However, that.fu
27b0: 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 6e  nctionality is n
27c0: 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e 64  ot supported and
27d0: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63 75   there are no cu
27e0: 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20 61  rrent plans to a
27f0: 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74 68  dd.support in th
2800: 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63 65  e future.  Hence
2810: 2c 20 74 68 65 73 65 20 74 68 72 65 65 20 62 79  , these three by
2820: 74 65 73 20 61 72 65 20 66 69 78 65 64 20 61 74  tes are fixed at
2830: 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65 63   the.values spec
2840: 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  ified.</p>..<h4>
2850: 31 2e 32 2e 36 20 46 69 6c 65 20 63 68 61 6e 67  1.2.6 File chang
2860: 65 20 63 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a 0a  e counter</h4>..
2870: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2880: 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e 67 65   chngctr {change
2890: 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e 0a   counter}</tcl>.
28a0: 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63 68 61  <p>^The file cha
28b0: 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 61  nge counter is a
28c0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
28d0: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 0a 6f 66  an integer at.of
28e0: 66 73 65 74 20 32 34 20 74 68 61 74 20 69 73 20  fset 24 that is 
28f0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
2900: 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
2910: 65 20 66 69 6c 65 20 69 73 20 75 6e 6c 6f 63 6b  e file is unlock
2920: 65 64 0a 61 66 74 65 72 20 68 61 76 69 6e 67 20  ed.after having 
2930: 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2e 0a 57  been modified..W
2940: 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  hen two or more 
2950: 70 72 6f 63 65 73 73 65 73 20 61 72 65 20 72 65  processes are re
2960: 61 64 69 6e 67 20 74 68 65 20 73 61 6d 65 20 64  ading the same d
2970: 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 65 61  atabase file, ea
2980: 63 68 20 0a 70 72 6f 63 65 73 73 20 63 61 6e 20  ch .process can 
2990: 64 65 74 65 63 74 20 64 61 74 61 62 61 73 65 20  detect database 
29a0: 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f 74 68  changes from oth
29b0: 65 72 20 70 72 6f 63 65 73 73 65 73 20 62 79 20  er processes by 
29c0: 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68 65 20  monitoring .the 
29d0: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 2e 0a  change counter..
29e0: 41 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 20 6e  A process will n
29f0: 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74 6f 20  ormally want to 
2a00: 66 6c 75 73 68 20 69 74 73 20 64 61 74 61 62 61  flush its databa
2a10: 73 65 20 70 61 67 65 20 63 61 63 68 65 20 77 68  se page cache wh
2a20: 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  en.another proce
2a30: 73 73 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20  ss modified the 
2a40: 64 61 74 61 62 61 73 65 2c 20 73 69 6e 63 65 20  database, since 
2a50: 74 68 65 20 63 61 63 68 65 20 68 61 73 20 62 65  the cache has be
2a60: 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68 65 20  come stale..The 
2a70: 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e  file change coun
2a80: 74 65 72 20 66 61 63 69 6c 69 74 61 74 65 73 20  ter facilitates 
2a90: 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  this.</p>..<p>In
2aa0: 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61 6e 67   WAL mode, chang
2ab0: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
2ac0: 73 65 20 61 72 65 20 64 65 74 65 63 74 65 64 20  se are detected 
2ad0: 75 73 69 6e 67 20 74 68 65 20 77 61 6c 2d 69 6e  using the wal-in
2ae0: 64 65 78 0a 61 6e 64 20 73 6f 20 74 68 65 20 63  dex.and so the c
2af0: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2b00: 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20 48 65   not needed.  He
2b10: 6e 63 65 2c 20 74 68 65 20 63 68 61 6e 67 65 20  nce, the change 
2b20: 63 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a 6e 6f  counter might.no
2b30: 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  t be incremented
2b40: 20 6f 6e 20 65 61 63 68 20 74 72 61 6e 73 61 63   on each transac
2b50: 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f 64 65  tion in WAL mode
2b60: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 37  .</p>..<h4>1.2.7
2b70: 20 49 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   In-header datab
2b80: 61 73 65 20 73 69 7a 65 3c 2f 68 34 3e 0a 0a 3c  ase size</h4>..<
2b90: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2ba0: 66 69 6c 65 73 69 7a 65 20 7b 69 6e 2d 68 65 61  filesize {in-hea
2bb0: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2bc0: 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  e}</tcl>.<p>^The
2bd0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
2be0: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
2bf0: 66 73 65 74 20 32 38 20 69 6e 74 6f 20 74 68 65  fset 28 into the
2c00: 20 68 65 61 64 65 72 20 0a 73 74 6f 72 65 73 20   header .stores 
2c10: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
2c20: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e  database file in
2c30: 20 70 61 67 65 73 2e 20 20 5e 49 66 20 74 68 69   pages.  ^If thi
2c40: 73 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61  s in-header.data
2c50: 73 69 7a 65 20 73 69 7a 65 20 69 73 20 6e 6f 74  size size is not
2c60: 20 76 61 6c 69 64 20 28 73 65 65 20 74 68 65 20   valid (see the 
2c70: 6e 65 78 74 20 70 61 72 61 67 72 61 70 68 29 2c  next paragraph),
2c80: 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
2c90: 73 65 20 0a 73 69 7a 65 20 69 73 20 63 6f 6d 70  se .size is comp
2ca0: 75 74 65 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 0a  uted by looking.
2cb0: 61 74 20 74 68 65 20 61 63 74 75 61 6c 20 73 69  at the actual si
2cc0: 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
2cd0: 73 65 20 66 69 6c 65 2e 20 4f 6c 64 65 72 20 76  se file. Older v
2ce0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2cf0: 65 0a 69 67 6e 6f 72 65 64 20 74 68 65 20 69 6e  e.ignored the in
2d00: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
2d10: 20 73 69 7a 65 20 61 6e 64 20 75 73 65 64 20 74   size and used t
2d20: 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20 73  he actual file s
2d30: 69 7a 65 0a 65 78 63 6c 75 73 69 76 65 6c 79 2e  ize.exclusively.
2d40: 20 20 5e 4e 65 77 65 72 20 76 65 72 73 69 6f 6e    ^Newer version
2d50: 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 20  s of SQLite use 
2d60: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  the in-header da
2d70: 74 61 62 61 73 65 0a 73 69 7a 65 20 69 66 20 69  tabase.size if i
2d80: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 62  t is available b
2d90: 75 74 20 66 61 6c 6c 20 62 61 63 6b 20 74 6f 20  ut fall back to 
2da0: 74 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20  the actual file 
2db0: 73 69 7a 65 20 69 66 0a 74 68 65 20 69 6e 2d 68  size if.the in-h
2dc0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
2dd0: 69 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c 69 64  ize is not valid
2de0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 69  .</p>..<p>^The i
2df0: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2e00: 65 20 73 69 7a 65 20 69 73 20 6f 6e 6c 79 20 63  e size is only c
2e10: 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
2e20: 76 61 6c 69 64 20 69 66 0a 69 74 20 69 73 20 6e  valid if.it is n
2e30: 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 69 66 20 74  on-zero and if t
2e40: 68 65 20 34 2d 62 79 74 65 20 5b 63 68 61 6e 67  he 4-byte [chang
2e50: 65 20 63 6f 75 6e 74 65 72 5d 20 61 74 20 6f 66  e counter] at of
2e60: 66 73 65 74 20 32 34 0a 65 78 61 63 74 6c 79 20  fset 24.exactly 
2e70: 6d 61 74 63 68 65 73 20 74 68 65 20 34 2d 62 79  matches the 4-by
2e80: 74 65 20 5b 76 65 72 73 69 6f 6e 2d 76 61 6c 69  te [version-vali
2e90: 64 2d 66 6f 72 20 6e 75 6d 62 65 72 5d 20 61 74  d-for number] at
2ea0: 20 6f 66 66 73 65 74 20 39 32 2e 0a 5e 28 54 68   offset 92..^(Th
2eb0: 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61  e in-header data
2ec0: 62 61 73 65 20 73 69 7a 65 20 69 73 20 61 6c 77  base size is alw
2ed0: 61 79 73 20 76 61 6c 69 64 20 0a 77 68 65 6e 20  ays valid .when 
2ee0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2ef0: 6f 6e 6c 79 20 6d 6f 64 69 66 69 65 64 20 75 73  only modified us
2f00: 69 6e 67 20 72 65 63 65 6e 74 20 76 65 72 73 69  ing recent versi
2f10: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 28 76  ons of SQLite.(v
2f20: 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30 20 61 6e  ersions 3.7.0 an
2f30: 64 20 6c 61 74 65 72 29 2e 29 5e 0a 49 66 20 61  d later).)^.If a
2f40: 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e 20   legacy version 
2f50: 6f 66 20 53 51 4c 69 74 65 20 77 72 69 74 65 73  of SQLite writes
2f60: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2f70: 2c 20 69 74 20 77 69 6c 6c 20 6e 6f 74 0a 6b 6e  , it will not.kn
2f80: 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  ow to update the
2f90: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2fa0: 61 73 65 20 73 69 7a 65 20 61 6e 64 20 73 6f 20  ase size and so 
2fb0: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 0a 64 61  the in-header.da
2fc0: 74 61 62 61 73 65 20 73 69 7a 65 20 63 6f 75 6c  tabase size coul
2fd0: 64 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20  d be incorrect. 
2fe0: 20 42 75 74 20 6c 65 67 61 63 79 20 76 65 72 73   But legacy vers
2ff0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 77  ions of SQLite.w
3000: 69 6c 6c 20 61 6c 73 6f 20 6c 65 61 76 65 20 74  ill also leave t
3010: 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  he version-valid
3020: 2d 66 6f 72 20 6e 75 6d 62 65 72 20 61 74 20 6f  -for number at o
3030: 66 66 73 65 74 20 39 32 20 75 6e 63 68 61 6e 67  ffset 92 unchang
3040: 65 64 0a 73 6f 20 69 74 20 77 69 6c 6c 20 6e 6f  ed.so it will no
3050: 74 20 6d 61 74 63 68 20 74 68 65 20 63 68 61 6e  t match the chan
3060: 67 65 2d 63 6f 75 6e 74 65 72 2e 20 20 48 65 6e  ge-counter.  Hen
3070: 63 65 2c 20 69 6e 76 61 6c 69 64 20 69 6e 2d 68  ce, invalid in-h
3080: 65 61 64 65 72 0a 64 61 74 61 62 61 73 65 20 73  eader.database s
3090: 69 7a 65 73 20 63 61 6e 20 62 65 20 64 65 74 65  izes can be dete
30a0: 63 74 65 64 20 28 61 6e 64 20 69 67 6e 6f 72 65  cted (and ignore
30b0: 64 29 20 62 79 20 6f 62 73 65 72 76 69 6e 67 20  d) by observing 
30c0: 77 68 65 6e 0a 74 68 65 20 63 68 61 6e 67 65 2d  when.the change-
30d0: 63 6f 75 6e 74 65 72 20 64 6f 65 73 20 6e 6f 74  counter does not
30e0: 20 6d 61 74 63 68 20 74 68 65 20 76 65 72 73 69   match the versi
30f0: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
3100: 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  ber.</p>..<h4>1.
3110: 32 2e 38 20 46 72 65 65 20 70 61 67 65 20 6c 69  2.8 Free page li
3120: 73 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 55 6e 75 73  st</h4>..<p>Unus
3130: 65 64 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ed pages in the 
3140: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 72  database file ar
3150: 65 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 66 72  e stored on a fr
3160: 65 65 6c 69 73 74 2e 20 20 5e 54 68 65 0a 34 2d  eelist.  ^The.4-
3170: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3180: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3190: 74 20 33 32 20 73 74 6f 72 65 73 20 74 68 65 20  t 32 stores the 
31a0: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 0a 74  page number of.t
31b0: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66  he first page of
31c0: 20 74 68 65 20 66 72 65 65 6c 69 73 74 2c 20 6f   the freelist, o
31d0: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66 72  r zero if the fr
31e0: 65 65 6c 69 73 74 20 69 73 20 65 6d 70 74 79 2e  eelist is empty.
31f0: 0a 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  .^The 4-byte big
3200: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3210: 61 74 20 6f 66 66 73 65 74 20 33 36 20 73 74 6f  at offset 36 sto
3220: 72 65 73 20 73 74 6f 72 65 73 20 74 68 65 20 74  res stores the t
3230: 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20 6f 66 20  otal .number of 
3240: 70 61 67 65 73 20 6f 6e 20 74 68 65 20 66 72 65  pages on the fre
3250: 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  elist.</p>..<h4>
3260: 31 2e 32 2e 39 20 53 63 68 65 6d 61 20 63 6f 6f  1.2.9 Schema coo
3270: 6b 69 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68  kie</h4>..<p>^Th
3280: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
3290: 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  is a 4-byte big-
32a0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
32b0: 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68 61 74  t offset 40.that
32c0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
32d0: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
32e0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
32f0: 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70 61 72  nges.  A .prepar
3300: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
3310: 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74  compiled against
3320: 20 61 20 73 70 65 63 69 66 69 63 20 76 65 72 73   a specific vers
3330: 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74 61 62  ion of the.datab
3340: 61 73 65 20 73 63 68 65 6d 61 2e 20 20 57 68 65  ase schema.  Whe
3350: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
3360: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
3370: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 6d 75 73  he statement.mus
3380: 74 20 62 65 20 72 65 70 72 65 70 61 72 65 64 2e  t be reprepared.
3390: 20 20 5e 57 68 65 6e 20 61 20 70 72 65 70 61 72    ^When a prepar
33a0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e  ed statement run
33b0: 73 2c 20 69 74 20 66 69 72 73 74 20 63 68 65 63  s, it first chec
33c0: 6b 73 0a 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks.the schema co
33d0: 6f 6b 69 65 20 74 6f 20 65 6e 73 75 72 65 20 74  okie to ensure t
33e0: 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  he value is the 
33f0: 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65  same as when the
3400: 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20 70   statement.was p
3410: 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20 74  repared and if t
3420: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
3430: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74 68   has changed, th
3440: 65 20 73 74 61 74 65 6d 65 6e 74 20 65 69 74 68  e statement eith
3450: 65 72 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  er.automatically
3460: 20 72 65 70 72 65 70 61 72 65 73 20 61 6e 64 20   reprepares and 
3470: 72 65 72 75 6e 73 20 6f 72 20 69 74 20 61 62 6f  reruns or it abo
3480: 72 74 73 20 77 69 74 68 20 61 6e 20 5b 53 51 4c  rts with an [SQL
3490: 49 54 45 5f 53 43 48 45 4d 41 5d 20 0a 65 72 72  ITE_SCHEMA] .err
34a0: 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  or.</p>..<tcl>hd
34b0: 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68 65 6d  _fragment {schem
34c0: 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61  aformat} {schema
34d0: 20 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61   format} {schema
34e0: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 7d 3c   format number}<
34f0: 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 30  /tcl>.<h4>1.2.10
3500: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e   Schema format n
3510: 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  umber</h4>..<p>T
3520: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  he schema format
3530: 20 6e 75 6d 62 65 72 20 69 73 20 61 20 34 2d 62   number is a 4-b
3540: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
3550: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3560: 20 34 34 2e 0a 54 68 65 20 73 63 68 65 6d 61 20   44..The schema 
3570: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20 69 73  format number is
3580: 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20   similar to the 
3590: 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65 61 64  file format read
35a0: 20 61 6e 64 20 77 72 69 74 65 0a 76 65 72 73 69   and write.versi
35b0: 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74 20 6f 66  on numbers at of
35c0: 66 73 65 74 73 20 31 38 20 61 6e 64 20 31 39 20  fsets 18 and 19 
35d0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
35e0: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
35f0: 6d 62 65 72 0a 72 65 66 65 72 73 20 74 6f 20 74  mber.refers to t
3600: 68 65 20 68 69 67 68 2d 6c 65 76 65 6c 20 53 51  he high-level SQ
3610: 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20 72 61 74  L formatting rat
3620: 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 6f 77  her than the low
3630: 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 0a 66 6f  -level b-tree.fo
3640: 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f 75 72 20  rmatting.  Four 
3650: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
3660: 6d 62 65 72 73 20 61 72 65 20 63 75 72 72 65 6e  mbers are curren
3670: 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c 2f 70 3e  tly defined:</p>
3680: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c 75 65  ..<ol>.<li value
3690: 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69 73 20 75  =1>Format 1 is u
36a0: 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 61 6c 6c  nderstood by all
36b0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
36c0: 69 74 65 20 62 61 63 6b 20 74 6f 0a 76 65 72 73  ite back to.vers
36d0: 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f 6c 69 3e 0a  ion 3.0.0.</li>.
36e0: 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46 6f 72 6d  <li value=2>Form
36f0: 61 74 20 32 20 61 64 64 73 20 74 68 65 20 61 62  at 2 adds the ab
3700: 69 6c 69 74 79 20 6f 66 20 72 6f 77 73 20 77 69  ility of rows wi
3710: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 61  thin the same ta
3720: 62 6c 65 0a 74 6f 20 68 61 76 65 20 61 20 76 61  ble.to have a va
3730: 72 79 69 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20  rying number of 
3740: 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72 64 65  columns, in orde
3750: 72 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65  r to support the
3760: 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20  .[ALTER TABLE | 
3770: 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20  ALTER TABLE ... 
3780: 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66 75 6e 63  ADD COLUMN] func
3790: 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53 75 70 70  tionality.  Supp
37a0: 6f 72 74 20 66 6f 72 0a 72 65 61 64 69 6e 67 20  ort for.reading 
37b0: 61 6e 64 20 77 72 69 74 69 6e 67 20 66 6f 72 6d  and writing form
37c0: 61 74 20 32 20 77 61 73 20 61 64 64 65 64 20 69  at 2 was added i
37d0: 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  n SQLite version
37e0: 20 33 2e 31 2e 33 20 0a 6f 6e 20 32 30 30 35 2d   3.1.3 .on 2005-
37f0: 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20  02-19.</li>.<li 
3800: 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74 20 33  value=3>Format 3
3810: 20 61 64 64 73 20 74 68 65 20 61 62 69 6c 69 74   adds the abilit
3820: 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c 75 6d  y of extra colum
3830: 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41 4c 54  ns added by.[ALT
3840: 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54 45 52  ER TABLE | ALTER
3850: 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43   TABLE ... ADD C
3860: 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65 20 6e  OLUMN] to have n
3870: 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 0a  on-NULL default.
3880: 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20 63 61  values.  This ca
3890: 70 61 62 69 6c 69 74 79 20 77 61 73 20 61 64 64  pability was add
38a0: 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72  ed in SQLite ver
38b0: 73 69 6f 6e 20 33 2e 31 2e 34 20 0a 6f 6e 20 32  sion 3.1.4 .on 2
38c0: 30 30 35 2d 30 33 2d 31 31 2e 3c 2f 6c 69 3e 0a  005-03-11.</li>.
38d0: 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e 46 6f 72  <li value=4>^For
38e0: 6d 61 74 20 34 20 63 61 75 73 65 73 20 53 51 4c  mat 4 causes SQL
38f0: 69 74 65 20 74 6f 20 72 65 73 70 65 63 74 20 74  ite to respect t
3900: 68 65 0a 5b 64 65 73 63 65 6e 64 69 6e 67 20 69  he.[descending i
3910: 6e 64 65 78 65 73 20 7c 20 44 45 53 43 20 6b 65  ndexes | DESC ke
3920: 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e 64 65 78 20  yword] on.index 
3930: 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20 20 28  declarations.  (
3940: 5e 54 68 65 20 44 45 53 43 20 6b 65 79 77 6f 72  ^The DESC keywor
3950: 64 20 69 73 20 69 67 6e 6f 72 65 64 20 69 6e 20  d is ignored in 
3960: 69 6e 64 65 78 65 73 20 66 6f 72 20 0a 66 6f 72  indexes for .for
3970: 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e 64 20 33  mats 1, 2, and 3
3980: 2e 29 0a 5e 46 6f 72 6d 61 74 20 34 20 61 6c 73  .).^Format 4 als
3990: 6f 20 61 64 64 73 20 74 77 6f 20 6e 65 77 20 62  o adds two new b
39a0: 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64 20 74 79  oolean record ty
39b0: 70 65 20 76 61 6c 75 65 73 20 28 5b 73 65 72 69  pe values ([seri
39c0: 61 6c 20 74 79 70 65 73 5d 0a 38 20 61 6e 64 20  al types].8 and 
39d0: 39 29 2e 20 20 53 75 70 70 6f 72 74 20 66 6f 72  9).  Support for
39e0: 20 66 6f 72 6d 61 74 20 34 20 77 61 73 20 61 64   format 4 was ad
39f0: 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 33 2e  ded in SQLite 3.
3a00: 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30 31 2d 31  3.0 on.2006-01-1
3a10: 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c  0.</li>.</ol>..<
3a20: 70 3e 5e 4e 65 77 20 64 61 74 61 62 61 73 65 20  p>^New database 
3a30: 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 62 79  files created by
3a40: 20 53 51 4c 69 74 65 20 75 73 65 20 66 6f 72 6d   SQLite use form
3a50: 61 74 20 34 20 62 79 20 64 65 66 61 75 6c 74 2e  at 4 by default.
3a60: 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f 66 69  .^The [legacy_fi
3a70: 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d 61  le_format pragma
3a80: 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ] can be used to
3a90: 20 63 61 75 73 65 20 53 51 4c 69 74 65 0a 74 6f   cause SQLite.to
3aa0: 20 63 72 65 61 74 65 20 6e 65 77 20 64 61 74 61   create new data
3ab0: 62 61 73 65 20 66 69 6c 65 73 20 75 73 69 6e 67  base files using
3ac0: 20 66 6f 72 6d 61 74 20 31 2e 0a 54 68 65 20 66   format 1..The f
3ad0: 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e 75  ormat version nu
3ae0: 6d 62 65 72 20 63 61 6e 20 62 65 20 6d 61 64 65  mber can be made
3af0: 20 74 6f 20 64 65 66 61 75 6c 74 20 74 6f 20 31   to default to 1
3b00: 20 69 6e 73 74 65 61 64 20 6f 66 20 34 20 62 79   instead of 4 by
3b10: 0a 73 65 74 74 69 6e 67 20 5b 53 51 4c 49 54 45  .setting [SQLITE
3b20: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
3b30: 52 4d 41 54 5d 3d 31 20 61 74 20 63 6f 6d 70 69  RMAT]=1 at compi
3b40: 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le-time..</p>..<
3b50: 68 34 3e 31 2e 32 2e 31 31 20 53 75 67 67 65 73  h4>1.2.11 Sugges
3b60: 74 65 64 20 63 61 63 68 65 20 73 69 7a 65 3c 2f  ted cache size</
3b70: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79  h4>..<p>The 4-by
3b80: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73 69  te big-endian si
3b90: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 74 20  gned integer at 
3ba0: 6f 66 66 73 65 74 20 34 38 20 69 73 20 74 68 65  offset 48 is the
3bb0: 20 73 75 67 67 65 73 74 65 64 0a 63 61 63 68 65   suggested.cache
3bc0: 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73 20 66   size in pages f
3bd0: 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
3be0: 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c 75 65  file.  The value
3bf0: 20 69 73 20 61 20 73 75 67 67 65 73 74 69 6f 6e   is a suggestion
3c00: 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69 74 65  .only and SQLite
3c10: 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f 62 6c   is under no obl
3c20: 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72  igation to honor
3c30: 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f 6c 75   it.  The absolu
3c40: 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68 65 20  te value.of the 
3c50: 69 6e 74 65 67 65 72 20 69 73 20 75 73 65 64 20  integer is used 
3c60: 61 73 20 74 68 65 20 73 75 67 67 65 73 74 65 64  as the suggested
3c70: 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75 67 67   size.  The sugg
3c80: 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65  ested cache size
3c90: 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73 69 6e  .can be set usin
3ca0: 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74 5f 63  g the [default_c
3cb0: 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d 61  ache_size pragma
3cc0: 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  ].</p>..<h4>1.2.
3cd0: 31 32 20 49 6e 63 72 65 6d 65 6e 74 61 6c 20 76  12 Incremental v
3ce0: 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73 3c 2f  acuum settings</
3cf0: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 74 77 6f 20  h4>..<p>The two 
3d00: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
3d10: 6e 20 69 6e 74 65 67 65 72 73 20 61 74 20 6f 66  n integers at of
3d20: 66 73 65 74 73 20 35 32 20 61 6e 64 20 36 34 20  fsets 52 and 64 
3d30: 61 72 65 20 75 73 65 64 0a 74 6f 20 6d 61 6e 61  are used.to mana
3d40: 67 65 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63  ge the [auto_vac
3d50: 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d  uum] and [increm
3d60: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f  ental_vacuum] mo
3d70: 64 65 73 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e  des.  ^If.the in
3d80: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3d90: 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e 20  52 is zero then 
3da0: 70 6f 69 6e 74 65 72 2d 6d 61 70 20 28 70 74 72  pointer-map (ptr
3db0: 6d 61 70 29 20 70 61 67 65 73 20 61 72 65 0a 6f  map) pages are.o
3dc0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
3dd0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
3de0: 64 20 6e 65 69 74 68 65 72 20 61 75 74 6f 5f 76  d neither auto_v
3df0: 61 63 75 75 6d 20 6e 6f 72 0a 69 6e 63 72 65 6d  acuum nor.increm
3e00: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61 72 65  ental_vacuum are
3e10: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 5e 49 66   supported.  ^If
3e20: 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   the integer at 
3e30: 6f 66 66 73 65 74 20 35 32 20 69 73 0a 6e 6f 6e  offset 52 is.non
3e40: 2d 7a 65 72 6f 20 74 68 65 6e 20 69 74 20 69 73  -zero then it is
3e50: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
3e60: 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   of the largest 
3e70: 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
3e80: 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20  .database file, 
3e90: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3ea0: 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 70  e will contain p
3eb0: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6e 64  trmap pages, and
3ec0: 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62   the.mode must b
3ed0: 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61  e either auto_va
3ee0: 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e  cuum or incremen
3ef0: 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 5e 49 6e  tal_vacuum.  ^In
3f00: 20 74 68 69 73 20 6c 61 74 74 65 72 0a 63 61 73   this latter.cas
3f10: 65 2c 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  e, the integer a
3f20: 74 20 6f 66 66 73 65 74 20 36 34 20 69 73 20 74  t offset 64 is t
3f30: 72 75 65 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e  rue for incremen
3f40: 74 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66  tal_vacuum and.f
3f50: 61 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f 76 61  alse for auto_va
3f60: 63 75 75 6d 2e 20 20 5e 49 66 20 74 68 65 20 69  cuum.  ^If the i
3f70: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3f80: 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e   52 is zero then
3f90: 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20  .the integer at 
3fa0: 6f 66 66 73 65 74 20 36 34 20 6d 75 73 74 20 61  offset 64 must a
3fb0: 6c 73 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e  lso be zero.</p>
3fc0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
3fd0: 6e 74 20 65 6e 63 20 7b 74 65 78 74 20 65 6e 63  nt enc {text enc
3fe0: 6f 64 69 6e 67 7d 3c 2f 74 63 6c 3e 0a 3c 68 34  oding}</tcl>.<h4
3ff0: 3e 31 2e 32 2e 31 33 20 54 65 78 74 20 65 6e 63  >1.2.13 Text enc
4000: 6f 64 69 6e 67 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e  oding</h4>..<p>^
4010: 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65  The 4-byte big-e
4020: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
4030: 20 6f 66 66 73 65 74 20 35 36 20 64 65 74 65 72   offset 56 deter
4040: 6d 69 6e 65 73 20 74 68 65 20 65 6e 63 6f 64 69  mines the encodi
4050: 6e 67 0a 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  ng.used for all 
4060: 74 65 78 74 20 73 74 72 69 6e 67 73 20 73 74 6f  text strings sto
4070: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
4080: 61 73 65 2e 20 20 0a 5e 41 20 76 61 6c 75 65 20  ase.  .^A value 
4090: 6f 66 20 31 20 6d 65 61 6e 73 20 55 54 46 2d 38  of 1 means UTF-8
40a0: 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20  ..^A value of 2 
40b0: 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e 0a  means UTF-16le..
40c0: 5e 41 20 76 61 6c 75 65 20 6f 66 20 33 20 6d 65  ^A value of 3 me
40d0: 61 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a 4e 6f  ans UTF-16be..No
40e0: 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61 72   other values ar
40f0: 65 20 61 6c 6c 6f 77 65 64 2e 0a 5e 28 54 68 65  e allowed..^(The
4100: 20 73 71 6c 69 74 65 33 2e 68 20 68 65 61 64 65   sqlite3.h heade
4110: 72 20 66 69 6c 65 20 64 65 66 69 6e 65 73 20 43  r file defines C
4120: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
4130: 63 72 6f 73 20 53 51 4c 49 54 45 5f 55 54 46 38  cros SQLITE_UTF8
4140: 20 61 73 20 31 2c 0a 53 51 4c 49 54 45 5f 55 54   as 1,.SQLITE_UT
4150: 46 31 36 4c 45 20 61 73 20 32 2c 20 61 6e 64 20  F16LE as 2, and 
4160: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 61  SQLITE_UTF16BE a
4170: 73 20 33 2c 20 74 6f 20 75 73 65 20 69 6e 20 70  s 3, to use in p
4180: 6c 61 63 65 20 6f 66 0a 74 68 65 20 6e 75 6d 65  lace of.the nume
4190: 72 69 63 20 63 6f 64 65 73 20 66 6f 72 20 74 68  ric codes for th
41a0: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
41b0: 29 5e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  )^</p>..<h4>1.2.
41c0: 31 34 20 55 73 65 72 20 76 65 72 73 69 6f 6e 20  14 User version 
41d0: 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e  number</h4>..<p>
41e0: 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  ^The 4-byte big-
41f0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
4200: 74 20 6f 66 66 73 65 74 20 36 30 20 69 73 20 74  t offset 60 is t
4210: 68 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20  he user version 
4220: 77 68 69 63 68 0a 69 73 20 73 65 74 20 61 6e 64  which.is set and
4230: 20 71 75 65 72 69 65 64 20 62 79 20 74 68 65 20   queried by the 
4240: 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70 72  [user_version pr
4250: 61 67 6d 61 5d 2e 20 20 54 68 65 20 75 73 65 72  agma].  The user
4260: 20 76 65 72 73 69 6f 6e 20 69 73 0a 6e 6f 74 20   version is.not 
4270: 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 2e 3c  used by SQLite.<
4280: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
4290: 67 6d 65 6e 74 20 61 70 70 69 64 20 7b 41 70 70  gment appid {App
42a0: 6c 69 63 61 74 69 6f 6e 20 49 44 7d 3c 2f 74 63  lication ID}</tc
42b0: 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 35 20 41 70  l>.<h4>1.2.15 Ap
42c0: 70 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f 68 34  plication ID</h4
42d0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
42e0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
42f0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36  eger at offset 6
4300: 38 20 69 73 20 61 6e 20 22 41 70 70 6c 69 63 61  8 is an "Applica
4310: 74 69 6f 6e 20 49 44 22 20 74 68 61 74 0a 63 61  tion ID" that.ca
4320: 6e 20 62 65 20 73 65 74 20 62 79 20 74 68 65 20  n be set by the 
4330: 5b 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74  [PRAGMA applicat
4340: 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e 64 20  ion_id] command 
4350: 69 6e 20 6f 72 64 65 72 20 74 6f 20 69 64 65 6e  in order to iden
4360: 74 69 66 79 20 74 68 65 0a 64 61 74 61 62 61 73  tify the.databas
4370: 65 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74  e as belonging t
4380: 6f 20 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20  o or associated 
4390: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
43a0: 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 54  r application..T
43b0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49  he application I
43c0: 44 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  D is intended fo
43d0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
43e0: 20 75 73 65 64 20 61 73 20 61 6e 0a 5b 61 70 70   used as an.[app
43f0: 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d 66 6f  lication file-fo
4400: 72 6d 61 74 5d 2e 20 20 54 68 65 20 61 70 70 6c  rmat].  The appl
4410: 69 63 61 74 69 6f 6e 20 49 44 20 63 61 6e 20 62  ication ID can b
4420: 65 20 75 73 65 64 20 62 79 20 75 74 69 6c 69 74  e used by utilit
4430: 69 65 73 20 0a 73 75 63 68 20 61 73 20 5b 68 74  ies .such as [ht
4440: 74 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69 6e 73  tp://www.darwins
4450: 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c 20 66  ys.com/file/ | f
4460: 69 6c 65 28 31 29 5d 20 74 6f 20 64 65 74 65 72  ile(1)] to deter
4470: 6d 69 6e 65 20 74 68 65 20 73 70 65 63 69 66 69  mine the specifi
4480: 63 0a 66 69 6c 65 20 74 79 70 65 20 72 61 74 68  c.file type rath
4490: 65 72 20 74 68 61 6e 20 6a 75 73 74 20 72 65 70  er than just rep
44a0: 6f 72 74 69 6e 67 20 22 53 51 4c 69 74 65 33 20  orting "SQLite3 
44b0: 44 61 74 61 62 61 73 65 22 2e 20 20 41 20 6c 69  Database".  A li
44c0: 73 74 20 6f 66 0a 61 73 73 69 67 6e 65 64 20 61  st of.assigned a
44d0: 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 73 20 63  pplication IDs c
44e0: 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63 6f  an be seen by co
44f0: 6e 73 75 6c 74 69 6e 67 20 74 68 65 0a 5b 68 74  nsulting the.[ht
4500: 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
4510: 6f 72 67 2f 73 72 63 2f 61 72 74 69 66 61 63 74  org/src/artifact
4520: 3f 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e 61  ?ci=trunk&filena
4530: 6d 65 3d 6d 61 67 69 63 2e 74 78 74 7c 6d 61 67  me=magic.txt|mag
4540: 69 63 2e 74 78 74 5d 0a 66 69 6c 65 20 69 6e 20  ic.txt].file in 
4550: 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63  the SQLite sourc
4560: 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 3c 2f 70  e repository.</p
4570: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4580: 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65  ent validfor {ve
4590: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
45a0: 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  number}</tcl>.<h
45b0: 34 3e 31 2e 32 2e 31 36 20 57 72 69 74 65 20 6c  4>1.2.16 Write l
45c0: 69 62 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e  ibrary version n
45d0: 75 6d 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f  umber and versio
45e0: 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62  n-valid-for numb
45f0: 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65  er</h4>..<p>^The
4600: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
4610: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
4620: 66 73 65 74 20 39 36 20 73 74 6f 72 65 73 20 74  fset 96 stores t
4630: 68 65 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53  he .[SQLITE_VERS
4640: 49 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75  ION_NUMBER] valu
4650: 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  e for the SQLite
4660: 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f   library that mo
4670: 73 74 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69  st.recently modi
4680: 66 69 65 64 20 74 68 65 20 64 61 74 61 62 61 73  fied the databas
4690: 65 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d  e file.  ^The 4-
46a0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
46b0: 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65  integer at.offse
46c0: 74 20 39 32 20 69 73 20 74 68 65 20 76 61 6c 75  t 92 is the valu
46d0: 65 20 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65  e of the [change
46e0: 20 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74   counter] when t
46f0: 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  he version numbe
4700: 72 0a 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54  r.was stored.  T
4710: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
4720: 66 73 65 74 20 39 32 20 69 6e 64 69 63 61 74 65  fset 92 indicate
4730: 73 20 77 68 69 63 68 20 74 72 61 6e 73 61 63 74  s which transact
4740: 69 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20  ion.the version 
4750: 6e 75 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20  number is valid 
4760: 66 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74  for and is somet
4770: 69 6d 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a  imes called the.
4780: 22 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66  "version-valid-f
4790: 6f 72 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34  or number"...<h4
47a0: 3e 31 2e 32 2e 31 36 20 48 65 61 64 65 72 20 73  >1.2.16 Header s
47b0: 70 61 63 65 20 72 65 73 65 72 76 65 64 20 66 6f  pace reserved fo
47c0: 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e  r expansion</h4>
47d0: 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62  ..<p>All other b
47e0: 79 74 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  ytes of the data
47f0: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
4800: 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66 6f   are reserved fo
4810: 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e 73 69  r.future expansi
4820: 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65 20 73  on and must be s
4830: 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a  et to zero.</p>.
4840: 0a 3c 68 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63  .<h3>1.3 The Loc
4850: 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68 33 3e  k-Byte Page</h3>
4860: 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79  ..<p>The lock-by
4870: 74 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73  te page is the s
4880: 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68  ingle page of th
4890: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
48a0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
48b0: 65 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65  e bytes at offse
48c0: 74 73 20 62 65 74 77 65 65 6e 20 31 30 37 33 37  ts between 10737
48d0: 34 31 38 32 34 20 61 6e 64 20 31 30 37 33 37 34  41824 and 107374
48e0: 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e  2335,.inclusive.
48f0: 20 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c    A database fil
4900: 65 20 74 68 61 74 20 69 73 20 6c 65 73 73 20 74  e that is less t
4910: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
4920: 31 30 37 33 37 34 31 38 32 34 20 62 79 74 65 73  1073741824 bytes
4930: 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69   .in size contai
4940: 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20  ns no lock-byte 
4950: 70 61 67 65 2e 20 20 41 20 64 61 74 61 62 61 73  page.  A databas
4960: 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68  e file larger th
4970: 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f  an.1073741824 co
4980: 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f  ntains exactly o
4990: 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  ne lock-byte pag
49a0: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  e..</p>..<p>The 
49b0: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69  lock-byte page i
49c0: 73 20 73 65 74 20 61 73 69 64 65 20 66 6f 72 20  s set aside for 
49d0: 75 73 65 20 62 79 20 74 68 65 20 6f 70 65 72 61  use by the opera
49e0: 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63  ting-system spec
49f0: 69 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65  ific.[VFS] imple
4a00: 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70  mentation in imp
4a10: 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61  lementing the da
4a20: 74 61 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b  tabase file lock
4a30: 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a  ing primitives..
4a40: 5e 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74  ^SQLite does not
4a50: 20 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79   use the lock-by
4a60: 74 65 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53  te page.  ^The S
4a70: 51 4c 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c  QLite core .will
4a80: 20 6e 65 76 65 72 20 72 65 61 64 20 6f 72 20 77   never read or w
4a90: 72 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79  rite the lock-by
4aa0: 74 65 20 70 61 67 65 2c 0a 74 68 6f 75 67 68 20  te page,.though 
4ab0: 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d  operating-system
4ac0: 20 73 70 65 63 69 66 69 63 20 5b 56 46 53 5d 20   specific [VFS] 
4ad0: 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73  .implementations
4ae0: 20 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f 20 72   may choose to r
4af0: 65 61 64 20 6f 72 20 77 72 69 74 65 20 62 79 74  ead or write byt
4b00: 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62  es on the lock-b
4b10: 79 74 65 20 0a 70 61 67 65 20 61 63 63 6f 72 64  yte .page accord
4b20: 69 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64  ing to the .need
4b30: 73 20 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69  s and procliviti
4b40: 65 73 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c  es of the underl
4b50: 79 69 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68  ying system.  Th
4b60: 65 20 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32  e unix and win32
4b70: 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74  .[VFS] implement
4b80: 61 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65  ations that come
4b90: 20 62 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69   built into SQLi
4ba0: 74 65 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20  te do not write 
4bb0: 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65  to the.lock-byte
4bc0: 20 70 61 67 65 2c 20 62 75 74 20 74 68 69 72 64   page, but third
4bd0: 2d 70 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65  -party VFS imple
4be0: 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f  mentations for.o
4bf0: 74 68 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73  ther operating s
4c00: 79 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70  ystems might.</p
4c10: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4c20: 65 6e 74 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b  ent {freelist} {
4c30: 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d  freelist} {free-
4c40: 70 61 67 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e  page list}</tcl>
4c50: 0a 3c 68 33 3e 31 2e 34 20 54 68 65 20 46 72 65  .<h3>1.4 The Fre
4c60: 65 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  elist</h3>..<p>A
4c70: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
4c80: 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 65  ight contain one
4c90: 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 73 20 74   or more pages t
4ca0: 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 0a 61  hat are not in.a
4cb0: 63 74 69 76 65 20 75 73 65 2e 20 20 55 6e 75 73  ctive use.  Unus
4cc0: 65 64 20 70 61 67 65 73 20 63 61 6e 20 63 6f 6d  ed pages can com
4cd0: 65 20 61 62 6f 75 74 2c 20 66 6f 72 20 65 78 61  e about, for exa
4ce0: 6d 70 6c 65 2c 20 77 68 65 6e 20 69 6e 66 6f 72  mple, when infor
4cf0: 6d 61 74 69 6f 6e 0a 69 73 20 64 65 6c 65 74 65  mation.is delete
4d00: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
4d10: 61 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67  ase.  Unused pag
4d20: 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  es are stored on
4d30: 20 74 68 65 20 66 72 65 65 6c 69 73 74 0a 61 6e   the freelist.an
4d40: 64 20 61 72 65 20 72 65 75 73 65 64 20 77 68 65  d are reused whe
4d50: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 67  n additional pag
4d60: 65 73 20 61 72 65 20 72 65 71 75 69 72 65 64 2e  es are required.
4d70: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 72 65  </p>..<p>The fre
4d80: 65 6c 69 73 74 20 69 73 20 6f 72 67 61 6e 69 7a  elist is organiz
4d90: 65 64 20 61 73 20 61 20 6c 69 6e 6b 65 64 20 6c  ed as a linked l
4da0: 69 73 74 20 6f 66 20 66 72 65 65 6c 69 73 74 20  ist of freelist 
4db0: 74 72 75 6e 6b 20 70 61 67 65 73 0a 77 69 74 68  trunk pages.with
4dc0: 20 65 61 63 68 20 74 72 75 6e 6b 20 70 61 67 65   each trunk page
4dd0: 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 61 67  s containing pag
4de0: 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 7a 65  e numbers for ze
4df0: 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 65 65 6c  ro or more freel
4e00: 69 73 74 0a 6c 65 61 66 20 70 61 67 65 73 2e 3c  ist.leaf pages.<
4e10: 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 6c 69  /p>..<p>A freeli
4e20: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 63 6f  st trunk page co
4e30: 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72  nsists of an arr
4e40: 61 79 20 6f 66 20 34 2d 62 79 74 65 20 62 69 67  ay of 4-byte big
4e50: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73  -endian integers
4e60: 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  ..The size of th
4e70: 65 20 61 72 72 61 79 20 69 73 20 61 73 20 6d 61  e array is as ma
4e80: 6e 79 20 69 6e 74 65 67 65 72 73 20 61 73 20 77  ny integers as w
4e90: 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75  ill fit in the u
4ea0: 73 61 62 6c 65 20 73 70 61 63 65 0a 6f 66 20 61  sable space.of a
4eb0: 20 70 61 67 65 2e 20 20 54 68 65 20 6d 69 6e 69   page.  The mini
4ec0: 6d 75 6d 20 75 73 61 62 6c 65 20 73 70 61 63 65  mum usable space
4ed0: 20 69 73 20 34 38 30 20 62 79 74 65 73 20 73 6f   is 480 bytes so
4ee0: 20 74 68 65 20 61 72 72 61 79 20 77 69 6c 6c 20   the array will 
4ef0: 61 6c 77 61 79 73 0a 62 65 20 61 74 20 6c 65 61  always.be at lea
4f00: 73 74 20 31 32 30 20 65 6e 74 72 69 65 73 20 69  st 120 entries i
4f10: 6e 20 6c 65 6e 67 74 68 2e 20 20 5e 54 68 65 20  n length.  ^The 
4f20: 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 6f 6e  first integer on
4f30: 20 61 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e   a freelist trun
4f40: 6b 0a 70 61 67 65 20 69 73 20 74 68 65 20 70 61  k.page is the pa
4f50: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
4f60: 20 6e 65 78 74 20 66 72 65 65 6c 69 73 74 20 74   next freelist t
4f70: 72 75 6e 6b 20 70 61 67 65 20 69 6e 20 74 68 65  runk page in the
4f80: 20 6c 69 73 74 20 6f 72 20 7a 65 72 6f 20 0a 69   list or zero .i
4f90: 66 20 74 68 69 73 20 69 73 20 74 68 65 20 6c 61  f this is the la
4fa0: 73 74 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e  st freelist trun
4fb0: 6b 20 70 61 67 65 2e 20 20 5e 54 68 65 20 73 65  k page.  ^The se
4fc0: 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 6f 6e 20  cond integer on 
4fd0: 61 20 66 72 65 65 6c 69 73 74 0a 74 72 75 6e 6b  a freelist.trunk
4fe0: 20 70 61 67 65 20 69 73 20 74 68 65 20 6e 75 6d   page is the num
4ff0: 62 65 72 20 6f 66 20 6c 65 61 66 20 70 61 67 65  ber of leaf page
5000: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 66 6f 6c   pointers to fol
5010: 6c 6f 77 2e 20 20 0a 5e 28 43 61 6c 6c 20 74 68  low.  .^(Call th
5020: 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72  e second integer
5030: 20 6f 6e 20 61 20 66 72 65 65 6c 69 73 74 20 74   on a freelist t
5040: 72 75 6e 6b 20 70 61 67 65 20 4c 2e 0a 49 66 20  runk page L..If 
5050: 4c 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  L is greater tha
5060: 6e 20 7a 65 72 6f 20 74 68 65 6e 20 69 6e 74 65  n zero then inte
5070: 67 65 72 73 20 77 69 74 68 20 61 72 72 61 79 20  gers with array 
5080: 69 6e 64 65 78 65 73 20 62 65 74 77 65 65 6e 20  indexes between 
5090: 32 20 61 6e 64 0a 4c 2b 31 20 69 6e 63 6c 75 73  2 and.L+1 inclus
50a0: 69 76 65 20 63 6f 6e 74 61 69 6e 20 70 61 67 65  ive contain page
50b0: 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 66 72 65   numbers for fre
50c0: 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73  elist leaf pages
50d0: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 46 72 65 65  .)^</p>..<p>Free
50e0: 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20  list leaf pages 
50f0: 63 6f 6e 74 61 69 6e 20 6e 6f 20 69 6e 66 6f 72  contain no infor
5100: 6d 61 74 69 6f 6e 2e 20 20 5e 53 51 4c 69 74 65  mation.  ^SQLite
5110: 20 61 76 6f 69 64 73 20 72 65 61 64 69 6e 67 20   avoids reading 
5120: 6f 72 0a 77 72 69 74 69 6e 67 20 66 72 65 65 6c  or.writing freel
5130: 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20 69  ist leaf pages i
5140: 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 64 75 63  n order to reduc
5150: 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a  e disk I/O.</p>.
5160: 0a 3c 70 3e 41 20 62 75 67 20 69 6e 20 53 51 4c  .<p>A bug in SQL
5170: 69 74 65 20 76 65 72 73 69 6f 6e 73 20 70 72 69  ite versions pri
5180: 6f 72 20 74 6f 20 33 2e 36 2e 30 20 63 61 75 73  or to 3.6.0 caus
5190: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ed the database 
51a0: 74 6f 20 62 65 0a 72 65 70 6f 72 74 65 64 20 61  to be.reported a
51b0: 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79  s corrupt if any
51c0: 20 6f 66 20 74 68 65 20 6c 61 73 74 20 36 20 65   of the last 6 e
51d0: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 66 72  ntries in the fr
51e0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
51f0: 65 20 0a 61 72 72 61 79 20 63 6f 6e 74 61 69 6e  e .array contain
5200: 65 64 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75  ed non-zero valu
5210: 65 73 2e 20 20 4e 65 77 65 72 20 76 65 72 73 69  es.  Newer versi
5220: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 64 6f  ons of SQLite do
5230: 20 6e 6f 74 20 68 61 76 65 0a 74 68 69 73 20 70   not have.this p
5240: 72 6f 62 6c 65 6d 2e 20 20 5e 48 6f 77 65 76 65  roblem.  ^Howeve
5250: 72 2c 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e  r, newer version
5260: 73 20 6f 66 20 53 51 4c 69 74 65 20 73 74 69 6c  s of SQLite stil
5270: 6c 20 61 76 6f 69 64 20 75 73 69 6e 67 20 74 68  l avoid using th
5280: 65 20 0a 6c 61 73 74 20 73 69 78 20 65 6e 74 72  e .last six entr
5290: 69 65 73 20 69 6e 20 74 68 65 20 66 72 65 65 6c  ies in the freel
52a0: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 61  ist trunk page a
52b0: 72 72 61 79 20 69 6e 20 6f 72 64 65 72 20 74 68  rray in order th
52c0: 61 74 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  at database.file
52d0: 73 20 63 72 65 61 74 65 64 20 62 79 20 6e 65 77  s created by new
52e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
52f0: 51 4c 69 74 65 20 63 61 6e 20 62 65 20 72 65 61  QLite can be rea
5300: 64 20 62 79 20 6f 6c 64 65 72 20 76 65 72 73 69  d by older versi
5310: 6f 6e 73 0a 6f 66 20 53 51 4c 69 74 65 2e 3c 2f  ons.of SQLite.</
5320: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62  p>..<p>^The numb
5330: 65 72 20 6f 66 20 66 72 65 65 6c 69 73 74 20 70  er of freelist p
5340: 61 67 65 73 20 69 73 20 73 74 6f 72 65 64 20 61  ages is stored a
5350: 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  s a 4-byte big-e
5360: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 0a 69 6e  ndian integer.in
5370: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
5380: 61 64 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65  ader at an offse
5390: 74 20 6f 66 20 33 36 20 66 72 6f 6d 20 74 68 65  t of 36 from the
53a0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
53b0: 65 20 66 69 6c 65 2e 0a 5e 54 68 65 20 64 61 74  e file..^The dat
53c0: 61 62 61 73 65 20 68 65 61 64 65 72 20 61 6c 73  abase header als
53d0: 6f 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67  o stores the pag
53e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
53f0: 66 69 72 73 74 20 66 72 65 65 6c 69 73 74 20 74  first freelist t
5400: 72 75 6e 6b 0a 70 61 67 65 20 61 73 20 61 20 34  runk.page as a 4
5410: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
5420: 20 69 6e 74 65 67 65 72 20 61 74 20 61 6e 20 6f   integer at an o
5430: 66 66 73 65 74 20 6f 66 20 33 32 20 66 72 6f 6d  ffset of 32 from
5440: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f   the beginning.o
5450: 66 20 74 68 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  f the file.</p>.
5460: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
5470: 74 20 62 74 72 65 65 20 7b 42 2a 2d 54 72 65 65  t btree {B*-Tree
5480: 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 35  s}</tcl>.<h3>1.5
5490: 20 42 2d 74 72 65 65 20 50 61 67 65 73 3c 2f 68   B-tree Pages</h
54a0: 33 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65  3>..<p>The b-tre
54b0: 65 20 61 6c 67 6f 72 69 74 68 6d 20 70 72 6f 76  e algorithm prov
54c0: 69 64 65 73 20 6b 65 79 2f 64 61 74 61 20 73 74  ides key/data st
54d0: 6f 72 61 67 65 20 77 69 74 68 20 75 6e 69 71 75  orage with uniqu
54e0: 65 20 61 6e 64 0a 6f 72 64 65 72 65 64 20 6b 65  e and.ordered ke
54f0: 79 73 20 6f 6e 20 70 61 67 65 2d 6f 72 69 65 6e  ys on page-orien
5500: 74 65 64 20 73 74 6f 72 61 67 65 20 64 65 76 69  ted storage devi
5510: 63 65 73 2e 0a 46 6f 72 20 62 61 63 6b 67 72 6f  ces..For backgro
5520: 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
5530: 6f 6e 20 62 2d 74 72 65 65 73 2c 20 73 65 65 0a  on b-trees, see.
5540: 4b 6e 75 74 68 2c 20 3c 75 3e 54 68 65 20 41 72  Knuth, <u>The Ar
5550: 74 20 4f 66 20 43 6f 6d 70 75 74 65 72 20 50 72  t Of Computer Pr
5560: 6f 67 72 61 6d 6d 69 6e 67 3c 2f 75 3e 2c 20 56  ogramming</u>, V
5570: 6f 6c 75 6d 65 20 33 20 22 53 6f 72 74 69 6e 67  olume 3 "Sorting
5580: 0a 61 6e 64 20 53 65 61 72 63 68 69 6e 67 22 2c  .and Searching",
5590: 20 70 61 67 65 73 20 34 37 31 2d 34 37 39 2e 20   pages 471-479. 
55a0: 20 54 77 6f 20 6b 69 6e 64 73 20 6f 66 20 62 2d   Two kinds of b-
55b0: 74 72 65 65 73 20 61 72 65 20 75 73 65 64 20 62  trees are used b
55c0: 79 0a 53 51 4c 69 74 65 2e 20 20 54 68 65 20 61  y.SQLite.  The a
55d0: 6c 67 6f 72 69 74 68 6d 20 74 68 61 74 20 4b 6e  lgorithm that Kn
55e0: 75 74 68 20 63 61 6c 6c 73 20 22 42 2a 2d 54 72  uth calls "B*-Tr
55f0: 65 65 22 20 73 74 6f 72 65 73 20 61 6c 6c 20 64  ee" stores all d
5600: 61 74 61 0a 69 6e 20 74 68 65 20 6c 65 61 76 65  ata.in the leave
5610: 73 20 6f 66 20 74 68 65 20 74 72 65 65 2e 20 20  s of the tree.  
5620: 53 51 4c 69 74 65 20 63 61 6c 6c 73 20 74 68 69  SQLite calls thi
5630: 73 20 76 61 72 69 65 74 79 20 6f 66 20 62 2d 74  s variety of b-t
5640: 72 65 65 0a 61 20 22 74 61 62 6c 65 20 62 2d 74  ree.a "table b-t
5650: 72 65 65 22 2e 20 54 68 65 20 61 6c 67 6f 72 69  ree". The algori
5660: 74 68 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63  thm that Knuth c
5670: 61 6c 6c 73 20 73 69 6d 70 6c 79 20 22 42 2d 54  alls simply "B-T
5680: 72 65 65 22 0a 73 74 6f 72 65 73 20 62 6f 74 68  ree".stores both
5690: 20 74 68 65 20 6b 65 79 20 61 6e 64 20 74 68 65   the key and the
56a0: 20 64 61 74 61 20 74 6f 67 65 74 68 65 72 20 69   data together i
56b0: 6e 20 62 6f 74 68 20 6c 65 61 76 65 73 0a 61 6e  n both leaves.an
56c0: 64 20 69 6e 20 69 6e 74 65 72 69 6f 72 20 70 61  d in interior pa
56d0: 67 65 73 2e 20 20 49 6e 20 74 68 65 20 53 51 4c  ges.  In the SQL
56e0: 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ite implementati
56f0: 6f 6e 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  on, the original
5700: 0a 42 2d 54 72 65 65 20 61 6c 67 6f 72 69 74 68  .B-Tree algorith
5710: 6d 20 73 74 6f 72 65 73 20 6b 65 79 73 20 6f 6e  m stores keys on
5720: 6c 79 2c 20 6f 6d 69 74 74 69 6e 67 20 74 68 65  ly, omitting the
5730: 20 64 61 74 61 20 65 6e 74 69 72 65 6c 79 2c 20   data entirely, 
5740: 61 6e 64 0a 69 73 20 63 61 6c 6c 65 64 20 61 6e  and.is called an
5750: 20 22 69 6e 64 65 78 20 62 2d 74 72 65 65 22 2e   "index b-tree".
5760: 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61  ..<p>A b-tree pa
5770: 67 65 20 69 73 20 65 69 74 68 65 72 20 61 6e 20  ge is either an 
5780: 69 6e 74 65 72 69 6f 72 20 70 61 67 65 20 6f 72  interior page or
5790: 20 61 20 6c 65 61 66 20 70 61 67 65 2e 0a 41 20   a leaf page..A 
57a0: 6c 65 61 66 20 70 61 67 65 20 63 6f 6e 74 61 69  leaf page contai
57b0: 6e 73 20 6b 65 79 73 20 61 6e 64 20 69 6e 20 74  ns keys and in t
57c0: 68 65 20 63 61 73 65 20 6f 66 20 61 20 74 61 62  he case of a tab
57d0: 6c 65 20 62 2d 74 72 65 65 20 65 61 63 68 0a 6b  le b-tree each.k
57e0: 65 79 20 68 61 73 20 61 73 73 6f 63 69 61 74 65  ey has associate
57f0: 64 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 74 65  d data.  An inte
5800: 72 69 6f 72 20 70 61 67 65 20 63 6f 6e 74 61 69  rior page contai
5810: 6e 73 0a 4b 20 6b 65 79 73 20 74 6f 67 65 74 68  ns.K keys togeth
5820: 65 72 20 77 69 74 68 20 4b 2b 31 20 70 6f 69 6e  er with K+1 poin
5830: 74 65 72 73 20 74 6f 20 63 68 69 6c 64 20 62 2d  ters to child b-
5840: 74 72 65 65 20 70 61 67 65 73 2e 0a 41 20 22 70  tree pages..A "p
5850: 6f 69 6e 74 65 72 22 20 69 6e 20 61 6e 20 69 6e  ointer" in an in
5860: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
5870: 67 65 20 69 73 20 6a 75 73 74 20 74 68 65 20 33  ge is just the 3
5880: 31 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 70 61  1-bit integer.pa
5890: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
58a0: 20 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f 70 3e   child page.</p>
58b0: 0a 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20  ..<p>Define the 
58c0: 64 65 70 74 68 0a 6f 66 20 61 20 6c 65 61 66 20  depth.of a leaf 
58d0: 62 2d 74 72 65 65 20 74 6f 20 62 65 20 31 20 61  b-tree to be 1 a
58e0: 6e 64 20 74 68 65 20 64 65 70 74 68 20 6f 66 20  nd the depth of 
58f0: 61 6e 79 20 69 6e 74 65 72 69 6f 72 20 62 2d 74  any interior b-t
5900: 72 65 65 20 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f  ree to be one.mo
5910: 72 65 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69  re than the maxi
5920: 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 61 6e 79  mum depth of any
5930: 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e   of its children
5940: 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f  .  ^In a well-fo
5950: 72 6d 65 64 0a 64 61 74 61 62 61 73 65 2c 20 61  rmed.database, a
5960: 6c 6c 20 63 68 69 6c 64 72 65 6e 20 6f 66 20 61  ll children of a
5970: 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  n interior b-tre
5980: 65 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  e have the same 
5990: 64 65 70 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  depth.</p>..<p>I
59a0: 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  n an interior b-
59b0: 74 72 65 65 20 70 61 67 65 2c 20 74 68 65 20 70  tree page, the p
59c0: 6f 69 6e 74 65 72 73 20 61 6e 64 20 6b 65 79 73  ointers and keys
59d0: 20 6c 6f 67 69 63 61 6c 6c 79 20 61 6c 74 65 72   logically alter
59e0: 6e 61 74 65 20 0a 77 69 74 68 20 61 20 70 6f 69  nate .with a poi
59f0: 6e 74 65 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64  nter on both end
5a00: 73 2e 20 28 54 68 65 20 70 72 65 76 69 6f 75 73  s. (The previous
5a10: 20 73 65 6e 74 65 6e 63 65 20 69 73 20 74 6f 20   sentence is to 
5a20: 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f  be understood.co
5a30: 6e 63 65 70 74 75 61 6c 6c 79 20 2d 20 74 68 65  nceptually - the
5a40: 20 61 63 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f   actual layout o
5a50: 66 20 74 68 65 20 6b 65 79 73 20 61 6e 64 0a 70  f the keys and.p
5a60: 6f 69 6e 74 65 72 73 20 77 69 74 68 69 6e 20 74  ointers within t
5a70: 68 65 20 70 61 67 65 20 69 73 20 6d 6f 72 65 20  he page is more 
5a80: 63 6f 6d 70 6c 69 63 61 74 65 64 20 61 6e 64 20  complicated and 
5a90: 77 69 6c 6c 20 62 65 20 64 65 73 63 72 69 62 65  will be describe
5aa0: 64 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e  d in.the sequel.
5ab0: 29 20 20 41 6c 6c 20 6b 65 79 73 20 77 69 74 68  )  All keys with
5ac0: 69 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65  in the same page
5ad0: 20 61 72 65 20 75 6e 69 71 75 65 20 61 6e 64 20   are unique and 
5ae0: 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72  are logically.or
5af0: 67 61 6e 69 7a 65 64 20 69 6e 20 61 73 63 65 6e  ganized in ascen
5b00: 64 69 6e 67 20 6f 72 64 65 72 20 66 72 6f 6d 20  ding order from 
5b10: 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20  left to right.  
5b20: 28 41 67 61 69 6e 2c 20 74 68 69 73 20 6f 72 64  (Again, this ord
5b30: 65 72 69 6e 67 0a 69 73 20 6c 6f 67 69 63 61 6c  ering.is logical
5b40: 2c 20 6e 6f 74 20 70 68 79 73 69 63 61 6c 2e 20  , not physical. 
5b50: 20 54 68 65 20 61 63 74 75 61 6c 20 6c 6f 63 61   The actual loca
5b60: 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74  tion of keys wit
5b70: 68 69 6e 20 74 68 65 20 70 61 67 65 0a 69 73 20  hin the page.is 
5b80: 61 72 62 69 74 72 61 72 79 2e 29 20 5e 46 6f 72  arbitrary.) ^For
5b90: 20 61 6e 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e   any key X, poin
5ba0: 74 65 72 73 20 74 6f 20 74 68 65 20 6c 65 66 74  ters to the left
5bb0: 0a 6f 66 20 61 20 58 20 72 65 66 65 72 20 74 6f  .of a X refer to
5bc0: 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e   b-tree pages on
5bd0: 20 77 68 69 63 68 20 61 6c 6c 20 6b 65 79 73 20   which all keys 
5be0: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6f 72  are less than or
5bf0: 20 65 71 75 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f   equal to X..^Po
5c00: 69 6e 74 65 72 73 20 74 6f 20 74 68 65 20 72 69  inters to the ri
5c10: 67 68 74 20 6f 66 20 58 20 72 65 66 65 72 20 74  ght of X refer t
5c20: 6f 20 70 61 67 65 73 20 77 68 65 72 65 20 61 6c  o pages where al
5c30: 6c 20 6b 65 79 73 20 61 72 65 20 0a 67 72 65 61  l keys are .grea
5c40: 74 65 72 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a  ter than X.</p>.
5c50: 0a 3c 70 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e  .<p>Within an in
5c60: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
5c70: 67 65 2c 20 65 61 63 68 20 6b 65 79 20 61 6e 64  ge, each key and
5c80: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
5c90: 69 74 73 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65  its.immediate le
5ca0: 66 74 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  ft are combined 
5cb0: 69 6e 74 6f 20 61 20 73 74 72 75 63 74 75 72 65  into a structure
5cc0: 20 63 61 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22   called a "cell"
5cd0: 2e 20 20 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73  .  The.right-mos
5ce0: 74 20 70 6f 69 6e 74 65 72 20 69 73 20 68 65 6c  t pointer is hel
5cf0: 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41  d separately.  A
5d00: 20 6c 65 61 66 20 62 2d 74 72 65 65 20 70 61 67   leaf b-tree pag
5d10: 65 20 68 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72  e has no.pointer
5d20: 73 2c 20 62 75 74 20 69 74 20 73 74 69 6c 6c 20  s, but it still 
5d30: 75 73 65 73 20 74 68 65 20 63 65 6c 6c 20 73 74  uses the cell st
5d40: 72 75 63 74 75 72 65 20 74 6f 20 68 6f 6c 64 20  ructure to hold 
5d50: 6b 65 79 73 20 66 6f 72 0a 69 6e 64 65 78 20 62  keys for.index b
5d60: 2d 74 72 65 65 73 20 6f 72 20 6b 65 79 73 20 61  -trees or keys a
5d70: 6e 64 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74  nd content for t
5d80: 61 62 6c 65 20 62 2d 74 72 65 65 73 2e 20 20 44  able b-trees.  D
5d90: 61 74 61 20 69 73 20 61 6c 73 6f 0a 63 6f 6e 74  ata is also.cont
5da0: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 65 6c  ained in the cel
5db0: 6c 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72  l..</p>..<p>Ever
5dc0: 79 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61  y b-tree page ha
5dd0: 73 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61  s at most one pa
5de0: 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65  rent b-tree page
5df0: 2e 0a 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  ..A b-tree page 
5e00: 77 69 74 68 6f 75 74 20 61 20 70 61 72 65 6e 74  without a parent
5e10: 20 69 73 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f   is called a roo
5e20: 74 20 70 61 67 65 2e 20 20 41 20 72 6f 6f 74 20  t page.  A root 
5e30: 62 2d 74 72 65 65 20 70 61 67 65 0a 74 6f 67 65  b-tree page.toge
5e40: 74 68 65 72 20 77 69 74 68 20 74 68 65 20 63 6c  ther with the cl
5e50: 6f 73 75 72 65 20 6f 66 20 69 74 73 20 63 68 69  osure of its chi
5e60: 6c 64 72 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d  ldren form a com
5e70: 70 6c 65 74 65 20 62 2d 74 72 65 65 2e 0a 49 74  plete b-tree..It
5e80: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 28 61 6e   is possible (an
5e90: 64 20 69 6e 20 66 61 63 74 20 72 61 74 68 65 72  d in fact rather
5ea0: 20 63 6f 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65   common) to have
5eb0: 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72   a complete b-tr
5ec0: 65 65 0a 74 68 61 74 20 63 6f 6e 73 69 73 74 73  ee.that consists
5ed0: 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67   of a single pag
5ee0: 65 20 74 68 61 74 20 69 73 20 62 6f 74 68 20 61  e that is both a
5ef0: 20 6c 65 61 66 20 61 6e 64 20 74 68 65 20 72 6f   leaf and the ro
5f00: 6f 74 2e 0a 42 65 63 61 75 73 65 20 74 68 65 72  ot..Because ther
5f10: 65 20 61 72 65 20 70 6f 69 6e 74 65 72 73 20 66  e are pointers f
5f20: 72 6f 6d 20 70 61 72 65 6e 74 73 20 74 6f 20 63  rom parents to c
5f30: 68 69 6c 64 72 65 6e 2c 20 65 76 65 72 79 20 70  hildren, every p
5f40: 61 67 65 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74  age of a.complet
5f50: 65 20 62 2d 74 72 65 65 20 63 61 6e 20 62 65 20  e b-tree can be 
5f60: 6c 6f 63 61 74 65 64 20 69 66 20 6f 6e 6c 79 20  located if only 
5f70: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  the root page is
5f80: 20 6b 6e 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a   known.  Hence,.
5f90: 62 2d 74 72 65 65 73 20 61 72 65 20 69 64 65 6e  b-trees are iden
5fa0: 74 69 66 69 65 64 20 62 79 20 74 68 65 69 72 20  tified by their 
5fb0: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
5fc0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72  .</p>..<p>A b-tr
5fd0: 65 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65  ee page is eithe
5fe0: 72 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  r a table b-tree
5ff0: 20 70 61 67 65 20 6f 72 20 61 6e 20 69 6e 64 65   page or an inde
6000: 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41  x b-tree page..A
6010: 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 20  ll pages within 
6020: 65 61 63 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d  each complete b-
6030: 74 72 65 65 20 61 72 65 20 6f 66 20 74 68 65 20  tree are of the 
6040: 73 61 6d 65 20 74 79 70 65 3a 20 65 69 74 68 65  same type: eithe
6050: 72 20 74 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78  r table.or index
6060: 2e 20 20 54 68 65 72 65 20 69 73 20 61 20 6f 6e  .  There is a on
6070: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  e table b-trees 
6080: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
6090: 66 69 6c 65 0a 66 6f 72 20 65 61 63 68 20 72 6f  file.for each ro
60a0: 77 69 64 20 74 61 62 6c 65 20 69 6e 20 74 68 65  wid table in the
60b0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
60c0: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74  , including syst
60d0: 65 6d 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61  em tables.such a
60e0: 73 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  s sqlite_master.
60f0: 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65 20 69    There is one i
6100: 6e 64 65 78 20 62 2d 74 72 65 65 73 0a 69 6e 20  ndex b-trees.in 
6110: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6120: 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78  e for each index
6130: 20 69 6e 20 74 68 65 20 73 63 68 65 6d 61 2c 20   in the schema, 
6140: 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65  including implie
6150: 64 20 69 6e 64 65 78 65 73 0a 63 72 65 61 74 65  d indexes.create
6160: 64 20 62 79 20 75 6e 69 71 75 65 6e 65 73 73 20  d by uniqueness 
6170: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20 54 68  constraints.  Th
6180: 65 72 65 20 61 72 65 20 6e 6f 20 62 2d 74 72 65  ere are no b-tre
6190: 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
61a0: 74 68 0a 5b 76 69 72 74 75 61 6c 20 74 61 62 6c  th.[virtual tabl
61b0: 65 73 5d 2e 20 20 53 70 65 63 69 66 69 63 20 76  es].  Specific v
61c0: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
61d0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67  lementations mig
61e0: 68 74 20 6d 61 6b 65 20 75 73 65 0a 6f 66 20 5b  ht make use.of [
61f0: 73 68 61 64 6f 77 20 74 61 62 6c 65 73 5d 20 66  shadow tables] f
6200: 6f 72 20 73 74 6f 72 61 67 65 2c 20 62 75 74 20  or storage, but 
6210: 74 68 6f 73 65 20 73 68 61 64 6f 77 20 74 61 62  those shadow tab
6220: 6c 65 73 20 77 69 6c 6c 20 68 61 76 65 20 73 65  les will have se
6230: 70 61 72 61 74 65 0a 65 6e 74 72 69 65 73 20 69  parate.entries i
6240: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
6250: 63 68 65 6d 61 2e 20 20 5b 57 49 54 48 4f 55 54  chema.  [WITHOUT
6260: 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73 20 75   ROWID] tables u
6270: 73 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 73  se index b-trees
6280: 0a 72 61 74 68 65 72 20 74 68 61 6e 20 61 20 74  .rather than a t
6290: 61 62 6c 65 20 62 2d 74 72 65 65 73 2c 20 73 6f  able b-trees, so
62a0: 20 74 68 65 72 65 20 69 73 20 6f 6e 65 0a 69 6e   there is one.in
62b0: 64 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74 68  dex b-tree in th
62c0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
62d0: 66 6f 72 20 65 61 63 68 20 5b 57 49 54 48 4f 55  for each [WITHOU
62e0: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a  T ROWID] table..
62f0: 54 68 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65  The b-tree corre
6300: 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20  sponding to the 
6310: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
6320: 62 6c 65 20 69 73 20 61 6c 77 61 79 73 20 61 20  ble is always a 
6330: 74 61 62 6c 65 0a 62 2d 74 72 65 65 20 61 6e 64  table.b-tree and
6340: 20 61 6c 77 61 79 73 20 68 61 73 20 61 20 72 6f   always has a ro
6350: 6f 74 20 70 61 67 65 20 6f 66 20 31 2e 0a 54 68  ot page of 1..Th
6360: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
6370: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74  table contains t
6380: 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
6390: 62 65 72 20 66 6f 72 20 65 76 65 72 79 20 6f 74  ber for every ot
63a0: 68 65 72 20 0a 74 61 62 6c 65 20 61 6e 64 20 69  her .table and i
63b0: 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61  ndex in the data
63c0: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
63d0: 3c 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e  <p>Each entry in
63e0: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
63f0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 36 34  consists of a 64
6400: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
6410: 67 65 72 20 6b 65 79 0a 61 6e 64 20 75 70 20 74  ger key.and up t
6420: 6f 20 32 31 34 37 34 38 33 36 34 37 20 62 79 74  o 2147483647 byt
6430: 65 73 20 6f 66 20 61 72 62 69 74 72 61 72 79 20  es of arbitrary 
6440: 64 61 74 61 2e 20 20 28 54 68 65 20 6b 65 79 20  data.  (The key 
6450: 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  of a table b-tre
6460: 65 0a 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  e.corresponds to
6470: 20 74 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20   the [rowid] of 
6480: 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 74 68  the SQL table th
6490: 61 74 20 74 68 65 20 62 2d 74 72 65 65 20 69 6d  at the b-tree im
64a0: 70 6c 65 6d 65 6e 74 73 2e 29 0a 49 6e 74 65 72  plements.).Inter
64b0: 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65  ior table b-tree
64c0: 73 20 68 6f 6c 64 20 6f 6e 6c 79 20 6b 65 79 73  s hold only keys
64d0: 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 74 6f   and pointers to
64e0: 20 63 68 69 6c 64 72 65 6e 2e 0a 41 6c 6c 20 64   children..All d
64f0: 61 74 61 20 69 73 20 63 6f 6e 74 61 69 6e 65 64  ata is contained
6500: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   in the table b-
6510: 74 72 65 65 20 6c 65 61 76 65 73 2e 3c 2f 70 3e  tree leaves.</p>
6520: 0a 0a 3c 70 3e 45 61 63 68 20 65 6e 74 72 79 20  ..<p>Each entry 
6530: 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  in an index b-tr
6540: 65 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ee consists of a
6550: 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20  n arbitrary key 
6560: 6f 66 20 75 70 0a 74 6f 20 32 31 34 37 34 38 33  of up.to 2147483
6570: 36 34 37 20 62 79 74 65 73 20 69 6e 20 6c 65 6e  647 bytes in len
6580: 67 74 68 20 61 6e 64 20 6e 6f 20 64 61 74 61 2e  gth and no data.
6590: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
65a0: 61 67 6d 65 6e 74 20 63 65 6c 6c 5f 70 61 79 6c  agment cell_payl
65b0: 6f 61 64 20 7b 63 65 6c 6c 20 70 61 79 6c 6f 61  oad {cell payloa
65c0: 64 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 44 65 66 69  d}</tcl>.<p>Defi
65d0: 6e 65 20 74 68 65 20 22 70 61 79 6c 6f 61 64 22  ne the "payload"
65e0: 20 6f 66 20 61 20 63 65 6c 6c 20 74 6f 20 62 65   of a cell to be
65f0: 20 74 68 65 20 61 72 62 69 74 72 61 72 79 20 6c   the arbitrary l
6600: 65 6e 67 74 68 20 73 65 63 74 69 6f 6e 0a 6f 66  ength section.of
6610: 20 74 68 65 20 63 65 6c 6c 2e 20 20 46 6f 72 20   the cell.  For 
6620: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 2c  an index b-tree,
6630: 20 74 68 65 20 6b 65 79 20 69 73 20 61 6c 77 61   the key is alwa
6640: 79 73 20 61 72 62 69 74 72 61 72 79 20 69 6e 20  ys arbitrary in 
6650: 6c 65 6e 67 74 68 0a 61 6e 64 20 68 65 6e 63 65  length.and hence
6660: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 73 20   the payload is 
6670: 74 68 65 20 6b 65 79 2e 20 20 54 68 65 72 65 20  the key.  There 
6680: 61 72 65 20 6e 6f 20 61 72 62 69 74 72 61 72 79  are no arbitrary
6690: 20 6c 65 6e 67 74 68 20 65 6c 65 6d 65 6e 74 73   length elements
66a0: 0a 69 6e 20 74 68 65 20 63 65 6c 6c 73 20 6f 66  .in the cells of
66b0: 20 69 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20   interior table 
66c0: 62 2d 74 72 65 65 20 70 61 67 65 73 20 61 6e 64  b-tree pages and
66d0: 20 73 6f 20 74 68 6f 73 65 20 63 65 6c 6c 73 20   so those cells 
66e0: 68 61 76 65 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e  have no.payload.
66f0: 20 20 54 61 62 6c 65 20 62 2d 74 72 65 65 20 6c    Table b-tree l
6700: 65 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69  eaf pages contai
6710: 6e 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67  n arbitrary leng
6720: 74 68 20 63 6f 6e 74 65 6e 74 20 61 6e 64 0a 73  th content and.s
6730: 6f 20 66 6f 72 20 63 65 6c 6c 73 20 6f 6e 20 74  o for cells on t
6740: 68 6f 73 65 20 70 61 67 65 73 20 74 68 65 20 70  hose pages the p
6750: 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20 63 6f  ayload is the co
6760: 6e 74 65 6e 74 2e 0a 3c 70 3e 57 68 65 6e 20 74  ntent..<p>When t
6770: 68 65 20 73 69 7a 65 20 6f 66 20 70 61 79 6c 6f  he size of paylo
6780: 61 64 20 66 6f 72 20 61 20 63 65 6c 6c 20 65 78  ad for a cell ex
6790: 63 65 65 64 73 20 61 20 63 65 72 74 61 69 6e 20  ceeds a certain 
67a0: 74 68 72 65 73 68 6f 6c 64 20 28 74 6f 0a 62 65  threshold (to.be
67b0: 20 64 65 66 69 6e 65 64 20 6c 61 74 65 72 29 20   defined later) 
67c0: 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 66 69  then only the fi
67d0: 72 73 74 20 66 65 77 20 62 79 74 65 73 20 6f 66  rst few bytes of
67e0: 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 61 72 65   the payload.are
67f0: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62   stored on the b
6800: 2d 74 72 65 65 20 70 61 67 65 20 61 6e 64 20 74  -tree page and t
6810: 68 65 20 62 61 6c 61 6e 63 65 20 69 73 20 73 74  he balance is st
6820: 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
6830: 20 6c 69 73 74 0a 6f 66 20 63 6f 6e 74 65 6e 74   list.of content
6840: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 2e   overflow pages.
6850: 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65  </p>..<p>A b-tre
6860: 65 20 70 61 67 65 20 69 73 20 64 69 76 69 64 65  e page is divide
6870: 64 20 69 6e 74 6f 20 72 65 67 69 6f 6e 73 20 69  d into regions i
6880: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
6890: 6f 72 64 65 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  order:..<ol>.<li
68a0: 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64 61  >The 100-byte da
68b0: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
68c0: 65 72 20 28 66 6f 75 6e 64 20 6f 6e 20 70 61 67  er (found on pag
68d0: 65 20 31 20 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68  e 1 only).<li>Th
68e0: 65 20 38 20 6f 72 20 31 32 20 62 79 74 65 20 62  e 8 or 12 byte b
68f0: 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65  -tree page heade
6900: 72 0a 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20 70  r.<li>The cell p
6910: 6f 69 6e 74 65 72 20 61 72 72 61 79 0a 3c 6c 69  ointer array.<li
6920: 3e 55 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  >Unallocated spa
6930: 63 65 0a 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20  ce.<li>The cell 
6940: 63 6f 6e 74 65 6e 74 20 61 72 65 61 0a 3c 6c 69  content area.<li
6950: 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72 65  >The reserved re
6960: 67 69 6f 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e  gion..</ol>.</p>
6970: 0a 0a 3c 70 3e 54 68 65 20 31 30 30 2d 62 79 74  ..<p>The 100-byt
6980: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
6990: 68 65 61 64 65 72 20 69 73 20 66 6f 75 6e 64 20  header is found 
69a0: 6f 6e 6c 79 20 6f 6e 20 70 61 67 65 20 31 2c 20  only on page 1, 
69b0: 77 68 69 63 68 20 69 73 0a 61 6c 77 61 79 73 20  which is.always 
69c0: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70  a table b-tree p
69d0: 61 67 65 2e 20 20 41 6c 6c 20 6f 74 68 65 72 20  age.  All other 
69e0: 62 2d 74 72 65 65 20 70 61 67 65 73 20 69 6e 20  b-tree pages in 
69f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6a00: 65 0a 6f 6d 69 74 20 74 68 69 73 20 31 30 30 2d  e.omit this 100-
6a10: 62 79 74 65 20 68 65 61 64 65 72 2e 3c 2f 70 3e  byte header.</p>
6a20: 0a 0a 3c 70 3e 54 68 65 20 72 65 73 65 72 76 65  ..<p>The reserve
6a30: 64 20 72 65 67 69 6f 6e 20 69 73 20 61 6e 20 61  d region is an a
6a40: 72 65 61 20 6f 66 20 75 6e 75 73 65 64 20 73 70  rea of unused sp
6a50: 61 63 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ace at the end o
6a60: 66 20 65 76 65 72 79 0a 70 61 67 65 20 28 65 78  f every.page (ex
6a70: 63 65 70 74 20 74 68 65 20 6c 6f 63 6b 69 6e 67  cept the locking
6a80: 20 70 61 67 65 29 20 74 68 61 74 20 65 78 74 65   page) that exte
6a90: 6e 73 69 6f 6e 73 20 63 61 6e 20 75 73 65 20 74  nsions can use t
6aa0: 6f 20 68 6f 6c 64 20 70 65 72 2d 70 61 67 65 0a  o hold per-page.
6ab0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e 54  information.  ^T
6ac0: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72  he size of the r
6ad0: 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69  eserved region i
6ae0: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
6af0: 74 68 65 20 6f 6e 65 2d 62 79 74 65 0a 75 6e 73  the one-byte.uns
6b00: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 66 6f  igned integer fo
6b10: 75 6e 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74  und at an offset
6b20: 20 6f 66 20 32 30 20 69 6e 74 6f 20 74 68 65 20   of 20 into the 
6b30: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65  database file he
6b40: 61 64 65 72 2e 0a 54 68 65 20 73 69 7a 65 20 6f  ader..The size o
6b50: 66 20 74 68 65 20 72 65 73 65 72 76 65 64 20 72  f the reserved r
6b60: 65 67 69 6f 6e 20 69 73 20 75 73 75 61 6c 6c 79  egion is usually
6b70: 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54   zero.</p>..<p>T
6b80: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  he b-tree page h
6b90: 65 61 64 65 72 20 69 73 20 38 20 62 79 74 65 73  eader is 8 bytes
6ba0: 20 69 6e 20 73 69 7a 65 20 66 6f 72 20 6c 65 61   in size for lea
6bb0: 66 20 70 61 67 65 73 20 61 6e 64 20 31 32 0a 62  f pages and 12.b
6bc0: 79 74 65 73 20 66 6f 72 20 69 6e 74 65 72 69 6f  ytes for interio
6bd0: 72 20 70 61 67 65 73 2e 20 20 41 6c 6c 20 6d 75  r pages.  All mu
6be0: 6c 74 69 62 79 74 65 20 76 61 6c 75 65 73 20 69  ltibyte values i
6bf0: 6e 20 74 68 65 20 70 61 67 65 20 68 65 61 64 65  n the page heade
6c00: 72 0a 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e  r.are big-endian
6c10: 2e 0a 54 68 65 20 62 2d 74 72 65 65 20 70 61 67  ..The b-tree pag
6c20: 65 20 68 65 61 64 65 72 20 69 73 20 63 6f 6d 70  e header is comp
6c30: 6f 73 65 64 20 6f 66 20 74 68 65 20 66 6f 6c 6c  osed of the foll
6c40: 6f 77 69 6e 67 20 66 69 65 6c 64 73 3a 3c 2f 70  owing fields:</p
6c50: 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42  >..<center>.<i>B
6c60: 2d 74 72 65 65 20 50 61 67 65 20 48 65 61 64 65  -tree Page Heade
6c70: 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e  r Format</i><br>
6c80: 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
6c90: 20 77 69 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74   width="80%">.<t
6ca0: 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e  r><th>Offset<th>
6cb0: 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74  Size<th>Descript
6cc0: 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  ion.<tr><td alig
6cd0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
6ce0: 74 6f 70 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 63  top>0<td align=c
6cf0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
6d00: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
6d10: 3e 0a 5e 54 68 65 20 6f 6e 65 2d 62 79 74 65 20  >.^The one-byte 
6d20: 66 6c 61 67 20 61 74 20 6f 66 66 73 65 74 20 30  flag at offset 0
6d30: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
6d40: 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65  b-tree page type
6d50: 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20  ..^A value of 2 
6d60: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
6d70: 73 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 69 6e  s an interior in
6d80: 64 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e  dex b-tree page.
6d90: 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 35 20 6d  .^A value of 5 m
6da0: 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73  eans the page is
6db0: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 74 61 62   an interior tab
6dc0: 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  le b-tree page..
6dd0: 5e 41 20 76 61 6c 75 65 20 6f 66 20 31 30 20 6d  ^A value of 10 m
6de0: 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73  eans the page is
6df0: 20 61 20 6c 65 61 66 20 69 6e 64 65 78 20 62 2d   a leaf index b-
6e00: 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61  tree page..^A va
6e10: 6c 75 65 20 6f 66 20 31 33 20 6d 65 61 6e 73 20  lue of 13 means 
6e20: 74 68 65 20 70 61 67 65 20 69 73 20 61 20 6c 65  the page is a le
6e30: 61 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  af table b-tree 
6e40: 70 61 67 65 2e 0a 5e 41 6e 79 20 6f 74 68 65 72  page..^Any other
6e50: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62   value for the b
6e60: 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65 20  -tree page type 
6e70: 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 74 72  is an error..<tr
6e80: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
6e90: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74  r valign=top>1<t
6ea0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6eb0: 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61  align=top>2<td a
6ec0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20  lign=left>.^The 
6ed0: 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72  two-byte integer
6ee0: 20 61 74 20 6f 66 66 73 65 74 20 31 20 67 69 76   at offset 1 giv
6ef0: 65 73 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  es the start of 
6f00: 74 68 65 0a 66 69 72 73 74 20 66 72 65 65 62 6c  the.first freebl
6f10: 6f 63 6b 20 6f 6e 20 74 68 65 20 70 61 67 65 2c  ock on the page,
6f20: 20 6f 72 20 69 73 20 7a 65 72 6f 20 69 66 20 74   or is zero if t
6f30: 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65  here are no free
6f40: 62 6c 6f 63 6b 73 2e 0a 3c 74 72 3e 3c 74 64 20  blocks..<tr><td 
6f50: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6f60: 69 67 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69  ign=top>3<td ali
6f70: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6f80: 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d  =top>2<td align=
6f90: 6c 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f 2d 62  left>.^The two-b
6fa0: 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  yte integer at o
6fb0: 66 66 73 65 74 20 33 20 67 69 76 65 73 20 74 68  ffset 3 gives th
6fc0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c  e number of cell
6fd0: 73 20 6f 6e 20 74 68 65 20 70 61 67 65 2e 0a 3c  s on the page..<
6fe0: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
6ff0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 35  ter valign=top>5
7000: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
7010: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64   valign=top>2<td
7020: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54   align=left>.^(T
7030: 68 65 20 74 77 6f 2d 62 79 74 65 20 69 6e 74 65  he two-byte inte
7040: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 20  ger at offset 5 
7050: 64 65 73 69 67 6e 61 74 65 73 20 74 68 65 20 73  designates the s
7060: 74 61 72 74 20 6f 66 20 74 68 65 20 63 65 6c 6c  tart of the cell
7070: 20 63 6f 6e 74 65 6e 74 0a 61 72 65 61 2e 20 20   content.area.  
7080: 41 20 7a 65 72 6f 20 76 61 6c 75 65 20 66 6f 72  A zero value for
7090: 20 74 68 69 73 20 69 6e 74 65 67 65 72 20 69 73   this integer is
70a0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
70b0: 36 35 35 33 36 2e 29 5e 0a 3c 74 72 3e 3c 74 64  65536.)^.<tr><td
70c0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
70d0: 6c 69 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c  lign=top>7<td al
70e0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
70f0: 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e  n=top>1<td align
7100: 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 6f 6e 65 2d  =left>.^The one-
7110: 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20  byte integer at 
7120: 6f 66 66 73 65 74 20 37 20 67 69 76 65 73 20 74  offset 7 gives t
7130: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 61  he number of fra
7140: 67 6d 65 6e 74 65 64 20 66 72 65 65 0a 62 79 74  gmented free.byt
7150: 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63 65  es within the ce
7160: 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2e  ll content area.
7170: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
7180: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
7190: 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >8<td align=cent
71a0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c  er valign=top>4<
71b0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
71c0: 28 54 68 65 20 66 6f 75 72 2d 62 79 74 65 20 70  (The four-byte p
71d0: 61 67 65 20 6e 75 6d 62 65 72 20 61 74 20 6f 66  age number at of
71e0: 66 73 65 74 20 38 20 69 73 20 74 68 65 20 72 69  fset 8 is the ri
71f0: 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72  ght-most pointer
7200: 2e 20 20 54 68 69 73 0a 76 61 6c 75 65 20 61 70  .  This.value ap
7210: 70 65 61 72 73 20 69 6e 20 74 68 65 20 68 65 61  pears in the hea
7220: 64 65 72 20 6f 66 20 69 6e 74 65 72 69 6f 72 20  der of interior 
7230: 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e 6c  b-tree pages onl
7240: 79 20 61 6e 64 20 69 73 20 6f 6d 69 74 74 65 64  y and is omitted
7250: 20 66 72 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72 20   from.all other 
7260: 70 61 67 65 73 2e 29 5e 0a 3c 2f 74 61 62 6c 65  pages.)^.</table
7270: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 2f  ></blockquote></
7280: 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 54 68 65  center>..<p>^The
7290: 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72   cell pointer ar
72a0: 72 61 79 20 6f 66 20 61 20 62 2d 74 72 65 65 20  ray of a b-tree 
72b0: 70 61 67 65 20 69 6d 6d 65 64 69 61 74 65 6c 79  page immediately
72c0: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 62 2d 74   follows the b-t
72d0: 72 65 65 0a 70 61 67 65 20 68 65 61 64 65 72 2e  ree.page header.
72e0: 20 20 4c 65 74 20 4b 20 62 65 20 74 68 65 20 6e    Let K be the n
72f0: 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f  umber of cells o
7300: 6e 20 74 68 65 20 62 74 72 65 65 2e 20 20 5e 54  n the btree.  ^T
7310: 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 0a  he cell pointer.
7320: 61 72 72 61 79 20 63 6f 6e 73 69 73 74 73 20 6f  array consists o
7330: 66 20 4b 20 32 2d 62 79 74 65 20 69 6e 74 65 67  f K 2-byte integ
7340: 65 72 20 6f 66 66 73 65 74 73 20 74 6f 20 74 68  er offsets to th
7350: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e  e cell contents.
7360: 20 20 5e 54 68 65 0a 63 65 6c 6c 20 70 6f 69 6e    ^The.cell poin
7370: 74 65 72 73 20 61 72 65 20 61 72 72 61 6e 67 65  ters are arrange
7380: 64 20 69 6e 20 6b 65 79 20 6f 72 64 65 72 20 77  d in key order w
7390: 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 65  ith left-most ce
73a0: 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20 77 69 74  ll (the cell wit
73b0: 68 20 74 68 65 0a 73 6d 61 6c 6c 65 73 74 20 6b  h the.smallest k
73c0: 65 79 29 20 66 69 72 73 74 20 61 6e 64 20 74 68  ey) first and th
73d0: 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 63 65 6c  e right-most cel
73e0: 6c 20 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68  l (the cell with
73f0: 20 74 68 65 20 6c 61 72 67 65 73 74 0a 6b 65 79   the largest.key
7400: 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ) last.</p>..<p>
7410: 43 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20  Cell content is 
7420: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 63 65  stored in the ce
7430: 6c 6c 20 63 6f 6e 74 65 6e 74 20 72 65 67 69 6f  ll content regio
7440: 6e 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20  n of the b-tree 
7450: 70 61 67 65 2e 0a 53 51 4c 69 74 65 20 73 74 72  page..SQLite str
7460: 69 76 65 73 20 74 6f 20 70 6c 61 63 65 20 63 65  ives to place ce
7470: 6c 6c 73 20 61 73 20 66 61 72 20 74 6f 77 61 72  lls as far towar
7480: 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  d the end of the
7490: 20 62 2d 74 72 65 65 20 70 61 67 65 20 61 73 0a   b-tree page as.
74a0: 69 74 20 63 61 6e 2c 20 69 6e 20 6f 72 64 65 72  it can, in order
74b0: 20 74 6f 20 6c 65 61 76 65 20 73 70 61 63 65 20   to leave space 
74c0: 66 6f 72 20 66 75 74 75 72 65 20 67 72 6f 77 74  for future growt
74d0: 68 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 70 6f  h of the cell po
74e0: 69 6e 74 65 72 20 61 72 72 61 79 2e 0a 54 68 65  inter array..The
74f0: 20 61 72 65 61 20 69 6e 20 62 65 74 77 65 65 6e   area in between
7500: 20 74 68 65 20 6c 61 73 74 20 63 65 6c 6c 20 70   the last cell p
7510: 6f 69 6e 74 65 72 20 61 72 72 61 79 20 65 6e 74  ointer array ent
7520: 72 79 20 61 6e 64 20 74 68 65 20 62 65 67 69 6e  ry and the begin
7530: 6e 69 6e 67 20 6f 66 0a 74 68 65 20 66 69 72 73  ning of.the firs
7540: 74 20 63 65 6c 6c 20 69 73 20 74 68 65 20 75 6e  t cell is the un
7550: 61 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e  allocated region
7560: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61  ..</p>..<p>^If a
7570: 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6e   page contains n
7580: 6f 20 63 65 6c 6c 73 20 28 77 68 69 63 68 20 69  o cells (which i
7590: 73 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20  s only possible 
75a0: 66 6f 72 20 61 20 72 6f 6f 74 20 70 61 67 65 0a  for a root page.
75b0: 6f 66 20 61 20 74 61 62 6c 65 20 74 68 61 74 20  of a table that 
75c0: 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 72 6f 77 73  contains no rows
75d0: 29 20 74 68 65 6e 20 74 68 65 20 6f 66 66 73 65  ) then the offse
75e0: 74 20 74 6f 20 74 68 65 0a 63 65 6c 6c 20 63 6f  t to the.cell co
75f0: 6e 74 65 6e 74 20 61 72 65 61 20 77 69 6c 6c 20  ntent area will 
7600: 65 71 75 61 6c 20 74 68 65 20 70 61 67 65 20 73  equal the page s
7610: 69 7a 65 20 6d 69 6e 75 73 20 74 68 65 20 62 79  ize minus the by
7620: 74 65 73 20 6f 66 20 72 65 73 65 72 76 65 64 20  tes of reserved 
7630: 73 70 61 63 65 2e 0a 5e 28 49 66 20 74 68 65 20  space..^(If the 
7640: 64 61 74 61 62 61 73 65 20 75 73 65 73 20 61 20  database uses a 
7650: 36 35 35 33 36 2d 62 79 74 65 20 70 61 67 65 20  65536-byte page 
7660: 73 69 7a 65 20 61 6e 64 20 74 68 65 20 72 65 73  size and the res
7670: 65 72 76 65 64 20 73 70 61 63 65 20 69 73 20 7a  erved space is z
7680: 65 72 6f 0a 28 74 68 65 20 75 73 75 61 6c 20 76  ero.(the usual v
7690: 61 6c 75 65 20 66 6f 72 20 72 65 73 65 72 76 65  alue for reserve
76a0: 64 20 73 70 61 63 65 29 20 74 68 65 6e 20 74 68  d space) then th
76b0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f  e cell content o
76c0: 66 66 73 65 74 20 6f 66 20 61 6e 0a 65 6d 70 74  ffset of an.empt
76d0: 79 20 70 61 67 65 20 77 61 6e 74 73 20 74 6f 20  y page wants to 
76e0: 62 65 20 36 35 35 33 36 2e 20 20 0a 48 6f 77 65  be 65536.  .Howe
76f0: 76 65 72 2c 20 74 68 61 74 20 69 6e 74 65 67 65  ver, that intege
7700: 72 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 20 74  r is too large t
7710: 6f 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  o be stored in a
7720: 0a 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64  .2-byte unsigned
7730: 20 69 6e 74 65 67 65 72 2c 20 73 6f 20 61 20 76   integer, so a v
7740: 61 6c 75 65 20 6f 66 20 30 20 69 73 20 75 73 65  alue of 0 is use
7750: 64 20 69 6e 20 69 74 73 20 70 6c 61 63 65 2e 29  d in its place.)
7760: 5e 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63  ^..<p>A freebloc
7770: 6b 20 69 73 20 61 20 73 74 72 75 63 74 75 72 65  k is a structure
7780: 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66   used to identif
7790: 79 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70  y unallocated sp
77a0: 61 63 65 20 77 69 74 68 69 6e 0a 61 20 62 2d 74  ace within.a b-t
77b0: 72 65 65 20 70 61 67 65 2e 20 20 46 72 65 65 62  ree page.  Freeb
77c0: 6c 6f 63 6b 73 20 61 72 65 20 6f 72 67 61 6e 69  locks are organi
77d0: 7a 65 64 20 61 73 20 61 20 63 68 61 69 6e 2e 20  zed as a chain. 
77e0: 20 5e 54 68 65 20 66 69 72 73 74 20 32 20 62 79   ^The first 2 by
77f0: 74 65 73 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f  tes of.a freeblo
7800: 63 6b 20 61 72 65 20 61 20 62 69 67 2d 65 6e 64  ck are a big-end
7810: 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63  ian integer whic
7820: 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
7830: 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  in the b-tree pa
7840: 67 65 0a 6f 66 20 74 68 65 20 6e 65 78 74 20 66  ge.of the next f
7850: 72 65 65 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20  reeblock in the 
7860: 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69  chain, or zero i
7870: 66 20 74 68 65 20 66 72 65 65 62 6c 6f 63 6b 20  f the freeblock 
7880: 69 73 20 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74  is the last on.t
7890: 68 65 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20  he chain.  ^The 
78a0: 74 68 69 72 64 20 61 6e 64 20 66 6f 75 72 74 68  third and fourth
78b0: 20 62 79 74 65 73 20 6f 66 20 65 61 63 68 20 66   bytes of each f
78c0: 72 65 65 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20  reeblock form.a 
78d0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
78e0: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
78f0: 73 69 7a 65 20 6f 66 20 74 68 65 20 66 72 65 65  size of the free
7900: 62 6c 6f 63 6b 20 69 6e 20 62 79 74 65 73 2c 20  block in bytes, 
7910: 69 6e 63 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d  including.the 4-
7920: 62 79 74 65 20 68 65 61 64 65 72 2e 20 20 5e 46  byte header.  ^F
7930: 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c  reeblocks are al
7940: 77 61 79 73 20 63 6f 6e 6e 65 63 74 65 64 20 69  ways connected i
7950: 6e 20 6f 72 64 65 72 20 0a 6f 66 20 69 6e 63 72  n order .of incr
7960: 65 61 73 69 6e 67 20 6f 66 66 73 65 74 2e 20 20  easing offset.  
7970: 5e 54 68 65 20 73 65 63 6f 6e 64 20 66 69 65 6c  ^The second fiel
7980: 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20  d of the b-tree 
7990: 70 61 67 65 20 68 65 61 64 65 72 20 69 73 20 74  page header is t
79a0: 68 65 0a 6f 66 66 73 65 74 20 6f 66 20 74 68 65  he.offset of the
79b0: 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b   first freeblock
79c0: 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65  , or zero if the
79d0: 72 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c  re are no freebl
79e0: 6f 63 6b 73 20 6f 6e 20 74 68 65 0a 70 61 67 65  ocks on the.page
79f0: 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f  .  ^In a well-fo
7a00: 72 6d 65 64 20 62 2d 74 72 65 65 20 70 61 67 65  rmed b-tree page
7a10: 2c 20 74 68 65 72 65 20 77 69 6c 6c 20 61 6c 77  , there will alw
7a20: 61 79 73 20 62 65 20 61 74 20 6c 65 61 73 74 20  ays be at least 
7a30: 6f 6e 65 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20  one cell.before 
7a40: 74 68 65 20 66 69 72 73 74 20 66 72 65 65 62 6c  the first freebl
7a50: 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66  ock.</p>..<p>A f
7a60: 72 65 65 62 6c 6f 63 6b 20 72 65 71 75 69 72 65  reeblock require
7a70: 73 20 61 74 20 6c 65 61 73 74 20 34 20 62 79 74  s at least 4 byt
7a80: 65 73 20 6f 66 20 73 70 61 63 65 2e 20 20 49 66  es of space.  If
7a90: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 73 6f   there is an iso
7aa0: 6c 61 74 65 64 0a 67 72 6f 75 70 20 6f 66 20 31  lated.group of 1
7ab0: 2c 20 32 2c 20 6f 72 20 33 20 75 6e 75 73 65 64  , 2, or 3 unused
7ac0: 20 62 79 74 65 73 20 77 69 74 68 69 6e 20 74 68   bytes within th
7ad0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61  e cell content a
7ae0: 72 65 61 2c 20 74 68 6f 73 65 20 62 79 74 65 73  rea, those bytes
7af0: 0a 63 6f 6d 70 72 69 73 65 20 61 20 66 72 61 67  .comprise a frag
7b00: 6d 65 6e 74 2e 20 20 5e 54 68 65 20 74 6f 74 61  ment.  ^The tota
7b10: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
7b20: 73 20 69 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e  s in all fragmen
7b30: 74 73 20 69 73 20 73 74 6f 72 65 64 0a 69 6e 20  ts is stored.in 
7b40: 74 68 65 20 66 69 66 74 68 20 66 69 65 6c 64 20  the fifth field 
7b50: 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  of the b-tree pa
7b60: 67 65 20 68 65 61 64 65 72 2e 20 20 5e 49 6e 20  ge header.  ^In 
7b70: 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d  a well-formed b-
7b80: 74 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20 74  tree page,.the t
7b90: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
7ba0: 79 74 65 73 20 69 6e 20 66 72 61 67 6d 65 6e 74  ytes in fragment
7bb0: 73 20 6d 61 79 20 6e 6f 74 20 65 78 63 65 65 64  s may not exceed
7bc0: 20 36 30 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65   60.</p>..<p>The
7bd0: 20 74 6f 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66   total amount of
7be0: 20 66 72 65 65 20 73 70 61 63 65 20 6f 6e 20 61   free space on a
7bf0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 63 6f 6e   b-tree page con
7c00: 73 69 73 74 73 20 6f 66 20 74 68 65 20 73 69 7a  sists of the siz
7c10: 65 0a 6f 66 20 74 68 65 20 75 6e 61 6c 6c 6f 63  e.of the unalloc
7c20: 61 74 65 64 20 72 65 67 69 6f 6e 20 70 6c 75 73  ated region plus
7c30: 20 74 68 65 20 74 6f 74 61 6c 20 73 69 7a 65 20   the total size 
7c40: 6f 66 20 61 6c 6c 20 66 72 65 65 62 6c 6f 63 6b  of all freeblock
7c50: 73 20 70 6c 75 73 20 74 68 65 0a 6e 75 6d 62 65  s plus the.numbe
7c60: 72 20 6f 66 20 66 72 61 67 6d 65 6e 74 65 64 20  r of fragmented 
7c70: 66 72 65 65 20 62 79 74 65 73 2e 20 20 5e 53 51  free bytes.  ^SQ
7c80: 4c 69 74 65 20 6d 61 79 20 66 72 6f 6d 20 74 69  Lite may from ti
7c90: 6d 65 20 74 6f 20 74 69 6d 65 20 72 65 6f 72 67  me to time reorg
7ca0: 61 6e 69 7a 65 0a 61 20 62 2d 74 72 65 65 20 70  anize.a b-tree p
7cb0: 61 67 65 20 73 6f 20 74 68 61 74 20 74 68 65 72  age so that ther
7cc0: 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f  e are no freeblo
7cd0: 63 6b 73 20 6f 72 20 66 72 61 67 6d 65 6e 74 20  cks or fragment 
7ce0: 62 79 74 65 73 2c 20 61 6c 6c 0a 75 6e 75 73 65  bytes, all.unuse
7cf0: 64 20 62 79 74 65 73 20 61 72 65 20 63 6f 6e 74  d bytes are cont
7d00: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 75 6e 61  ained in the una
7d10: 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 72  llocated space r
7d20: 65 67 69 6f 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63  egion, and all.c
7d30: 65 6c 6c 73 20 61 72 65 20 70 61 63 6b 65 64 20  ells are packed 
7d40: 74 69 67 68 74 6c 79 20 61 74 20 74 68 65 20 65  tightly at the e
7d50: 6e 64 20 6f 66 20 74 68 65 20 70 61 67 65 2e 20  nd of the page. 
7d60: 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
7d70: 0a 22 64 65 66 72 61 67 6d 65 6e 74 69 6e 67 22  ."defragmenting"
7d80: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
7d90: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
7da0: 72 61 67 6d 65 6e 74 20 76 61 72 69 6e 74 20 7b  ragment varint {
7db0: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
7dc0: 69 6e 74 65 67 65 72 7d 20 7b 76 61 72 69 6e 74  integer} {varint
7dd0: 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61  }</tcl>..<p>A va
7de0: 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
7df0: 74 65 67 65 72 20 6f 72 20 22 76 61 72 69 6e 74  teger or "varint
7e00: 22 20 69 73 20 61 20 73 74 61 74 69 63 20 48 75  " is a static Hu
7e10: 66 66 6d 61 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f  ffman encoding.o
7e20: 66 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f  f 64-bit twos-co
7e30: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
7e40: 73 20 74 68 61 74 20 75 73 65 73 20 6c 65 73 73  s that uses less
7e50: 20 73 70 61 63 65 20 66 6f 72 20 73 6d 61 6c 6c   space for small
7e60: 20 70 6f 73 69 74 69 76 65 20 0a 76 61 6c 75 65   positive .value
7e70: 73 2e 20 0a 41 20 76 61 72 69 6e 74 20 69 73 20  s. .A varint is 
7e80: 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 39 20  between 1 and 9 
7e90: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e  bytes in length.
7ea0: 20 20 54 68 65 20 76 61 72 69 6e 74 20 63 6f 6e    The varint con
7eb0: 73 69 73 74 73 20 6f 66 20 65 69 74 68 65 72 0a  sists of either.
7ec0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74  zero or more byt
7ed0: 65 20 77 68 69 63 68 20 68 61 76 65 20 74 68 65  e which have the
7ee0: 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
7ef0: 73 65 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  set followed by 
7f00: 61 20 73 69 6e 67 6c 65 20 62 79 74 65 0a 77 69  a single byte.wi
7f10: 74 68 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65  th the high-orde
7f20: 72 20 62 69 74 20 63 6c 65 61 72 2c 20 6f 72 20  r bit clear, or 
7f30: 6e 69 6e 65 20 62 79 74 65 73 2c 20 77 68 69 63  nine bytes, whic
7f40: 68 65 76 65 72 20 69 73 20 73 68 6f 72 74 65 72  hever is shorter
7f50: 2e 0a 54 68 65 20 6c 6f 77 65 72 20 73 65 76 65  ..The lower seve
7f60: 6e 20 62 69 74 73 20 6f 66 20 65 61 63 68 20 6f  n bits of each o
7f70: 66 20 74 68 65 20 66 69 72 73 74 20 65 69 67 68  f the first eigh
7f80: 74 20 62 79 74 65 73 20 61 6e 64 20 61 6c 6c 20  t bytes and all 
7f90: 38 20 62 69 74 73 20 6f 66 0a 74 68 65 20 6e 69  8 bits of.the ni
7fa0: 6e 74 68 20 62 79 74 65 20 61 72 65 20 75 73 65  nth byte are use
7fb0: 64 20 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74  d to reconstruct
7fc0: 20 74 68 65 20 36 34 2d 62 69 74 20 74 77 6f 73   the 64-bit twos
7fd0: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
7fe0: 67 65 72 2e 0a 56 61 72 69 6e 74 73 20 61 72 65  ger..Varints are
7ff0: 20 62 69 67 2d 65 6e 64 69 61 6e 3a 20 62 69 74   big-endian: bit
8000: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65  s taken from the
8010: 20 65 61 72 6c 69 65 72 20 62 79 74 65 20 6f 66   earlier byte of
8020: 20 74 68 65 20 76 61 72 69 6e 74 0a 61 72 65 20   the varint.are 
8030: 74 68 65 20 6d 6f 72 65 20 73 69 67 6e 69 66 69  the more signifi
8040: 63 61 6e 74 20 74 68 61 6e 20 62 69 74 73 20 74  cant than bits t
8050: 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 6c 61  aken from the la
8060: 74 65 72 20 62 79 74 65 73 2e 20 3c 2f 70 3e 0a  ter bytes. </p>.
8070: 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 6f  .<p>The format o
8080: 66 20 61 20 63 65 6c 6c 20 64 65 70 65 6e 64 73  f a cell depends
8090: 20 6f 6e 20 77 68 69 63 68 20 6b 69 6e 64 20 6f   on which kind o
80a0: 66 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68  f b-tree page th
80b0: 65 20 63 65 6c 6c 0a 61 70 70 65 61 72 73 20 6f  e cell.appears o
80c0: 6e 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  n.  The followin
80d0: 67 20 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68  g table shows th
80e0: 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61 20  e elements of a 
80f0: 63 65 6c 6c 2c 20 69 6e 0a 6f 72 64 65 72 20 6f  cell, in.order o
8100: 66 20 61 70 70 65 61 72 61 6e 63 65 2c 20 66 6f  f appearance, fo
8110: 72 20 74 68 65 20 76 61 72 69 6f 75 73 20 62 2d  r the various b-
8120: 74 72 65 65 20 70 61 67 65 20 74 79 70 65 73 2e  tree page types.
8130: 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
8140: 65 3e 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61  e><dl>.<dt><p>Ta
8150: 62 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20  ble B-Tree Leaf 
8160: 43 65 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30  Cell (header 0x0
8170: 64 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64  d):</p></dt>.<dd
8180: 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76  ><p><ul>.<li>A v
8190: 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
81a0: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
81b0: 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c  of bytes of payl
81c0: 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61  oad, including a
81d0: 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e  ny.overflow.<li>
81e0: 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  A varint which i
81f0: 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65  s the integer ke
8200: 79 2c 20 61 2e 6b 2e 61 2e 20 22 5b 72 6f 77 69  y, a.k.a. "[rowi
8210: 64 5d 22 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74  d]".<li>The init
8220: 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74  ial portion of t
8230: 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20  he payload that 
8240: 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74  does not spill t
8250: 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73  o overflow.pages
8260: 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62  ..<li>A 4-byte b
8270: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
8280: 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  r page number fo
8290: 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67 65  r the first page
82a0: 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77   of the.overflow
82b0: 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69   page list - omi
82c0: 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c  tted if all payl
82d0: 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20  oad fits on the 
82e0: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75  b-tree page..</u
82f0: 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  l></p></dd>..<dt
8300: 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65  ><p>Table B-Tree
8310: 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 20 28   Interior Cell (
8320: 68 65 61 64 65 72 20 30 78 30 35 29 3a 3c 2f 70  header 0x05):</p
8330: 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75  ></dt>.<dd><p><u
8340: 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  l>.<li>A 4-byte 
8350: 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20  big-endian page 
8360: 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20  number which is 
8370: 74 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70  the left child p
8380: 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61  ointer..<li>A va
8390: 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
83a0: 65 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 3c 2f  e integer key.</
83b0: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ul></p></dd>..<d
83c0: 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65  t><p>Index B-Tre
83d0: 65 20 4c 65 61 66 20 43 65 6c 6c 20 28 68 65 61  e Leaf Cell (hea
83e0: 64 65 72 20 30 78 30 61 29 3a 3c 2f 70 3e 3c 2f  der 0x0a):</p></
83f0: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a  dt>.<dd><p><ul>.
8400: 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69  <li>A varint whi
8410: 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ch is the total 
8420: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
8430: 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20  of key payload, 
8440: 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76  including any.ov
8450: 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69  erflow.<li>The i
8460: 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f  nitial portion o
8470: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68  f the payload th
8480: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c  at does not spil
8490: 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61  l to overflow.pa
84a0: 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  ges..<li>A 4-byt
84b0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
84c0: 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72  eger page number
84d0: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70   for the first p
84e0: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
84f0: 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20  low page list - 
8500: 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70  omitted if all p
8510: 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74  ayload fits on t
8520: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
8530: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  </ul></p></dd>..
8540: 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54  <dt><p>Index B-T
8550: 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c  ree Interior Cel
8560: 6c 20 28 68 65 61 64 65 72 20 30 78 30 32 29 3a  l (header 0x02):
8570: 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </p></dt>.<dd><p
8580: 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ><ul>.<li>A 4-by
8590: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 70 61 67  te big-endianpag
85a0: 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69  e number which i
85b0: 73 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c 64  s the left child
85c0: 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20   pointer..<li>A 
85d0: 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
85e0: 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
85f0: 20 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65 79   of bytes of key
8600: 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64   payload, includ
8610: 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77  ing any.overflow
8620: 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c  .<li>The initial
8630: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20   portion of the 
8640: 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65  payload that doe
8650: 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f  s not spill to o
8660: 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c  verflow.pages..<
8670: 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d  li>A 4-byte big-
8680: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70  endian integer p
8690: 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  age number for t
86a0: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66  he first page of
86b0: 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61   the.overflow pa
86c0: 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65  ge list - omitte
86d0: 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64  d if all payload
86e0: 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74   fits on the b-t
86f0: 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c  ree page..</ul><
8700: 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f  /p></dd>.</dl></
8710: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
8720: 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  The information 
8730: 61 62 6f 76 65 20 63 61 6e 20 62 65 20 72 65 63  above can be rec
8740: 61 73 74 20 69 6e 74 6f 20 61 20 74 61 62 6c 65  ast into a table
8750: 20 66 6f 72 6d 61 74 20 61 73 20 66 6f 6c 6c 6f   format as follo
8760: 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ws:</p>..<tcl>hd
8770: 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c 66 6f  _fragment cellfo
8780: 72 6d 61 74 20 7b 63 65 6c 6c 20 66 6f 72 6d 61  rmat {cell forma
8790: 74 20 73 75 6d 6d 61 72 79 7d 3c 2f 74 63 6c 3e  t summary}</tcl>
87a0: 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74  .<center>.<i>B-t
87b0: 72 65 65 20 43 65 6c 6c 20 46 6f 72 6d 61 74 3c  ree Cell Format<
87c0: 2f 69 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  /i>.<table borde
87d0: 72 3d 31 20 77 69 64 74 68 3d 22 38 30 25 22 3e  r=1 width="80%">
87e0: 0a 3c 74 72 3e 3c 74 68 20 72 6f 77 73 70 61 6e  .<tr><th rowspan
87f0: 3d 32 3e 44 61 74 61 74 79 70 65 0a 20 20 20 20  =2>Datatype.    
8800: 3c 74 68 20 63 6f 6c 73 70 61 6e 3d 34 3e 41 70  <th colspan=4>Ap
8810: 70 65 61 72 73 20 69 6e 2e 2e 2e 0a 20 20 20 20  pears in....    
8820: 3c 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 65  <th rowspan=2>De
8830: 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74  scription.<tr><t
8840: 68 3e 54 61 62 6c 65 20 4c 65 61 66 20 28 30 78  h>Table Leaf (0x
8850: 30 64 29 0a 20 20 20 20 3c 74 68 3e 54 61 62 6c  0d).    <th>Tabl
8860: 65 20 49 6e 74 65 72 69 6f 72 20 28 30 78 30 35  e Interior (0x05
8870: 29 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20  ).    <th>Index 
8880: 4c 65 61 66 20 28 30 78 30 61 29 0a 20 20 20 20  Leaf (0x0a).    
8890: 3c 74 68 3e 49 6e 64 65 78 20 49 6e 74 65 72 69  <th>Index Interi
88a0: 6f 72 20 28 30 78 30 32 29 0a 3c 74 72 3e 3c 74  or (0x02).<tr><t
88b0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
88c0: 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65  align=top>4-byte
88d0: 20 69 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64   integer.    <td
88e0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
88f0: 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a  lign=top>&nbsp;.
8900: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8910: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8920: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8930: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8940: 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a  lign=top>&nbsp;.
8950: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8960: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8970: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8980: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65   align=left>Page
8990: 20 6e 75 6d 62 65 72 20 6f 66 20 6c 65 66 74 20   number of left 
89a0: 63 68 69 6c 64 0a 3c 74 72 3e 3c 74 64 20 61 6c  child.<tr><td al
89b0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
89c0: 6e 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20  n=top>varint.   
89d0: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
89e0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
89f0: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8a00: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8a10: 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20  n=top>&nbsp;.   
8a20: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8a30: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8a40: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8a50: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8a60: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8a70: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66     <td align=lef
8a80: 74 3e 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  t>Number of byte
8a90: 73 20 6f 66 20 70 61 79 6c 6f 61 64 0a 3c 74 72  s of payload.<tr
8aa0: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
8ab0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72  r valign=top>var
8ac0: 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  int.    <td alig
8ad0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8ae0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8af0: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8b00: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8b10: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8b20: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8b30: 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20  n=top>&nbsp;.   
8b40: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8b50: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
8b60: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
8b70: 6e 3d 6c 65 66 74 3e 52 6f 77 69 64 0a 3c 74 72  n=left>Rowid.<tr
8b80: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
8b90: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 62 79 74  r valign=top>byt
8ba0: 65 20 61 72 72 61 79 0a 20 20 20 20 3c 74 64 20  e array.    <td 
8bb0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8bc0: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8bd0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8be0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8bf0: 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20  >&nbsp;.    <td 
8c00: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8c10: 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b  ign=top>&#x2714;
8c20: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8c30: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8c40: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8c50: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 79  d align=left>Pay
8c60: 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  load.<tr><td ali
8c70: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8c80: 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65  =top>4-byte inte
8c90: 67 65 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  ger.    <td alig
8ca0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8cb0: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8cc0: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8cd0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62  r valign=top>&nb
8ce0: 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  sp;.    <td alig
8cf0: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8d00: 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20  top>&#x2714;.   
8d10: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8d20: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8d30: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8d40: 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75  ign=left>Page nu
8d50: 6d 62 65 72 20 6f 66 20 66 69 72 73 74 20 6f 76  mber of first ov
8d60: 65 72 66 6c 6f 77 20 70 61 67 65 0a 3c 2f 74 61  erflow page.</ta
8d70: 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a  ble></center>...
8d80: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
8d90: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8da0: 3e 0a 0a 3c 70 3e 54 68 65 20 61 6d 6f 75 6e 74  >..<p>The amount
8db0: 20 6f 66 20 70 61 79 6c 6f 61 64 20 74 68 61 74   of payload that
8dc0: 20 73 70 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76 65   spills onto ove
8dd0: 72 66 6c 6f 77 20 70 61 67 65 73 20 61 6c 73 6f  rflow pages also
8de0: 20 64 65 70 65 6e 64 73 20 6f 6e 0a 74 68 65 20   depends on.the 
8df0: 70 61 67 65 20 74 79 70 65 2e 20 20 46 6f 72 20  page type.  For 
8e00: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
8e10: 6d 70 75 74 61 74 69 6f 6e 73 2c 20 6c 65 74 20  mputations, let 
8e20: 55 20 62 65 20 74 68 65 20 75 73 61 62 6c 65 20  U be the usable 
8e30: 73 69 7a 65 0a 6f 66 20 61 20 64 61 74 61 62 61  size.of a databa
8e40: 73 65 20 70 61 67 65 2c 20 74 68 65 20 74 6f 74  se page, the tot
8e50: 61 6c 20 70 61 67 65 20 73 69 7a 65 20 6c 65 73  al page size les
8e60: 73 20 74 68 65 20 72 65 73 65 72 76 65 64 20 73  s the reserved s
8e70: 70 61 63 65 20 61 74 20 74 68 65 0a 65 6e 64 20  pace at the.end 
8e80: 6f 66 20 65 61 63 68 20 70 61 67 65 2e 20 20 41  of each page.  A
8e90: 6e 64 20 6c 65 74 20 50 20 62 65 20 74 68 65 20  nd let P be the 
8ea0: 70 61 79 6c 6f 61 64 20 73 69 7a 65 2e 3c 2f 70  payload size.</p
8eb0: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
8ec0: 64 6c 3e 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d  dl>.<dt>Table B-
8ed0: 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c  Tree Leaf Cell:<
8ee0: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 49 66  /dt>.<dd><p>.^If
8ef0: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a   the payload siz
8f00: 65 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e  e P is less than
8f10: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 55 2d 33   or equal to U-3
8f20: 35 20 74 68 65 6e 0a 74 68 65 20 65 6e 74 69 72  5 then.the entir
8f30: 65 20 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f  e payload is sto
8f40: 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65  red on the b-tre
8f50: 65 20 6c 65 61 66 20 70 61 67 65 2e 20 20 0a 5e  e leaf page.  .^
8f60: 28 4c 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32  (Let M be ((U-12
8f70: 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e 20 20 49  )*32/255)-23.  I
8f80: 66 20 50 20 69 73 20 67 72 65 61 74 65 72 20 74  f P is greater t
8f90: 68 61 6e 20 55 2d 33 35 0a 74 68 65 6e 20 74 68  han U-35.then th
8fa0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
8fb0: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62   stored on the b
8fc0: 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65 20  -tree leaf page 
8fd0: 69 73 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f  is the smaller o
8fe0: 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29  f.M+((P-M)%(U-4)
8ff0: 29 20 61 6e 64 20 55 2d 33 35 2e 29 5e 0a 5e 28  ) and U-35.)^.^(
9000: 4e 6f 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72  Note that number
9010: 20 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65 64   of bytes stored
9020: 20 6f 6e 20 74 68 65 20 6c 65 61 66 20 70 61 67   on the leaf pag
9030: 65 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20  e is never less 
9040: 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f  than M.)^.</p></
9050: 64 64 3e 0a 0a 3c 64 74 3e 54 61 62 6c 65 20 42  dd>..<dt>Table B
9060: 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43  -Tree Interior C
9070: 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  ell:</dt>.<dd><p
9080: 3e 0a 49 6e 74 65 72 69 6f 72 20 70 61 67 65 73  >.Interior pages
9090: 20 6f 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65   of table b-tree
90a0: 73 20 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61  s have no payloa
90b0: 64 20 61 6e 64 20 73 6f 20 74 68 65 72 65 20 69  d and so there i
90c0: 73 20 6e 65 76 65 72 0a 61 6e 79 20 70 61 79 6c  s never.any payl
90d0: 6f 61 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f  oad to spill..</
90e0: 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 49 6e 64  p></dd>..<dt>Ind
90f0: 65 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20 4f  ex B-Tree Leaf O
9100: 72 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a  r Interior Cell:
9110: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28  </dt>.<dd><p>.^(
9120: 4c 65 74 20 58 20 62 65 20 28 28 55 2d 31 32 29  Let X be ((U-12)
9130: 2a 36 34 2f 32 35 35 29 2d 32 33 29 2e 20 20 49  *64/255)-23).  I
9140: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69  f the payload si
9150: 7a 65 20 50 20 69 73 20 6c 65 73 73 20 74 68 61  ze P is less tha
9160: 6e 0a 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20  n.or equal to X 
9170: 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20  then the entire 
9180: 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65  payload is store
9190: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
91a0: 70 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20  page.)^.^(Let M 
91b0: 62 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35  be ((U-12)*32/25
91c0: 35 29 2d 32 33 2e 20 20 49 66 20 50 20 69 73 20  5)-23.  If P is 
91d0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 58 20 74  greater than X t
91e0: 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  hen the number.o
91f0: 66 20 62 79 74 65 20 73 74 6f 72 65 64 20 6f 6e  f byte stored on
9200: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
9210: 20 69 73 20 74 68 65 20 73 6d 61 6c 6c 65 72 20   is the smaller 
9220: 6f 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34  of.M+((P-M)%(U-4
9230: 29 29 20 61 6e 64 20 58 2e 29 5e 0a 5e 28 4e 6f  )) and X.)^.^(No
9240: 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20 6f  te that number o
9250: 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f  f bytes stored o
9260: 6e 20 74 68 65 20 69 6e 64 65 78 20 70 61 67 65  n the index page
9270: 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74   is never less t
9280: 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64  han M.)^.</p></d
9290: 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71  d>.</dl></blockq
92a0: 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76  uote>..<p>The ov
92b0: 65 72 66 6c 6f 77 20 74 68 72 65 73 68 6f 6c 64  erflow threshold
92c0: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
92d0: 6f 20 67 69 76 65 20 61 20 6d 69 6e 69 6d 75 6d  o give a minimum
92e0: 20 66 61 6e 6f 75 74 20 6f 66 0a 34 20 66 6f 72   fanout of.4 for
92f0: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20 61   index b-trees a
9300: 6e 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  nd to make sure 
9310: 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 70 61  enough of the pa
9320: 79 6c 6f 61 64 0a 69 73 20 6f 6e 20 74 68 65 20  yload.is on the 
9330: 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 61 74  b-tree page that
9340: 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
9350: 65 72 20 63 61 6e 20 75 73 75 61 6c 6c 79 20 62  er can usually b
9360: 65 20 61 63 63 65 73 73 65 64 0a 77 69 74 68 6f  e accessed.witho
9370: 75 74 20 63 6f 6e 73 75 6c 74 69 6e 67 20 61 6e  ut consulting an
9380: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2e 20   overflow page. 
9390: 20 49 6e 20 68 69 6e 64 73 69 67 68 74 2c 20 74   In hindsight, t
93a0: 68 65 20 64 65 73 69 67 6e 65 72 73 20 6f 66 0a  he designers of.
93b0: 74 68 65 20 53 51 4c 69 74 65 20 62 2d 74 72 65  the SQLite b-tre
93c0: 65 20 6c 6f 67 69 63 20 72 65 61 6c 69 7a 65 20  e logic realize 
93d0: 74 68 61 74 20 74 68 65 73 65 20 74 68 72 65 73  that these thres
93e0: 68 6f 6c 64 73 20 63 6f 75 6c 64 20 68 61 76 65  holds could have
93f0: 20 62 65 65 6e 0a 6d 61 64 65 20 6d 75 63 68 20   been.made much 
9400: 73 69 6d 70 6c 65 72 2e 20 20 48 6f 77 65 76 65  simpler.  Howeve
9410: 72 2c 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69  r, the computati
9420: 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 63 68  ons cannot be ch
9430: 61 6e 67 65 64 0a 77 69 74 68 6f 75 74 20 72 65  anged.without re
9440: 73 75 6c 74 69 6e 67 20 69 6e 20 61 6e 20 69 6e  sulting in an in
9450: 63 6f 6d 70 61 74 69 62 6c 65 20 66 69 6c 65 20  compatible file 
9460: 66 6f 72 6d 61 74 2e 20 20 41 6e 64 20 74 68 65  format.  And the
9470: 20 63 75 72 72 65 6e 74 20 63 6f 6d 70 75 74 61   current computa
9480: 74 69 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c 2c  tions.work well,
9490: 20 65 76 65 6e 20 69 66 20 74 68 65 79 20 61 72   even if they ar
94a0: 65 20 61 20 6c 69 74 74 6c 65 20 63 6f 6d 70 6c  e a little compl
94b0: 65 78 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ex.</p>..<tcl>hd
94c0: 5f 66 72 61 67 6d 65 6e 74 20 6f 76 66 6c 70 67  _fragment ovflpg
94d0: 73 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  s {overflow page
94e0: 7d 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  } {overflow page
94f0: 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 36  s}</tcl>.<h3>1.6
9500: 20 43 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f 76   Cell Payload Ov
9510: 65 72 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68 33  erflow Pages</h3
9520: 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20  >..<p>^When the 
9530: 70 61 79 6c 6f 61 64 20 6f 66 20 61 20 62 2d 74  payload of a b-t
9540: 72 65 65 20 63 65 6c 6c 20 69 73 20 74 6f 6f 20  ree cell is too 
9550: 6c 61 72 67 65 20 66 6f 72 20 74 68 65 20 62 2d  large for the b-
9560: 74 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20 73  tree page,.the s
9570: 75 72 70 6c 75 73 20 69 73 20 73 70 69 6c 6c 65  urplus is spille
9580: 64 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20  d onto overflow 
9590: 70 61 67 65 73 2e 20 20 5e 4f 76 65 72 66 6c 6f  pages.  ^Overflo
95a0: 77 20 70 61 67 65 73 20 66 6f 72 6d 20 61 20 6c  w pages form a l
95b0: 69 6e 6b 65 64 0a 6c 69 73 74 2e 20 20 5e 54 68  inked.list.  ^Th
95c0: 65 20 66 69 72 73 74 20 66 6f 75 72 20 62 79 74  e first four byt
95d0: 65 73 20 6f 66 20 65 61 63 68 20 6f 76 65 72 66  es of each overf
95e0: 6c 6f 77 20 70 61 67 65 20 61 72 65 20 61 20 62  low page are a b
95f0: 69 67 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67 65  ig-endian.intege
9600: 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 70  r which is the p
9610: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
9620: 65 20 6e 65 78 74 20 70 61 67 65 20 69 6e 20 74  e next page in t
9630: 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72  he chain, or zer
9640: 6f 0a 66 6f 72 20 74 68 65 20 66 69 6e 61 6c 20  o.for the final 
9650: 70 61 67 65 20 69 6e 20 74 68 65 20 63 68 61 69  page in the chai
9660: 6e 2e 20 20 5e 54 68 65 20 66 69 66 74 68 20 62  n.  ^The fifth b
9670: 79 74 65 20 74 68 72 6f 75 67 68 20 74 68 65 20  yte through the 
9680: 6c 61 73 74 20 75 73 61 62 6c 65 0a 62 79 74 65  last usable.byte
9690: 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c   are used to hol
96a0: 64 20 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74 65  d overflow conte
96b0: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 37  nt.</p>..<h3>1.7
96c0: 20 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72 20   Pointer Map or 
96d0: 50 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68 33  Ptrmap Pages</h3
96e0: 3e 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d 61  >..<p>Pointer ma
96f0: 70 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67 65  p or ptrmap page
9700: 73 20 61 72 65 20 65 78 74 72 61 20 70 61 67 65  s are extra page
9710: 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
9720: 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f 20  the database.to 
9730: 6d 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74 69  make the operati
9740: 6f 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63 75  on of [auto_vacu
9750: 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65  um] and [increme
9760: 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64  ntal_vacuum] mod
9770: 65 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65 6e  es.more efficien
9780: 74 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20 74  t.  Other page t
9790: 79 70 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  ypes in the data
97a0: 62 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20 68  base typically h
97b0: 61 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72 6f  ave pointers.fro
97c0: 6d 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69 6c  m parent to chil
97d0: 64 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  d.  For example,
97e0: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74   an interior b-t
97f0: 72 65 65 20 70 61 67 65 20 63 6f 6e 74 61 69 6e  ree page contain
9800: 73 20 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69 74  s pointers.to it
9810: 73 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70  s child b-tree p
9820: 61 67 65 73 20 61 6e 64 20 61 6e 20 6f 76 65 72  ages and an over
9830: 66 6c 6f 77 20 63 68 61 69 6e 20 68 61 73 20 61  flow chain has a
9840: 20 70 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65 61   pointer.from ea
9850: 72 6c 69 65 72 20 74 6f 20 6c 61 74 65 72 20 6c  rlier to later l
9860: 69 6e 6b 73 20 69 6e 20 74 68 65 20 63 68 61 69  inks in the chai
9870: 6e 2e 20 20 41 20 70 74 72 6d 61 70 20 70 61 67  n.  A ptrmap pag
9880: 65 20 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b 61  e contains linka
9890: 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67  ge.information g
98a0: 6f 69 6e 67 20 69 6e 20 74 68 65 20 6f 70 70 6f  oing in the oppo
98b0: 73 69 74 65 20 64 69 72 65 63 74 69 6f 6e 2c 20  site direction, 
98c0: 66 72 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70 61  from child to pa
98d0: 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50  rent.</p>..<p>^P
98e0: 74 72 6d 61 70 20 70 61 67 65 73 20 6d 75 73 74  trmap pages must
98f0: 20 65 78 69 73 74 20 69 6e 20 61 6e 79 20 64 61   exist in any da
9900: 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 69 63  tabase file whic
9910: 68 20 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f  h has a non-zero
9920: 0a 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d  .largest root b-
9930: 74 72 65 65 20 70 61 67 65 20 76 61 6c 75 65 20  tree page value 
9940: 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 6e 20  at offset 52 in 
9950: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
9960: 64 65 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61 72  der..^If the lar
9970: 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65  gest root b-tree
9980: 20 70 61 67 65 20 76 61 6c 75 65 20 69 73 20 7a   page value is z
9990: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 64 61  ero, then the da
99a0: 74 61 62 61 73 65 20 6d 75 73 74 20 6e 6f 74 0a  tabase must not.
99b0: 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70  contain ptrmap p
99c0: 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ages.</p>..<p>^I
99d0: 6e 20 61 20 64 61 74 61 62 61 73 65 20 77 69 74  n a database wit
99e0: 68 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20  h ptrmap pages, 
99f0: 74 68 65 20 66 69 72 73 74 20 70 74 72 6d 61 70  the first ptrmap
9a00: 20 70 61 67 65 20 69 73 20 70 61 67 65 20 32 2e   page is page 2.
9a10: 0a 41 20 70 74 72 6d 61 70 20 70 61 67 65 20 63  .A ptrmap page c
9a20: 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72  onsists of an ar
9a30: 72 61 79 20 6f 66 20 35 2d 62 79 74 65 20 65 6e  ray of 5-byte en
9a40: 74 72 69 65 73 2e 20 20 4c 65 74 20 4a 20 62 65  tries.  Let J be
9a50: 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 35   the.number of 5
9a60: 2d 62 79 74 65 20 65 6e 74 72 69 65 73 20 74 68  -byte entries th
9a70: 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74  at will fit in t
9a80: 68 65 20 75 73 61 62 6c 65 20 73 70 61 63 65 20  he usable space 
9a90: 6f 66 20 61 20 70 61 67 65 2e 0a 28 49 6e 20 6f  of a page..(In o
9aa0: 74 68 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55 2f  ther words, J=U/
9ab0: 35 2e 29 20 20 5e 54 68 65 20 66 69 72 73 74 20  5.)  ^The first 
9ac0: 70 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c  ptrmap page will
9ad0: 20 63 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70 6f   contain back po
9ae0: 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f  inter.informatio
9af0: 6e 20 66 6f 72 20 70 61 67 65 73 20 33 20 74 68  n for pages 3 th
9b00: 72 6f 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c 75  rough J+2, inclu
9b10: 73 69 76 65 2e 20 20 5e 54 68 65 20 73 65 63 6f  sive.  ^The seco
9b20: 6e 64 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a 70  nd pointer map.p
9b30: 61 67 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20 70  age will be on p
9b40: 61 67 65 20 4a 2b 33 20 61 6e 64 20 74 68 61 74  age J+3 and that
9b50: 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c   ptrmap page wil
9b60: 6c 20 70 72 6f 76 69 64 65 20 62 61 63 6b 20 70  l provide back p
9b70: 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69  ointer.informati
9b80: 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 4a 2b 34  on for pages J+4
9b90: 20 74 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20 69   through 2*J+3 i
9ba0: 6e 63 6c 75 73 69 76 65 2e 20 20 41 6e 64 20 73  nclusive.  And s
9bb0: 6f 20 66 6f 72 74 68 20 66 6f 72 0a 74 68 65 20  o forth for.the 
9bc0: 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
9bd0: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  file.</p>..<p>^(
9be0: 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 68  In a database th
9bf0: 61 74 20 75 73 65 73 20 70 74 72 6d 61 70 20 70  at uses ptrmap p
9c00: 61 67 65 73 2c 20 61 6c 6c 20 70 61 67 65 73 20  ages, all pages 
9c10: 61 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64 65  at locations ide
9c20: 6e 74 69 66 69 65 64 0a 62 79 20 74 68 65 20 63  ntified.by the c
9c30: 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 74 68  omputation in th
9c40: 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61 67  e previous parag
9c50: 72 61 70 68 20 6d 75 73 74 20 62 65 20 70 74 72  raph must be ptr
9c60: 6d 61 70 20 70 61 67 65 20 61 6e 64 20 6e 6f 0a  map page and no.
9c70: 6f 74 68 65 72 20 70 61 67 65 20 6d 61 79 20 62  other page may b
9c80: 65 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 2e  e a ptrmap page.
9c90: 20 20 45 78 63 65 70 74 2c 20 69 66 20 74 68 65    Except, if the
9ca0: 20 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65 20   byte-lock page 
9cb0: 68 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c 20  happens to.fall 
9cc0: 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65  on the same page
9cd0: 20 6e 75 6d 62 65 72 20 61 73 20 61 20 70 74 72   number as a ptr
9ce0: 6d 61 70 20 70 61 67 65 2c 20 74 68 65 6e 20 74  map page, then t
9cf0: 68 65 20 70 74 72 6d 61 70 20 69 73 20 6d 6f 76  he ptrmap is mov
9d00: 65 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ed.to the follow
9d10: 69 6e 67 20 70 61 67 65 20 66 6f 72 20 74 68 61  ing page for tha
9d20: 74 20 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f 70  t one case.)^</p
9d30: 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74  >..<p>Each 5-byt
9d40: 65 20 65 6e 74 72 79 20 6f 6e 20 61 20 70 74 72  e entry on a ptr
9d50: 6d 61 70 20 70 61 67 65 20 70 72 6f 76 69 64 65  map page provide
9d60: 73 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f  s back-link info
9d70: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a 6f  rmation about .o
9d80: 6e 65 20 6f 66 20 70 61 67 65 73 20 74 68 61 74  ne of pages that
9d90: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
9da0: 6c 6f 77 20 74 68 65 20 70 6f 69 6e 74 65 72 20  low the pointer 
9db0: 6d 61 70 2e 20 20 5e 28 49 66 20 70 61 67 65 20  map.  ^(If page 
9dc0: 42 20 69 73 20 61 0a 70 74 72 6d 61 70 20 70 61  B is a.ptrmap pa
9dd0: 67 65 20 74 68 65 6e 20 62 61 63 6b 2d 6c 69 6e  ge then back-lin
9de0: 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  k information ab
9df0: 6f 75 74 20 70 61 67 65 20 42 2b 31 20 69 73 20  out page B+1 is 
9e00: 70 72 6f 76 69 64 65 64 20 62 79 0a 74 68 65 20  provided by.the 
9e10: 66 69 72 73 74 20 65 6e 74 72 79 20 6f 6e 20 74  first entry on t
9e20: 68 65 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20  he pointer map. 
9e30: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
9e40: 75 74 20 70 61 67 65 20 42 2b 32 20 69 73 0a 70  ut page B+2 is.p
9e50: 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 73  rovided by the s
9e60: 65 63 6f 6e 64 20 65 6e 74 72 79 2e 20 20 41 6e  econd entry.  An
9e70: 64 20 73 6f 20 66 6f 72 74 68 2e 29 5e 3c 2f 70  d so forth.)^</p
9e80: 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74  >..<p>Each 5-byt
9e90: 65 20 70 74 72 6d 61 70 20 65 6e 74 72 79 20 63  e ptrmap entry c
9ea0: 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e 65 20 62  onsists of one b
9eb0: 79 74 65 20 6f 66 20 22 70 61 67 65 20 74 79 70  yte of "page typ
9ec0: 65 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 66  e" information.f
9ed0: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 34 2d 62  ollowed by a 4-b
9ee0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70  yte big-endian p
9ef0: 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 46 69 76  age number.  Fiv
9f00: 65 20 70 61 67 65 20 74 79 70 65 73 20 61 72 65  e page types are
9f10: 20 72 65 63 6f 67 6e 69 7a 65 64 3a 0a 3c 2f 70   recognized:.</p
9f20: 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20 62 2d  >..<ol>.<li>A b-
9f30: 74 72 65 65 20 72 6f 6f 74 20 70 61 67 65 2e 20  tree root page. 
9f40: 20 54 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72   The.page number
9f50: 20 73 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 2e   should be zero.
9f60: 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20  .<li>A freelist 
9f70: 70 61 67 65 2e 20 20 54 68 65 20 70 61 67 65 20  page.  The page 
9f80: 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65  number should be
9f90: 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e 54 68 65 20 66  .zero..<li>The f
9fa0: 69 72 73 74 20 70 61 67 65 20 6f 66 20 61 0a 63  irst page of a.c
9fb0: 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72  ell payload over
9fc0: 66 6c 6f 77 20 63 68 61 69 6e 2e 20 20 54 68 65  flow chain.  The
9fd0: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20   page number is 
9fe0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
9ff0: 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 74 68  that.contains th
a000: 65 20 63 65 6c 6c 20 77 68 6f 73 65 20 63 6f 6e  e cell whose con
a010: 74 65 6e 74 20 68 61 73 20 6f 76 65 72 66 6c 6f  tent has overflo
a020: 77 65 64 2e 0a 3c 6c 69 3e 41 20 70 61 67 65 20  wed..<li>A page 
a030: 69 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63  in an overflow c
a040: 68 61 69 6e 0a 6f 74 68 65 72 20 74 68 61 6e 20  hain.other than 
a050: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 2e 20  the first page. 
a060: 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   The page number
a070: 20 69 73 20 74 68 65 20 70 72 69 6f 72 20 70 61   is the prior pa
a080: 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c  ge of the.overfl
a090: 6f 77 20 63 68 61 69 6e 2e 0a 3c 6c 69 3e 41 20  ow chain..<li>A 
a0a0: 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20  non-root b-tree 
a0b0: 70 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20  page.  The.page 
a0c0: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20 70 61  number is the pa
a0d0: 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65  rent b-tree page
a0e0: 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20  ..</ol>..<p>^In 
a0f0: 61 6e 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  any database fil
a100: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
a110: 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c  ptrmap pages, al
a120: 6c 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61  l b-tree root pa
a130: 67 65 73 20 0a 6d 75 73 74 20 63 6f 6d 65 20 62  ges .must come b
a140: 65 66 6f 72 65 20 61 6e 79 20 6e 6f 6e 2d 72 6f  efore any non-ro
a150: 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20  ot b-tree page, 
a160: 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65  cell payload ove
a170: 72 66 6c 6f 77 20 70 61 67 65 2c 20 6f 72 0a 66  rflow page, or.f
a180: 72 65 65 6c 69 73 74 20 70 61 67 65 2e 20 20 54  reelist page.  T
a190: 68 69 73 20 72 65 73 74 72 69 63 74 69 6f 6e 20  his restriction 
a1a0: 65 6e 73 75 72 65 73 20 74 68 61 74 20 61 20 72  ensures that a r
a1b0: 6f 6f 74 20 70 61 67 65 20 77 69 6c 6c 20 6e 65  oot page will ne
a1c0: 76 65 72 0a 62 65 20 6d 6f 76 65 64 20 64 75 72  ver.be moved dur
a1d0: 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75  ing an auto-vacu
a1e0: 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61  um or incrementa
a1f0: 6c 2d 76 61 63 75 75 6d 2e 20 20 54 68 65 20 61  l-vacuum.  The a
a200: 75 74 6f 2d 76 61 63 75 75 6d 0a 6c 6f 67 69 63  uto-vacuum.logic
a210: 20 64 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 68   does not know h
a220: 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  ow to update the
a230: 20 72 6f 6f 74 5f 70 61 67 65 20 66 69 65 6c 64   root_page field
a240: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   of the sqlite_m
a250: 61 73 74 65 72 0a 74 61 62 6c 65 20 61 6e 64 20  aster.table and 
a260: 73 6f 20 69 74 20 69 73 20 6e 65 63 65 73 73 61  so it is necessa
a270: 72 79 20 74 6f 20 70 72 65 76 65 6e 74 20 72 6f  ry to prevent ro
a280: 6f 74 20 70 61 67 65 73 20 66 72 6f 6d 20 62 65  ot pages from be
a290: 69 6e 67 20 6d 6f 76 65 64 0a 64 75 72 69 6e 67  ing moved.during
a2a0: 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   an auto-vacuum 
a2b0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 72 65 73  in order to pres
a2c0: 65 72 76 65 20 74 68 65 20 69 6e 74 65 67 72 69  erve the integri
a2d0: 74 79 20 6f 66 20 74 68 65 0a 73 71 6c 69 74 65  ty of the.sqlite
a2e0: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20 20  _master table.  
a2f0: 5e 52 6f 6f 74 20 70 61 67 65 73 20 61 72 65 20  ^Root pages are 
a300: 6d 6f 76 65 64 20 74 6f 20 74 68 65 20 62 65 67  moved to the beg
a310: 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 0a 64 61  inning of the.da
a320: 74 61 62 61 73 65 20 66 69 6c 65 20 62 79 20 74  tabase file by t
a330: 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 2c  he CREATE TABLE,
a340: 20 43 52 45 41 54 45 20 49 4e 44 45 58 2c 20 44   CREATE INDEX, D
a350: 52 4f 50 20 54 41 42 4c 45 2c 20 61 6e 64 0a 44  ROP TABLE, and.D
a360: 52 4f 50 20 49 4e 44 45 58 20 6f 70 65 72 61 74  ROP INDEX operat
a370: 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 32  ions.</p>..<h2>2
a380: 2e 30 20 53 63 68 65 6d 61 20 4c 61 79 65 72 3c  .0 Schema Layer<
a390: 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72  /h2>..<p>The for
a3a0: 65 67 6f 69 6e 67 20 74 65 78 74 20 64 65 73 63  egoing text desc
a3b0: 72 69 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c 20  ribes low-level 
a3c0: 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 53  aspects of the S
a3d0: 51 4c 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d 61  QLite file.forma
a3e0: 74 2e 20 20 54 68 65 20 62 2d 74 72 65 65 20 6d  t.  The b-tree m
a3f0: 65 63 68 61 6e 69 73 6d 20 70 72 6f 76 69 64 65  echanism provide
a400: 73 20 61 20 70 6f 77 65 72 66 75 6c 20 61 6e 64  s a powerful and
a410: 20 65 66 66 69 63 69 65 6e 74 20 6d 65 61 6e 73   efficient means
a420: 20 6f 66 0a 61 63 63 65 73 73 69 6e 67 20 61 20   of.accessing a 
a430: 6c 61 72 67 65 20 64 61 74 61 20 73 65 74 2e 20  large data set. 
a440: 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 77 69   This section wi
a450: 6c 6c 20 64 65 73 63 72 69 62 65 20 68 6f 77 20  ll describe how 
a460: 74 68 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d  the.low-level b-
a470: 74 72 65 65 20 6c 61 79 65 72 20 69 73 20 75 73  tree layer is us
a480: 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
a490: 68 69 67 68 65 72 2d 6c 65 76 65 6c 20 53 51 4c  higher-level SQL
a4a0: 0a 63 61 70 61 62 69 6c 69 74 69 65 73 2e 3c 2f  .capabilities.</
a4b0: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
a4c0: 6d 65 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72 6d  ment record_form
a4d0: 61 74 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d 61  at {record forma
a4e0: 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32 2e 31  t}</tcl>.<h3>2.1
a4f0: 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f   Record Format</
a500: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61  h3>..<p>The data
a510: 20 66 6f 72 20 61 20 74 61 62 6c 65 20 62 2d 74   for a table b-t
a520: 72 65 65 20 6c 65 61 66 20 70 61 67 65 20 61 6e  ree leaf page an
a530: 64 20 74 68 65 20 6b 65 79 0a 6f 66 20 61 6e 20  d the key.of an 
a540: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67  index b-tree pag
a550: 65 20 77 61 73 20 63 68 61 72 61 63 74 65 72 69  e was characteri
a560: 7a 65 64 20 61 62 6f 76 65 0a 61 73 20 61 6e 20  zed above.as an 
a570: 61 72 62 69 74 72 61 72 79 20 73 65 71 75 65 6e  arbitrary sequen
a580: 63 65 20 6f 66 20 62 79 74 65 73 2e 0a 54 68 65  ce of bytes..The
a590: 20 70 72 69 6f 72 20 64 69 73 63 75 73 73 69 6f   prior discussio
a5a0: 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 6f 6e 65 20  n mentioned one 
a5b0: 6b 65 79 20 62 65 69 6e 67 20 6c 65 73 73 20 74  key being less t
a5c0: 68 61 6e 20 61 6e 6f 74 68 65 72 2c 20 62 75 74  han another, but
a5d0: 0a 64 69 64 20 6e 6f 74 20 64 65 66 69 6e 65 20  .did not define 
a5e0: 77 68 61 74 20 22 6c 65 73 73 20 74 68 61 6e 22  what "less than"
a5f0: 20 6d 65 61 6e 74 2e 20 20 54 68 65 20 63 75 72   meant.  The cur
a600: 72 65 6e 74 20 73 65 63 74 69 6f 6e 20 77 69 6c  rent section wil
a610: 6c 20 61 64 64 72 65 73 73 0a 74 68 65 73 65 20  l address.these 
a620: 6f 6d 69 73 73 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a  omissions.</p>..
a630: 3c 70 3e 50 61 79 6c 6f 61 64 2c 20 65 69 74 68  <p>Payload, eith
a640: 65 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  er table b-tree 
a650: 64 61 74 61 20 6f 72 20 69 6e 64 65 78 20 62 2d  data or index b-
a660: 74 72 65 65 20 6b 65 79 73 2c 20 0a 69 73 20 61  tree keys, .is a
a670: 6c 77 61 79 73 20 69 6e 20 74 68 65 20 22 72 65  lways in the "re
a680: 63 6f 72 64 20 66 6f 72 6d 61 74 22 2e 0a 54 68  cord format"..Th
a690: 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
a6a0: 64 65 66 69 6e 65 73 20 61 20 73 65 71 75 65 6e  defines a sequen
a6b0: 63 65 20 6f 66 20 76 61 6c 75 65 73 20 63 6f 72  ce of values cor
a6c0: 72 65 73 70 6f 6e 64 69 6e 67 0a 74 6f 20 63 6f  responding.to co
a6d0: 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65  lumns in a table
a6e0: 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 65 20   or index.  The 
a6f0: 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 73 70  record format sp
a700: 65 63 69 66 69 65 73 20 74 68 65 20 6e 75 6d 62  ecifies the numb
a710: 65 72 0a 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 74  er.of columns, t
a720: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 65  he datatype of e
a730: 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20  ach column, and 
a740: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65  the content of e
a750: 61 63 68 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a  ach column.</p>.
a760: 0a 3c 70 3e 54 68 65 20 72 65 63 6f 72 64 20 66  .<p>The record f
a770: 6f 72 6d 61 74 20 6d 61 6b 65 73 20 65 78 74 65  ormat makes exte
a780: 6e 73 69 76 65 20 75 73 65 20 6f 66 20 74 68 65  nsive use of the
a790: 20 0a 5b 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67   .[variable-leng
a7a0: 74 68 20 69 6e 74 65 67 65 72 5d 20 6f 72 20 5b  th integer] or [
a7b0: 76 61 72 69 6e 74 5d 0a 72 65 70 72 65 73 65 6e  varint].represen
a7c0: 74 61 74 69 6f 6e 20 6f 66 20 36 34 2d 62 69 74  tation of 64-bit
a7d0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
a7e0: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 3c   defined above.<
a7f0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
a800: 67 6d 65 6e 74 20 73 65 72 69 61 6c 74 79 70 65  gment serialtype
a810: 20 7b 73 65 72 69 61 6c 20 74 79 70 65 7d 20 7b   {serial type} {
a820: 73 65 72 69 61 6c 20 74 79 70 65 73 7d 3c 2f 74  serial types}</t
a830: 63 6c 3e 0a 3c 70 3e 41 20 72 65 63 6f 72 64 20  cl>.<p>A record 
a840: 63 6f 6e 74 61 69 6e 73 20 61 20 68 65 61 64 65  contains a heade
a850: 72 20 61 6e 64 20 61 20 62 6f 64 79 2c 20 69 6e  r and a body, in
a860: 20 74 68 61 74 20 6f 72 64 65 72 2e 20 20 0a 5e   that order.  .^
a870: 28 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69  (The header begi
a880: 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ns with a single
a890: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 64 65   varint which de
a8a0: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74  termines the tot
a8b0: 61 6c 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74  al number.of byt
a8c0: 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  es in the header
a8d0: 2e 20 20 54 68 65 20 76 61 72 69 6e 74 20 76 61  .  The varint va
a8e0: 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20  lue is the size 
a8f0: 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e  of the header in
a900: 0a 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67  .bytes including
a910: 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
a920: 20 69 74 73 65 6c 66 2e 29 5e 20 20 5e 46 6f 6c   itself.)^  ^Fol
a930: 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20  lowing the size 
a940: 76 61 72 69 6e 74 20 61 72 65 0a 6f 6e 65 20 6f  varint are.one o
a950: 72 20 6d 6f 72 65 20 61 64 64 69 74 69 6f 6e 61  r more additiona
a960: 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70  l varints, one p
a970: 65 72 20 63 6f 6c 75 6d 6e 2e 20 20 54 68 65 73  er column.  Thes
a980: 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72  e additional var
a990: 69 6e 74 73 0a 61 72 65 20 63 61 6c 6c 65 64 20  ints.are called 
a9a0: 22 73 65 72 69 61 6c 20 74 79 70 65 22 20 6e 75  "serial type" nu
a9b0: 6d 62 65 72 73 20 61 6e 64 0a 64 65 74 65 72 6d  mbers and.determ
a9c0: 69 6e 65 20 74 68 65 20 64 61 74 61 74 79 70 65  ine the datatype
a9d0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c   of each column,
a9e0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
a9f0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72  e following char
aa00: 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  t:</p>..<center>
aa10: 0a 3c 69 3e 53 65 72 69 61 6c 20 54 79 70 65 20  .<i>Serial Type 
aa20: 43 6f 64 65 73 20 4f 66 20 54 68 65 20 52 65 63  Codes Of The Rec
aa30: 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62  ord Format</i><b
aa40: 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  r>.<table width=
aa50: 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a  "80%" border=1>.
aa60: 3c 74 72 3e 3c 74 68 3e 53 65 72 69 61 6c 20 54  <tr><th>Serial T
aa70: 79 70 65 3c 74 68 3e 43 6f 6e 74 65 6e 74 20 53  ype<th>Content S
aa80: 69 7a 65 3c 74 68 3e 4d 65 61 6e 69 6e 67 0a 3c  ize<th>Meaning.<
aa90: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
aaa0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
aab0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
aac0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
aad0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
aae0: 6c 75 65 20 69 73 20 61 20 4e 55 4c 4c 2e 0a 3c  lue is a NULL..<
aaf0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
ab00: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
ab10: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
ab20: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
ab30: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
ab40: 6c 75 65 20 69 73 20 61 6e 20 38 2d 62 69 74 20  lue is an 8-bit 
ab50: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
ab60: 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64  integer..<tr><td
ab70: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
ab80: 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 76 61  n=center>2<td va
ab90: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
aba0: 65 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e  enter>2<td align
abb0: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
abc0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 31 36   a big-endian 16
abd0: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
abe0: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
abf0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
ac00: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c   align=center>3<
ac10: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
ac20: 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20  ign=center>3<td 
ac30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
ac40: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
ac50: 61 6e 20 32 34 2d 62 69 74 20 74 77 6f 73 2d 63  an 24-bit twos-c
ac60: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
ac70: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
ac80: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
ac90: 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>4<td valign=t
aca0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
acb0: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
acc0: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
acd0: 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 74  -endian 32-bit t
ace0: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
acf0: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
ad00: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
ad10: 3d 63 65 6e 74 65 72 3e 35 3c 74 64 20 76 61 6c  =center>5<td val
ad20: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
ad30: 6e 74 65 72 3e 36 3c 74 64 20 61 6c 69 67 6e 3d  nter>6<td align=
ad40: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
ad50: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 34 38 2d  a big-endian 48-
ad60: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
ad70: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72  ent integer..<tr
ad80: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
ad90: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74  align=center>6<t
ada0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
adb0: 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 61  gn=center>8<td a
adc0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
add0: 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61  e is a big-endia
ade0: 6e 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f  n 64-bit twos-co
adf0: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
ae00: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
ae10: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
ae20: 72 3e 37 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>7<td valign=to
ae30: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
ae40: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
ae50: 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d  ^Value is a big-
ae60: 65 6e 64 69 61 6e 20 49 45 45 45 20 37 35 34 2d  endian IEEE 754-
ae70: 32 30 30 38 20 36 34 2d 62 69 74 20 66 6c 6f 61  2008 64-bit floa
ae80: 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65  ting point numbe
ae90: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
aea0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
aeb0: 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>8<td valign=t
aec0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
aed0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
aee0: 0a 5e 56 61 6c 75 65 20 69 73 20 74 68 65 20 69  .^Value is the i
aef0: 6e 74 65 67 65 72 20 30 2e 20 28 4f 6e 6c 79 20  nteger 0. (Only 
af00: 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 5b 73  available for [s
af10: 63 68 65 6d 61 20 66 6f 72 6d 61 74 5d 20 34 20  chema format] 4 
af20: 61 6e 64 20 68 69 67 68 65 72 2e 29 0a 3c 74 72  and higher.).<tr
af30: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
af40: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 39 3c 74  align=center>9<t
af50: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
af60: 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61  gn=center>0<td a
af70: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
af80: 65 20 69 73 20 74 68 65 20 69 6e 74 65 67 65 72  e is the integer
af90: 20 31 2e 20 28 4f 6e 6c 79 20 61 76 61 69 6c 61   1. (Only availa
afa0: 62 6c 65 20 66 6f 72 20 5b 73 63 68 65 6d 61 20  ble for [schema 
afb0: 66 6f 72 6d 61 74 5d 20 34 20 61 6e 64 20 68 69  format] 4 and hi
afc0: 67 68 65 72 2e 29 0a 3c 74 72 3e 3c 74 64 20 76  gher.).<tr><td v
afd0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
afe0: 63 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20 20 20  center>10,11.   
aff0: 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20   <td valign=top 
b000: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 26 6e 62  align=center>&nb
b010: 73 70 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  sp;<td align=lef
b020: 74 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65 64 2e 20  t>.<i>Not used. 
b030: 20 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78   Reserved for ex
b040: 70 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72  pansion.</i>.<tr
b050: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b060: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23  align=center>N&#
b070: 78 32 32 36 35 3b 31 32 20 61 6e 64 20 65 76 65  x2265;12 and eve
b080: 6e 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  n.    <td valign
b090: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b0a0: 72 3e 28 4e 2d 31 32 29 2f 32 3c 74 64 20 61 6c  r>(N-12)/2<td al
b0b0: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65  ign=left>.^Value
b0c0: 20 69 73 20 61 20 42 4c 4f 42 20 74 68 61 74 20   is a BLOB that 
b0d0: 69 73 20 28 4e 2d 31 32 29 2f 32 20 62 79 74 65  is (N-12)/2 byte
b0e0: 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 3c 74 72  s in length..<tr
b0f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
b100: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23  align=center>N&#
b110: 78 32 32 36 35 3b 31 33 20 61 6e 64 20 6f 64 64  x2265;13 and odd
b120: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
b130: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
b140: 3e 28 4e 2d 31 33 29 2f 32 3c 74 64 20 61 6c 69  >(N-13)/2<td ali
b150: 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20  gn=left>.^Value 
b160: 69 73 20 61 20 73 74 72 69 6e 67 20 69 6e 20 74  is a string in t
b170: 68 65 20 5b 74 65 78 74 20 65 6e 63 6f 64 69 6e  he [text encodin
b180: 67 5d 20 61 6e 64 20 28 4e 2d 31 33 29 2f 32 20  g] and (N-13)/2 
b190: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e  bytes in length.
b1a0: 0a 5e 54 68 65 20 6e 75 6c 20 74 65 72 6d 69 6e  .^The nul termin
b1b0: 61 74 6f 72 20 69 73 20 6e 6f 74 20 73 74 6f 72  ator is not stor
b1c0: 65 64 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65  ed..</table></ce
b1d0: 6e 74 65 72 3e 0a 0a 3c 70 3e 4e 6f 74 65 20 74  nter>..<p>Note t
b1e0: 68 61 74 20 62 65 63 61 75 73 65 20 6f 66 20 74  hat because of t
b1f0: 68 65 20 77 61 79 20 76 61 72 69 6e 74 73 20 61  he way varints a
b200: 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65 20  re defined, the 
b210: 68 65 61 64 65 72 20 73 69 7a 65 20 76 61 72 69  header size vari
b220: 6e 74 0a 61 6e 64 20 73 65 72 69 61 6c 20 74 79  nt.and serial ty
b230: 70 65 20 76 61 72 69 6e 74 73 20 77 69 6c 6c 20  pe varints will 
b240: 75 73 75 61 6c 6c 79 20 63 6f 6e 73 69 73 74 20  usually consist 
b250: 6f 66 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  of a single byte
b260: 2e 20 20 54 68 65 0a 73 65 72 69 61 6c 20 74 79  .  The.serial ty
b270: 70 65 20 76 61 72 69 6e 74 73 20 66 6f 72 20 6c  pe varints for l
b280: 61 72 67 65 20 73 74 72 69 6e 67 73 20 61 6e 64  arge strings and
b290: 20 42 4c 4f 42 73 20 6d 69 67 68 74 20 65 78 74   BLOBs might ext
b2a0: 65 6e 64 20 74 6f 20 74 77 6f 20 6f 72 20 74 68  end to two or th
b2b0: 72 65 65 0a 62 79 74 65 20 76 61 72 69 6e 74 73  ree.byte varints
b2c0: 2c 20 62 75 74 20 74 68 61 74 20 69 73 20 74 68  , but that is th
b2d0: 65 20 65 78 63 65 70 74 69 6f 6e 20 72 61 74 68  e exception rath
b2e0: 65 72 20 74 68 61 6e 20 74 68 65 20 72 75 6c 65  er than the rule
b2f0: 2e 20 0a 54 68 65 20 76 61 72 69 6e 74 20 66 6f  . .The varint fo
b300: 72 6d 61 74 20 69 73 20 76 65 72 79 20 65 66 66  rmat is very eff
b310: 69 63 69 65 6e 74 20 61 74 20 63 6f 64 69 6e 67  icient at coding
b320: 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
b330: 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65  er.</p>..<p>^The
b340: 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
b350: 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
b360: 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c  ecord immediatel
b370: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
b380: 64 65 72 2e 0a 5e 28 4e 6f 74 65 20 74 68 61 74  der..^(Note that
b390: 20 66 6f 72 20 73 65 72 69 61 6c 20 74 79 70 65   for serial type
b3a0: 73 20 30 2c 20 38 2c 20 39 2c 20 31 32 2c 20 61  s 0, 8, 9, 12, a
b3b0: 6e 64 20 31 33 2c 20 74 68 65 20 76 61 6c 75 65  nd 13, the value
b3c0: 20 69 73 20 7a 65 72 6f 20 62 79 74 65 73 20 69   is zero bytes i
b3d0: 6e 0a 6c 65 6e 67 74 68 2e 20 20 49 66 20 61 6c  n.length.  If al
b3e0: 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6f 66  l columns are of
b3f0: 20 74 68 65 73 65 20 74 79 70 65 73 20 74 68 65   these types the
b400: 6e 20 74 68 65 20 62 6f 64 79 20 73 65 63 74 69  n the body secti
b410: 6f 6e 20 6f 66 20 74 68 65 0a 72 65 63 6f 72 64  on of the.record
b420: 20 69 73 20 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e   is empty.)^</p>
b430: 0a 0a 3c 68 33 3e 32 2e 32 20 52 65 63 6f 72 64  ..<h3>2.2 Record
b440: 20 53 6f 72 74 20 4f 72 64 65 72 3c 2f 68 33 3e   Sort Order</h3>
b450: 0a 0a 3c 70 3e 54 68 65 20 6f 72 64 65 72 20 6f  ..<p>The order o
b460: 66 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  f keys in an ind
b470: 65 78 20 62 2d 74 72 65 65 20 69 73 20 64 65 74  ex b-tree is det
b480: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 73  ermined by the s
b490: 6f 72 74 20 6f 72 64 65 72 20 6f 66 0a 74 68 65  ort order of.the
b4a0: 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 74 68   records that th
b4b0: 65 20 6b 65 79 73 20 72 65 70 72 65 73 65 6e 74  e keys represent
b4c0: 2e 20 20 52 65 63 6f 72 64 20 63 6f 6d 70 61 72  .  Record compar
b4d0: 69 73 6f 6e 20 70 72 6f 67 72 65 73 73 65 73 20  ison progresses 
b4e0: 63 6f 6c 75 6d 6e 0a 62 79 20 63 6f 6c 75 6d 6e  column.by column
b4f0: 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20 61 20  .  Columns of a 
b500: 72 65 63 6f 72 64 20 61 72 65 20 65 78 61 6d 69  record are exami
b510: 6e 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f  ned from left to
b520: 20 72 69 67 68 74 2e 20 20 54 68 65 0a 66 69 72   right.  The.fir
b530: 73 74 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d  st pair of colum
b540: 6e 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20  ns that are not 
b550: 65 71 75 61 6c 20 64 65 74 65 72 6d 69 6e 65 73  equal determines
b560: 20 74 68 65 20 72 65 6c 61 74 69 76 65 20 6f 72   the relative or
b570: 64 65 72 0a 6f 66 20 74 68 65 20 74 77 6f 20 72  der.of the two r
b580: 65 63 6f 72 64 73 2e 20 20 54 68 65 20 73 6f 72  ecords.  The sor
b590: 74 20 6f 72 64 65 72 20 6f 66 20 69 6e 64 69 76  t order of indiv
b5a0: 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 69 73  idual columns is
b5b0: 20 61 73 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as.follows:</p>
b5c0: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 4e 55 4c  ..<ol>.<li>^(NUL
b5d0: 4c 20 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c  L values (serial
b5e0: 20 74 79 70 65 20 30 29 20 73 6f 72 74 20 66 69   type 0) sort fi
b5f0: 72 73 74 2e 29 5e 0a 3c 6c 69 3e 5e 28 4e 75 6d  rst.)^.<li>^(Num
b600: 65 72 69 63 20 76 61 6c 75 65 73 20 28 73 65 72  eric values (ser
b610: 69 61 6c 20 74 79 70 65 73 20 31 20 74 68 72 6f  ial types 1 thro
b620: 75 67 68 20 39 29 20 73 6f 72 74 20 61 66 74 65  ugh 9) sort afte
b630: 72 20 4e 55 4c 4c 73 0a 20 20 20 20 20 20 61 6e  r NULLs.      an
b640: 64 20 69 6e 20 6e 75 6d 65 72 69 63 20 6f 72 64  d in numeric ord
b650: 65 72 2e 29 5e 0a 3c 6c 69 3e 5e 28 54 65 78 74  er.)^.<li>^(Text
b660: 20 76 61 6c 75 65 73 20 28 6f 64 64 20 73 65 72   values (odd ser
b670: 69 61 6c 20 74 79 70 65 73 20 31 33 20 61 6e 64  ial types 13 and
b680: 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20 61 66   larger) sort af
b690: 74 65 72 20 6e 75 6d 65 72 69 63 0a 20 20 20 20  ter numeric.    
b6a0: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 6f 72  values in the or
b6b0: 64 65 72 20 64 65 74 65 72 6d 69 6e 65 64 20 62  der determined b
b6c0: 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 5b 63  y the columns [c
b6d0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
b6e0: 6e 5d 2e 29 5e 0a 3c 6c 69 3e 5e 28 42 4c 4f 42  n].)^.<li>^(BLOB
b6f0: 20 76 61 6c 75 65 73 20 28 65 76 65 6e 20 73 65   values (even se
b700: 72 69 61 6c 20 74 79 70 65 73 20 31 32 20 61 6e  rial types 12 an
b710: 64 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20 6c  d larger) sort l
b720: 61 73 74 20 61 6e 64 20 69 6e 20 74 68 65 20 6f  ast and in the o
b730: 72 64 65 72 20 0a 20 20 20 20 64 65 74 65 72 6d  rder .    determ
b740: 69 6e 65 64 20 62 79 20 6d 65 6d 63 6d 70 28 29  ined by memcmp()
b750: 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20  .)^.</ol>..<p>A 
b760: 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74  [collating funct
b770: 69 6f 6e 5d 20 66 6f 72 20 65 61 63 68 20 63 6f  ion] for each co
b780: 6c 75 6d 6e 20 69 73 20 6e 65 63 65 73 73 61 72  lumn is necessar
b790: 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f  y in order to co
b7a0: 6d 70 75 74 65 0a 74 68 65 20 6f 72 64 65 72 20  mpute.the order 
b7b0: 6f 66 20 74 65 78 74 20 66 69 65 6c 64 73 2e 0a  of text fields..
b7c0: 5e 28 53 51 4c 69 74 65 20 64 65 66 69 6e 65 73  ^(SQLite defines
b7d0: 20 74 68 72 65 65 20 62 75 69 6c 74 2d 69 6e 20   three built-in 
b7e0: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
b7f0: 6f 6e 73 3a 29 5e 0a 3c 2f 70 3e 0a 0a 3c 62 6c  ons:)^.</p>..<bl
b800: 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20  ockquote><table 
b810: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 73 70 61  border=0 cellspa
b820: 63 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 3c 74 64  cing=10>.<tr><td
b830: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 42 49 4e 41   valign=top>BINA
b840: 52 59 0a 20 20 20 20 3c 74 64 3e 20 5e 28 54 68  RY.    <td> ^(Th
b850: 65 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52  e built-in BINAR
b860: 59 20 63 6f 6c 6c 61 74 69 6f 6e 20 63 6f 6d 70  Y collation comp
b870: 61 72 65 73 20 73 74 72 69 6e 67 73 20 62 79 74  ares strings byt
b880: 65 20 62 79 20 62 79 74 65 0a 20 20 20 20 20 20  e by byte.      
b890: 20 20 75 73 69 6e 67 20 74 68 65 20 6d 65 6d 63    using the memc
b8a0: 6d 70 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  mp() function.  
b8b0: 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 73        from the s
b8c0: 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72  tandard C librar
b8d0: 79 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  y.)^.<tr><td val
b8e0: 69 67 6e 3d 74 6f 70 3e 4e 4f 43 41 53 45 0a 20  ign=top>NOCASE. 
b8f0: 20 20 20 3c 74 64 3e 20 5e 28 54 68 65 20 4e 4f     <td> ^(The NO
b900: 43 41 53 45 20 63 6f 6c 6c 61 74 69 6f 6e 20 69  CASE collation i
b910: 73 20 6c 69 6b 65 20 42 49 4e 41 52 59 20 65 78  s like BINARY ex
b920: 63 65 70 74 20 74 68 61 74 20 75 70 70 65 72 63  cept that upperc
b930: 61 73 65 0a 20 20 20 20 20 20 20 20 41 53 43 49  ase.        ASCI
b940: 49 20 63 68 61 72 61 63 74 65 72 73 20 28 27 41  I characters ('A
b950: 27 20 74 68 72 6f 75 67 68 20 27 5a 27 29 0a 20  ' through 'Z'). 
b960: 20 20 20 20 20 20 20 61 72 65 20 66 6f 6c 64 65         are folde
b970: 64 20 69 6e 74 6f 20 74 68 65 69 72 20 6c 6f 77  d into their low
b980: 65 72 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e  ercase equivalen
b990: 74 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e  ts prior to runn
b9a0: 69 6e 67 20 74 68 65 0a 20 20 20 20 20 20 20 20  ing the.        
b9b0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4e 6f 74  comparison.  Not
b9c0: 65 20 74 68 61 74 20 6f 6e 6c 79 20 41 53 43 49  e that only ASCI
b9d0: 49 20 63 68 61 72 61 63 74 65 72 73 20 61 72 65  I characters are
b9e0: 20 63 61 73 65 2d 66 6f 6c 64 65 64 2e 29 5e 0a   case-folded.)^.
b9f0: 20 20 20 20 20 20 20 20 5e 28 4e 4f 43 41 53 45          ^(NOCASE
ba00: 0a 20 20 20 20 20 20 20 20 64 6f 65 73 20 6e 6f  .        does no
ba10: 74 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 67 65  t implement a ge
ba20: 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 20 75 6e  neral purpose un
ba30: 69 63 6f 64 65 20 63 61 73 65 6c 65 73 73 20 63  icode caseless c
ba40: 6f 6d 70 61 72 69 73 6f 6e 2e 29 5e 0a 3c 74 72  omparison.)^.<tr
ba50: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  ><td valign=top>
ba60: 52 54 52 49 4d 0a 20 20 20 20 3c 74 64 3e 20 5e  RTRIM.    <td> ^
ba70: 28 52 54 52 49 4d 20 69 73 20 6c 69 6b 65 20 42  (RTRIM is like B
ba80: 49 4e 41 52 59 20 65 78 63 65 70 74 20 74 68 61  INARY except tha
ba90: 74 20 65 78 74 72 61 20 73 70 61 63 65 73 20 61  t extra spaces a
baa0: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65 69 74  t the end of eit
bab0: 68 65 72 0a 20 20 20 20 20 20 20 20 20 73 74 72  her.         str
bac0: 69 6e 67 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67  ing do not chang
bad0: 65 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 49  e the result.  I
bae0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 73  n other words, s
baf0: 74 72 69 6e 67 73 20 77 69 6c 6c 0a 20 20 20 20  trings will.    
bb00: 20 20 20 20 20 63 6f 6d 70 61 72 65 20 65 71 75       compare equ
bb10: 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65  al to one anothe
bb20: 72 20 61 73 20 6c 6f 6e 67 20 61 73 20 74 68 65  r as long as the
bb30: 79 0a 20 20 20 20 20 20 20 20 20 64 69 66 66 65  y.         diffe
bb40: 72 20 6f 6e 6c 79 20 69 6e 20 74 68 65 20 6e 75  r only in the nu
bb50: 6d 62 65 72 20 6f 66 20 73 70 61 63 65 73 20 61  mber of spaces a
bb60: 74 20 74 68 65 20 65 6e 64 2e 29 5e 0a 3c 2f 74  t the end.)^.</t
bb70: 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  able></blockquot
bb80: 65 3e 0a 0a 3c 70 3e 5e 41 64 64 69 74 69 6f 6e  e>..<p>^Addition
bb90: 61 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 73  al application-s
bba0: 70 65 63 69 66 69 63 20 63 6f 6c 6c 61 74 69 6e  pecific collatin
bbb0: 67 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20  g functions can 
bbc0: 62 65 20 61 64 64 65 64 20 74 6f 0a 53 51 4c 69  be added to.SQLi
bbd0: 74 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71  te using the [sq
bbe0: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
bbf0: 6c 61 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  lation()] interf
bc00: 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ace.</p>..<p>^Th
bc10: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
bc20: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  ing function for
bc30: 20 61 6c 6c 20 73 74 72 69 6e 67 73 20 69 73 20   all strings is 
bc40: 42 49 4e 41 52 59 2e 0a 5e 41 6c 74 65 72 6e 61  BINARY..^Alterna
bc50: 74 69 76 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  tive collating f
bc60: 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 74 61 62  unctions for tab
bc70: 6c 65 20 63 6f 6c 75 6d 6e 73 20 63 61 6e 20 62  le columns can b
bc80: 65 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  e specified in t
bc90: 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he.[CREATE TABLE
bca0: 5d 20 73 74 61 74 65 6d 65 6e 74 20 75 73 69 6e  ] statement usin
bcb0: 67 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  g the COLLATE cl
bcc0: 61 75 73 65 20 6f 6e 20 74 68 65 20 5b 63 6f 6c  ause on the [col
bcd0: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e  umn definition].
bce0: 0a 5e 57 68 65 6e 20 61 20 63 6f 6c 75 6d 6e 20  .^When a column 
bcf0: 69 73 20 69 6e 64 65 78 65 64 2c 20 74 68 65 20  is indexed, the 
bd00: 73 61 6d 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  same collating f
bd10: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
bd20: 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45  d in the.[CREATE
bd30: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
bd40: 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  t is used for th
bd50: 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  e column in the 
bd60: 69 6e 64 65 78 2c 20 62 79 20 64 65 66 61 75 6c  index, by defaul
bd70: 74 2c 0a 74 68 6f 75 67 68 20 74 68 69 73 20 63  t,.though this c
bd80: 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e  an be overridden
bd90: 20 75 73 69 6e 67 20 61 20 43 4f 4c 4c 41 54 45   using a COLLATE
bda0: 20 63 6c 61 75 73 65 20 69 6e 20 74 68 65 20 0a   clause in the .
bdb0: 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73  [CREATE INDEX] s
bdc0: 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 68 33 3e 32  tatement...<h3>2
bdd0: 2e 33 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f  .3 Representatio
bde0: 6e 20 4f 66 20 53 51 4c 20 54 61 62 6c 65 73 3c  n Of SQL Tables<
bdf0: 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 45 61 63 68 20  /h3>..<p> ^Each 
be00: 6f 72 64 69 6e 61 72 79 20 53 51 4c 20 74 61 62  ordinary SQL tab
be10: 6c 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  le in the databa
be20: 73 65 20 73 63 68 65 6d 61 20 69 73 20 72 65 70  se schema is rep
be30: 72 65 73 65 6e 74 65 64 20 6f 6e 2d 64 69 73 6b  resented on-disk
be40: 0a 62 79 20 61 20 74 61 62 6c 65 20 62 2d 74 72  .by a table b-tr
be50: 65 65 2e 20 20 5e 45 61 63 68 20 65 6e 74 72 79  ee.  ^Each entry
be60: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   in the table b-
be70: 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64 73  tree corresponds
be80: 20 74 6f 20 61 20 72 6f 77 0a 6f 66 20 74 68 65   to a row.of the
be90: 20 53 51 4c 20 74 61 62 6c 65 2e 20 20 5e 54 68   SQL table.  ^Th
bea0: 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65  e [rowid] of the
beb0: 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 74 68   SQL table is th
bec0: 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 0a  e 64-bit signed.
bed0: 69 6e 74 65 67 65 72 20 6b 65 79 20 66 6f 72 20  integer key for 
bee0: 65 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68  each entry in th
bef0: 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 3c  e table b-tree.<
bf00: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 63 6f  /p>..<p> ^The co
bf10: 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20 53 51  ntent of each SQ
bf20: 4c 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 73  L table row is s
bf30: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
bf40: 61 62 61 73 65 20 66 69 6c 65 20 62 79 0a 66 69  abase file by.fi
bf50: 72 73 74 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68  rst combining th
bf60: 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  e values in the 
bf70: 76 61 72 69 6f 75 73 20 63 6f 6c 75 6d 6e 73 20  various columns 
bf80: 69 6e 74 6f 20 61 20 62 79 74 65 20 61 72 72 61  into a byte arra
bf90: 79 0a 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  y.in the record 
bfa0: 66 6f 72 6d 61 74 2c 20 74 68 65 6e 20 73 74 6f  format, then sto
bfb0: 72 69 6e 67 20 74 68 61 74 20 62 79 74 65 20 61  ring that byte a
bfc0: 72 72 61 79 20 61 73 20 74 68 65 20 70 61 79 6c  rray as the payl
bfd0: 6f 61 64 20 69 6e 0a 61 6e 20 65 6e 74 72 79 20  oad in.an entry 
bfe0: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74  in the table b-t
bff0: 72 65 65 2e 20 20 5e 54 68 65 20 6f 72 64 65 72  ree.  ^The order
c000: 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68   of values in th
c010: 65 20 72 65 63 6f 72 64 20 69 73 0a 74 68 65 20  e record is.the 
c020: 73 61 6d 65 20 61 73 20 74 68 65 20 6f 72 64 65  same as the orde
c030: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
c040: 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 64 65  the SQL table de
c050: 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57 68 65 6e 20  finition..^When 
c060: 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 74 68 61  an SQL table tha
c070: 74 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b 49  t includes an.[I
c080: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
c090: 45 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69 63  EY] column (whic
c0a0: 68 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b 72  h aliases the [r
c0b0: 6f 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61 74  owid]) then that
c0c0: 0a 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20  .column appears 
c0d0: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 73  in the record as
c0e0: 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20 20   a NULL value.  
c0f0: 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77  ^SQLite will alw
c100: 61 79 73 20 75 73 65 0a 74 68 65 20 74 61 62 6c  ays use.the tabl
c110: 65 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61 74  e b-tree key rat
c120: 68 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55 4c  her than the NUL
c130: 4c 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65 66  L value when ref
c140: 65 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49 4e  erencing the.[IN
c150: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c160: 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a  Y] column.</p>..
c170: 3c 70 3e 20 5e 49 66 20 74 68 65 20 5b 61 66 66  <p> ^If the [aff
c180: 69 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75  inity] of a colu
c190: 6d 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74  mn is REAL and t
c1a0: 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  hat column conta
c1b0: 69 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74  ins a.value that
c1c0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65   can be converte
c1d0: 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  d to an integer 
c1e0: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
c1f0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20  information.(if 
c200: 74 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  the value contai
c210: 6e 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c  ns no fractional
c220: 20 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74   part and is not
c230: 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65   too large to be
c240: 0a 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20  .represented as 
c250: 61 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e  an integer) then
c260: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20   the column may 
c270: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  be stored in the
c280: 20 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e   record.as an in
c290: 74 65 67 65 72 2e 20 20 5e 53 51 4c 69 74 65 20  teger.  ^SQLite 
c2a0: 77 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65  will convert the
c2b0: 20 76 61 6c 75 65 20 62 61 63 6b 20 74 6f 20 66   value back to f
c2c0: 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68  loating.point wh
c2d0: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 74  en extracting it
c2e0: 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
c2f0: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 34 20 52  .</p>..<h3>2.4 R
c300: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
c310: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 54   WITHOUT ROWID T
c320: 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ables</h3>..<p>^
c330: 49 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  If an SQL table 
c340: 69 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  is created using
c350: 20 74 68 65 20 22 57 49 54 48 4f 55 54 20 52 4f   the "WITHOUT RO
c360: 57 49 44 22 20 63 6c 61 75 73 65 20 61 74 20 74  WID" clause at t
c370: 68 65 0a 65 6e 64 20 6f 66 20 69 74 73 20 43 52  he.end of its CR
c380: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
c390: 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 61 74 20  ment, then that 
c3a0: 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
c3b0: 4f 55 54 20 52 4f 57 49 44 5d 0a 74 61 62 6c 65  OUT ROWID].table
c3c0: 20 61 6e 64 20 75 73 65 73 20 61 20 64 69 66 66   and uses a diff
c3d0: 65 72 65 6e 74 20 6f 6e 2d 64 69 73 6b 20 72 65  erent on-disk re
c3e0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 5e  presentation.  ^
c3f0: 41 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a  A WITHOUT ROWID.
c400: 74 61 62 6c 65 20 75 73 65 73 20 61 6e 20 69 6e  table uses an in
c410: 64 65 78 20 62 2d 74 72 65 65 20 72 61 74 68 65  dex b-tree rathe
c420: 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65 20 62  r than a table b
c430: 2d 74 72 65 65 20 66 6f 72 20 73 74 6f 72 61 67  -tree for storag
c440: 65 2e 0a 5e 54 68 65 20 6b 65 79 20 66 6f 72 20  e..^The key for 
c450: 65 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68  each entry in th
c460: 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  e WITHOUT ROWID 
c470: 62 2d 74 72 65 65 20 69 73 20 61 20 72 65 63 6f  b-tree is a reco
c480: 72 64 20 63 6f 6d 70 6f 73 65 64 0a 6f 66 20 74  rd composed.of t
c490: 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
c4a0: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f  e PRIMARY KEY fo
c4b0: 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 72 65  llowed by all re
c4c0: 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  maining columns 
c4d0: 6f 66 0a 74 68 65 20 74 61 62 6c 65 2e 20 20 5e  of.the table.  ^
c4e0: 54 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  The primary key 
c4f0: 63 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69  columns appear i
c500: 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79  n the order they
c510: 20 74 68 65 79 20 77 65 72 65 0a 64 65 63 6c 61   they were.decla
c520: 72 65 64 20 69 6e 20 74 68 65 20 50 52 49 4d 41  red in the PRIMA
c530: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 61 6e  RY KEY clause an
c540: 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  d the remaining 
c550: 63 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69  columns appear i
c560: 6e 0a 74 68 65 20 6f 72 64 65 72 20 74 68 65 79  n.the order they
c570: 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 43 52   occur in the CR
c580: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
c590: 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 48 65 6e 63 65  ment...<p>^Hence
c5a0: 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e  , the content en
c5b0: 63 6f 64 69 6e 67 20 66 6f 72 20 61 20 57 49 54  coding for a WIT
c5c0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
c5d0: 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20   is the same.as 
c5e0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f  the content enco
c5f0: 64 69 6e 67 20 66 6f 72 20 61 6e 20 6f 72 64 69  ding for an ordi
c600: 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65  nary rowid table
c610: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  , except that th
c620: 65 0a 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63  e.order of the c
c630: 6f 6c 75 6d 6e 73 20 69 73 20 72 65 61 72 72 61  olumns is rearra
c640: 6e 67 65 64 20 73 6f 20 74 68 61 74 20 50 52 49  nged so that PRI
c650: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73  MARY KEY columns
c660: 20 63 6f 6d 65 0a 66 69 72 73 74 2c 20 61 6e 64   come.first, and
c670: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
c680: 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
c690: 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  in an index b-tr
c6a0: 65 65 20 72 61 74 68 65 72 0a 74 68 61 6e 20 61  ee rather.than a
c6b0: 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 61 20  s the data in a 
c6c0: 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 0a 5e 54  table b-tree..^T
c6d0: 68 65 20 73 70 65 63 69 61 6c 20 65 6e 63 6f 64  he special encod
c6e0: 69 6e 67 20 72 75 6c 65 73 20 66 6f 72 20 63 6f  ing rules for co
c6f0: 6c 75 6d 6e 73 20 77 69 74 68 20 52 45 41 4c 20  lumns with REAL 
c700: 61 66 66 69 6e 69 74 79 0a 61 70 70 6c 79 20 74  affinity.apply t
c710: 6f 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  o WITHOUT ROWID 
c720: 74 61 62 6c 65 73 20 74 68 65 20 73 61 6d 65 20  tables the same 
c730: 61 73 20 74 68 65 79 20 64 6f 20 77 69 74 68 20  as they do with 
c740: 72 6f 77 69 64 20 74 61 62 6c 65 73 2e 0a 0a 3c  rowid tables...<
c750: 68 33 3e 32 2e 35 20 52 65 70 72 65 73 65 6e 74  h3>2.5 Represent
c760: 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 49 6e 64  ation Of SQL Ind
c770: 69 63 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45  ices</h3>..<p>^E
c780: 61 63 68 20 53 51 4c 20 69 6e 64 65 78 2c 20 77  ach SQL index, w
c790: 68 65 74 68 65 72 20 65 78 70 6c 69 63 69 74 6c  hether explicitl
c7a0: 79 20 64 65 63 6c 61 72 65 64 20 76 69 61 20 61  y declared via a
c7b0: 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
c7c0: 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 69 6d 70  statement.or imp
c7d0: 6c 69 65 64 20 62 79 20 61 20 55 4e 49 51 55 45  lied by a UNIQUE
c7e0: 20 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59 20   or PRIMARY KEY 
c7f0: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 63 6f 72 72  constraint, corr
c800: 65 73 70 6f 6e 64 73 20 74 6f 20 61 6e 20 0a 69  esponds to an .i
c810: 6e 64 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74  ndex b-tree in t
c820: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
c830: 2e 0a 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e  ..^Each entry in
c840: 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65   the index b-tre
c850: 65 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  e corresponds to
c860: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e   a single row in
c870: 20 74 68 65 20 0a 61 73 73 6f 63 69 61 74 65 64   the .associated
c880: 20 53 51 4c 20 74 61 62 6c 65 2e 0a 5e 54 68 65   SQL table..^The
c890: 20 6b 65 79 20 74 6f 20 61 6e 20 69 6e 64 65 78   key to an index
c8a0: 20 62 2d 74 72 65 65 20 69 73 0a 61 20 72 65 63   b-tree is.a rec
c8b0: 6f 72 64 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20  ord composed of 
c8c0: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74  the columns that
c8d0: 20 61 72 65 20 62 65 69 6e 67 20 69 6e 64 65 78   are being index
c8e0: 65 64 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74  ed followed by t
c8f0: 68 65 0a 6b 65 79 20 6f 66 20 74 68 65 20 63 6f  he.key of the co
c900: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
c910: 65 20 72 6f 77 2e 20 20 46 6f 72 20 6f 72 64 69  e row.  For ordi
c920: 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 74 68 65  nary tables, the
c930: 20 72 6f 77 20 6b 65 79 20 69 73 0a 74 68 65 20   row key is.the 
c940: 5b 72 6f 77 69 64 5d 2c 20 61 6e 64 20 66 6f 72  [rowid], and for
c950: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
c960: 20 74 61 62 6c 65 73 20 74 68 65 20 72 6f 77 20   tables the row 
c970: 6b 65 79 20 69 73 20 74 68 65 20 50 52 49 4d 41  key is the PRIMA
c980: 52 59 20 4b 45 59 2e 0a 42 65 63 61 75 73 65 20  RY KEY..Because 
c990: 65 76 65 72 79 20 72 6f 77 20 69 6e 20 74 68 65  every row in the
c9a0: 20 74 61 62 6c 65 20 68 61 73 20 61 20 75 6e 69   table has a uni
c9b0: 71 75 65 20 72 6f 77 20 6b 65 79 2c 0a 61 6c 6c  que row key,.all
c9c0: 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
c9d0: 78 20 61 72 65 20 75 6e 69 71 75 65 2e 3c 2f 70  x are unique.</p
c9e0: 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 6e 6f 72 6d  >..<p>^In a norm
c9f0: 61 6c 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20  al index, there 
ca00: 69 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20  is a one-to-one 
ca10: 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20  mapping between 
ca20: 72 6f 77 73 20 69 6e 20 61 20 0a 74 61 62 6c 65  rows in a .table
ca30: 20 61 6e 64 20 65 6e 74 72 69 65 73 20 69 6e 20   and entries in 
ca40: 65 61 63 68 20 69 6e 64 65 78 20 61 73 73 6f 63  each index assoc
ca50: 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20  iated with that 
ca60: 74 61 62 6c 65 2e 0a 5e 48 6f 77 65 76 65 72 2c  table..^However,
ca70: 20 69 6e 20 61 20 5b 70 61 72 74 69 61 6c 20 69   in a [partial i
ca80: 6e 64 65 78 5d 2c 20 74 68 65 20 69 6e 64 65 78  ndex], the index
ca90: 20 62 2d 74 72 65 65 20 6f 6e 6c 79 20 63 6f 6e   b-tree only con
caa0: 74 61 69 6e 73 20 65 6e 74 72 69 65 73 0a 63 6f  tains entries.co
cab0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74  rresponding to t
cac0: 61 62 6c 65 20 72 6f 77 73 20 66 6f 72 20 77 68  able rows for wh
cad0: 69 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  ich the WHERE cl
cae0: 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  ause expression 
caf0: 6f 6e 20 74 68 65 0a 43 52 45 41 54 45 20 49 4e  on the.CREATE IN
cb00: 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 73  DEX statement is
cb10: 20 74 72 75 65 2e 0a 5e 43 6f 72 72 65 73 70 6f   true..^Correspo
cb20: 6e 64 69 6e 67 20 72 6f 77 73 20 69 6e 20 74 68  nding rows in th
cb30: 65 20 69 6e 64 65 78 20 61 6e 64 20 74 61 62 6c  e index and tabl
cb40: 65 20 62 2d 74 72 65 65 73 20 73 68 61 72 65 20  e b-trees share 
cb50: 74 68 65 20 73 61 6d 65 20 72 6f 77 69 64 0a 6f  the same rowid.o
cb60: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61  r primary key va
cb70: 6c 75 65 73 20 61 6e 64 20 63 6f 6e 74 61 69 6e  lues and contain
cb80: 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
cb90: 66 6f 72 20 61 6c 6c 20 69 6e 64 65 78 65 64 20  for all indexed 
cba0: 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68  columns.</p>..<h
cbb0: 34 3e 32 2e 35 2e 31 20 53 75 70 70 72 65 73 73  4>2.5.1 Suppress
cbc0: 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e 74  ion of redundant
cbd0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54 48   columns in WITH
cbe0: 4f 55 54 20 52 4f 57 49 44 20 73 65 63 6f 6e 64  OUT ROWID second
cbf0: 61 72 79 20 69 6e 64 65 78 65 64 0a 3c 2f 68 34  ary indexed.</h4
cc00: 3e 0a 0a 3c 70 3e 20 5e 49 6e 20 61 6e 20 69 6e  >..<p> ^In an in
cc10: 64 65 78 20 6f 6e 20 61 20 57 49 54 48 4f 55 54  dex on a WITHOUT
cc20: 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 69 66   ROWID table, if
cc30: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20   one or more of 
cc40: 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
cc50: 68 65 20 74 61 62 6c 65 20 50 52 49 4d 41 52 59  he table PRIMARY
cc60: 20 4b 45 59 20 61 72 65 20 61 6c 73 6f 20 63 6f   KEY are also co
cc70: 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 69 6e 64  lumns of the ind
cc80: 65 78 2c 20 74 68 65 6e 20 74 68 65 0a 69 6e 64  ex, then the.ind
cc90: 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e  exed column is n
cca0: 6f 74 20 72 65 70 65 61 74 65 64 20 69 6e 20 74  ot repeated in t
ccb0: 68 65 20 74 61 62 6c 65 2d 6b 65 79 20 73 75 66  he table-key suf
ccc0: 66 69 78 20 6f 6e 20 74 68 65 20 65 6e 64 20 6f  fix on the end o
ccd0: 66 0a 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f  f.the index reco
cce0: 72 64 2e 20 20 5e 28 41 73 20 61 6e 20 65 78 61  rd.  ^(As an exa
ccf0: 6d 70 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20 74  mple, consider t
cd00: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c  he following SQL
cd10: 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
cd20: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
cd30: 45 20 65 78 32 35 28 61 2c 62 2c 63 2c 64 2c 65  E ex25(a,b,c,d,e
cd40: 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 64 2c 63  ,PRIMARY KEY(d,c
cd50: 2c 61 29 29 20 57 49 54 48 4f 55 54 20 72 6f 77  ,a)) WITHOUT row
cd60: 69 64 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58  id;.CREATE INDEX
cd70: 20 65 78 32 35 63 65 20 4f 4e 20 65 78 32 35 28   ex25ce ON ex25(
cd80: 63 2c 65 29 3b 0a 43 52 45 41 54 45 20 49 4e 44  c,e);.CREATE IND
cd90: 45 58 20 65 78 32 35 61 63 64 65 20 4f 4e 20 65  EX ex25acde ON e
cda0: 78 32 35 28 61 2c 63 2c 64 2c 65 29 3b 0a 3c 2f  x25(a,c,d,e);.</
cdb0: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
cdc0: 3e 0a 0a 3c 70 3e 45 61 63 68 20 72 6f 77 20 69  >..<p>Each row i
cdd0: 6e 20 74 68 65 20 65 78 32 35 63 65 20 69 6e 64  n the ex25ce ind
cde0: 65 78 20 69 73 20 61 20 72 65 63 6f 72 64 0a 77  ex is a record.w
cdf0: 69 74 68 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  ith these column
ce00: 73 3a 20 63 2c 20 65 2c 20 64 2c 20 61 2e 20 20  s: c, e, d, a.  
ce10: 54 68 65 20 66 69 72 73 74 20 74 77 6f 20 63 6f  The first two co
ce20: 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65 20 63 6f  lumns are.the co
ce30: 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64 65  lumns being inde
ce40: 78 65 64 2c 20 63 20 61 6e 64 20 65 2e 20 20 54  xed, c and e.  T
ce50: 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c  he remaining col
ce60: 75 6d 6e 73 20 61 72 65 20 74 68 65 20 70 72 69  umns are the pri
ce70: 6d 61 72 79 0a 6b 65 79 20 6f 66 20 74 68 65 20  mary.key of the 
ce80: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
ce90: 62 6c 65 20 72 6f 77 2e 20 20 4e 6f 72 6d 61 6c  ble row.  Normal
cea0: 6c 79 2c 20 74 68 65 20 70 72 69 6d 61 72 79 20  ly, the primary 
ceb0: 6b 65 79 20 77 6f 75 6c 64 20 62 65 0a 63 6f 6c  key would be.col
cec0: 75 6d 6e 73 20 64 2c 20 63 2c 20 61 6e 64 20 61  umns d, c, and a
ced0: 2c 20 62 75 74 20 62 65 63 61 75 73 65 20 63 6f  , but because co
cee0: 6c 75 6d 6e 20 63 20 61 6c 72 65 61 64 79 20 61  lumn c already a
cef0: 70 70 65 61 72 73 20 65 61 72 6c 69 65 72 20 69  ppears earlier i
cf00: 6e 20 74 68 65 0a 69 6e 64 65 78 2c 20 69 74 20  n the.index, it 
cf10: 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
cf20: 74 68 65 20 6b 65 79 20 73 75 66 66 69 78 2e 29  the key suffix.)
cf30: 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 74  ^</p>..<p>^(In t
cf40: 68 65 20 65 78 74 72 65 6d 65 20 63 61 73 65 20  he extreme case 
cf50: 77 68 65 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e  where the column
cf60: 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  s being indexed 
cf70: 63 6f 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  cover all column
cf80: 73 0a 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  s.of the PRIMARY
cf90: 20 4b 45 59 2c 20 74 68 65 20 69 6e 64 65 78 20   KEY, the index 
cfa0: 77 69 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66 20  will consist of 
cfb0: 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  only the columns
cfc0: 20 62 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e 20   being.indexed. 
cfd0: 20 54 68 65 20 65 78 32 35 61 63 64 65 20 65 78   The ex25acde ex
cfe0: 61 6d 70 6c 65 20 61 62 6f 76 65 20 64 65 6d 6f  ample above demo
cff0: 6e 73 74 72 61 74 65 73 20 74 68 69 73 2e 29 5e  nstrates this.)^
d000: 20 20 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e    ^Each entry in
d010: 0a 74 68 65 20 65 78 32 35 61 63 64 65 20 69 6e  .the ex25acde in
d020: 64 65 78 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  dex consists of 
d030: 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  only the columns
d040: 20 61 2c 20 63 2c 20 64 2c 20 61 6e 64 20 65 2c   a, c, d, and e,
d050: 20 69 6e 20 74 68 61 74 0a 6f 72 64 65 72 2e 3c   in that.order.<
d060: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 73 75  /p>..<p> ^The su
d070: 70 70 72 65 73 73 69 6f 6e 20 6f 66 20 72 65 64  ppression of red
d080: 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20 69  undant columns i
d090: 6e 20 74 68 65 20 6b 65 79 20 73 75 66 66 69 78  n the key suffix
d0a0: 20 6f 66 20 61 6e 20 69 6e 64 65 78 0a 65 6e 74   of an index.ent
d0b0: 72 79 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20 69  ry only occurs i
d0c0: 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  n WITHOUT ROWID 
d0d0: 74 61 62 6c 65 73 2e 20 20 5e 49 6e 20 61 6e 20  tables.  ^In an 
d0e0: 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64 20 74  ordinary rowid t
d0f0: 61 62 6c 65 2c 0a 74 68 65 20 69 6e 64 65 78 20  able,.the index 
d100: 65 6e 74 72 79 20 61 6c 77 61 79 73 20 65 6e 64  entry always end
d110: 73 20 77 69 74 68 20 74 68 65 20 72 6f 77 69 64  s with the rowid
d120: 20 65 76 65 6e 20 69 66 20 74 68 65 20 5b 49 4e   even if the [IN
d130: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
d140: 59 5d 0a 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e 65  Y].column is one
d150: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
d160: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 3c 2f  being indexed.</
d170: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
d180: 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73 74  ment sqlite_mast
d190: 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65  er {sqlite_maste
d1a0: 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65  r} {sqlite_maste
d1b0: 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a 3c  r table}</tcl>.<
d1c0: 68 33 3e 32 2e 36 20 53 74 6f 72 61 67 65 20 4f  h3>2.6 Storage O
d1d0: 66 20 54 68 65 20 53 51 4c 20 44 61 74 61 62 61  f The SQL Databa
d1e0: 73 65 20 53 63 68 65 6d 61 3c 2f 68 33 3e 0a 0a  se Schema</h3>..
d1f0: 3c 70 3e 5e 50 61 67 65 20 31 20 6f 66 20 61 20  <p>^Page 1 of a 
d200: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
d210: 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6f   the root page o
d220: 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  f a table b-tree
d230: 20 74 68 61 74 0a 68 6f 6c 64 73 20 61 20 73 70   that.holds a sp
d240: 65 63 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65  ecial table name
d250: 64 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  d "sqlite_master
d260: 22 20 28 6f 72 20 22 73 71 6c 69 74 65 5f 74 65  " (or "sqlite_te
d270: 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a 74 68  mp_master" in.th
d280: 65 20 63 61 73 65 20 6f 66 20 61 20 54 45 4d 50  e case of a TEMP
d290: 20 64 61 74 61 62 61 73 65 29 20 77 68 69 63 68   database) which
d2a0: 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6d 70   stores the comp
d2b0: 6c 65 74 65 0a 64 61 74 61 62 61 73 65 20 73 63  lete.database sc
d2c0: 68 65 6d 61 2e 20 20 5e 28 54 68 65 20 73 74 72  hema.  ^(The str
d2d0: 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 73 71  ucture of the sq
d2e0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
d2f0: 65 20 69 73 20 61 73 0a 69 66 20 69 74 20 68 61  e is as.if it ha
d300: 64 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 75  d been created u
d310: 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69  sing the followi
d320: 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c  ng SQL:</p>..<bl
d330: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
d340: 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69  REATE TABLE sqli
d350: 74 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79 70  te_master(.  typ
d360: 65 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74  e text,.  name t
d370: 65 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20  ext,.  tbl_name 
d380: 74 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65  text,.  rootpage
d390: 20 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c 20   integer,.  sql 
d3a0: 74 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  text.);.</pre></
d3b0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
d3c0: 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  p>^The sqlite_ma
d3d0: 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 61  ster table conta
d3e0: 69 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20  ins one row for 
d3f0: 65 61 63 68 20 74 61 62 6c 65 2c 20 69 6e 64 65  each table, inde
d400: 78 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74 72 69  x, view,.and tri
d410: 67 67 65 72 20 28 63 6f 6c 6c 65 63 74 69 76 65  gger (collective
d420: 6c 79 20 22 6f 62 6a 65 63 74 73 22 29 20 69 6e  ly "objects") in
d430: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
d440: 68 65 6d 61 2c 20 65 78 63 65 70 74 20 74 68 65  hema, except the
d450: 72 65 0a 69 73 20 6e 6f 20 65 6e 74 72 79 20 66  re.is no entry f
d460: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  or the sqlite_ma
d470: 73 74 65 72 20 74 61 62 6c 65 20 69 74 73 65 6c  ster table itsel
d480: 66 2e 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  f.  ^The sqlite_
d490: 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 63 6f 6e  master table.con
d4a0: 74 61 69 6e 73 20 65 6e 74 72 69 65 73 20 66 6f  tains entries fo
d4b0: 72 20 5b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65  r [internal sche
d4c0: 6d 61 20 6f 62 6a 65 63 74 73 5d 20 69 6e 20 61  ma objects] in a
d4d0: 64 64 69 74 69 6f 6e 20 74 6f 20 61 70 70 6c 69  ddition to appli
d4e0: 63 61 74 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f 67  cation-.and prog
d4f0: 72 61 6d 6d 65 72 2d 64 65 66 69 6e 65 64 20 6f  rammer-defined o
d500: 62 6a 65 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28 54  bjects....<p>^(T
d510: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
d520: 2e 74 79 70 65 20 63 6f 6c 75 6d 6e 20 77 69 6c  .type column wil
d530: 6c 20 62 65 20 6f 6e 65 0a 6f 66 20 74 68 65 20  l be one.of the 
d540: 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74 20 73  following text s
d550: 74 72 69 6e 67 73 3a 20 20 27 74 61 62 6c 65 27  trings:  'table'
d560: 2c 20 27 69 6e 64 65 78 27 2c 20 27 76 69 65 77  , 'index', 'view
d570: 27 2c 20 6f 72 20 27 74 72 69 67 67 65 72 27 0a  ', or 'trigger'.
d580: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
d590: 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 20   type of object 
d5a0: 64 65 66 69 6e 65 64 2e 20 20 54 68 65 20 27 74  defined.  The 't
d5b0: 61 62 6c 65 27 20 73 74 72 69 6e 67 20 69 73 20  able' string is 
d5c0: 75 73 65 64 0a 66 6f 72 20 62 6f 74 68 20 6f 72  used.for both or
d5d0: 64 69 6e 61 72 79 20 61 6e 64 20 5b 76 69 72 74  dinary and [virt
d5e0: 75 61 6c 20 74 61 62 6c 65 73 5d 2e 29 5e 3c 2f  ual tables].)^</
d5f0: 70 3e 0a 0a 3c 2f 70 3e 5e 28 54 68 65 20 73 71  p>..</p>^(The sq
d600: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65  lite_master.name
d610: 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 68 6f 6c   column will hol
d620: 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
d630: 65 20 6f 62 6a 65 63 74 2e 29 5e 0a 5e 28 5b 55  e object.)^.^([U
d640: 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d  NIQUE] and [PRIM
d650: 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61  ARY KEY] constra
d660: 69 6e 74 73 20 6f 6e 20 74 61 62 6c 65 73 20 63  ints on tables c
d670: 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 63  ause SQLite to c
d680: 72 65 61 74 65 0a 5b 69 6e 74 65 72 6e 61 6c 20  reate.[internal 
d690: 69 6e 64 65 78 65 73 5d 20 77 69 74 68 20 6e 61  indexes] with na
d6a0: 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  mes of the form 
d6b0: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
d6c0: 78 5f 54 41 42 4c 45 5f 4e 22 0a 77 68 65 72 65  x_TABLE_N".where
d6d0: 20 54 41 42 4c 45 20 69 73 20 72 65 70 6c 61 63   TABLE is replac
d6e0: 65 64 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  ed by the name o
d6f0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
d700: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 63 6f   contains the.co
d710: 6e 73 74 72 61 69 6e 74 20 61 6e 64 20 4e 20 69  nstraint and N i
d720: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 67  s an integer beg
d730: 69 6e 6e 69 6e 67 20 77 69 74 68 20 31 20 61 6e  inning with 1 an
d740: 64 20 69 6e 63 72 65 61 73 69 6e 67 20 62 79 20  d increasing by 
d750: 6f 6e 65 0a 77 69 74 68 20 65 61 63 68 20 63 6f  one.with each co
d760: 6e 73 74 72 61 69 6e 74 20 73 65 65 6e 20 69 6e  nstraint seen in
d770: 20 74 68 65 20 74 61 62 6c 65 20 64 65 66 69 6e   the table defin
d780: 69 74 69 6f 6e 2e 29 5e 0a 5e 28 49 6e 20 61 20  ition.)^.^(In a 
d790: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
d7a0: 74 61 62 6c 65 2c 20 74 68 65 72 65 20 69 73 20  table, there is 
d7b0: 6e 6f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  no sqlite_master
d7c0: 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65 0a 50   entry for the.P
d7d0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 75 74 20  RIMARY KEY, but 
d7e0: 74 68 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f  the "sqlite_auto
d7f0: 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e  index_TABLE_N" n
d800: 61 6d 65 20 69 73 20 73 65 74 20 61 73 69 64 65  ame is set aside
d810: 0a 66 6f 72 20 74 68 65 20 50 52 49 4d 41 52 59  .for the PRIMARY
d820: 20 4b 45 59 20 61 73 20 69 66 20 74 68 65 20 73   KEY as if the s
d830: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74  qlite_master ent
d840: 72 79 20 64 69 64 20 65 78 69 73 74 2e 20 20 54  ry did exist.  T
d850: 68 69 73 0a 77 69 6c 6c 20 61 66 66 65 63 74 20  his.will affect 
d860: 74 68 65 20 6e 75 6d 62 65 72 69 6e 67 20 6f 66  the numbering of
d870: 20 73 75 62 73 65 71 75 65 6e 74 20 55 4e 49 51   subsequent UNIQ
d880: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29  UE constraints.)
d890: 5e 0a 5e 54 68 65 20 22 73 71 6c 69 74 65 5f 61  ^.^The "sqlite_a
d8a0: 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e  utoindex_TABLE_N
d8b0: 22 20 6e 61 6d 65 20 69 73 20 6e 65 76 65 72 20  " name is never 
d8c0: 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 6e  allocated for an
d8d0: 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  .[INTEGER PRIMAR
d8e0: 59 20 4b 45 59 5d 2c 20 65 69 74 68 65 72 20 69  Y KEY], either i
d8f0: 6e 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20 6f  n rowid tables o
d900: 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  r WITHOUT ROWID 
d910: 74 61 62 6c 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70  tables..</p>..<p
d920: 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74  >The sqlite_mast
d930: 65 72 2e 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75  er.tbl_name colu
d940: 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  mn holds the nam
d950: 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20  e of a table or 
d960: 76 69 65 77 0a 74 68 61 74 20 74 68 65 20 6f 62  view.that the ob
d970: 6a 65 63 74 20 69 73 20 61 73 73 6f 63 69 61 74  ject is associat
d980: 65 64 20 77 69 74 68 2e 20 20 5e 46 6f 72 20 61  ed with.  ^For a
d990: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 2c 20   table or view, 
d9a0: 74 68 65 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c  the.tbl_name col
d9b0: 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66  umn is a copy of
d9c0: 20 74 68 65 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e   the name column
d9d0: 2e 20 20 5e 46 6f 72 20 61 6e 20 69 6e 64 65 78  .  ^For an index
d9e0: 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 69  , the tbl_name.i
d9f0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
da00: 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
da10: 69 6e 64 65 78 65 64 2e 20 20 5e 46 6f 72 20 61  indexed.  ^For a
da20: 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 74 62   trigger, the tb
da30: 6c 5f 6e 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74  l_name.column st
da40: 6f 72 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ores the name of
da50: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
da60: 65 77 20 74 68 61 74 20 63 61 75 73 65 73 20 74  ew that causes t
da70: 68 65 20 74 72 69 67 67 65 72 20 0a 74 6f 20 66  he trigger .to f
da80: 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  ire.</p>..<p>^(T
da90: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
daa0: 2e 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e  .rootpage column
dab0: 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67 65   stores the page
dac0: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 72   number of the r
dad0: 6f 6f 74 0a 62 2d 74 72 65 65 20 70 61 67 65 20  oot.b-tree page 
dae0: 66 6f 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  for tables and i
daf0: 6e 64 65 78 65 73 2e 29 5e 20 20 5e 46 6f 72 20  ndexes.)^  ^For 
db00: 72 6f 77 73 20 74 68 61 74 20 64 65 66 69 6e 65  rows that define
db10: 20 76 69 65 77 73 2c 20 74 72 69 67 67 65 72 73   views, triggers
db20: 2c 0a 61 6e 64 20 76 69 72 74 75 61 6c 20 74 61  ,.and virtual ta
db30: 62 6c 65 73 2c 20 74 68 65 20 72 6f 6f 74 70 61  bles, the rootpa
db40: 67 65 20 63 6f 6c 75 6d 6e 20 69 73 20 30 20 6f  ge column is 0 o
db50: 72 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e  r NULL.</p>..<p>
db60: 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  ^(The sqlite_mas
db70: 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 73  ter.sql column s
db80: 74 6f 72 65 73 20 53 51 4c 20 74 65 78 74 20 74  tores SQL text t
db90: 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
dba0: 65 0a 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20  e.object.  This 
dbb0: 53 51 4c 20 74 65 78 74 20 69 73 20 61 20 5b 43  SQL text is a [C
dbc0: 52 45 41 54 45 20 54 41 42 4c 45 5d 2c 20 5b 43  REATE TABLE], [C
dbd0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
dbe0: 42 4c 45 5d 2c 0a 5b 43 52 45 41 54 45 20 49 4e  BLE],.[CREATE IN
dbf0: 44 45 58 5d 2c 0a 5b 43 52 45 41 54 45 20 56 49  DEX],.[CREATE VI
dc00: 45 57 5d 2c 20 6f 72 20 5b 43 52 45 41 54 45 20  EW], or [CREATE 
dc10: 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
dc20: 6e 74 20 74 68 61 74 20 69 66 20 65 76 61 6c 75  nt that if evalu
dc30: 61 74 65 64 20 61 67 61 69 6e 73 74 0a 74 68 65  ated against.the
dc40: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
dc50: 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6d 61  hen it is the ma
dc60: 69 6e 20 64 61 74 61 62 61 73 65 20 6f 66 20 61  in database of a
dc70: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
dc80: 63 74 69 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65 63  ction].would rec
dc90: 72 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65 63  reated the objec
dca0: 74 2e 29 5e 20 20 54 68 65 20 74 65 78 74 20 69  t.)^  The text i
dcb0: 73 20 75 73 75 61 6c 6c 79 20 61 20 63 6f 70 79  s usually a copy
dcc0: 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
dcd0: 0a 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20  .statement used 
dce0: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 6f 62  to create the ob
dcf0: 6a 65 63 74 20 62 75 74 20 77 69 74 68 20 6e 6f  ject but with no
dd00: 72 6d 61 6c 69 7a 61 74 69 6f 6e 73 20 61 70 70  rmalizations app
dd10: 6c 69 65 64 20 73 6f 0a 74 68 61 74 20 74 68 65  lied so.that the
dd20: 20 74 65 78 74 20 63 6f 6e 66 6f 72 6d 73 20 74   text conforms t
dd30: 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
dd40: 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69  rules:..<ul>.<li
dd50: 3e 5e 54 68 65 20 43 52 45 41 54 45 2c 20 54 41  >^The CREATE, TA
dd60: 42 4c 45 2c 20 56 49 45 57 2c 20 54 52 49 47 47  BLE, VIEW, TRIGG
dd70: 45 52 2c 20 61 6e 64 20 49 4e 44 45 58 20 6b 65  ER, and INDEX ke
dd80: 79 77 6f 72 64 73 20 61 74 20 74 68 65 20 62 65  ywords at the be
dd90: 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20 73  ginning.of the s
dda0: 74 61 74 65 6d 65 6e 74 20 61 72 65 20 63 6f 6e  tatement are con
ddb0: 76 65 72 74 65 64 20 74 6f 20 61 6c 6c 20 75 70  verted to all up
ddc0: 70 65 72 20 63 61 73 65 20 6c 65 74 74 65 72 73  per case letters
ddd0: 2e 0a 3c 6c 69 3e 5e 54 68 65 20 54 45 4d 50 20  ..<li>^The TEMP 
dde0: 6f 72 20 54 45 4d 50 4f 52 41 52 59 20 6b 65 79  or TEMPORARY key
ddf0: 77 6f 72 64 20 69 73 20 72 65 6d 6f 76 65 64 20  word is removed 
de00: 69 66 20 69 74 20 6f 63 63 75 72 73 20 61 66 74  if it occurs aft
de10: 65 72 20 74 68 65 20 0a 69 6e 69 74 69 61 6c 20  er the .initial 
de20: 43 52 45 41 54 45 20 6b 65 79 77 6f 72 64 2e 0a  CREATE keyword..
de30: 3c 6c 69 3e 5e 41 6e 79 20 64 61 74 61 62 61 73  <li>^Any databas
de40: 65 20 6e 61 6d 65 20 71 75 61 6c 69 66 69 65 72  e name qualifier
de50: 20 74 68 61 74 20 6f 63 63 75 72 73 20 70 72 69   that occurs pri
de60: 6f 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f  or to the name o
de70: 66 20 74 68 65 0a 6f 62 6a 65 63 74 20 62 65 69  f the.object bei
de80: 6e 67 20 63 72 65 61 74 65 64 20 69 73 20 72 65  ng created is re
de90: 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 4c 65 61 64  moved..<li>^Lead
dea0: 69 6e 67 20 73 70 61 63 65 73 20 61 72 65 20 72  ing spaces are r
deb0: 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 41 6c 6c  emoved..<li>^All
dec0: 20 73 70 61 63 65 73 20 66 6f 6c 6c 6f 77 69 6e   spaces followin
ded0: 67 20 74 68 65 20 66 69 72 73 74 20 74 77 6f 20  g the first two 
dee0: 6b 65 79 77 6f 72 64 73 20 61 72 65 20 63 6f 6e  keywords are con
def0: 76 65 72 74 65 64 20 69 6e 74 6f 20 61 20 73 69  verted into a si
df00: 6e 67 6c 65 0a 73 70 61 63 65 2e 0a 3c 2f 75 6c  ngle.space..</ul
df10: 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 74 65 78 74  >..<p>^(The text
df20: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   in the sqlite_m
df30: 61 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e  aster.sql column
df40: 20 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68   is a copy of th
df50: 65 20 6f 72 69 67 69 6e 61 6c 0a 43 52 45 41 54  e original.CREAT
df60: 45 20 73 74 61 74 65 6d 65 6e 74 20 74 65 78 74  E statement text
df70: 20 74 68 61 74 20 63 72 65 61 74 65 64 20 74 68   that created th
df80: 65 20 6f 62 6a 65 63 74 2c 20 65 78 63 65 70 74  e object, except
df90: 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 61 73 0a 64   normalized as.d
dfa0: 65 73 63 72 69 62 65 64 20 61 62 6f 76 65 20 61  escribed above a
dfb0: 6e 64 20 61 73 20 6d 6f 64 69 66 69 65 64 20 62  nd as modified b
dfc0: 79 20 73 75 62 73 65 71 75 65 6e 74 20 5b 41 4c  y subsequent [AL
dfd0: 54 45 52 20 54 41 42 4c 45 5d 20 73 74 61 74 65  TER TABLE] state
dfe0: 6d 65 6e 74 73 2e 29 5e 0a 5e 28 54 68 65 20 73  ments.)^.^(The s
dff0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c  qlite_master.sql
e000: 20 69 73 20 4e 55 4c 4c 20 66 6f 72 20 74 68 65   is NULL for the
e010: 20 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78   [internal index
e020: 65 73 5d 20 74 68 61 74 20 61 72 65 0a 61 75 74  es] that are.aut
e030: 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
e040: 65 64 20 62 79 20 5b 55 4e 49 51 55 45 5d 20 6f  ed by [UNIQUE] o
e050: 72 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  r [PRIMARY KEY] 
e060: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 3c 2f  constraints.)^</
e070: 70 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  p>...<tcl>hd_fra
e080: 67 6d 65 6e 74 20 69 6e 74 73 63 68 65 6d 61 20  gment intschema 
e090: 7b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61  {internal schema
e0a0: 20 6f 62 6a 65 63 74 73 7d 20 5c 0a 7b 69 6e 74   objects} \.{int
e0b0: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
e0c0: 65 63 74 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69  ect} {internal i
e0d0: 6e 64 65 78 7d 20 7b 69 6e 74 65 72 6e 61 6c 20  ndex} {internal 
e0e0: 69 6e 64 65 78 65 73 7d 20 5c 0a 7b 69 6e 74 65  indexes} \.{inte
e0f0: 72 6e 61 6c 20 74 61 62 6c 65 7d 20 7b 69 6e 74  rnal table} {int
e100: 65 72 6e 61 6c 20 74 61 62 6c 65 73 7d 3c 2f 74  ernal tables}</t
e110: 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 31 20 49 6e  cl>.<h4>2.6.1 In
e120: 74 65 72 6e 61 6c 20 53 63 68 65 6d 61 20 4f 62  ternal Schema Ob
e130: 6a 65 63 74 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e  jects</h4>..<p>^
e140: 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74  In addition to t
e150: 68 65 20 74 61 62 6c 65 73 2c 20 69 6e 64 65 78  he tables, index
e160: 65 73 2c 20 76 69 65 77 73 2c 20 61 6e 64 20 74  es, views, and t
e170: 72 69 67 67 65 72 73 20 63 72 65 61 74 65 64 20  riggers created 
e180: 62 79 0a 74 68 65 20 61 70 70 6c 69 63 61 74 69  by.the applicati
e190: 6f 6e 20 61 6e 64 2f 6f 72 20 74 68 65 20 64 65  on and/or the de
e1a0: 76 65 6c 6f 70 65 72 20 75 73 69 6e 67 20 43 52  veloper using CR
e1b0: 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20  EATE statements 
e1c0: 53 51 4c 2c 20 74 68 65 0a 73 71 6c 69 74 65 5f  SQL, the.sqlite_
e1d0: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 6d 61 79  master table may
e1e0: 20 63 6f 6e 74 61 69 6e 20 7a 65 72 6f 20 6f 72   contain zero or
e1f0: 20 6d 6f 72 65 20 65 6e 74 72 69 65 73 20 66 6f   more entries fo
e200: 72 20 0a 3c 69 3e 69 6e 74 65 72 6e 61 6c 20 73  r .<i>internal s
e210: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 3c 2f 69  chema objects</i
e220: 3e 20 74 68 61 74 20 61 72 65 20 63 72 65 61 74  > that are creat
e230: 65 64 20 62 79 20 53 51 4c 69 74 65 20 66 6f 72  ed by SQLite for
e240: 20 69 74 73 20 0a 6f 77 6e 20 69 6e 74 65 72 6e   its .own intern
e250: 61 6c 20 75 73 65 2e 20 20 5e 54 68 65 20 6e 61  al use.  ^The na
e260: 6d 65 73 20 6f 66 20 69 6e 74 65 72 6e 61 6c 20  mes of internal 
e270: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 0a 61  schema objects.a
e280: 6c 77 61 79 73 20 62 65 67 69 6e 20 77 69 74 68  lways begin with
e290: 20 22 73 71 6c 69 74 65 5f 22 20 61 6e 64 20 61   "sqlite_" and a
e2a0: 6e 79 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c  ny table, index,
e2b0: 20 76 69 65 77 2c 20 6f 72 20 74 72 69 67 67 65   view, or trigge
e2c0: 72 0a 77 68 6f 73 65 20 6e 61 6d 65 20 62 65 67  r.whose name beg
e2d0: 69 6e 73 20 77 69 74 68 20 22 73 71 6c 69 74 65  ins with "sqlite
e2e0: 5f 22 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61  _" is an interna
e2f0: 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 2e  l schema object.
e300: 0a 5e 53 51 4c 69 74 65 20 70 72 6f 68 69 62 69  .^SQLite prohibi
e310: 74 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20  ts applications 
e320: 66 72 6f 6d 20 63 72 65 61 74 69 6e 67 20 6f 62  from creating ob
e330: 6a 65 63 74 73 20 77 68 6f 73 65 20 6e 61 6d 65  jects whose name
e340: 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22 73 71  s begin.with "sq
e350: 6c 69 74 65 5f 22 2e 20 20 0a 0a 3c 70 3e 49 6e  lite_".  ..<p>In
e360: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
e370: 6a 65 63 74 73 20 75 73 65 64 20 62 79 20 53 51  jects used by SQ
e380: 4c 69 74 65 20 6d 61 79 20 69 6e 63 6c 75 64 65  Lite may include
e390: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a   the following:.
e3a0: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 6e 64  .<ul>.<li><p>Ind
e3b0: 69 63 65 73 20 77 69 74 68 20 6e 61 6d 65 73 20  ices with names 
e3c0: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c  of the form "sql
e3d0: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41  ite_autoindex_TA
e3e0: 42 4c 45 5f 4e 22 20 74 68 61 74 0a 20 20 20 20  BLE_N" that.    
e3f0: 20 20 20 61 72 65 20 75 73 65 64 20 74 6f 20 69     are used to i
e400: 6d 70 6c 65 6d 65 6e 74 20 5b 55 4e 49 51 55 45  mplement [UNIQUE
e410: 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b  ] and [PRIMARY K
e420: 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  EY] constraints 
e430: 6f 6e 0a 20 20 20 20 20 20 20 6f 72 64 69 6e 61  on.       ordina
e440: 72 79 20 74 61 62 6c 65 73 2e 0a 0a 3c 6c 69 3e  ry tables...<li>
e450: 3c 70 3e 41 20 74 61 62 6c 65 20 77 69 74 68 20  <p>A table with 
e460: 74 68 65 20 6e 61 6d 65 20 22 73 71 6c 69 74 65  the name "sqlite
e470: 5f 73 65 71 75 65 6e 63 65 22 20 74 68 61 74 20  _sequence" that 
e480: 69 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20  is used to keep 
e490: 74 72 61 63 6b 0a 20 20 20 20 20 20 20 6f 66 20  track.       of 
e4a0: 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 69 73 74  the maximum hist
e4b0: 6f 72 69 63 61 6c 20 5b 49 4e 54 45 47 45 52 20  orical [INTEGER 
e4c0: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 66 6f 72  PRIMARY KEY] for
e4d0: 20 61 20 74 61 62 6c 65 20 74 68 61 74 0a 20 20   a table that.  
e4e0: 20 20 20 20 20 75 73 69 6e 67 20 5b 41 55 54 4f       using [AUTO
e4f0: 49 4e 43 52 45 4d 45 4e 54 5d 2e 0a 0a 3c 6c 69  INCREMENT]...<li
e500: 3e 3c 70 3e 54 61 62 6c 65 73 20 77 69 74 68 20  ><p>Tables with 
e510: 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72  names of the for
e520: 6d 20 22 73 71 6c 69 74 65 5f 73 74 61 74 4e 22  m "sqlite_statN"
e530: 20 77 68 65 72 65 20 4e 20 69 73 20 61 6e 20 69   where N is an i
e540: 6e 74 65 67 65 72 2e 0a 20 20 20 20 20 20 20 53  nteger..       S
e550: 75 63 68 20 74 61 62 6c 65 73 20 73 74 6f 72 65  uch tables store
e560: 20 64 61 74 61 62 61 73 65 20 73 74 61 74 69 73   database statis
e570: 74 69 63 73 20 67 61 74 68 65 72 65 64 20 62 79  tics gathered by
e580: 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 0a 20   the [ANALYZE]. 
e590: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 61 6e        command an
e5a0: 64 20 75 73 65 64 20 62 79 20 74 68 65 20 71 75  d used by the qu
e5b0: 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f 20 68  ery planner to h
e5c0: 65 6c 70 20 64 65 74 65 72 6d 69 6e 65 20 74 68  elp determine th
e5d0: 65 20 62 65 73 74 0a 20 20 20 20 20 20 20 61 6c  e best.       al
e5e0: 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65 20 66  gorithm to use f
e5f0: 6f 72 20 65 61 63 68 20 71 75 65 72 79 2e 0a 3c  or each query..<
e600: 2f 75 6c 3e 0a 0a 3c 70 3e 4e 65 77 20 69 6e 74  /ul>..<p>New int
e610: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
e620: 65 63 74 73 20 6e 61 6d 65 73 2c 20 61 6c 77 61  ects names, alwa
e630: 79 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ys beginning wit
e640: 68 20 22 73 71 6c 69 74 65 5f 22 2c 0a 6d 61 79  h "sqlite_",.may
e650: 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
e660: 20 53 51 4c 69 74 65 20 66 69 6c 65 20 66 6f 72   SQLite file for
e670: 6d 61 74 20 69 6e 20 66 75 74 75 72 65 20 72 65  mat in future re
e680: 6c 65 61 73 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64  leases...<tcl>hd
e690: 5f 66 72 61 67 6d 65 6e 74 20 73 65 71 74 61 62  _fragment seqtab
e6a0: 20 7b 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63   {sqlite_sequenc
e6b0: 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36  e}</tcl>.<h4>2.6
e6c0: 2e 32 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65  .2 The sqlite_se
e6d0: 71 75 65 6e 63 65 20 74 61 62 6c 65 3c 2f 68 34  quence table</h4
e6e0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74  >..<p>^The sqlit
e6f0: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
e700: 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20   is an internal 
e710: 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 68 65  table used to he
e720: 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 0a 5b 41 55  lp implement.[AU
e730: 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 20 20 5e  TOINCREMENT].  ^
e740: 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  The sqlite_seque
e750: 6e 63 65 20 74 61 62 6c 65 20 69 73 20 63 72 65  nce table is cre
e760: 61 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  ated automatical
e770: 6c 79 0a 77 68 65 6e 65 76 65 72 20 61 6e 79 20  ly.whenever any 
e780: 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20 77  ordinary table w
e790: 69 74 68 20 61 6e 20 41 55 54 4f 49 4e 43 52 45  ith an AUTOINCRE
e7a0: 4d 45 4e 54 20 69 6e 74 65 67 65 72 20 70 72 69  MENT integer pri
e7b0: 6d 61 72 79 0a 6b 65 79 20 69 73 20 63 72 65 61  mary.key is crea
e7c0: 74 65 64 2e 20 20 5e 4f 6e 63 65 20 63 72 65 61  ted.  ^Once crea
e7d0: 74 65 64 2c 20 74 68 65 20 73 71 6c 69 74 65 5f  ted, the sqlite_
e7e0: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 65  sequence table e
e7f0: 78 69 73 74 73 20 69 6e 20 74 68 65 0a 73 71 6c  xists in the.sql
e800: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
e810: 20 66 6f 72 65 76 65 72 3b 20 69 74 20 63 61 6e   forever; it can
e820: 6e 6f 74 20 62 65 20 64 72 6f 70 70 65 64 2e 0a  not be dropped..
e830: 5e 28 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  ^(The schema for
e840: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
e850: 65 6e 63 65 20 74 61 62 6c 65 20 69 73 3a 0a 0a  ence table is:..
e860: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
e870: 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
e880: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 28 6e  qlite_sequence(n
e890: 61 6d 65 2c 73 65 71 29 3b 0a 3c 2f 70 72 65 3e  ame,seq);.</pre>
e8a0: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
e8b0: 0a 3c 70 3e 5e 54 68 65 72 65 20 69 73 20 61 20  .<p>^There is a 
e8c0: 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e 20 74 68  single row in th
e8d0: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
e8e0: 65 20 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68  e table for each
e8f0: 20 6f 72 64 69 6e 61 72 79 0a 74 61 62 6c 65 20   ordinary.table 
e900: 74 68 61 74 20 75 73 65 73 20 41 55 54 4f 49 4e  that uses AUTOIN
e910: 43 52 45 4d 45 4e 54 2e 20 20 5e 28 54 68 65 20  CREMENT.  ^(The 
e920: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
e930: 65 20 28 61 73 20 69 74 20 61 70 70 65 61 72 73  e (as it appears
e940: 20 69 6e 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65   in.sqlite_maste
e950: 72 2e 6e 61 6d 65 29 20 69 73 20 69 6e 20 74 68  r.name) is in th
e960: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
e970: 65 2e 6d 61 69 6e 20 66 69 65 6c 64 20 61 6e 64  e.main field and
e980: 20 74 68 65 20 6c 61 72 67 65 73 74 0a 5b 49 4e   the largest.[IN
e990: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
e9a0: 59 5d 20 65 76 65 72 20 75 73 65 64 20 62 79 20  Y] ever used by 
e9b0: 74 68 61 74 20 74 61 62 6c 65 20 69 73 20 69 6e  that table is in
e9c0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
e9d0: 65 6e 63 65 2e 73 65 71 0a 66 69 65 6c 64 2e 29  ence.seq.field.)
e9e0: 5e 20 20 5e 4e 65 77 20 61 75 74 6f 6d 61 74 69  ^  ^New automati
e9f0: 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20  cally generated 
ea00: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
ea10: 6b 65 79 73 20 66 6f 72 20 41 55 54 4f 49 4e 43  keys for AUTOINC
ea20: 52 45 4d 45 4e 54 0a 74 61 62 6c 65 73 20 61 72  REMENT.tables ar
ea30: 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  e guaranteed to 
ea40: 62 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74  be larger than t
ea50: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ea60: 63 65 2e 73 65 71 20 66 69 65 6c 64 20 66 6f 72  ce.seq field for
ea70: 0a 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 28 49  .that table..^(I
ea80: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  f the sqlite_seq
ea90: 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20  uence.seq field 
eaa0: 6f 66 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  of an AUTOINCREM
eab0: 45 4e 54 20 74 61 62 6c 65 20 69 73 20 61 6c 72  ENT table is alr
eac0: 65 61 64 79 20 61 74 0a 74 68 65 20 6c 61 72 67  eady at.the larg
ead0: 65 73 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  est integer valu
eae0: 65 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  e (9223372036854
eaf0: 37 37 35 38 30 37 29 20 74 68 65 6e 20 61 74 74  775807) then att
eb00: 65 6d 70 74 73 20 74 6f 20 61 64 64 20 6e 65 77  empts to add new
eb10: 0a 72 6f 77 73 20 74 6f 20 74 68 61 74 20 74 61  .rows to that ta
eb20: 62 6c 65 20 77 69 74 68 20 61 6e 20 61 75 74 6f  ble with an auto
eb30: 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  matically genera
eb40: 74 65 64 20 69 6e 74 65 67 65 72 20 70 72 69 6d  ted integer prim
eb50: 61 72 79 20 77 69 6c 6c 20 66 61 69 6c 0a 77 69  ary will fail.wi
eb60: 74 68 20 61 6e 20 5b 53 51 4c 49 54 45 5f 46 55  th an [SQLITE_FU
eb70: 4c 4c 5d 20 65 72 72 6f 72 2e 29 5e 0a 5e 54 68  LL] error.)^.^Th
eb80: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
eb90: 65 2e 73 65 71 20 66 69 65 6c 64 20 69 73 20 61  e.seq field is a
eba0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64  utomatically upd
ebb0: 61 74 65 64 20 69 66 20 72 65 71 75 69 72 65 64  ated if required
ebc0: 20 77 68 65 6e 0a 6e 65 77 20 65 6e 74 72 69 65   when.new entrie
ebd0: 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 61  s are added to a
ebe0: 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
ebf0: 74 61 62 6c 65 2e 20 20 0a 5e 54 68 65 20 73 71  table.  .^The sq
ec00: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f  lite_sequence ro
ec10: 77 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43  w for an AUTOINC
ec20: 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20  REMENT table is 
ec30: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
ec40: 6c 65 74 65 64 0a 77 68 65 6e 20 74 68 65 20 74  leted.when the t
ec50: 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65 64 2e  able is dropped.
ec60: 0a 5e 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  .^If the sqlite_
ec70: 73 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72  sequence row for
ec80: 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
ec90: 54 20 74 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74  T table does not
eca0: 20 65 78 69 73 74 20 77 68 65 6e 0a 74 68 65 20   exist when.the 
ecb0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
ecc0: 62 6c 65 20 69 73 20 75 70 64 61 74 65 64 2c 20  ble is updated, 
ecd0: 74 68 65 6e 20 61 20 6e 65 77 20 73 71 6c 69 74  then a new sqlit
ece0: 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20 69  e_sequence row i
ecf0: 73 20 63 72 65 61 74 65 64 2e 0a 5e 28 49 66 20  s created..^(If 
ed00: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
ed10: 6e 63 65 2e 73 65 71 20 76 61 6c 75 65 20 66 6f  nce.seq value fo
ed20: 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  r an AUTOINCREME
ed30: 4e 54 20 74 61 62 6c 65 20 69 73 20 6d 61 6e 75  NT table is manu
ed40: 61 6c 6c 79 20 0a 73 65 74 20 74 6f 20 73 6f 6d  ally .set to som
ed50: 65 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61  ething other tha
ed60: 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  n an integer and
ed70: 20 74 68 65 72 65 20 69 73 20 61 20 73 75 62 73   there is a subs
ed80: 65 71 75 65 6e 74 20 61 74 74 65 6d 70 74 20 74  equent attempt t
ed90: 6f 0a 69 6e 73 65 72 74 20 74 68 65 20 6f 72 20  o.insert the or 
eda0: 75 70 64 61 74 65 20 74 68 65 20 41 55 54 4f 49  update the AUTOI
edb0: 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2c 20  NCREMENT table, 
edc0: 74 68 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f  then the behavio
edd0: 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 29  r is undefined.)
ede0: 5e 0a 0a 3c 70 3e 5e 41 70 70 6c 69 63 61 74 69  ^..<p>^Applicati
edf0: 6f 6e 20 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77  on code is allow
ee00: 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  ed to modify the
ee10: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
ee20: 20 74 61 62 6c 65 2c 20 74 6f 20 61 64 64 0a 6e   table, to add.n
ee30: 65 77 20 72 6f 77 73 2c 20 74 6f 20 64 65 6c 65  ew rows, to dele
ee40: 74 65 20 72 6f 77 73 2c 20 6f 72 20 74 6f 20 6d  te rows, or to m
ee50: 6f 64 69 66 79 20 65 78 69 73 74 69 6e 67 20 72  odify existing r
ee60: 6f 77 73 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  ows.  ^However, 
ee70: 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 6f 64 65  application.code
ee80: 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65 20 74   cannot create t
ee90: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
eea0: 63 65 20 74 61 62 6c 65 20 69 66 20 69 74 20 64  ce table if it d
eeb0: 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20  oes not already 
eec0: 65 78 69 73 74 2e 0a 5e 41 70 70 6c 69 63 61 74  exist..^Applicat
eed0: 69 6f 6e 20 63 6f 64 65 20 63 61 6e 20 64 65 6c  ion code can del
eee0: 65 74 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  ete all entries 
eef0: 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74 65 5f  from the sqlite_
ef00: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2c 0a  sequence table,.
ef10: 62 75 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  but application 
ef20: 63 6f 64 65 20 63 61 6e 6e 6f 74 20 64 72 6f 70  code cannot drop
ef30: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
ef40: 65 6e 63 65 20 74 61 62 6c 65 2e 0a 0a 3c 74 63  ence table...<tc
ef50: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74  l>hd_fragment st
ef60: 61 74 31 74 61 62 20 7b 73 71 6c 69 74 65 5f 73  at1tab {sqlite_s
ef70: 74 61 74 31 7d 20 53 51 4c 49 54 45 5f 53 54 41  tat1} SQLITE_STA
ef80: 54 31 20 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e  T1 </tcl>.<h4>2.
ef90: 36 2e 33 20 54 68 65 20 73 71 6c 69 74 65 5f 73  6.3 The sqlite_s
efa0: 74 61 74 31 20 74 61 62 6c 65 3c 2f 68 34 3e 0a  tat1 table</h4>.
efb0: 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f  .<p>^The sqlite_
efc0: 73 74 61 74 31 20 69 73 20 61 6e 20 69 6e 74 65  stat1 is an inte
efd0: 72 6e 61 6c 20 74 61 62 6c 65 20 63 72 65 61 74  rnal table creat
efe0: 65 64 20 62 79 20 74 68 65 20 5b 41 4e 41 4c 59  ed by the [ANALY
eff0: 5a 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61 6e 64 20  ZE] command.and 
f000: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 73 75 70  used to hold sup
f010: 70 6c 65 6d 65 6e 74 61 6c 20 69 6e 66 6f 72 6d  plemental inform
f020: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 61 62 6c  ation about tabl
f030: 65 73 20 61 6e 64 20 69 6e 64 65 78 65 73 20 74  es and indexes t
f040: 68 61 74 20 74 68 65 0a 71 75 65 72 79 20 70 6c  hat the.query pl
f050: 61 6e 6e 65 72 20 63 61 6e 20 75 73 65 20 74 6f  anner can use to
f060: 20 68 65 6c 70 20 69 74 20 66 69 6e 64 20 62 65   help it find be
f070: 74 74 65 72 20 77 61 79 73 20 6f 66 20 70 65 72  tter ways of per
f080: 66 6f 72 6d 69 6e 67 20 71 75 65 72 69 65 73 2e  forming queries.
f090: 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 73 20 63  .^Applications c
f0a0: 61 6e 20 75 70 64 61 74 65 2c 20 64 65 6c 65 74  an update, delet
f0b0: 65 20 66 72 6f 6d 2c 20 69 6e 73 65 72 74 20 69  e from, insert i
f0c0: 6e 74 6f 20 6f 72 20 64 72 6f 70 20 74 68 65 20  nto or drop the 
f0d0: 73 71 6c 69 74 65 5f 73 74 61 74 31 0a 74 61 62  sqlite_stat1.tab
f0e0: 6c 65 2c 20 62 75 74 20 6d 61 79 20 6e 6f 74 20  le, but may not 
f0f0: 63 72 65 61 74 65 20 6f 72 20 61 6c 74 65 72 20  create or alter 
f100: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
f110: 20 74 61 62 6c 65 2e 0a 5e 28 54 68 65 20 73 63   table..^(The sc
f120: 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69  hema of the sqli
f130: 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 69  te_stat1 table i
f140: 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  s as follows:..<
f150: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
f160: 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71  .CREATE TABLE sq
f170: 6c 69 74 65 5f 73 74 61 74 31 28 74 62 6c 2c 69  lite_stat1(tbl,i
f180: 64 78 2c 73 74 61 74 29 3b 0a 3c 2f 70 72 65 3e  dx,stat);.</pre>
f190: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
f1a0: 0a 3c 70 3e 20 5e 28 54 68 65 72 65 20 69 73 20  .<p> ^(There is 
f1b0: 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 65 20 72 6f 77  normally one row
f1c0: 20 70 65 72 20 69 6e 64 65 78 2c 20 77 69 74 68   per index, with
f1d0: 20 74 68 65 20 69 6e 64 65 78 20 69 64 65 6e 74   the index ident
f1e0: 69 66 69 65 64 20 62 79 20 74 68 65 0a 6e 61 6d  ified by the.nam
f1f0: 65 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  e in the sqlite_
f200: 73 74 61 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e  stat1.idx column
f210: 2e 29 5e 20 20 5e 28 54 68 65 20 73 71 6c 69 74  .)^  ^(The sqlit
f220: 65 5f 73 74 61 74 31 2e 74 62 6c 20 63 6f 6c 75  e_stat1.tbl colu
f230: 6d 6e 20 69 73 0a 74 68 65 20 6e 61 6d 65 20 6f  mn is.the name o
f240: 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 77  f the table to w
f250: 68 69 63 68 20 74 68 65 20 69 6e 64 65 78 20 62  hich the index b
f260: 65 6c 6f 6e 67 73 2e 29 5e 20 20 5e 28 49 6e 20  elongs.)^  ^(In 
f270: 65 61 63 68 20 73 75 63 68 20 72 6f 77 2c 20 0a  each such row, .
f280: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 2e  the sqlite_stat.
f290: 73 74 61 74 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c  stat column will
f2a0: 20 62 65 0a 61 20 73 74 72 69 6e 67 20 63 6f 6e   be.a string con
f2b0: 73 69 73 74 69 6e 67 20 6f 66 20 61 20 6c 69 73  sisting of a lis
f2c0: 74 20 6f 66 20 69 6e 74 65 67 65 72 73 20 66 6f  t of integers fo
f2d0: 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
f2e0: 72 20 6d 6f 72 65 20 0a 61 72 67 75 6d 65 6e 74  r more .argument
f2f0: 73 2e 29 5e 20 20 5e 54 68 65 20 66 69 72 73 74  s.)^  ^The first
f300: 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 69 73   integer in this
f310: 0a 6c 69 73 74 20 69 73 20 74 68 65 20 61 70 70  .list is the app
f320: 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20  roximate number 
f330: 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69  of rows in the i
f340: 6e 64 65 78 20 61 6e 64 20 69 6e 20 74 68 65 20  ndex and in the 
f350: 74 61 62 6c 65 2e 0a 5e 54 68 65 20 73 65 63 6f  table..^The seco
f360: 6e 64 20 69 6e 74 65 67 65 72 20 69 73 20 74 68  nd integer is th
f370: 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 61 76  e approximate av
f380: 65 72 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20  erage number of 
f390: 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
f3a0: 78 0a 74 68 61 74 20 68 61 76 65 20 74 68 65 20  x.that have the 
f3b0: 73 61 6d 65 20 76 61 6c 75 65 20 69 6e 20 74 68  same value in th
f3c0: 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
f3d0: 66 20 74 68 65 20 69 6e 64 65 78 2e 20 20 5e 54  f the index.  ^T
f3e0: 68 65 20 74 68 69 72 64 20 0a 69 6e 74 65 67 65  he third .intege
f3f0: 72 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69  r is the approxi
f400: 6d 61 74 65 20 61 76 65 72 61 67 65 20 6e 75 6d  mate average num
f410: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
f420: 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 68 61  he index that ha
f430: 76 65 20 0a 74 68 65 20 73 61 6d 65 20 76 61 6c  ve .the same val
f440: 75 65 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  ue for the first
f450: 20 74 77 6f 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e   two columns.  ^
f460: 54 68 65 20 4e 2d 74 68 20 69 6e 74 65 67 65 72  The N-th integer
f470: 20 28 66 6f 72 20 4e 3e 31 29 20 0a 69 73 20 74   (for N>1) .is t
f480: 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 61  he approximate a
f490: 76 65 72 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  verage number of
f4a0: 20 72 6f 77 73 20 69 6e 20 0a 74 68 65 20 69 6e   rows in .the in
f4b0: 64 65 78 20 77 68 69 63 68 20 68 61 76 65 20 74  dex which have t
f4c0: 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f  he same value fo
f4d0: 72 20 74 68 65 20 66 69 72 73 74 20 4e 2d 31 20  r the first N-1 
f4e0: 63 6f 6c 75 6d 6e 73 2e 20 20 5e 46 6f 72 0a 61  columns.  ^For.a
f4f0: 20 4b 2d 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2c   K-column index,
f500: 20 74 68 65 72 65 20 77 69 6c 6c 20 62 65 20 4b   there will be K
f510: 2b 31 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74  +1 integers in t
f520: 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 2e 20  he stat column. 
f530: 20 5e 49 66 0a 74 68 65 20 69 6e 64 65 78 20 69   ^If.the index i
f540: 73 20 75 6e 69 71 75 65 2c 20 74 68 65 6e 20 74  s unique, then t
f550: 68 65 20 6c 61 73 74 20 69 6e 74 65 67 65 72 20  he last integer 
f560: 77 69 6c 6c 20 62 65 20 31 2e 0a 0a 3c 70 3e 5e  will be 1...<p>^
f570: 54 68 65 20 6c 69 73 74 20 6f 66 20 69 6e 74 65  The list of inte
f580: 67 65 72 73 20 69 6e 20 74 68 65 20 73 74 61 74  gers in the stat
f590: 20 63 6f 6c 75 6d 6e 20 63 61 6e 20 6f 70 74 69   column can opti
f5a0: 6f 6e 61 6c 6c 79 20 62 65 20 66 6f 6c 6c 6f 77  onally be follow
f5b0: 65 64 0a 62 79 20 61 72 67 75 6d 65 6e 74 73 2c  ed.by arguments,
f5c0: 20 65 61 63 68 20 6f 66 20 77 68 69 63 68 20 69   each of which i
f5d0: 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20  s a sequence of 
f5e0: 6e 6f 6e 2d 73 70 61 63 65 20 63 68 61 72 61 63  non-space charac
f5f0: 74 65 72 73 2e 0a 5e 41 6c 6c 20 61 72 67 75 6d  ters..^All argum
f600: 65 6e 74 73 20 61 72 65 20 70 72 65 63 65 64 65  ents are precede
f610: 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 73 70  d by a single sp
f620: 61 63 65 2e 0a 5e 55 6e 72 65 63 6f 67 6e 69 7a  ace..^Unrecogniz
f630: 65 64 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  ed arguments are
f640: 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65   silently ignore
f650: 64 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22  d...<p>^If the "
f660: 75 6e 6f 72 64 65 72 65 64 22 20 61 72 67 75 6d  unordered" argum
f670: 65 6e 74 20 69 73 20 70 72 65 73 65 6e 74 2c 20  ent is present, 
f680: 74 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 70  then the query p
f690: 6c 61 6e 6e 65 72 20 61 73 73 75 6d 65 73 0a 74  lanner assumes.t
f6a0: 68 61 74 20 74 68 65 20 69 6e 64 65 78 20 69 73  hat the index is
f6b0: 20 75 6e 6f 72 64 65 72 65 64 20 61 6e 64 20 77   unordered and w
f6c0: 69 6c 6c 20 6e 6f 74 20 75 73 65 20 74 68 65 20  ill not use the 
f6d0: 69 6e 64 65 78 20 66 6f 72 20 61 20 72 61 6e 67  index for a rang
f6e0: 65 20 71 75 65 72 79 0a 6f 72 20 66 6f 72 20 73  e query.or for s
f6f0: 6f 72 74 69 6e 67 2e 0a 0a 3c 70 3e 5e 54 68 65  orting...<p>^The
f700: 20 22 73 7a 3d 4e 4e 4e 22 20 61 72 67 75 6d 65   "sz=NNN" argume
f710: 6e 74 20 28 77 68 65 72 65 20 4e 4e 4e 20 72 65  nt (where NNN re
f720: 70 72 65 73 65 6e 74 73 20 61 20 73 65 71 75 65  presents a seque
f730: 6e 63 65 20 6f 66 20 31 20 6f 72 20 6d 6f 72 65  nce of 1 or more
f740: 20 64 69 67 69 74 73 29 0a 6d 65 61 6e 73 20 74   digits).means t
f750: 68 61 74 20 74 68 65 20 61 76 65 72 61 67 65 20  hat the average 
f760: 72 6f 77 20 73 69 7a 65 20 6f 76 65 72 20 61 6c  row size over al
f770: 6c 20 72 65 63 6f 72 64 73 20 6f 66 20 74 68 65  l records of the
f780: 20 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20   table or.index 
f790: 69 73 20 4e 4e 4e 20 62 79 74 65 73 20 70 65 72  is NNN bytes per
f7a0: 20 72 6f 77 2e 20 20 5e 54 68 65 20 53 51 4c 69   row.  ^The SQLi
f7b0: 74 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  te query planner
f7c0: 20 6d 69 67 68 74 20 75 73 65 20 74 68 65 0a 65   might use the.e
f7d0: 73 74 69 6d 61 74 65 64 20 72 6f 77 20 73 69 7a  stimated row siz
f7e0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72  e information pr
f7f0: 6f 76 69 64 65 64 20 62 79 20 74 68 65 20 22 73  ovided by the "s
f800: 7a 3d 4e 4e 4e 22 20 74 6f 6b 65 6e 0a 74 6f 20  z=NNN" token.to 
f810: 68 65 6c 70 20 69 74 20 63 68 6f 6f 73 65 20 73  help it choose s
f820: 6d 61 6c 6c 65 72 20 74 61 62 6c 65 73 20 61 6e  maller tables an
f830: 64 20 69 6e 64 65 78 65 73 20 74 68 61 74 20 72  d indexes that r
f840: 65 71 75 69 72 65 20 6c 65 73 73 20 64 69 73 6b  equire less disk
f850: 20 49 2f 4f 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20   I/O...<p>^(The 
f860: 70 72 65 73 65 6e 63 65 20 6f 66 20 74 68 65 20  presence of the 
f870: 22 6e 6f 73 6b 69 70 73 63 61 6e 22 20 74 6f 6b  "noskipscan" tok
f880: 65 6e 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65  en on the sqlite
f890: 5f 73 74 61 74 31 2e 73 74 61 74 20 66 69 65 6c  _stat1.stat fiel
f8a0: 64 0a 6f 66 20 61 6e 20 69 6e 64 65 78 20 70 72  d.of an index pr
f8b0: 65 76 65 6e 74 73 20 74 68 61 74 20 69 6e 64 65  events that inde
f8c0: 78 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 73 65  x from being use
f8d0: 64 20 77 69 74 68 20 74 68 65 0a 5b 73 6b 69 70  d with the.[skip
f8e0: 2d 73 63 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  -scan optimizati
f8f0: 6f 6e 5d 2e 29 5e 0a 0a 3c 70 3e 4e 65 77 20 74  on].)^..<p>New t
f900: 65 78 74 20 74 6f 6b 65 6e 73 20 6d 61 79 20 62  ext tokens may b
f910: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 65  e added to the e
f920: 6e 64 20 6f 66 20 74 68 65 20 73 74 61 74 20 63  nd of the stat c
f930: 6f 6c 75 6d 6e 20 69 6e 20 66 75 74 75 72 65 0a  olumn in future.
f940: 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 74 6f 20  enhancements to 
f950: 53 51 4c 69 74 65 2e 20 20 46 6f 72 20 63 6f 6d  SQLite.  For com
f960: 70 61 74 69 62 69 6c 69 74 79 2c 20 75 6e 72 65  patibility, unre
f970: 63 6f 67 6e 69 7a 65 64 20 74 6f 6b 65 6e 73 20  cognized tokens 
f980: 61 74 20 74 68 65 20 65 6e 64 0a 6f 66 20 74 68  at the end.of th
f990: 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 61 72  e stat column ar
f9a0: 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72  e silently ignor
f9b0: 65 64 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65  ed...<p>^(If the
f9c0: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 69 64   sqlite_stat1.id
f9d0: 78 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c  x column is NULL
f9e0: 2c 20 74 68 65 6e 20 74 68 65 20 73 71 6c 69 74  , then the sqlit
f9f0: 65 5f 73 74 61 74 31 2e 73 74 61 74 0a 63 6f 6c  e_stat1.stat.col
fa00: 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61 20 73  umn contains a s
fa10: 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 77 68  ingle integer wh
fa20: 69 63 68 20 69 73 20 74 68 65 20 61 70 70 72 6f  ich is the appro
fa30: 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66  ximate number of
fa40: 0a 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62  .rows in the tab
fa50: 6c 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  le identified by
fa60: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62   sqlite_stat1.tb
fa70: 6c 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  l.)^..<tcl>hd_fr
fa80: 61 67 6d 65 6e 74 20 73 74 61 74 32 74 61 62 20  agment stat2tab 
fa90: 7b 73 71 6c 69 74 65 5f 73 74 61 74 32 7d 3c 2f  {sqlite_stat2}</
faa0: 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 34 20 54  tcl>.<h4>2.6.4 T
fab0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he sqlite_stat2 
fac0: 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  table</h4>..<p>T
fad0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he sqlite_stat2 
fae0: 69 73 20 6f 6e 6c 79 20 63 72 65 61 74 65 64 20  is only created 
faf0: 61 6e 64 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  and is only used
fb00: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f   if SQLite is co
fb10: 6d 70 69 6c 65 64 0a 77 69 74 68 20 53 51 4c 49  mpiled.with SQLI
fb20: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 32 20  TE_ENABLE_STAT2 
fb30: 61 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69 74  and if the SQLit
fb40: 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  e version number
fb50: 20 69 73 20 62 65 74 77 65 65 6e 0a 33 2e 36 2e   is between.3.6.
fb60: 31 38 20 61 6e 64 20 33 2e 37 2e 38 2e 20 20 54  18 and 3.7.8.  T
fb70: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he sqlite_stat2 
fb80: 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72  table is neither
fb90: 20 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65   read nor writte
fba0: 6e 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e  n by any.version
fbb0: 20 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72   of SQLite befor
fbc0: 65 20 33 2e 36 2e 31 38 20 6e 6f 72 20 61 66 74  e 3.6.18 nor aft
fbd0: 65 72 20 33 2e 37 2e 38 2e 0a 54 68 65 20 73 71  er 3.7.8..The sq
fbe0: 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
fbf0: 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69   contains additi
fc00: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
fc10: 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73 74 72  .about the distr
fc20: 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20  ibution of keys 
fc30: 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2e  within an index.
fc40: 0a 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74  .The schema of t
fc50: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he sqlite_stat2 
fc60: 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c  table is as foll
fc70: 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ows:..<blockquot
fc80: 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
fc90: 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74  ABLE sqlite_stat
fca0: 32 28 74 62 6c 2c 69 64 78 2c 73 61 6d 70 6c 65  2(tbl,idx,sample
fcb0: 6e 6f 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72  no,sample);.</pr
fcc0: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
fcd0: 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  .<p>The sqlite_s
fce0: 74 61 74 32 2e 69 64 78 20 63 6f 6c 75 6d 6e 20  tat2.idx column 
fcf0: 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  and the sqlite_s
fd00: 74 61 74 32 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20  tat2.tbl column 
fd10: 69 6e 20 65 61 63 68 20 0a 72 6f 77 20 6f 66 20  in each .row of 
fd20: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32  the sqlite_stat2
fd30: 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 79 20   table identify 
fd40: 61 6e 20 69 6e 64 65 78 20 64 65 73 63 72 69 62  an index describ
fd50: 65 64 20 62 79 20 74 68 61 74 20 72 6f 77 2e 0a  ed by that row..
fd60: 54 68 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c  There are usuall
fd70: 79 20 31 30 20 72 6f 77 73 20 69 6e 20 74 68 65  y 10 rows in the
fd80: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 0a 74 61   sqlite_stat2.ta
fd90: 62 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64  ble for each ind
fda0: 65 78 2e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69  ex...<p>The sqli
fdb0: 74 65 5f 73 74 61 74 32 20 65 6e 74 72 69 65 73  te_stat2 entries
fdc0: 20 66 6f 72 20 61 6e 20 69 6e 64 65 78 20 74 68   for an index th
fdd0: 61 74 20 68 61 76 65 20 73 71 6c 69 74 65 5f 73  at have sqlite_s
fde0: 74 61 74 32 2e 73 61 6d 70 6c 65 6e 6f 0a 62 65  tat2.sampleno.be
fdf0: 74 77 65 65 6e 20 30 20 61 6e 64 20 39 20 69 6e  tween 0 and 9 in
fe00: 63 6c 75 73 69 76 65 20 61 72 65 20 73 61 6d 70  clusive are samp
fe10: 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  les of the left-
fe20: 6d 6f 73 74 20 6b 65 79 20 76 61 6c 75 65 20 69  most key value i
fe30: 6e 20 74 68 65 0a 69 6e 64 65 78 20 74 61 6b 65  n the.index take
fe40: 6e 20 61 74 20 65 76 65 6e 6c 79 20 73 70 61 63  n at evenly spac
fe50: 65 64 20 70 6f 69 6e 74 73 20 61 6c 6f 6e 67 20  ed points along 
fe60: 74 68 65 20 69 6e 64 65 78 2e 0a 4c 65 74 20 43  the index..Let C
fe70: 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   be the number o
fe80: 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
fe90: 64 65 78 2e 0a 54 68 65 6e 20 74 68 65 20 73 61  dex..Then the sa
fea0: 6d 70 6c 65 64 20 72 6f 77 73 20 61 72 65 20 67  mpled rows are g
feb0: 69 76 65 6e 20 62 79 0a 0a 3c 62 6c 6f 63 6b 71  iven by..<blockq
fec0: 75 6f 74 65 3e 0a 20 20 20 20 20 72 6f 77 6e 75  uote>.     rownu
fed0: 6d 62 65 72 20 3d 20 28 69 2a 43 2a 32 20 2b 20  mber = (i*C*2 + 
fee0: 43 29 2f 32 30 0a 3c 2f 62 6c 6f 63 6b 71 75 6f  C)/20.</blockquo
fef0: 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 72 69  te>..<p>The vari
ff00: 61 62 6c 65 20 69 20 69 6e 20 74 68 65 20 70 72  able i in the pr
ff10: 65 76 69 6f 75 73 20 65 78 70 72 65 73 73 69 6f  evious expressio
ff20: 6e 20 76 61 72 69 65 73 20 62 65 74 77 65 65 6e  n varies between
ff30: 20 30 20 61 6e 64 20 39 2e 0a 43 6f 6e 63 65 70   0 and 9..Concep
ff40: 74 75 61 6c 6c 79 2c 20 74 68 65 20 69 6e 64 65  tually, the inde
ff50: 78 20 73 70 61 63 65 20 69 73 20 64 69 76 69 64  x space is divid
ff60: 65 64 20 69 6e 74 6f 0a 31 30 20 75 6e 69 66 6f  ed into.10 unifo
ff70: 72 6d 20 62 75 63 6b 65 74 73 20 61 6e 64 20 74  rm buckets and t
ff80: 68 65 20 73 61 6d 70 6c 65 73 20 61 72 65 20 74  he samples are t
ff90: 68 65 20 6d 69 64 64 6c 65 20 72 6f 77 20 66 72  he middle row fr
ffa0: 6f 6d 20 65 61 63 68 20 62 75 63 6b 65 74 2e 0a  om each bucket..
ffb0: 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 66  .<p>The format f
ffc0: 6f 72 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  or sqlite_stat2 
ffd0: 69 73 20 72 65 63 6f 72 64 65 64 20 68 65 72 65  is recorded here
ffe0: 20 66 6f 72 20 6c 65 67 61 63 79 20 72 65 66 65   for legacy refe
fff0: 72 65 6e 63 65 2e 20 20 0a 52 65 63 65 6e 74 20  rence.  .Recent 
10000 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
10010 74 65 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70  te no longer sup
10020 70 6f 72 74 20 73 71 6c 69 74 65 5f 73 74 61 74  port sqlite_stat
10030 32 20 61 6e 64 20 74 68 65 0a 73 71 6c 69 74 65  2 and the.sqlite
10040 5f 73 74 61 74 32 20 74 61 62 6c 65 2c 20 69 74  _stat2 table, it
10050 20 69 73 20 65 78 69 73 74 73 2c 20 69 73 20 73   is exists, is s
10060 69 6d 70 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a  imply ignored...
10070 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
10080 20 73 74 61 74 33 74 61 62 20 7b 73 71 6c 69 74   stat3tab {sqlit
10090 65 5f 73 74 61 74 33 7d 20 53 51 4c 49 54 45 5f  e_stat3} SQLITE_
100a0 53 54 41 54 33 3c 2f 74 63 6c 3e 0a 3c 68 34 3e  STAT3</tcl>.<h4>
100b0 32 2e 36 2e 35 20 54 68 65 20 73 71 6c 69 74 65  2.6.5 The sqlite
100c0 5f 73 74 61 74 33 20 74 61 62 6c 65 3c 2f 68 34  _stat3 table</h4
100d0 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65  >..<p>The sqlite
100e0 5f 73 74 61 74 33 20 69 73 20 6f 6e 6c 79 20 75  _stat3 is only u
100f0 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73  sed if SQLite is
10100 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20 5b   compiled.with [
10110 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
10120 41 54 33 5d 20 6f 72 20 5b 53 51 4c 49 54 45 5f  AT3] or [SQLITE_
10130 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 0a 61 6e  ENABLE_STAT4].an
10140 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  d if the SQLite 
10150 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69  version number i
10160 73 20 33 2e 37 2e 39 20 6f 72 20 67 72 65 61 74  s 3.7.9 or great
10170 65 72 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73  er..The sqlite_s
10180 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 6e 65  tat3 table is ne
10190 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77  ither read nor w
101a0 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65  ritten by any.ve
101b0 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20  rsion of SQLite 
101c0 62 65 66 6f 72 65 20 33 2e 37 2e 39 2e 0a 49 66  before 3.7.9..If
101d0 20 74 68 65 20 5b 53 51 4c 49 54 45 5f 45 4e 41   the [SQLITE_ENA
101e0 42 4c 45 5f 53 54 41 54 34 5d 20 63 6f 6d 70 69  BLE_STAT4] compi
101f0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
10200 73 20 75 73 65 64 20 61 6e 64 20 74 68 65 0a 53  s used and the.S
10210 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75  QLite version nu
10220 6d 62 65 72 20 69 73 20 33 2e 38 2e 31 20 6f 72  mber is 3.8.1 or
10230 20 67 72 65 61 74 65 72 2c 20 74 68 65 6e 20 73   greater, then s
10240 71 6c 69 74 65 5f 73 74 61 74 33 20 6d 69 67 68  qlite_stat3 migh
10250 74 0a 62 65 20 72 65 61 64 20 62 75 74 20 6e 6f  t.be read but no
10260 74 20 77 72 69 74 74 65 6e 2e 0a 54 68 65 20 73  t written..The s
10270 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
10280 65 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74  e contains addit
10290 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
102a0 6e 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73 74  n.about the dist
102b0 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73  ribution of keys
102c0 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78   within an index
102d0 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  , information th
102e0 61 74 20 74 68 65 0a 71 75 65 72 79 20 70 6c 61  at the.query pla
102f0 6e 6e 65 72 20 63 61 6e 20 75 73 65 20 74 6f 20  nner can use to 
10300 64 65 76 69 73 65 20 62 65 74 74 65 72 20 61 6e  devise better an
10310 64 20 66 61 73 74 65 72 20 71 75 65 72 79 20 61  d faster query a
10320 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e 28 54 68 65  lgorithms..^(The
10330 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73   schema of the s
10340 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
10350 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  e is as follows:
10360 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
10370 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45  re>.CREATE TABLE
10380 20 73 71 6c 69 74 65 5f 73 74 61 74 33 28 74 62   sqlite_stat3(tb
10390 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44  l,idx,nEq,nLt,nD
103a0 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72  Lt,sample);.</pr
103b0 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
103c0 5e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  ^..<p>There are 
103d0 75 73 75 61 6c 6c 79 20 6d 75 6c 74 69 70 6c 65  usually multiple
103e0 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
103f0 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
10400 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65  le for each inde
10410 78 2e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  x..^(The sqlite_
10420 73 74 61 74 33 2e 73 61 6d 70 6c 65 20 63 6f 6c  stat3.sample col
10430 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 76 61  umn holds the va
10440 6c 75 65 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  lue of the left-
10450 6d 6f 73 74 20 66 69 65 6c 64 20 6f 66 20 61 6e  most field of an
10460 0a 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65  .index identifie
10470 64 20 62 79 20 73 71 6c 69 74 65 5f 73 74 61 74  d by sqlite_stat
10480 33 2e 69 64 78 20 61 6e 64 20 73 71 6c 69 74 65  3.idx and sqlite
10490 5f 73 74 61 74 33 2e 74 62 6c 2e 29 5e 0a 5e 28  _stat3.tbl.)^.^(
104a0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
104b0 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  .nEq column hold
104c0 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
104d0 65 0a 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e.number of entr
104e0 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ies in the index
104f0 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74   whose left-most
10500 20 63 6f 6c 75 6d 6e 20 65 78 61 63 74 6c 79 20   column exactly 
10510 6d 61 74 63 68 65 73 0a 74 68 65 20 73 61 6d 70  matches.the samp
10520 6c 65 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69  le.)^.^(The sqli
10530 74 65 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f 6c  te_stat3.nLt hol
10540 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  ds the approxima
10550 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  te number of ent
10560 72 69 65 73 20 69 6e 20 74 68 65 0a 69 6e 64 65  ries in the.inde
10570 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73  x whose left-mos
10580 74 20 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73 73  t column is less
10590 20 74 68 61 6e 20 74 68 65 20 73 61 6d 70 6c 65   than the sample
105a0 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65  .)^.^(The sqlite
105b0 5f 73 74 61 74 33 2e 6e 44 4c 74 20 63 6f 6c 75  _stat3.nDLt colu
105c0 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 61 70 70  mn holds the app
105d0 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62 65 72 20  roximate.number 
105e0 6f 66 20 64 69 73 74 69 6e 63 74 20 6c 65 66 74  of distinct left
105f0 2d 6d 6f 73 74 20 65 6e 74 72 69 65 73 20 69 6e  -most entries in
10600 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
10610 61 72 65 20 6c 65 73 73 20 74 68 61 6e 0a 74 68  are less than.th
10620 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 70 3e  e sample.)^..<p>
10630 5e 54 68 65 72 65 20 63 61 6e 20 62 65 20 61 6e  ^There can be an
10640 20 61 72 62 69 74 72 61 72 79 20 6e 75 6d 62 65   arbitrary numbe
10650 72 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61 74  r of sqlite_stat
10660 33 20 65 6e 74 72 69 65 73 20 70 65 72 20 69 6e  3 entries per in
10670 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59 5a  dex..The [ANALYZ
10680 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20  E] command will 
10690 74 79 70 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  typically genera
106a0 74 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  te sqlite_stat3 
106b0 74 61 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e 74  tables.that cont
106c0 61 69 6e 20 62 65 74 77 65 65 6e 20 31 30 20 61  ain between 10 a
106d0 6e 64 20 34 30 20 73 61 6d 70 6c 65 73 20 74 68  nd 40 samples th
106e0 61 74 20 61 72 65 20 64 69 73 74 72 69 62 75 74  at are distribut
106f0 65 64 20 61 63 72 6f 73 73 0a 74 68 65 20 6b 65  ed across.the ke
10700 79 20 73 70 61 63 65 20 61 6e 64 20 77 69 74 68  y space and with
10710 20 6c 61 72 67 65 20 6e 45 71 20 76 61 6c 75 65   large nEq value
10720 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20 77 65  s...<p>^(In a we
10730 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c 69 74 65  ll-formed sqlite
10740 5f 73 74 61 74 33 20 74 61 62 6c 65 2c 20 74 68  _stat3 table, th
10750 65 20 73 61 6d 70 6c 65 73 20 66 6f 72 20 61 6e  e samples for an
10760 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65 78 20 6d  y single.index m
10770 75 73 74 20 61 70 70 65 61 72 20 69 6e 20 74 68  ust appear in th
10780 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74 68 61  e same order tha
10790 74 20 74 68 65 79 20 6f 63 63 75 72 20 69 6e 20  t they occur in 
107a0 74 68 65 20 69 6e 64 65 78 2e 20 20 0a 49 6e 20  the index.  .In 
107b0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
107c0 74 68 65 20 65 6e 74 72 79 20 77 69 74 68 20 6c  the entry with l
107d0 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20  eft-most column 
107e0 53 31 20 69 73 20 65 61 72 6c 69 65 72 20 69 6e  S1 is earlier in
107f0 0a 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65  .the index b-tre
10800 65 20 74 68 61 6e 20 74 68 65 0a 65 6e 74 72 79  e than the.entry
10810 20 77 69 74 68 20 6c 65 66 2d 6d 6f 73 74 20 63   with lef-most c
10820 6f 6c 75 6d 6e 20 53 32 2c 20 74 68 65 6e 20 69  olumn S2, then i
10830 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
10840 74 33 20 74 61 62 6c 65 2c 20 0a 73 61 6d 70 6c  t3 table, .sampl
10850 65 20 53 31 20 6d 75 73 74 20 68 61 76 65 20 61  e S1 must have a
10860 20 73 6d 61 6c 6c 65 72 20 72 6f 77 69 64 20 74   smaller rowid t
10870 68 61 6e 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e  han sample S2.)^
10880 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
10890 6e 74 20 73 74 61 74 34 74 61 62 20 7b 73 71 6c  nt stat4tab {sql
108a0 69 74 65 5f 73 74 61 74 34 7d 20 53 51 4c 49 54  ite_stat4} SQLIT
108b0 45 5f 53 54 41 54 34 3c 2f 74 63 6c 3e 0a 3c 68  E_STAT4</tcl>.<h
108c0 34 3e 32 2e 36 2e 36 20 54 68 65 20 73 71 6c 69  4>2.6.6 The sqli
108d0 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 3c 2f  te_stat4 table</
108e0 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69  h4>..<p>The sqli
108f0 74 65 5f 73 74 61 74 34 20 69 73 20 6f 6e 6c 79  te_stat4 is only
10900 20 63 72 65 61 74 65 64 20 61 6e 64 20 69 73 20   created and is 
10910 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 53 51 4c  only used if SQL
10920 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a  ite is compiled.
10930 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41  with [SQLITE_ENA
10940 42 4c 45 5f 53 54 41 54 34 5d 20 61 6e 64 20 69  BLE_STAT4] and i
10950 66 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72  f the SQLite ver
10960 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 0a 33  sion number is.3
10970 2e 38 2e 31 20 6f 72 20 67 72 65 61 74 65 72 2e  .8.1 or greater.
10980 20 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61    The sqlite_sta
10990 74 34 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74  t4 table is neit
109a0 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69  her read nor wri
109b0 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73  tten by any.vers
109c0 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65  ion of SQLite be
109d0 66 6f 72 65 20 33 2e 38 2e 31 2e 0a 54 68 65 20  fore 3.8.1..The 
109e0 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62  sqlite_stat4 tab
109f0 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69  le contains addi
10a00 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
10a10 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73  on.about the dis
10a20 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79  tribution of key
10a30 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65  s within an inde
10a40 78 20 6f 72 20 74 68 65 20 64 69 73 74 72 69 62  x or the distrib
10a50 75 74 69 6f 6e 20 6f 66 0a 6b 65 79 73 20 69 6e  ution of.keys in
10a60 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
10a70 20 6f 66 20 61 20 5b 57 49 54 48 4f 55 54 20 52   of a [WITHOUT R
10a80 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65  OWID] table..The
10a90 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63   query planner c
10aa0 61 6e 20 73 6f 6d 65 74 69 6d 65 73 20 75 73 65  an sometimes use
10ab0 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   the additional 
10ac0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 0a 74  information in.t
10ad0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
10ae0 74 61 62 6c 65 20 74 6f 20 64 65 76 69 73 65 20  table to devise 
10af0 62 65 74 74 65 72 20 61 6e 64 20 66 61 73 74 65  better and faste
10b00 72 20 71 75 65 72 79 20 61 6c 67 6f 72 69 74 68  r query algorith
10b10 6d 73 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61  ms..^(The schema
10b20 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
10b30 74 61 74 34 20 74 61 62 6c 65 20 69 73 20 61 73  tat4 table is as
10b40 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63   follows:..<bloc
10b50 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
10b60 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ATE TABLE sqlite
10b70 5f 73 74 61 74 34 28 74 62 6c 2c 69 64 78 2c 6e  _stat4(tbl,idx,n
10b80 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70  Eq,nLt,nDLt,samp
10b90 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  le);.</pre></blo
10ba0 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 54  ckquote>)^..<p>T
10bb0 68 65 72 65 20 61 72 65 20 74 79 70 69 63 61 6c  here are typical
10bc0 6c 79 20 62 65 74 77 65 65 6e 20 31 30 20 74 6f  ly between 10 to
10bd0 20 34 30 20 65 6e 74 72 69 65 73 20 69 6e 20 74   40 entries in t
10be0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
10bf0 74 61 62 6c 65 20 66 6f 72 0a 65 61 63 68 20 69  table for.each i
10c00 6e 64 65 78 20 66 6f 72 20 77 68 69 63 68 20 73  ndex for which s
10c10 74 61 74 69 73 74 69 63 73 20 61 72 65 20 61 76  tatistics are av
10c20 61 69 6c 61 62 6c 65 2c 20 68 6f 77 65 76 65 72  ailable, however
10c30 20 74 68 65 73 65 20 6c 69 6d 69 74 73 20 61 72   these limits ar
10c40 65 0a 6e 6f 74 20 68 61 72 64 20 62 6f 75 6e 64  e.not hard bound
10c50 73 2e 0a 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  s..The meanings 
10c60 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69  of the columns i
10c70 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
10c80 74 34 20 74 61 62 6c 65 20 61 72 65 20 61 73 20  t4 table are as 
10c90 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65  follows:..<cente
10ca0 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  r>.<table border
10cb0 3d 22 30 22 20 77 69 64 74 68 3d 22 31 30 30 25  ="0" width="100%
10cc0 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 31  " cellpadding="1
10cd0 30 22 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  0">.<tr><td vali
10ce0 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
10cf0 72 69 67 68 74 22 3e 74 62 6c 3a 3c 2f 74 64 3e  right">tbl:</td>
10d00 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73  .    <td>^(The s
10d10 71 6c 69 74 65 5f 73 74 61 74 34 2e 74 62 6c 20  qlite_stat4.tbl 
10d20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d  column holds nam
10d30 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
10d40 68 61 74 20 6f 77 6e 73 0a 20 20 20 20 74 68 65  hat owns.    the
10d50 20 69 6e 64 65 78 20 74 68 61 74 20 74 68 65 20   index that the 
10d60 72 6f 77 20 64 65 73 63 72 69 62 65 73 29 5e 0a  row describes)^.
10d70 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
10d80 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
10d90 68 74 22 3e 69 64 78 3a 3c 2f 74 64 3e 0a 20 20  ht">idx:</td>.  
10da0 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69    <td>^(The sqli
10db0 74 65 5f 73 74 61 74 34 2e 69 64 78 20 63 6f 6c  te_stat4.idx col
10dc0 75 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d 65 20 6f  umn holds name o
10dd0 66 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  f the index that
10de0 20 74 68 65 0a 20 20 20 20 72 6f 77 20 64 65 73   the.    row des
10df0 63 72 69 62 65 73 2c 20 6f 72 20 69 6e 20 74 68  cribes, or in th
10e00 65 20 63 61 73 65 20 6f 66 0a 20 20 20 20 61 6e  e case of.    an
10e10 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 65 6e   sqlite_stat4 en
10e20 74 72 79 20 66 6f 72 20 61 20 5b 57 49 54 48 4f  try for a [WITHO
10e30 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c  UT ROWID] table,
10e40 20 74 68 65 0a 20 20 20 20 6e 61 6d 65 20 6f 66   the.    name of
10e50 20 74 68 65 20 74 61 62 6c 65 20 69 74 73 65 6c   the table itsel
10e60 66 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61  f.)^..<tr><td va
10e70 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
10e80 3d 22 72 69 67 68 74 22 3e 73 61 6d 70 6c 65 3a  ="right">sample:
10e90 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28  </td>.    <td>^(
10ea0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
10eb0 2e 73 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 68  .sample column h
10ec0 6f 6c 64 73 20 61 20 42 4c 4f 42 0a 20 20 20 20  olds a BLOB.    
10ed0 69 6e 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66  in the [record f
10ee0 6f 72 6d 61 74 5d 20 74 68 61 74 20 65 6e 63 6f  ormat] that enco
10ef0 64 65 73 20 74 68 65 20 69 6e 64 65 78 65 64 20  des the indexed 
10f00 63 6f 6c 75 6d 6e 73 20 66 6f 6c 6c 6f 77 65 64  columns followed
10f10 20 62 79 0a 20 20 20 20 74 68 65 20 72 6f 77 69   by.    the rowi
10f20 64 20 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61  d for a rowid ta
10f30 62 6c 65 20 6f 72 20 62 79 20 74 68 65 20 63 6f  ble or by the co
10f40 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 70 72 69  lumns of the pri
10f50 6d 61 72 79 20 6b 65 79 20 0a 20 20 20 20 66 6f  mary key .    fo
10f60 72 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49  r a WITHOUT ROWI
10f70 44 20 74 61 62 6c 65 2e 29 5e 0a 20 20 20 20 5e  D table.)^.    ^
10f80 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
10f90 34 2e 73 61 6d 70 6c 65 20 42 4c 4f 42 20 66 6f  4.sample BLOB fo
10fa0 72 20 74 68 65 20 57 49 54 48 4f 55 54 20 52 4f  r the WITHOUT RO
10fb0 57 49 44 20 74 61 62 6c 65 20 69 74 73 65 6c 66  WID table itself
10fc0 20 0a 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 6a   .    contains j
10fd0 75 73 74 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  ust the columns 
10fe0 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  of the primary k
10ff0 65 79 2e 29 5e 0a 20 20 20 20 4c 65 74 20 74 68  ey.)^.    Let th
11000 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
11010 6d 6e 73 20 65 6e 63 6f 64 65 64 20 62 79 20 74  mns encoded by t
11020 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
11030 73 61 6d 70 6c 65 20 62 6c 6f 62 20 62 65 20 4e  sample blob be N
11040 2e 0a 20 20 20 20 5e 46 6f 72 20 69 6e 64 65 78  ..    ^For index
11050 65 73 20 6f 6e 20 61 6e 20 6f 72 64 69 6e 61 72  es on an ordinar
11060 79 20 72 6f 77 69 64 20 74 61 62 6c 65 2c 20 4e  y rowid table, N
11070 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72   will be one mor
11080 65 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62 65  e than the numbe
11090 72 20 0a 20 20 20 20 6f 66 20 63 6f 6c 75 6d 6e  r .    of column
110a0 73 20 69 6e 64 65 78 65 64 2e 0a 20 20 20 20 5e  s indexed..    ^
110b0 46 6f 72 20 69 6e 64 65 78 65 73 20 6f 6e 20 57  For indexes on W
110c0 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
110d0 6c 65 73 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74  les, N will be t
110e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
110f0 75 6d 6e 73 0a 20 20 20 20 69 6e 64 65 78 65 64  umns.    indexed
11100 20 70 6c 75 73 20 74 68 65 20 6e 75 6d 62 65 72   plus the number
11110 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
11120 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a  he primary key..
11130 20 20 20 20 5e 46 6f 72 20 61 20 57 49 54 48 4f      ^For a WITHO
11140 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20  UT ROWID table, 
11150 4e 20 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75  N will be the nu
11160 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11170 69 6e 20 74 68 65 0a 20 20 20 20 70 72 69 6d 61  in the.    prima
11180 72 79 20 6b 65 79 2e 0a 0a 3c 74 72 3e 3c 74 64  ry key...<tr><td
11190 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
111a0 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e 45 71 3a  ign="right">nEq:
111b0 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28  </td>.    <td>^(
111c0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
111d0 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  .nEq column hold
111e0 73 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e  s a list of N in
111f0 74 65 67 65 72 73 20 77 68 65 72 65 20 0a 20 20  tegers where .  
11200 20 20 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67    the K-th integ
11210 65 72 20 69 73 20 74 68 65 20 61 70 70 72 6f 78  er is the approx
11220 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20  imate number of 
11230 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69  entries in the i
11240 6e 64 65 78 0a 20 20 20 20 77 68 6f 73 65 20 6c  ndex.    whose l
11250 65 66 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d  eft-most K colum
11260 6e 73 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68  ns exactly match
11270 20 74 68 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74   the K left-most
11280 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 6f 66 20   columns.    of 
11290 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c  the sample.)^..<
112a0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  tr><td valign="t
112b0 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
112c0 22 3e 6e 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20  ">nLt:</td>.    
112d0 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  <td>^(The sqlite
112e0 5f 73 74 61 74 34 2e 6e 4c 74 20 63 6f 6c 75 6d  _stat4.nLt colum
112f0 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f  n holds a list o
11300 66 20 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65  f N integers whe
11310 72 65 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20  re.    the K-th 
11320 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61  integer is the a
11330 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65  pproximate numbe
11340 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
11350 74 68 65 0a 20 20 20 20 69 6e 64 65 78 20 77 68  the.    index wh
11360 6f 73 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20  ose K left-most 
11370 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c  columns are coll
11380 65 63 74 69 76 65 6c 79 20 6c 65 73 73 20 74 68  ectively less th
11390 61 6e 20 74 68 65 20 0a 20 20 20 20 4b 20 6c 65  an the .    K le
113a0 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 20  ft-most columns 
113b0 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e  of the sample.)^
113c0 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
113d0 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
113e0 67 68 74 22 3e 6e 44 4c 74 3a 3c 2f 74 64 3e 0a  ght">nDLt:</td>.
113f0 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71      <td>^(The sq
11400 6c 69 74 65 5f 73 74 61 74 34 2e 6e 44 4c 74 20  lite_stat4.nDLt 
11410 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c  column holds a l
11420 69 73 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72  ist of N integer
11430 73 20 77 68 65 72 65 0a 20 20 20 20 74 68 65 20  s where.    the 
11440 4b 2d 74 68 20 69 6e 74 65 67 65 72 73 20 69 73  K-th integers is
11450 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
11460 0a 20 20 20 20 6e 75 6d 62 65 72 20 6f 66 20 65  .    number of e
11470 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e  ntries in the in
11480 64 65 78 20 74 68 61 74 20 61 72 65 20 64 69 73  dex that are dis
11490 74 69 6e 63 74 20 69 6e 20 74 68 65 20 66 69 72  tinct in the fir
114a0 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  st K columns and
114b0 0a 20 20 20 20 74 68 61 74 20 61 72 65 20 77 68  .    that are wh
114c0 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20  ose left-most K 
114d0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c  columns are coll
114e0 65 63 74 69 76 65 6c 79 20 6c 65 73 73 20 74 68  ectively less th
114f0 61 6e 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  an the left-most
11500 0a 20 20 20 20 4b 20 63 6f 6c 75 6d 6e 73 20 6f  .    K columns o
11510 66 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a  f the sample.)^.
11520 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65  </table>.</cente
11530 72 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74  r>..<p>The sqlit
11540 65 5f 73 74 61 74 34 20 69 73 20 61 20 67 65 6e  e_stat4 is a gen
11550 65 72 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74  eralization of t
11560 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
11570 74 61 62 6c 65 2e 20 20 54 68 65 0a 73 71 6c 69  table.  The.sqli
11580 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 70  te_stat3 table p
11590 72 6f 76 69 64 65 73 20 69 6e 66 6f 72 6d 61 74  rovides informat
115a0 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 6c 65  ion about the le
115b0 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f  ft-most column o
115c0 66 20 61 6e 0a 69 6e 64 65 78 20 77 68 65 72 65  f an.index where
115d0 61 73 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  as the sqlite_st
115e0 61 74 34 20 74 61 62 6c 65 20 70 72 6f 76 69 64  at4 table provid
115f0 65 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  es information a
11600 62 6f 75 74 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73  bout all columns
11610 0a 6f 66 20 74 68 65 20 69 6e 64 65 78 2e 0a 0a  .of the index...
11620 3c 70 3e 5e 54 68 65 72 65 20 63 61 6e 20 62 65  <p>^There can be
11630 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6e 75   an arbitrary nu
11640 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 5f 73  mber of sqlite_s
11650 74 61 74 34 20 65 6e 74 72 69 65 73 20 70 65 72  tat4 entries per
11660 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41   index..The [ANA
11670 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69  LYZE] command wi
11680 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 67 65 6e  ll typically gen
11690 65 72 61 74 65 20 73 71 6c 69 74 65 5f 73 74 61  erate sqlite_sta
116a0 74 34 20 74 61 62 6c 65 73 0a 74 68 61 74 20 63  t4 tables.that c
116b0 6f 6e 74 61 69 6e 20 62 65 74 77 65 65 6e 20 31  ontain between 1
116c0 30 20 61 6e 64 20 34 30 20 73 61 6d 70 6c 65 73  0 and 40 samples
116d0 20 74 68 61 74 20 61 72 65 20 64 69 73 74 72 69   that are distri
116e0 62 75 74 65 64 20 61 63 72 6f 73 73 0a 74 68 65  buted across.the
116f0 20 6b 65 79 20 73 70 61 63 65 20 61 6e 64 20 77   key space and w
11700 69 74 68 20 6c 61 72 67 65 20 6e 45 71 20 76 61  ith large nEq va
11710 6c 75 65 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61  lues...<p>^(In a
11720 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c   well-formed sql
11730 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 2c  ite_stat4 table,
11740 20 74 68 65 20 73 61 6d 70 6c 65 73 20 66 6f 72   the samples for
11750 20 61 6e 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65   any single.inde
11760 78 20 6d 75 73 74 20 61 70 70 65 61 72 20 69 6e  x must appear in
11770 20 74 68 65 20 73 61 6d 65 20 6f 72 64 65 72 20   the same order 
11780 74 68 61 74 20 74 68 65 79 20 6f 63 63 75 72 20  that they occur 
11790 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20 20 0a  in the index.  .
117a0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
117b0 69 66 20 65 6e 74 72 79 20 53 31 20 69 73 20 65  if entry S1 is e
117c0 61 72 6c 69 65 72 20 69 6e 20 74 68 65 20 69 6e  arlier in the in
117d0 64 65 78 20 62 2d 74 72 65 65 20 74 68 61 6e 20  dex b-tree than 
117e0 0a 65 6e 74 72 79 20 53 32 2c 20 74 68 65 6e 20  .entry S2, then 
117f0 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
11800 61 74 34 20 74 61 62 6c 65 2c 20 73 61 6d 70 6c  at4 table, sampl
11810 65 20 53 31 20 6d 75 73 74 20 68 61 76 65 20 61  e S1 must have a
11820 0a 73 6d 61 6c 6c 65 72 20 72 6f 77 69 64 20 74  .smaller rowid t
11830 68 61 6e 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e  han sample S2.)^
11840 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
11850 6e 74 20 72 6f 6c 6c 62 61 63 6b 6a 6f 75 72 6e  nt rollbackjourn
11860 61 6c 20 7b 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  al {rollback jou
11870 72 6e 61 6c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63  rnal format}</tc
11880 6c 3e 0a 3c 68 32 3e 33 2e 30 20 54 68 65 20 52  l>.<h2>3.0 The R
11890 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 3c  ollback Journal<
118a0 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 72 6f 6c  /h2>..<p>The rol
118b0 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73  lback journal is
118c0 20 61 20 66 69 6c 65 20 61 73 73 6f 63 69 61 74   a file associat
118d0 65 64 20 77 69 74 68 20 65 61 63 68 20 53 51 4c  ed with each SQL
118e0 69 74 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c  ite database.fil
118f0 65 20 74 68 61 74 20 68 6f 6c 64 20 69 6e 66 6f  e that hold info
11900 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 74 6f 20  rmation used to 
11910 72 65 73 74 6f 72 65 20 74 68 65 20 64 61 74 61  restore the data
11920 62 61 73 65 20 66 69 6c 65 20 74 6f 20 69 74 73  base file to its
11930 20 69 6e 69 74 69 61 6c 0a 73 74 61 74 65 20 64   initial.state d
11940 75 72 69 6e 67 20 74 68 65 20 63 6f 75 72 73 65  uring the course
11950 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   of a transactio
11960 6e 2e 0a 5e 54 68 65 20 72 6f 6c 6c 62 61 63 6b  n..^The rollback
11970 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 69 73   journal file is
11980 20 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20   always located 
11990 69 6e 20 74 68 65 20 73 61 6d 65 20 0a 64 69 72  in the same .dir
119a0 65 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61  ectory as the da
119b0 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20  tabase.file and 
119c0 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  has the same nam
119d0 65 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73  e as the databas
119e0 65 20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20  e file but with 
119f0 74 68 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e  the string."<tt>
11a00 2d 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e 22 20 61  -journal</tt>" a
11a10 70 70 65 6e 64 65 64 2e 20 20 54 68 65 72 65 20  ppended.  There 
11a20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 61 20 73 69  can only be a si
11a30 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  ngle rollback jo
11a40 75 72 6e 61 6c 0a 61 73 73 6f 63 69 61 74 65 64  urnal.associated
11a50 20 77 69 74 68 20 61 20 67 69 76 65 20 64 61 74   with a give dat
11a60 61 62 61 73 65 20 61 6e 64 20 68 65 6e 63 65 20  abase and hence 
11a70 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  there can only b
11a80 65 20 6f 6e 65 20 77 72 69 74 65 0a 74 72 61 6e  e one write.tran
11a90 73 61 63 74 69 6f 6e 20 6f 70 65 6e 20 61 67 61  saction open aga
11aa0 69 6e 73 74 20 61 20 73 69 6e 67 6c 65 20 64 61  inst a single da
11ab0 74 61 62 61 73 65 20 61 74 20 6f 6e 65 20 74 69  tabase at one ti
11ac0 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61  me.</p>..<p>If a
11ad0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
11ae0 61 62 6f 72 74 65 64 20 64 75 65 20 74 6f 20 61  aborted due to a
11af0 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 72  n application cr
11b00 61 73 68 2c 20 61 6e 20 6f 70 65 72 61 74 69 6e  ash, an operatin
11b10 67 0a 73 79 73 74 65 6d 20 63 72 61 73 68 2c 20  g.system crash, 
11b20 6f 72 20 61 20 68 61 72 64 77 61 72 65 20 70 6f  or a hardware po
11b30 77 65 72 20 66 61 69 6c 75 72 65 20 6f 72 20 63  wer failure or c
11b40 72 61 73 68 2c 20 74 68 65 6e 20 74 68 65 20 64  rash, then the d
11b50 61 74 61 62 61 73 65 20 6d 61 79 0a 62 65 20 6c  atabase may.be l
11b60 65 66 74 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73  eft in an incons
11b70 69 73 74 65 6e 74 20 73 74 61 74 65 2e 20 20 5e  istent state.  ^
11b80 54 68 65 20 6e 65 78 74 20 74 69 6d 65 20 53 51  The next time SQ
11b90 4c 69 74 65 20 61 74 74 65 6d 70 74 73 20 74 6f  Lite attempts to
11ba0 20 6f 70 65 6e 0a 74 68 65 20 64 61 74 61 62 61   open.the databa
11bb0 73 65 20 66 69 6c 65 2c 20 74 68 65 20 70 72 65  se file, the pre
11bc0 73 65 6e 63 65 20 6f 66 20 74 68 65 20 72 6f 6c  sence of the rol
11bd0 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
11be0 6c 65 20 77 69 6c 6c 20 62 65 20 0a 64 65 74 65  le will be .dete
11bf0 63 74 65 64 20 61 6e 64 20 74 68 65 20 6a 6f 75  cted and the jou
11c00 72 6e 61 6c 20 77 69 6c 6c 20 62 65 20 61 75 74  rnal will be aut
11c10 6f 6d 61 74 69 63 61 6c 6c 79 20 70 6c 61 79 65  omatically playe
11c20 64 20 62 61 63 6b 20 74 6f 20 72 65 73 74 6f 72  d back to restor
11c30 65 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 74  e the.database t
11c40 6f 20 69 74 73 20 73 74 61 74 65 20 61 74 20 74  o its state at t
11c50 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  he start of the 
11c60 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73  incomplete trans
11c70 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  action.</p>..<p>
11c80 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  ^A rollback jour
11c90 6e 61 6c 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73  nal is only cons
11ca0 69 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c  idered to be val
11cb0 69 64 20 69 66 20 69 74 20 65 78 69 73 74 73 20  id if it exists 
11cc0 61 6e 64 0a 63 6f 6e 74 61 69 6e 73 20 61 20 76  and.contains a v
11cd0 61 6c 69 64 20 68 65 61 64 65 72 2e 20 20 48 65  alid header.  He
11ce0 6e 63 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f  nce a transactio
11cf0 6e 20 63 61 6e 20 62 65 20 63 6f 6d 6d 69 74 74  n can be committ
11d00 65 64 20 69 6e 20 6f 6e 65 0a 6f 66 20 74 68 72  ed in one.of thr
11d10 65 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c  ee ways:.<ol>.<l
11d20 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b  i>^(The rollback
11d30 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61   journal file ca
11d40 6e 20 62 65 20 64 65 6c 65 74 65 64 29 5e 2c 0a  n be deleted)^,.
11d50 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62 61  <li>^(The rollba
11d60 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20  ck journal file 
11d70 63 61 6e 20 62 65 20 74 72 75 6e 63 61 74 65 64  can be truncated
11d80 20 74 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68 29   to zero length)
11d90 5e 2c 20 6f 72 0a 3c 6c 69 3e 5e 28 54 68 65 20  ^, or.<li>^(The 
11da0 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 6f  header of the ro
11db0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63  llback journal c
11dc0 61 6e 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  an be overwritte
11dd0 6e 20 77 69 74 68 0a 69 6e 76 61 6c 69 64 20 68  n with.invalid h
11de0 65 61 64 65 72 20 74 65 78 74 20 28 66 6f 72 20  eader text (for 
11df0 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65 72  example, all zer
11e00 6f 73 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 5e 54 68  os).)^.</ol>.^Th
11e10 65 73 65 20 74 68 72 65 65 20 77 61 79 73 20 6f  ese three ways o
11e20 66 20 63 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74  f committing a t
11e30 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 72 72 65  ransaction corre
11e40 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 44 45 4c  spond to the DEL
11e50 45 54 45 2c 0a 54 52 55 4e 43 41 54 45 2c 20 61  ETE,.TRUNCATE, a
11e60 6e 64 20 50 45 52 53 49 53 54 20 73 65 74 74 69  nd PERSIST setti
11e70 6e 67 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ngs, respectivel
11e80 79 2c 20 6f 66 20 74 68 65 20 5b 6a 6f 75 72 6e  y, of the [journ
11e90 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d 61 5d 2e  al_mode pragma].
11ea0 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20 76 61 6c  .</p>...<p>A val
11eb0 69 64 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  id rollback jour
11ec0 6e 61 6c 20 62 65 67 69 6e 73 20 77 69 74 68 20  nal begins with 
11ed0 61 20 68 65 61 64 65 72 20 69 6e 20 74 68 65 20  a header in the 
11ee0 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74  following format
11ef0 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a  :</p>..<center>.
11f00 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72  <i>Rollback Jour
11f10 6e 61 6c 20 48 65 61 64 65 72 20 46 6f 72 6d 61  nal Header Forma
11f20 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65  t</i><br>.<table
11f30 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72   width="80%" bor
11f40 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f  der=1>.<tr><th>O
11f50 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68  ffset<th>Size<th
11f60 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72  >Description.<tr
11f70 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
11f80 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20  align=center>0. 
11f90 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
11fa0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
11fb0 0a 20 20 20 20 3c 74 64 3e 48 65 61 64 65 72 20  .    <td>Header 
11fc0 73 74 72 69 6e 67 3a 20 20 30 78 64 39 2c 20 30  string:  0xd9, 0
11fd0 78 64 35 2c 20 30 78 30 35 2c 20 30 78 66 39 2c  xd5, 0x05, 0xf9,
11fe0 20 30 78 32 30 2c 20 30 78 61 31 2c 20 30 78 36   0x20, 0xa1, 0x6
11ff0 33 2c 20 30 78 64 37 0a 3c 74 72 3e 3c 74 64 20  3, 0xd7.<tr><td 
12000 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12010 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74  =center>8.    <t
12020 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12030 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
12040 3c 74 64 3e 54 68 65 20 22 50 61 67 65 20 43 6f  <td>The "Page Co
12050 75 6e 74 22 20 2d 20 54 68 65 20 6e 75 6d 62 65  unt" - The numbe
12060 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
12070 65 20 6e 65 78 74 20 73 65 67 6d 65 6e 74 20 6f  e next segment o
12080 66 20 74 68 65 20 0a 20 20 20 20 20 20 20 20 6a  f the .        j
12090 6f 75 72 6e 61 6c 2c 20 6f 72 20 2d 31 20 74 6f  ournal, or -1 to
120a0 0a 20 20 20 20 20 20 20 20 6d 65 61 6e 20 61 6c  .        mean al
120b0 6c 20 63 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65  l content to the
120c0 20 65 6e 64 20 6f 66 20 74 68 65 20 66 69 6c 65   end of the file
120d0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
120e0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
120f0 3e 31 32 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >12.    <td vali
12100 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12110 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 41 20  ter>4.    <td>A 
12120 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 20 66 6f 72  random nonce for
12130 20 74 68 65 20 63 68 65 63 6b 73 75 6d 0a 3c 74   the checksum.<t
12140 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12150 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36   align=center>16
12160 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
12170 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12180 3e 34 0a 20 20 20 20 3c 74 64 3e 49 6e 69 74 69  >4.    <td>Initi
12190 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  al size of the d
121a0 61 74 61 62 61 73 65 20 69 6e 20 70 61 67 65 73  atabase in pages
121b0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
121c0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
121d0 3e 32 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >20.    <td vali
121e0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
121f0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69  ter>4.    <td>Si
12200 7a 65 20 6f 66 20 61 20 64 69 73 6b 20 73 65 63  ze of a disk sec
12210 74 6f 72 20 61 73 73 75 6d 65 64 20 62 79 20 74  tor assumed by t
12220 68 65 20 70 72 6f 63 65 73 73 20 74 68 61 74 20  he process that 
12230 77 72 6f 74 65 20 74 68 69 73 0a 20 20 20 20 20  wrote this.     
12240 20 20 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 74 72 3e     journal..<tr>
12250 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12260 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 0a 20  lign=center>24. 
12270 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
12280 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
12290 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66  .    <td>Size of
122a0 20 70 61 67 65 73 20 69 6e 20 74 68 69 73 20 6a   pages in this j
122b0 6f 75 72 6e 61 6c 2e 0a 3c 2f 74 61 62 6c 65 3e  ournal..</table>
122c0 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e  .</center>..<p>^
122d0 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  A rollback journ
122e0 61 6c 20 68 65 61 64 65 72 20 69 73 20 70 61 64  al header is pad
122f0 64 65 64 20 77 69 74 68 20 7a 65 72 6f 73 20 6f  ded with zeros o
12300 75 74 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f  ut to the size o
12310 66 20 61 20 0a 73 69 6e 67 6c 65 20 73 65 63 74  f a .single sect
12320 6f 72 20 28 61 73 20 64 65 66 69 6e 65 64 20 62  or (as defined b
12330 79 20 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a  y the sector siz
12340 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
12350 73 65 74 20 32 30 29 2e 0a 54 68 65 20 68 65 61  set 20)..The hea
12360 64 65 72 20 69 73 20 69 6e 20 61 20 73 65 63 74  der is in a sect
12370 6f 72 20 62 79 20 69 74 73 65 6c 66 20 73 6f 20  or by itself so 
12380 74 68 61 74 20 69 66 20 61 20 70 6f 77 65 72 20  that if a power 
12390 6c 6f 73 73 20 6f 63 63 75 72 73 20 77 68 69 6c  loss occurs whil
123a0 65 0a 77 72 69 74 69 6e 67 20 74 68 65 20 73 65  e.writing the se
123b0 63 74 6f 72 2c 20 69 6e 66 6f 72 6d 61 74 69 6f  ctor, informatio
123c0 6e 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74  n that follows t
123d0 68 65 20 68 65 61 64 65 72 20 77 69 6c 6c 20 62  he header will b
123e0 65 0a 28 68 6f 70 65 66 75 6c 6c 79 29 20 75 6e  e.(hopefully) un
123f0 64 61 6d 61 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  damaged.</p>..<p
12400 3e 5e 41 66 74 65 72 20 74 68 65 20 68 65 61 64  >^After the head
12410 65 72 20 61 6e 64 20 7a 65 72 6f 20 70 61 64 64  er and zero padd
12420 69 6e 67 20 61 72 65 20 7a 65 72 6f 20 6f 72 20  ing are zero or 
12430 6d 6f 72 65 20 70 61 67 65 20 72 65 63 6f 72 64  more page record
12440 73 2e 20 20 5e 45 61 63 68 0a 70 61 67 65 20 72  s.  ^Each.page r
12450 65 63 6f 72 64 20 73 74 6f 72 65 73 20 61 20 63  ecord stores a c
12460 6f 70 79 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  opy of the conte
12470 6e 74 20 6f 66 20 61 20 70 61 67 65 20 66 72 6f  nt of a page fro
12480 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
12490 69 6c 65 0a 62 65 66 6f 72 65 20 69 74 20 77 61  ile.before it wa
124a0 73 20 63 68 61 6e 67 65 64 2e 20 20 5e 54 68 65  s changed.  ^The
124b0 20 73 61 6d 65 20 70 61 67 65 20 6d 61 79 20 6e   same page may n
124c0 6f 74 20 61 70 70 65 61 72 20 6d 6f 72 65 20 74  ot appear more t
124d0 68 61 6e 20 6f 6e 63 65 0a 77 69 74 68 69 6e 20  han once.within 
124e0 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63  a single rollbac
124f0 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 54 6f 20 72 6f  k journal..To ro
12500 6c 6c 62 61 63 6b 20 61 6e 20 69 6e 63 6f 6d 70  llback an incomp
12510 6c 65 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  lete transaction
12520 2c 20 61 20 70 72 6f 63 65 73 73 0a 68 61 73 20  , a process.has 
12530 6d 65 72 65 6c 79 20 74 6f 20 72 65 61 64 20 74  merely to read t
12540 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
12550 6e 61 6c 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69  nal from beginni
12560 6e 67 20 74 6f 20 65 6e 64 20 61 6e 64 0a 77 72  ng to end and.wr
12570 69 74 65 20 70 61 67 65 73 20 66 6f 75 6e 64 20  ite pages found 
12580 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 62  in the journal b
12590 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74  ack into the dat
125a0 61 62 61 73 65 20 66 69 6c 65 20 61 74 20 74 68  abase file at th
125b0 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 6c 6f  e.appropriate lo
125c0 63 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  cation.</p>..<p>
125d0 4c 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Let the database
125e0 20 70 61 67 65 20 73 69 7a 65 20 28 74 68 65 20   page size (the 
125f0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74  value of the int
12600 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32  eger at offset 2
12610 34 20 0a 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61  4 .in the journa
12620 6c 20 68 65 61 64 65 72 29 20 62 65 20 4e 2e 0a  l header) be N..
12630 54 68 65 6e 20 74 68 65 20 66 6f 72 6d 61 74 20  Then the format 
12640 6f 66 20 61 20 70 61 67 65 20 72 65 63 6f 72 64  of a page record
12650 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c   is as follows:<
12660 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  /p>..<center>.<i
12670 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61  >Rollback Journa
12680 6c 20 50 61 67 65 20 52 65 63 6f 72 64 20 46 6f  l Page Record Fo
12690 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
126a0 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
126b0 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
126c0 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
126d0 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
126e0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
126f0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12700 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  0.    <td valign
12710 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
12720 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20  r>4.    <td>The 
12730 70 61 67 65 20 6e 75 6d 62 65 72 20 69 6e 20 74  page number in t
12740 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
12750 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
12760 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12770 3e 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  >4.    <td valig
12780 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12790 65 72 3e 4e 0a 20 20 20 20 3c 74 64 3e 4f 72 69  er>N.    <td>Ori
127a0 67 69 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66  ginal content of
127b0 20 74 68 65 20 70 61 67 65 20 70 72 69 6f 72 20   the page prior 
127c0 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  to the start of 
127d0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  the transaction.
127e0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
127f0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12800 4e 2b 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  N+4.    <td vali
12810 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12820 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
12830 65 63 6b 73 75 6d 0a 3c 2f 74 61 62 6c 65 3e 0a  ecksum.</table>.
12840 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 5e  </center>...<p>^
12850 28 54 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73  (The checksum is
12860 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 33 32 2d   an unsigned 32-
12870 62 69 74 20 69 6e 74 65 67 65 72 20 63 6f 6d 70  bit integer comp
12880 75 74 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  uted as follows:
12890 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 49  </p>..<ol>.<li>I
128a0 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 63 68  nitialize the ch
128b0 65 63 6b 73 75 6d 20 74 6f 20 74 68 65 20 63 68  ecksum to the ch
128c0 65 63 6b 73 75 6d 20 6e 6f 6e 63 65 20 76 61 6c  ecksum nonce val
128d0 75 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a  ue found in the.
128e0 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 61  journal header a
128f0 74 20 6f 66 66 73 65 74 20 31 32 2e 0a 3c 6c 69  t offset 12..<li
12900 3e 49 6e 69 74 69 61 6c 69 7a 65 20 69 6e 64 65  >Initialize inde
12910 78 20 58 20 74 6f 20 62 65 20 4e 2d 32 30 30 20  x X to be N-200 
12920 28 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20  (where N is the 
12930 73 69 7a 65 20 6f 66 20 61 20 64 61 74 61 62 61  size of a databa
12940 73 65 20 70 61 67 65 0a 69 6e 20 62 79 74 65 73  se page.in bytes
12950 2e 0a 3c 6c 69 3e 49 6e 74 65 72 70 72 65 74 20  ..<li>Interpret 
12960 74 68 65 20 66 6f 75 72 20 62 79 74 65 73 20 61  the four bytes a
12970 74 20 6f 66 66 73 65 74 20 58 20 69 6e 74 6f 20  t offset X into 
12980 74 68 65 20 70 61 67 65 20 61 73 20 61 20 34 2d  the page as a 4-
12990 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 0a  byte big-endian.
129a0 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
129b0 2e 20 20 41 64 64 20 74 68 65 20 76 61 6c 75 65  .  Add the value
129c0 20 6f 66 20 74 68 61 74 20 69 6e 74 65 67 65 72   of that integer
129d0 20 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d   to the checksum
129e0 2e 0a 3c 6c 69 3e 53 75 62 74 72 61 63 65 20 32  ..<li>Subtrace 2
129f0 30 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c 69 3e 49  00 from X..<li>I
12a00 66 20 58 20 69 73 20 67 72 65 61 74 65 72 20 74  f X is greater t
12a10 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
12a20 7a 65 72 6f 2c 20 67 6f 20 62 61 63 6b 20 74 6f  zero, go back to
12a30 20 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c 3e 29 5e   step 3..</ol>)^
12a40 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75  ..<p>The checksu
12a50 6d 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  m value is used 
12a60 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73 74  to guard against
12a70 20 69 6e 63 6f 6d 70 6c 65 74 65 20 77 72 69 74   incomplete writ
12a80 65 73 20 6f 66 0a 61 20 6a 6f 75 72 6e 61 6c 20  es of.a journal 
12a90 70 61 67 65 20 72 65 63 6f 72 64 20 66 6f 6c 6c  page record foll
12aa0 6f 77 69 6e 67 20 61 20 70 6f 77 65 72 20 66 61  owing a power fa
12ab0 69 6c 75 72 65 2e 20 20 41 20 64 69 66 66 65 72  ilure.  A differ
12ac0 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65  ent random nonce
12ad0 0a 69 73 20 75 73 65 64 20 65 61 63 68 20 74 69  .is used each ti
12ae0 6d 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  me a transaction
12af0 20 69 73 20 73 74 61 72 74 65 64 20 69 6e 20 6f   is started in o
12b00 72 64 65 72 20 74 6f 20 6d 69 6e 69 6d 69 7a 65  rder to minimize
12b10 20 74 68 65 20 72 69 73 6b 0a 74 68 61 74 20 75   the risk.that u
12b20 6e 77 72 69 74 74 65 6e 20 73 65 63 74 6f 72 73  nwritten sectors
12b30 20 6d 69 67 68 74 20 62 79 20 63 68 61 6e 63 65   might by chance
12b40 20 63 6f 6e 74 61 69 6e 20 64 61 74 61 20 66 72   contain data fr
12b50 6f 6d 20 74 68 65 20 73 61 6d 65 20 70 61 67 65  om the same page
12b60 0a 74 68 61 74 20 77 61 73 20 61 20 70 61 72 74  .that was a part
12b70 20 6f 66 20 70 72 69 6f 72 20 6a 6f 75 72 6e 61   of prior journa
12b80 6c 73 2e 20 20 42 79 20 63 68 61 6e 67 69 6e 67  ls.  By changing
12b90 20 74 68 65 20 6e 6f 6e 63 65 20 66 6f 72 20 65   the nonce for e
12ba0 61 63 68 0a 74 72 61 6e 73 61 63 74 69 6f 6e 2c  ach.transaction,
12bb0 20 73 74 61 6c 65 20 64 61 74 61 20 6f 6e 20 64   stale data on d
12bc0 69 73 6b 20 77 69 6c 6c 20 73 74 69 6c 6c 20 67  isk will still g
12bd0 65 6e 65 72 61 74 65 20 61 6e 20 69 6e 63 6f 72  enerate an incor
12be0 72 65 63 74 20 63 68 65 63 6b 73 75 6d 0a 61 6e  rect checksum.an
12bf0 64 20 62 65 20 64 65 74 65 63 74 65 64 20 77 69  d be detected wi
12c00 74 68 20 68 69 67 68 20 70 72 6f 62 61 62 69 6c  th high probabil
12c10 69 74 79 2e 20 20 54 68 65 20 63 68 65 63 6b 73  ity.  The checks
12c20 75 6d 20 6f 6e 6c 79 20 75 73 65 73 20 61 20 73  um only uses a s
12c30 70 61 72 73 65 20 73 61 6d 70 6c 65 0a 6f 66 20  parse sample.of 
12c40 33 32 2d 62 69 74 20 77 6f 72 64 73 20 66 72 6f  32-bit words fro
12c50 6d 20 74 68 65 20 64 61 74 61 20 72 65 63 6f 72  m the data recor
12c60 64 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63  d for performanc
12c70 65 20 72 65 61 73 6f 6e 73 20 2d 20 64 65 73 69  e reasons - desi
12c80 67 6e 20 73 74 75 64 69 65 73 20 0a 64 75 72 69  gn studies .duri
12c90 6e 67 20 74 68 65 20 70 6c 61 6e 6e 69 6e 67 20  ng the planning 
12ca0 70 68 61 73 65 73 20 6f 66 20 53 51 4c 69 74 65  phases of SQLite
12cb0 20 33 2e 30 2e 30 20 73 68 6f 77 65 64 0a 61 20   3.0.0 showed.a 
12cc0 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
12cd0 6f 72 6d 61 6e 63 65 20 68 69 74 20 69 6e 20 63  ormance hit in c
12ce0 68 65 63 6b 73 75 6d 6d 69 6e 67 20 74 68 65 20  hecksumming the 
12cf0 65 6e 74 69 72 65 20 70 61 67 65 2e 3c 2f 70 3e  entire page.</p>
12d00 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 70 61 67  ..<p>Let the pag
12d10 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 61 74  e count value at
12d20 20 6f 66 66 73 65 74 20 38 20 69 6e 20 74 68 65   offset 8 in the
12d30 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20   journal header 
12d40 62 65 20 4d 2e 0a 5e 49 66 20 4d 20 69 73 20 67  be M..^If M is g
12d50 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
12d60 20 74 68 65 6e 20 61 66 74 65 72 20 4d 20 70 61   then after M pa
12d70 67 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 6a  ge records the j
12d80 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 6d 61 79 20  ournal file.may 
12d90 62 65 20 7a 65 72 6f 20 70 61 64 64 65 64 20 6f  be zero padded o
12da0 75 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6d  ut to the next m
12db0 75 6c 74 69 70 6c 65 20 6f 66 20 74 68 65 20 73  ultiple of the s
12dc0 65 63 74 6f 72 20 73 69 7a 65 20 61 6e 64 20 61  ector size and a
12dd0 6e 6f 74 68 65 72 0a 6a 6f 75 72 6e 61 6c 20 68  nother.journal h
12de0 65 61 64 65 72 20 6d 61 79 20 62 65 20 69 6e 73  eader may be ins
12df0 65 72 74 65 64 2e 20 20 5e 41 6c 6c 20 6a 6f 75  erted.  ^All jou
12e00 72 6e 61 6c 20 68 65 61 64 65 72 73 20 77 69 74  rnal headers wit
12e10 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 6a 6f 75  hin the same.jou
12e20 72 6e 61 6c 20 6d 75 73 74 20 63 6f 6e 74 61 69  rnal must contai
12e30 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
12e40 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 61 6e  ase page size an
12e50 64 20 73 65 63 74 6f 72 20 73 69 7a 65 2e 3c 2f  d sector size.</
12e60 70 3e 0a 0a 3c 70 3e 5e 49 66 20 4d 20 69 73 20  p>..<p>^If M is 
12e70 2d 31 20 69 6e 20 74 68 65 20 69 6e 69 74 69 61  -1 in the initia
12e80 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  l journal header
12e90 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  , then the numbe
12ea0 72 20 6f 66 20 70 61 67 65 20 72 65 63 6f 72 64  r of page record
12eb0 73 0a 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69 73  s.that follow is
12ec0 20 63 6f 6d 70 75 74 65 64 20 62 79 20 63 6f 6d   computed by com
12ed0 70 75 74 69 6e 67 20 68 6f 77 20 6d 61 6e 79 20  puting how many 
12ee0 70 61 67 65 20 72 65 63 6f 72 64 73 20 77 69 6c  page records wil
12ef0 6c 20 66 69 74 20 69 6e 0a 74 68 65 20 61 76 61  l fit in.the ava
12f00 69 6c 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20  ilable space of 
12f10 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  the remainder of
12f20 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   the journal fil
12f30 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  e.</p>..<tcl>hd_
12f40 66 72 61 67 6d 65 6e 74 20 77 61 6c 66 6f 72 6d  fragment walform
12f50 61 74 20 7b 57 41 4c 20 66 6f 72 6d 61 74 7d 3c  at {WAL format}<
12f60 2f 74 63 6c 3e 0a 3c 68 32 3e 34 2e 30 20 54 68  /tcl>.<h2>4.0 Th
12f70 65 20 57 72 69 74 65 2d 41 68 65 61 64 20 4c 6f  e Write-Ahead Lo
12f80 67 3c 2f 68 32 3e 0a 0a 3c 70 3e 42 65 67 69 6e  g</h2>..<p>Begin
12f90 6e 69 6e 67 20 77 69 74 68 20 5b 76 65 72 73 69  ning with [versi
12fa0 6f 6e 20 33 2e 37 2e 30 5d 2c 20 53 51 4c 69 74  on 3.7.0], SQLit
12fb0 65 20 73 75 70 70 6f 72 74 73 20 61 20 6e 65 77  e supports a new
12fc0 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 63 6f 6e   transaction.con
12fd0 74 72 6f 6c 20 6d 65 63 68 61 6e 69 73 6d 20 63  trol mechanism c
12fe0 61 6c 6c 65 64 20 22 5b 57 41 4c 20 7c 20 77 72  alled "[WAL | wr
12ff0 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20  ite-ahead log]" 
13000 6f 72 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68 65  or "[WAL]"..^Whe
13010 6e 20 61 20 64 61 74 61 62 61 73 65 20 69 73 20  n a database is 
13020 69 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 61 6c 6c  in WAL mode, all
13030 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20   connections to 
13040 74 68 61 74 20 64 61 74 61 62 61 73 65 20 6d 75  that database mu
13050 73 74 0a 75 73 65 20 74 68 65 20 57 41 4c 2e 20  st.use the WAL. 
13060 20 5e 41 20 70 61 72 74 69 63 75 6c 61 72 20 64   ^A particular d
13070 61 74 61 62 61 73 65 20 77 69 6c 6c 20 75 73 65  atabase will use
13080 20 65 69 74 68 65 72 20 61 20 72 6f 6c 6c 62 61   either a rollba
13090 63 6b 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61 20  ck journal.or a 
130a0 57 41 4c 2c 20 62 75 74 20 6e 6f 74 20 62 6f 74  WAL, but not bot
130b0 68 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  h at the same ti
130c0 6d 65 2e 0a 5e 54 68 65 20 57 41 4c 20 69 73 20  me..^The WAL is 
130d0 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69  always located i
130e0 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72 65 63  n the same direc
130f0 74 6f 72 79 20 61 73 20 74 68 65 20 64 61 74 61  tory as the data
13100 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61  base.file and ha
13110 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  s the same name 
13120 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  as the database 
13130 66 69 6c 65 20 62 75 74 20 77 69 74 68 20 74 68  file but with th
13140 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 77  e string."<tt>-w
13150 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65  al</tt>" appende
13160 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 31 20  d.</p>..<h3>4.1 
13170 57 41 4c 20 46 69 6c 65 20 46 6f 72 6d 61 74 3c  WAL File Format<
13180 2f 68 33 3e 0a 0a 3c 70 3e 41 20 57 41 4c 20 66  /h3>..<p>A WAL f
13190 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ile consists of 
131a0 61 20 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65  a header followe
131b0 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  d by zero or mor
131c0 65 20 22 66 72 61 6d 65 73 22 2e 0a 45 61 63 68  e "frames"..Each
131d0 20 66 72 61 6d 65 20 72 65 63 6f 72 64 73 20 74   frame records t
131e0 68 65 20 72 65 76 69 73 65 64 20 63 6f 6e 74 65  he revised conte
131f0 6e 74 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70  nt of a single p
13200 61 67 65 20 66 72 6f 6d 20 74 68 65 0a 64 61 74  age from the.dat
13210 61 62 61 73 65 20 66 69 6c 65 2e 20 20 41 6c 6c  abase file.  All
13220 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
13230 64 61 74 61 62 61 73 65 20 61 72 65 20 72 65 63  database are rec
13240 6f 72 64 65 64 20 62 79 20 77 72 69 74 69 6e 67  orded by writing
13250 0a 66 72 61 6d 65 73 20 69 6e 74 6f 20 74 68 65  .frames into the
13260 20 57 41 4c 2e 20 20 54 72 61 6e 73 61 63 74 69   WAL.  Transacti
13270 6f 6e 73 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20  ons commit when 
13280 61 20 66 72 61 6d 65 20 69 73 20 77 72 69 74 74  a frame is writt
13290 65 6e 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73  en that.contains
132a0 20 61 20 63 6f 6d 6d 69 74 20 6d 61 72 6b 65 72   a commit marker
132b0 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c  .  ^A single WAL
132c0 20 63 61 6e 20 61 6e 64 20 75 73 75 61 6c 6c 79   can and usually
132d0 20 64 6f 65 73 20 72 65 63 6f 72 64 20 0a 6d 75   does record .mu
132e0 6c 74 69 70 6c 65 20 74 72 61 6e 73 61 63 74 69  ltiple transacti
132f0 6f 6e 73 2e 20 20 50 65 72 69 6f 64 69 63 61 6c  ons.  Periodical
13300 6c 79 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ly, the content 
13310 6f 66 20 74 68 65 20 57 41 4c 20 69 73 0a 74 72  of the WAL is.tr
13320 61 6e 73 66 65 72 72 65 64 20 62 61 63 6b 20 69  ansferred back i
13330 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
13340 20 66 69 6c 65 20 69 6e 20 61 6e 20 6f 70 65 72   file in an oper
13350 61 74 69 6f 6e 20 63 61 6c 6c 65 64 20 61 0a 22  ation called a."
13360 63 68 65 63 6b 70 6f 69 6e 74 22 2e 3c 2f 70 3e  checkpoint".</p>
13370 0a 0a 3c 70 3e 5e 41 20 73 69 6e 67 6c 65 20 57  ..<p>^A single W
13380 41 4c 20 66 69 6c 65 20 63 61 6e 20 62 65 20 72  AL file can be r
13390 65 75 73 65 64 20 6d 75 6c 74 69 70 6c 65 20 74  eused multiple t
133a0 69 6d 65 73 2e 20 20 5e 49 6e 20 6f 74 68 65 72  imes.  ^In other
133b0 20 77 6f 72 64 73 2c 20 74 68 65 0a 57 41 4c 20   words, the.WAL 
133c0 63 61 6e 20 66 69 6c 6c 20 75 70 20 77 69 74 68  can fill up with
133d0 20 66 72 61 6d 65 73 20 61 6e 64 20 74 68 65 6e   frames and then
133e0 20 62 65 20 63 68 65 63 6b 70 6f 69 6e 74 65 64   be checkpointed
133f0 20 61 6e 64 20 74 68 65 6e 20 6e 65 77 0a 66 72   and then new.fr
13400 61 6d 65 73 20 63 61 6e 20 6f 76 65 72 77 72 69  ames can overwri
13410 74 65 20 74 68 65 20 6f 6c 64 20 6f 6e 65 73 2e  te the old ones.
13420 20 20 5e 41 20 57 41 4c 20 61 6c 77 61 79 73 20    ^A WAL always 
13430 67 72 6f 77 73 20 66 72 6f 6d 20 62 65 67 69 6e  grows from begin
13440 6e 69 6e 67 0a 74 6f 77 61 72 64 20 74 68 65 20  ning.toward the 
13450 65 6e 64 2e 20 20 43 68 65 63 6b 73 75 6d 73 20  end.  Checksums 
13460 61 6e 64 20 63 6f 75 6e 74 65 72 73 20 61 74 74  and counters att
13470 61 63 68 65 64 20 74 6f 20 65 61 63 68 20 66 72  ached to each fr
13480 61 6d 65 20 61 72 65 0a 75 73 65 64 20 74 6f 20  ame are.used to 
13490 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20  determine which 
134a0 66 72 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68  frames within th
134b0 65 20 57 41 4c 20 61 72 65 20 76 61 6c 69 64 20  e WAL are valid 
134c0 61 6e 64 20 77 68 69 63 68 0a 61 72 65 20 6c 65  and which.are le
134d0 66 74 6f 76 65 72 73 20 66 72 6f 6d 20 70 72 69  ftovers from pri
134e0 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 73 2e 3c  or checkpoints.<
134f0 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 57 41  /p>..<p>^(The WA
13500 4c 20 68 65 61 64 65 72 20 69 73 20 33 32 20 62  L header is 32 b
13510 79 74 65 73 20 69 6e 20 73 69 7a 65 20 61 6e 64  ytes in size and
13520 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
13530 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 69 67 68 74   following eight
13540 0a 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62  .big-endian 32-b
13550 69 74 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  it unsigned inte
13560 67 65 72 20 76 61 6c 75 65 73 3a 3c 2f 70 3e 0a  ger values:</p>.
13570 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c  .<center>.<i>WAL
13580 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f   Header Format</
13590 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69  i><br>.<table wi
135a0 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72  dth="80%" border
135b0 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73  =1>.<tr><th>Offs
135c0 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65  et<th>Size<th>De
135d0 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74  scription.<tr><t
135e0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
135f0 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76  gn=center>0<td v
13600 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13610 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
13620 3e 4d 61 67 69 63 20 6e 75 6d 62 65 72 2e 20 20  >Magic number.  
13630 30 78 33 37 37 66 30 36 38 32 20 6f 72 20 30 78  0x377f0682 or 0x
13640 33 37 37 66 30 36 38 33 0a 3c 74 72 3e 3c 74 64  377f0683.<tr><td
13650 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13660 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61  n=center>4<td va
13670 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13680 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13690 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73  File format vers
136a0 69 6f 6e 2e 20 20 43 75 72 72 65 6e 74 6c 79 20  ion.  Currently 
136b0 33 30 30 37 30 30 30 2e 0a 3c 74 72 3e 3c 74 64  3007000..<tr><td
136c0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
136d0 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61  n=center>8<td va
136e0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
136f0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13700 44 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  Database page si
13710 7a 65 2e 20 20 45 78 61 6d 70 6c 65 3a 20 31 30  ze.  Example: 10
13720 32 34 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  24.<tr><td valig
13730 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13740 65 72 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>12<td valign=
13750 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13760 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b  >4.    <td>Check
13770 70 6f 69 6e 74 20 73 65 71 75 65 6e 63 65 20 6e  point sequence n
13780 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  umber.<tr><td va
13790 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
137a0 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69  enter>16<td vali
137b0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
137c0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61  ter>4.    <td>Sa
137d0 6c 74 2d 31 3a 20 72 61 6e 64 6f 6d 20 69 6e 74  lt-1: random int
137e0 65 67 65 72 20 69 6e 63 72 65 6d 65 6e 74 65 64  eger incremented
137f0 20 77 69 74 68 20 65 61 63 68 20 63 68 65 63 6b   with each check
13800 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61  point.<tr><td va
13810 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13820 65 6e 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69  enter>20<td vali
13830 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13840 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61  ter>4.    <td>Sa
13850 6c 74 2d 32 3a 20 61 20 64 69 66 66 65 72 65 6e  lt-2: a differen
13860 74 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20  t random number 
13870 66 6f 72 20 65 61 63 68 20 63 68 65 63 6b 70 6f  for each checkpo
13880 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  int.<tr><td vali
13890 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
138a0 74 65 72 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e  ter>24<td valign
138b0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
138c0 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
138d0 6b 73 75 6d 2d 31 3a 20 46 69 72 73 74 20 70 61  ksum-1: First pa
138e0 72 74 20 6f 66 20 61 20 63 68 65 63 6b 73 75 6d  rt of a checksum
138f0 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 32 34   on the first 24
13900 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
13910 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13920 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13930 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >28<td valign=to
13940 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13950 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75  .    <td>Checksu
13960 6d 2d 32 3a 20 53 65 63 6f 6e 64 20 70 61 72 74  m-2: Second part
13970 20 6f 66 20 74 68 65 20 63 68 65 63 6b 73 75 6d   of the checksum
13980 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 32 34   on the first 24
13990 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
139a0 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74  .</table>.</cent
139b0 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 49 6d 6d 65 64  er>)^..<p>^Immed
139c0 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67  iately following
139d0 20 74 68 65 20 77 61 6c 2d 68 65 61 64 65 72 20   the wal-header 
139e0 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  are zero or more
139f0 20 66 72 61 6d 65 73 2e 20 5e 45 61 63 68 0a 66   frames. ^Each.f
13a00 72 61 6d 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  rame consists of
13a10 20 61 20 32 34 2d 62 79 74 65 20 66 72 61 6d 65   a 24-byte frame
13a20 2d 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64  -header followed
13a30 20 62 79 20 61 20 3c 69 3e 70 61 67 65 2d 73 69   by a <i>page-si
13a40 7a 65 3c 2f 69 3e 20 62 79 74 65 73 0a 6f 66 20  ze</i> bytes.of 
13a50 70 61 67 65 20 64 61 74 61 2e 20 5e 28 54 68 65  page data. ^(The
13a60 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20 69 73   frame-header is
13a70 20 73 69 78 20 62 69 67 2d 65 6e 64 69 61 6e 20   six big-endian 
13a80 33 32 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20  32-bit unsigned 
13a90 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2c  .integer values,
13aa0 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63   as follows:..<c
13ab0 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 46 72  enter>.<i>WAL Fr
13ac0 61 6d 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61  ame Header Forma
13ad0 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65  t</i><br>.<table
13ae0 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72   width="80%" bor
13af0 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f  der=1>.<tr><th>O
13b00 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68  ffset<th>Size<th
13b10 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72  >Description.<tr
13b20 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
13b30 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74  align=center>0<t
13b40 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13b50 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
13b60 3c 74 64 3e 50 61 67 65 20 6e 75 6d 62 65 72 0a  <td>Page number.
13b70 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
13b80 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13b90 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
13ba0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
13bb0 20 20 20 3c 74 64 3e 46 6f 72 20 63 6f 6d 6d 69     <td>For commi
13bc0 74 20 72 65 63 6f 72 64 73 2c 20 74 68 65 20 73  t records, the s
13bd0 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
13be0 61 73 65 20 66 69 6c 65 20 69 6e 20 70 61 67 65  ase file in page
13bf0 73 0a 20 20 20 20 20 20 20 20 61 66 74 65 72 20  s.        after 
13c00 74 68 65 20 63 6f 6d 6d 69 74 2e 20 20 46 6f 72  the commit.  For
13c10 20 61 6c 6c 20 6f 74 68 65 72 20 72 65 63 6f 72   all other recor
13c20 64 73 2c 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74  ds, zero..<tr><t
13c30 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13c40 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76  gn=center>8<td v
13c50 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13c60 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
13c70 3e 53 61 6c 74 2d 31 20 63 6f 70 69 65 64 20 66  >Salt-1 copied f
13c80 72 6f 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64  rom the WAL head
13c90 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
13ca0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13cb0 65 72 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>12<td valign=
13cc0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13cd0 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d  >4.    <td>Salt-
13ce0 32 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  2 copied from th
13cf0 65 20 57 41 4c 20 68 65 61 64 65 72 0a 3c 74 72  e WAL header.<tr
13d00 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
13d10 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c  align=center>16<
13d20 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13d30 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
13d40 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a   <td>Checksum-1:
13d50 20 20 43 75 6d 75 6c 61 74 69 76 65 20 63 68 65    Cumulative che
13d60 63 6b 73 75 6d 20 75 70 20 74 68 72 6f 75 67 68  cksum up through
13d70 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74   and including t
13d80 68 69 73 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64  his page.<tr><td
13d90 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13da0 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
13db0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13dc0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
13dd0 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20 20 53 65  >Checksum-2:  Se
13de0 63 6f 6e 64 20 68 61 6c 66 20 6f 66 20 74 68 65  cond half of the
13df0 20 63 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63   cumulative chec
13e00 6b 73 75 6d 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  ksum..</table>.<
13e10 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 5e 28 3c 70  /center>)^..^(<p
13e20 3e 41 20 66 72 61 6d 65 20 69 73 20 63 6f 6e 73  >A frame is cons
13e30 69 64 65 72 65 64 20 76 61 6c 69 64 20 69 66 20  idered valid if 
13e40 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20  and only if the 
13e50 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74  following condit
13e60 69 6f 6e 73 20 61 72 65 0a 74 72 75 65 3a 3c 2f  ions are.true:</
13e70 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ol>.<li><p>
13e80 54 68 65 20 73 61 6c 74 2d 31 20 61 6e 64 20 73  The salt-1 and s
13e90 61 6c 74 2d 32 20 76 61 6c 75 65 73 20 69 6e 20  alt-2 values in 
13ea0 74 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72  the frame-header
13eb0 20 6d 61 74 63 68 0a 20 20 20 20 20 20 20 73 61   match.       sa
13ec0 6c 74 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  lt values in the
13ed0 20 77 61 6c 2d 68 65 61 64 65 72 3c 2f 70 3e 3c   wal-header</p><
13ee0 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65  /li>..<li><p>The
13ef0 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73   checksum values
13f00 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20 38 20   in the final 8 
13f10 62 79 74 65 73 20 6f 66 20 74 68 65 20 66 72 61  bytes of the fra
13f20 6d 65 2d 68 65 61 64 65 72 0a 20 20 20 20 20 20  me-header.      
13f30 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74   exactly match t
13f40 68 65 20 63 68 65 63 6b 73 75 6d 20 63 6f 6d 70  he checksum comp
13f50 75 74 65 64 20 63 6f 6e 73 65 63 75 74 69 76 65  uted consecutive
13f60 6c 79 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20  ly on the.      
13f70 20 66 69 72 73 74 20 32 34 20 62 79 74 65 73 20   first 24 bytes 
13f80 6f 66 20 74 68 65 20 57 41 4c 20 68 65 61 64 65  of the WAL heade
13f90 72 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 20  r and the first 
13fa0 38 20 62 79 74 65 73 20 61 6e 64 0a 20 20 20 20  8 bytes and.    
13fb0 20 20 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f     the content o
13fc0 66 20 61 6c 6c 20 66 72 61 6d 65 73 0a 20 20 20  f all frames.   
13fd0 20 20 20 20 75 70 20 74 6f 20 61 6e 64 20 69 6e      up to and in
13fe0 63 6c 75 64 69 6e 67 20 74 68 65 20 63 75 72 72  cluding the curr
13ff0 65 6e 74 20 66 72 61 6d 65 2e 3c 2f 70 3e 3c 2f  ent frame.</p></
14000 6c 69 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 29 5e  li></li>.</ol>)^
14010 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
14020 6e 74 20 77 61 6c 63 6b 73 6d 20 7b 57 41 4c 20  nt walcksm {WAL 
14030 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74  checksum algorit
14040 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e  hm}</tcl>.<h3>4.
14050 32 20 43 68 65 63 6b 73 75 6d 20 41 6c 67 6f 72  2 Checksum Algor
14060 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ithm</h3>..<p>Th
14070 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20 63 6f  e checksum is co
14080 6d 70 75 74 65 64 20 62 79 20 69 6e 74 65 72 70  mputed by interp
14090 72 65 74 69 6e 67 20 74 68 65 20 69 6e 70 75 74  reting the input
140a0 20 61 73 0a 61 6e 20 65 76 65 6e 20 6e 75 6d 62   as.an even numb
140b0 65 72 20 6f 66 20 75 6e 73 69 67 6e 65 64 20 33  er of unsigned 3
140c0 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73 3a 20  2-bit integers: 
140d0 78 28 30 29 20 74 68 72 6f 75 67 68 20 78 28 4e  x(0) through x(N
140e0 29 2e 0a 5e 54 68 65 20 33 32 2d 62 69 74 20 69  )..^The 32-bit i
140f0 6e 74 65 67 65 72 73 20 61 72 65 20 62 69 67 2d  ntegers are big-
14100 65 6e 64 69 61 6e 20 69 66 20 74 68 65 0a 6d 61  endian if the.ma
14110 67 69 63 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  gic number in th
14120 65 20 66 69 72 73 74 20 34 20 62 79 74 65 73 20  e first 4 bytes 
14130 6f 66 20 74 68 65 20 57 41 4c 20 68 65 61 64 65  of the WAL heade
14140 72 20 69 73 20 30 78 33 37 37 66 30 36 38 33 20  r is 0x377f0683 
14150 61 6e 64 0a 74 68 65 20 69 6e 74 65 67 65 72 73  and.the integers
14160 20 61 72 65 20 6c 69 74 74 6c 65 2d 65 6e 64 69   are little-endi
14170 61 6e 20 69 66 20 74 68 65 20 6d 61 67 69 63 20  an if the magic 
14180 6e 75 6d 62 65 72 20 69 73 20 30 78 33 37 37 66  number is 0x377f
14190 30 36 38 32 2e 0a 5e 54 68 65 20 63 68 65 63 6b  0682..^The check
141a0 73 75 6d 20 76 61 6c 75 65 73 20 61 72 65 20 61  sum values are a
141b0 6c 77 61 79 73 20 73 74 6f 72 65 64 20 69 6e 20  lways stored in 
141c0 74 68 65 20 66 72 61 6d 65 20 68 65 61 64 65 72  the frame header
141d0 20 69 6e 20 61 0a 62 69 67 2d 65 6e 64 69 61 6e   in a.big-endian
141e0 20 66 6f 72 6d 61 74 20 72 65 67 61 72 64 6c 65   format regardle
141f0 73 73 20 6f 66 20 77 68 69 63 68 20 62 79 74 65  ss of which byte
14200 20 6f 72 64 65 72 20 69 73 20 75 73 65 64 20 74   order is used t
14210 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65 20 63 68  o compute.the ch
14220 65 63 6b 73 75 6d 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ecksum.</p>..<p>
14230 54 68 65 20 63 68 65 63 6b 73 75 6d 20 61 6c 67  The checksum alg
14240 6f 72 69 74 68 6d 20 6f 6e 6c 79 20 77 6f 72 6b  orithm only work
14250 73 20 66 6f 72 20 63 6f 6e 74 65 6e 74 20 77 68  s for content wh
14260 69 63 68 20 69 73 20 61 20 6d 75 6c 74 69 70 6c  ich is a multipl
14270 65 20 6f 66 0a 38 20 62 79 74 65 73 20 69 6e 20  e of.8 bytes in 
14280 6c 65 6e 67 74 68 2e 20 20 49 6e 20 6f 74 68 65  length.  In othe
14290 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
142a0 69 6e 70 75 74 73 20 61 72 65 20 78 28 30 29 20  inputs are x(0) 
142b0 74 68 72 6f 75 67 68 20 78 28 4e 29 0a 74 68 65  through x(N).the
142c0 6e 20 4e 20 6d 75 73 74 20 62 65 20 6f 64 64 2e  n N must be odd.
142d0 0a 5e 28 54 68 65 20 63 68 65 63 6b 73 75 6d 20  .^(The checksum 
142e0 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 61 73 20  algorithm is as 
142f0 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b  follows:..<block
14300 71 75 6f 74 65 3e 3c 70 72 65 3e 20 0a 73 30 20  quote><pre> .s0 
14310 3d 20 73 31 20 3d 20 30 0a 66 6f 72 20 69 20 66  = s1 = 0.for i f
14320 72 6f 6d 20 30 20 74 6f 20 6e 2d 31 20 73 74 65  rom 0 to n-1 ste
14330 70 20 32 3a 0a 20 20 20 73 30 20 2b 3d 20 78 28  p 2:.   s0 += x(
14340 69 29 20 2b 20 73 31 3b 0a 20 20 20 73 31 20 2b  i) + s1;.   s1 +
14350 3d 20 78 28 69 2b 31 29 20 2b 20 73 30 3b 0a 65  = x(i+1) + s0;.e
14360 6e 64 66 6f 72 0a 23 20 72 65 73 75 6c 74 20 69  ndfor.# result i
14370 6e 20 73 30 20 61 6e 64 20 73 31 0a 3c 2f 70 72  n s0 and s1.</pr
14380 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
14390 5e 0a 0a 3c 70 3e 5e 54 68 65 20 6f 75 74 70 75  ^..<p>^The outpu
143a0 74 73 20 73 30 20 61 6e 64 20 73 31 20 61 72 65  ts s0 and s1 are
143b0 20 62 6f 74 68 20 77 65 69 67 68 74 65 64 20 63   both weighted c
143c0 68 65 63 6b 73 75 6d 73 20 75 73 69 6e 67 20 46  hecksums using F
143d0 69 62 6f 6e 61 63 63 69 20 77 65 69 67 68 74 73  ibonacci weights
143e0 0a 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65  .in reverse orde
143f0 72 2e 20 20 28 5e 54 68 65 20 6c 61 72 67 65 73  r.  (^The larges
14400 74 20 46 69 62 6f 6e 61 63 63 69 20 77 65 69 67  t Fibonacci weig
14410 68 74 20 6f 63 63 75 72 73 20 6f 6e 20 74 68 65  ht occurs on the
14420 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 0a 6f   first element.o
14430 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 62  f the sequence b
14440 65 69 6e 67 20 73 75 6d 6d 65 64 2e 29 20 20 5e  eing summed.)  ^
14450 54 68 65 20 73 31 20 76 61 6c 75 65 20 73 70 61  The s1 value spa
14460 6e 73 20 61 6c 6c 20 33 32 2d 62 69 74 20 69 6e  ns all 32-bit in
14470 74 65 67 65 72 0a 74 65 72 6d 73 20 6f 66 20 74  teger.terms of t
14480 68 65 20 73 65 71 75 65 6e 63 65 20 77 68 65 72  he sequence wher
14490 65 61 73 20 73 30 20 6f 6d 69 74 73 20 74 68 65  eas s0 omits the
144a0 20 66 69 6e 61 6c 20 74 65 72 6d 2e 3c 2f 70 3e   final term.</p>
144b0 0a 0a 3c 68 33 3e 34 2e 33 20 43 68 65 63 6b 70  ..<h3>4.3 Checkp
144c0 6f 69 6e 74 20 41 6c 67 6f 72 69 74 68 6d 3c 2f  oint Algorithm</
144d0 68 33 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61 20 5b 63  h3>..<p>^On a [c
144e0 68 65 63 6b 70 6f 69 6e 74 5d 2c 20 74 68 65 20  heckpoint], the 
144f0 57 41 4c 20 69 73 20 66 69 72 73 74 20 66 6c 75  WAL is first flu
14500 73 68 65 64 20 74 6f 20 70 65 72 73 69 73 74 65  shed to persiste
14510 6e 74 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67  nt storage using
14520 0a 74 68 65 20 78 53 79 6e 63 20 6d 65 74 68 6f  .the xSync metho
14530 64 20 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65  d of the [sqlite
14540 33 5f 69 6f 5f 6d 65 74 68 6f 64 73 20 7c 20 56  3_io_methods | V
14550 46 53 5d 2e 20 0a 5e 54 68 65 6e 20 76 61 6c 69  FS]. .^Then vali
14560 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  d content of the
14570 20 57 41 4c 20 69 73 20 74 72 61 6e 73 66 65 72   WAL is transfer
14580 72 65 64 20 69 6e 74 6f 20 74 68 65 20 64 61 74  red into the dat
14590 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e 46 69 6e  abase file..^Fin
145a0 61 6c 6c 79 2c 20 74 68 65 20 64 61 74 61 62 61  ally, the databa
145b0 73 65 20 69 73 20 66 6c 75 73 68 65 64 20 74 6f  se is flushed to
145c0 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 6f 72   persistent stor
145d0 61 67 65 20 75 73 69 6e 67 20 61 6e 6f 74 68 65  age using anothe
145e0 72 0a 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 63  r.xSync method c
145f0 61 6c 6c 2e 0a 54 68 65 20 78 53 79 6e 63 20 6f  all..The xSync o
14600 70 65 72 61 74 69 6f 6e 73 20 73 65 72 76 65 20  perations serve 
14610 61 73 20 77 72 69 74 65 20 62 61 72 72 69 65 72  as write barrier
14620 73 20 2d 20 61 6c 6c 20 77 72 69 74 65 73 20 6c  s - all writes l
14630 61 75 6e 63 68 65 64 0a 62 65 66 6f 72 65 20 74  aunched.before t
14640 68 65 20 78 53 79 6e 63 20 6d 75 73 74 20 63 6f  he xSync must co
14650 6d 70 6c 65 74 65 20 62 65 66 6f 72 65 20 61 6e  mplete before an
14660 79 20 77 72 69 74 65 20 74 68 61 74 20 6c 61 75  y write that lau
14670 6e 63 68 65 73 20 61 66 74 65 72 20 74 68 65 0a  nches after the.
14680 78 53 79 6e 63 20 62 65 67 69 6e 73 2e 3c 2f 70  xSync begins.</p
14690 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 61 20 63  >..<p>^After a c
146a0 68 65 63 6b 70 6f 69 6e 74 2c 20 6e 65 77 20 77  heckpoint, new w
146b0 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
146c0 73 20 6f 76 65 72 77 72 69 74 65 0a 74 68 65 20  s overwrite.the 
146d0 57 41 4c 20 66 69 6c 65 20 66 72 6f 6d 20 74 68  WAL file from th
146e0 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 5e 41  e beginning.  ^A
146f0 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  t the start of t
14700 68 65 20 66 69 72 73 74 20 6e 65 77 0a 77 72 69  he first new.wri
14710 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  te transaction, 
14720 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 73  the WAL header s
14730 61 6c 74 2d 31 20 76 61 6c 75 65 20 69 73 20 69  alt-1 value is i
14740 6e 63 72 65 6d 65 6e 74 65 64 0a 61 6e 64 20 74  ncremented.and t
14750 68 65 20 73 61 6c 74 2d 32 20 76 61 6c 75 65 20  he salt-2 value 
14760 69 73 20 72 61 6e 64 6f 6d 69 7a 65 64 2e 20 20  is randomized.  
14770 54 68 65 73 65 20 63 68 61 6e 67 65 73 20 74 6f  These changes to
14780 20 74 68 65 20 73 61 6c 74 73 20 69 6e 76 61 6c   the salts inval
14790 69 64 61 74 65 0a 6f 6c 64 20 66 72 61 6d 65 73  idate.old frames
147a0 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
147b0 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 62 65   have already be
147c0 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
147d0 62 75 74 20 6e 6f 74 20 79 65 74 0a 6f 76 65 72  but not yet.over
147e0 77 72 69 74 74 65 6e 2c 20 61 6e 64 20 70 72 65  written, and pre
147f0 76 65 6e 74 20 74 68 65 6d 20 66 72 6f 6d 20 62  vent them from b
14800 65 69 6e 67 20 63 68 65 63 6b 70 6f 69 6e 74 65  eing checkpointe
14810 64 20 61 67 61 69 6e 2e 3c 2f 70 3e 0a 0a 3c 74  d again.</p>..<t
14820 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77  cl>hd_fragment w
14830 61 6c 72 65 61 64 20 7b 57 41 4c 20 72 65 61 64  alread {WAL read
14840 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c   algorithm}</tcl
14850 3e 0a 3c 68 33 3e 34 2e 34 20 52 65 61 64 65 72  >.<h3>4.4 Reader
14860 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a   Algorithm</h3>.
14870 0a 3c 70 3e 5e 28 54 6f 20 72 65 61 64 20 61 20  .<p>^(To read a 
14880 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61  page from the da
14890 74 61 62 61 73 65 20 28 63 61 6c 6c 20 69 74 20  tabase (call it 
148a0 70 61 67 65 20 6e 75 6d 62 65 72 20 50 29 2c 20  page number P), 
148b0 61 20 72 65 61 64 65 72 0a 66 69 72 73 74 20 63  a reader.first c
148c0 68 65 63 6b 73 20 74 68 65 20 57 41 4c 20 74 6f  hecks the WAL to
148d0 20 73 65 65 20 69 66 20 69 74 20 63 6f 6e 74 61   see if it conta
148e0 69 6e 73 20 70 61 67 65 20 50 2e 20 20 49 66 20  ins page P.  If 
148f0 73 6f 2c 20 74 68 65 6e 20 74 68 65 0a 6c 61 73  so, then the.las
14900 74 20 76 61 6c 69 64 20 69 6e 73 74 61 6e 63 65  t valid instance
14910 20 6f 66 20 70 61 67 65 20 50 20 74 68 61 74 20   of page P that 
14920 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
14930 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 0a 6f 72   commit frame.or
14940 20 69 73 20 61 20 63 6f 6d 6d 69 74 20 66 72 61   is a commit fra
14950 6d 65 20 69 74 73 65 6c 66 20 62 65 63 6f 6d 65  me itself become
14960 73 20 74 68 65 20 76 61 6c 75 65 20 72 65 61 64  s the value read
14970 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 57 41 4c  .)^  ^If the WAL
14980 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 6f 70  .contains no cop
14990 69 65 73 20 6f 66 20 70 61 67 65 20 50 20 74 68  ies of page P th
149a0 61 74 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64  at are valid and
149b0 20 77 68 69 63 68 20 61 72 65 20 61 20 63 6f 6d   which are a com
149c0 6d 69 74 0a 66 72 61 6d 65 20 6f 72 20 61 72 65  mit.frame or are
149d0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
149e0 6f 6d 6d 69 74 20 66 72 61 6d 65 2c 20 74 68 65  ommit frame, the
149f0 6e 20 70 61 67 65 20 50 20 69 73 20 72 65 61 64  n page P is read
14a00 20 66 72 6f 6d 0a 74 68 65 20 64 61 74 61 62 61   from.the databa
14a10 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70  se file.</p>..<p
14a20 3e 54 6f 20 73 74 61 72 74 20 61 20 72 65 61 64  >To start a read
14a30 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
14a40 65 20 72 65 61 64 65 72 20 72 65 63 6f 72 64 73  e reader records
14a50 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
14a60 65 20 6c 61 73 74 0a 76 61 6c 69 64 20 66 72 61  e last.valid fra
14a70 6d 65 20 69 6e 20 74 68 65 20 57 41 4c 2e 20 20  me in the WAL.  
14a80 54 68 65 20 72 65 61 64 65 72 20 75 73 65 73 20  The reader uses 
14a90 74 68 69 73 20 72 65 63 6f 72 64 65 64 20 22 6d  this recorded "m
14aa0 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 66 6f  xFrame" value.fo
14ab0 72 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  r all subsequent
14ac0 20 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e 73   read operations
14ad0 2e 20 20 4e 65 77 20 74 72 61 6e 73 61 63 74 69  .  New transacti
14ae0 6f 6e 73 20 63 61 6e 20 62 65 20 61 70 70 65 6e  ons can be appen
14af0 64 65 64 0a 74 6f 20 74 68 65 20 57 41 4c 2c 20  ded.to the WAL, 
14b00 62 75 74 20 61 73 20 6c 6f 6e 67 20 61 73 20 74  but as long as t
14b10 68 65 20 72 65 61 64 65 72 20 75 73 65 73 20 69  he reader uses i
14b20 74 73 20 6f 72 69 67 69 6e 61 6c 20 6d 78 46 72  ts original mxFr
14b30 61 6d 65 20 76 61 6c 75 65 0a 61 6e 64 20 69 67  ame value.and ig
14b40 6e 6f 72 65 73 20 73 75 62 73 65 71 75 65 6e 74  nores subsequent
14b50 6c 79 20 61 70 70 65 6e 64 65 64 20 63 6f 6e 74  ly appended cont
14b60 65 6e 74 2c 20 74 68 65 20 72 65 61 64 65 72 20  ent, the reader 
14b70 77 69 6c 6c 20 73 65 65 20 61 20 0a 63 6f 6e 73  will see a .cons
14b80 69 73 74 65 6e 74 20 73 6e 61 70 73 68 6f 74 20  istent snapshot 
14b90 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
14ba0 66 72 6f 6d 20 61 20 73 69 6e 67 6c 65 20 70 6f  from a single po
14bb0 69 6e 74 20 69 6e 20 74 69 6d 65 2e 20 20 0a 5e  int in time.  .^
14bc0 54 68 69 73 20 74 65 63 68 6e 69 71 75 65 20 61  This technique a
14bd0 6c 6c 6f 77 73 20 6d 75 6c 74 69 70 6c 65 20 63  llows multiple c
14be0 6f 6e 63 75 72 72 65 6e 74 20 72 65 61 64 65 72  oncurrent reader
14bf0 73 20 74 6f 20 76 69 65 77 20 64 69 66 66 65 72  s to view differ
14c00 65 6e 74 20 0a 76 65 72 73 69 6f 6e 73 20 6f 66  ent .versions of
14c10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
14c20 6e 74 65 6e 74 20 73 69 6d 75 6c 74 61 6e 65 6f  ntent simultaneo
14c30 75 73 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  usly.</p>..<p>Th
14c40 65 20 72 65 61 64 65 72 20 61 6c 67 6f 72 69 74  e reader algorit
14c50 68 6d 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f  hm in the previo
14c60 75 73 20 70 61 72 61 67 72 61 70 68 73 20 77 6f  us paragraphs wo
14c70 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 2c 20 62  rks correctly, b
14c80 75 74 20 0a 62 65 63 61 75 73 65 20 66 72 61 6d  ut .because fram
14c90 65 73 20 66 6f 72 20 70 61 67 65 20 50 20 63 61  es for page P ca
14ca0 6e 20 61 70 70 65 61 72 20 61 6e 79 77 68 65 72  n appear anywher
14cb0 65 20 77 69 74 68 69 6e 20 74 68 65 20 57 41 4c  e within the WAL
14cc0 2c 20 74 68 65 0a 72 65 61 64 65 72 20 68 61 73  , the.reader has
14cd0 20 74 6f 20 73 63 61 6e 20 74 68 65 20 65 6e 74   to scan the ent
14ce0 69 72 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e 67 20  ire WAL looking 
14cf0 66 6f 72 20 70 61 67 65 20 50 20 66 72 61 6d 65  for page P frame
14d00 73 2e 20 20 49 66 20 74 68 65 0a 57 41 4c 20 69  s.  If the.WAL i
14d10 73 20 6c 61 72 67 65 20 28 6d 75 6c 74 69 70 6c  s large (multipl
14d20 65 20 6d 65 67 61 62 79 74 65 73 20 69 73 20 74  e megabytes is t
14d30 79 70 69 63 61 6c 29 20 74 68 61 74 20 73 63 61  ypical) that sca
14d40 6e 20 63 61 6e 20 62 65 20 73 6c 6f 77 2c 0a 61  n can be slow,.a
14d50 6e 64 20 72 65 61 64 20 70 65 72 66 6f 72 6d 61  nd read performa
14d60 6e 63 65 20 73 75 66 66 65 72 73 2e 20 20 5e 54  nce suffers.  ^T
14d70 6f 20 6f 76 65 72 63 6f 6d 65 20 74 68 69 73 20  o overcome this 
14d80 70 72 6f 62 6c 65 6d 2c 20 61 20 73 65 70 61 72  problem, a separ
14d90 61 74 65 0a 64 61 74 61 20 73 74 72 75 63 74 75  ate.data structu
14da0 72 65 20 63 61 6c 6c 65 64 20 74 68 65 20 77 61  re called the wa
14db0 6c 2d 69 6e 64 65 78 20 69 73 20 6d 61 69 6e 74  l-index is maint
14dc0 61 69 6e 65 64 20 74 6f 20 65 78 70 65 64 69 74  ained to expedit
14dd0 65 20 74 68 65 0a 73 65 61 72 63 68 20 66 6f 72  e the.search for
14de0 20 66 72 61 6d 65 73 20 6f 66 20 61 20 70 61 72   frames of a par
14df0 74 69 63 75 6c 61 72 20 70 61 67 65 2e 3c 2f 70  ticular page.</p
14e00 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
14e10 65 6e 74 20 77 61 6c 69 6e 64 65 78 66 6f 72 6d  ent walindexform
14e20 61 74 20 7b 77 61 6c 2d 69 6e 64 65 78 7d 20 7b  at {wal-index} {
14e30 57 41 4c 2d 69 6e 64 65 78 20 66 6f 72 6d 61 74  WAL-index format
14e40 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 35 20  }</tcl>.<h3>4.5 
14e50 57 41 4c 2d 49 6e 64 65 78 20 46 6f 72 6d 61 74  WAL-Index Format
14e60 3c 2f 68 33 3e 0a 0a 3c 70 3e 43 6f 6e 63 65 70  </h3>..<p>Concep
14e70 74 75 61 6c 6c 79 2c 20 74 68 65 20 77 61 6c 2d  tually, the wal-
14e80 69 6e 64 65 78 20 69 73 20 73 68 61 72 65 64 20  index is shared 
14e90 6d 65 6d 6f 72 79 2c 20 74 68 6f 75 67 68 20 74  memory, though t
14ea0 68 65 20 63 75 72 72 65 6e 74 0a 56 46 53 20 69  he current.VFS i
14eb0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75  mplementations u
14ec0 73 65 20 61 20 6d 6d 61 70 70 65 64 20 66 69 6c  se a mmapped fil
14ed0 65 20 66 6f 72 20 74 68 65 20 77 61 6c 2d 69 6e  e for the wal-in
14ee0 64 65 78 2e 20 20 5e 54 68 65 20 6d 6d 61 70 70  dex.  ^The mmapp
14ef0 65 64 0a 66 69 6c 65 20 69 73 20 69 6e 20 74 68  ed.file is in th
14f00 65 20 73 61 6d 65 20 64 69 72 65 63 74 6f 72 79  e same directory
14f10 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65   as the database
14f20 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d   and has the sam
14f30 65 20 6e 61 6d 65 0a 61 73 20 74 68 65 20 64 61  e name.as the da
14f40 74 61 62 61 73 65 20 77 69 74 68 20 61 20 22 3c  tabase with a "<
14f50 74 74 3e 2d 73 68 6d 3c 2f 74 74 3e 22 20 73 75  tt>-shm</tt>" su
14f60 66 66 69 78 20 61 70 70 65 6e 64 65 64 2e 20 20  ffix appended.  
14f70 42 65 63 61 75 73 65 0a 74 68 65 20 77 61 6c 2d  Because.the wal-
14f80 69 6e 64 65 78 20 69 73 20 73 68 61 72 65 64 20  index is shared 
14f90 6d 65 6d 6f 72 79 2c 20 53 51 4c 69 74 65 20 64  memory, SQLite d
14fa0 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
14fb0 0a 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c  .[PRAGMA journal
14fc0 5f 6d 6f 64 65 20 7c 20 6a 6f 75 72 6e 61 6c 5f  _mode | journal_
14fd0 6d 6f 64 65 3d 57 41 4c 5d 20 0a 6f 6e 20 61 20  mode=WAL] .on a 
14fe0 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73 79 73 74  network filesyst
14ff0 65 6d 20 77 68 65 6e 20 63 6c 69 65 6e 74 73 20  em when clients 
15000 61 72 65 20 6f 6e 20 64 69 66 66 65 72 65 6e 74  are on different
15010 20 6d 61 63 68 69 6e 65 73 2e 0a 41 6c 6c 20 75   machines..All u
15020 73 65 72 73 20 6f 66 20 74 68 65 20 64 61 74 61  sers of the data
15030 62 61 73 65 20 6d 75 73 74 20 62 65 20 61 62 6c  base must be abl
15040 65 20 74 6f 20 73 68 61 72 65 20 74 68 65 20 73  e to share the s
15050 61 6d 65 20 6d 65 6d 6f 72 79 2e 3c 2f 70 3e 0a  ame memory.</p>.
15060 0a 3c 70 3e 54 68 65 20 70 75 72 70 6f 73 65 20  .<p>The purpose 
15070 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  of the wal-index
15080 20 69 73 20 74 6f 20 61 6e 73 77 65 72 20 74 68   is to answer th
15090 69 73 20 71 75 65 73 74 69 6f 6e 20 71 75 69 63  is question quic
150a0 6b 6c 79 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  kly:</p>..<block
150b0 71 75 6f 74 65 3e 3c 69 3e 0a 47 69 76 65 6e 20  quote><i>.Given 
150c0 61 20 70 61 67 65 20 6e 75 6d 62 65 72 20 50 20  a page number P 
150d0 61 6e 64 20 61 20 6d 61 78 69 6d 75 6d 20 57 41  and a maximum WA
150e0 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20 4d 2c  L frame index M,
150f0 0a 72 65 74 75 72 6e 20 74 68 65 20 6c 61 72 67  .return the larg
15100 65 73 74 20 57 41 4c 20 66 72 61 6d 65 20 69 6e  est WAL frame in
15110 64 65 78 20 66 6f 72 20 70 61 67 65 20 50 20 74  dex for page P t
15120 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 63  hat does not exc
15130 65 65 64 20 4d 2c 20 0a 6f 72 20 72 65 74 75 72  eed M, .or retur
15140 6e 20 4e 55 4c 4c 20 69 66 20 74 68 65 72 65 20  n NULL if there 
15150 61 72 65 20 6e 6f 20 66 72 61 6d 65 73 20 66 6f  are no frames fo
15160 72 20 70 61 67 65 20 50 20 74 68 61 74 20 64 6f  r page P that do
15170 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2e 0a 3c   not exceed M..<
15180 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  /i></blockquote>
15190 0a 0a 3c 70 3e 54 68 65 20 3c 69 3e 4d 3c 2f 69  ..<p>The <i>M</i
151a0 3e 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 70  > value in the p
151b0 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
151c0 68 20 69 73 20 74 68 65 20 22 6d 78 46 72 61 6d  h is the "mxFram
151d0 65 22 20 76 61 6c 75 65 0a 64 65 66 69 6e 65 64  e" value.defined
151e0 20 69 6e 20 5b 57 41 4c 20 72 65 61 64 20 61 6c   in [WAL read al
151f0 67 6f 72 69 74 68 6d 20 7c 20 73 65 63 74 69 6f  gorithm | sectio
15200 6e 20 34 2e 34 5d 20 74 68 61 74 20 69 73 20 72  n 4.4] that is r
15210 65 61 64 20 61 74 20 74 68 65 20 73 74 61 72 74  ead at the start
15220 20 0a 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69   .of a transacti
15230 6f 6e 20 61 6e 64 20 77 68 69 63 68 20 64 65 66  on and which def
15240 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ines the maximum
15250 20 66 72 61 6d 65 20 66 72 6f 6d 20 74 68 65 20   frame from the 
15260 57 41 4c 20 74 68 61 74 20 0a 74 68 65 20 72 65  WAL that .the re
15270 61 64 65 72 20 77 69 6c 6c 20 75 73 65 2e 3c 2f  ader will use.</
15280 70 3e 0a 0a 3c 70 3e 54 68 65 20 77 61 6c 2d 69  p>..<p>The wal-i
15290 6e 64 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e  ndex is transien
152a0 74 2e 20 20 41 66 74 65 72 20 61 20 63 72 61 73  t.  After a cras
152b0 68 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  h, the wal-index
152c0 20 69 73 0a 72 65 63 6f 6e 73 74 72 75 63 74 65   is.reconstructe
152d0 64 20 66 72 6f 6d 20 74 68 65 20 6f 72 69 67 69  d from the origi
152e0 6e 61 6c 20 57 41 4c 20 66 69 6c 65 2e 20 20 5e  nal WAL file.  ^
152f0 54 68 65 20 56 46 53 20 69 73 20 72 65 71 75 69  The VFS is requi
15300 72 65 64 0a 74 6f 20 65 69 74 68 65 72 20 74 72  red.to either tr
15310 75 6e 63 61 74 65 20 6f 72 20 7a 65 72 6f 20 74  uncate or zero t
15320 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
15330 20 77 61 6c 2d 69 6e 64 65 78 20 77 68 65 6e 20   wal-index when 
15340 74 68 65 20 6c 61 73 74 0a 63 6f 6e 6e 65 63 74  the last.connect
15350 69 6f 6e 20 74 6f 20 69 74 20 63 6c 6f 73 65 73  ion to it closes
15360 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20 77  .  Because the w
15370 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72 61 6e  al-index is tran
15380 73 69 65 6e 74 2c 20 69 74 20 63 61 6e 0a 75 73  sient, it can.us
15390 65 20 61 6e 20 61 72 63 68 69 74 65 63 74 75 72  e an architectur
153a0 65 2d 73 70 65 63 69 66 69 63 20 66 6f 72 6d 61  e-specific forma
153b0 74 3b 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 68  t; it does not h
153c0 61 76 65 20 74 6f 20 62 65 20 63 72 6f 73 73 2d  ave to be cross-
153d0 70 6c 61 74 66 6f 72 6d 2e 0a 48 65 6e 63 65 2c  platform..Hence,
153e0 20 75 6e 6c 69 6b 65 20 74 68 65 20 64 61 74 61   unlike the data
153f0 62 61 73 65 20 61 6e 64 20 57 41 4c 20 66 69 6c  base and WAL fil
15400 65 20 66 6f 72 6d 61 74 73 20 77 68 69 63 68 20  e formats which 
15410 73 74 6f 72 65 20 61 6c 6c 20 76 61 6c 75 65 73  store all values
15420 0a 61 73 20 62 69 67 20 65 6e 64 69 61 6e 2c 20  .as big endian, 
15430 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 73 74  the wal-index st
15440 6f 72 65 73 20 6d 75 6c 74 69 2d 62 79 74 65 20  ores multi-byte 
15450 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 6e 61  values in the na
15460 74 69 76 65 0a 62 79 74 65 20 6f 72 64 65 72 20  tive.byte order 
15470 6f 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70  of the host comp
15480 75 74 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  uter.</p>..<p>Th
15490 69 73 20 64 6f 63 75 6d 65 6e 74 20 69 73 20 63  is document is c
154a0 6f 6e 63 65 72 6e 65 64 20 77 69 74 68 20 74 68  oncerned with th
154b0 65 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 61  e persistent sta
154c0 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  te of the databa
154d0 73 65 0a 66 69 6c 65 2c 20 61 6e 64 20 73 69 6e  se.file, and sin
154e0 63 65 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  ce the wal-index
154f0 20 69 73 20 61 20 74 72 61 6e 73 69 65 6e 74 20   is a transient 
15500 73 74 72 75 63 74 75 72 65 2c 20 6e 6f 20 66 75  structure, no fu
15510 72 74 68 65 72 20 0a 69 6e 66 6f 72 6d 61 74 69  rther .informati
15520 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
15530 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c 2d 69  mat of the wal-i
15540 6e 64 65 78 20 77 69 6c 6c 20 62 65 20 70 72 6f  ndex will be pro
15550 76 69 64 65 64 20 68 65 72 65 2e 0a 43 6f 6d 70  vided here..Comp
15560 6c 65 74 65 20 64 65 74 61 69 6c 73 20 6f 6e 20  lete details on 
15570 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
15580 65 20 77 61 6c 2d 69 6e 64 65 78 20 61 72 65 20  e wal-index are 
15590 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
155a0 0a 63 6f 6d 6d 65 6e 74 73 20 69 6e 20 53 51 4c  .comments in SQL
155b0 69 74 65 20 73 6f 75 72 63 65 20 63 6f 64 65 2e  ite source code.
155c0 3c 2f 70 3e 0a                                   </p>.