Documentation Source Text

Hex Artifact Content
Login

Artifact c8a7866159cb1dd90cc1dac6fe05bd4bfa84bdd9:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 7d 20 7b   {file format} {
0050: 73 65 63 6f 6e 64 20 65 64 69 74 69 6f 6e 20 66  second edition f
0060: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0070: 65 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 20  ent}</tcl>..<h1 
0080: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 0a 54 68  align=center>.Th
0090: 65 20 53 51 4c 69 74 65 20 44 61 74 61 62 61 73  e SQLite Databas
00a0: 65 20 46 69 6c 65 20 46 6f 72 6d 61 74 0a 3c 2f  e File Format.</
00b0: 68 31 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  h1>..<p>This doc
00c0: 75 6d 65 6e 74 20 64 65 73 63 72 69 62 65 73 20  ument describes 
00d0: 61 6e 64 20 64 65 66 69 6e 65 73 20 74 68 65 20  and defines the 
00e0: 6f 6e 2d 64 69 73 6b 20 64 61 74 61 62 61 73 65  on-disk database
00f0: 20 66 69 6c 65 0a 66 6f 72 6d 61 74 20 75 73 65   file.format use
0100: 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  d by SQLite.</p>
0110: 0a 0a 3c 68 32 3e 31 2e 30 20 54 68 65 20 44 61  ..<h2>1.0 The Da
0120: 74 61 62 61 73 65 20 46 69 6c 65 3c 2f 68 32 3e  tabase File</h2>
0130: 0a 0a 3c 70 3e 54 68 65 20 63 6f 6d 70 6c 65 74  ..<p>The complet
0140: 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51  e state of an SQ
0150: 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69 73  Lite database is
0160: 20 75 73 75 61 6c 6c 79 0a 63 6f 6e 74 61 69 6e   usually.contain
0170: 65 64 20 61 20 73 69 6e 67 6c 65 20 66 69 6c 65  ed a single file
0180: 20 6f 6e 20 64 69 73 6b 20 63 61 6c 6c 65 64 20   on disk called 
0190: 74 68 65 20 22 6d 61 69 6e 20 64 61 74 61 62 61  the "main databa
01a0: 73 65 20 66 69 6c 65 22 2e 3c 2f 70 3e 0a 0a 3c  se file".</p>..<
01b0: 70 3e 44 75 72 69 6e 67 20 61 20 74 72 61 6e 73  p>During a trans
01c0: 61 63 74 69 6f 6e 2c 20 53 51 4c 69 74 65 20 73  action, SQLite s
01d0: 74 6f 72 65 73 20 61 64 64 69 74 69 6f 6e 61 6c  tores additional
01e0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 0a 69 6e   information .in
01f0: 20 61 20 73 65 63 6f 6e 64 20 66 69 6c 65 20 63   a second file c
0200: 61 6c 6c 65 64 20 74 68 65 20 22 72 6f 6c 6c 62  alled the "rollb
0210: 61 63 6b 20 6a 6f 75 72 6e 61 6c 22 2c 20 6f 72  ack journal", or
0220: 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 69 6e   if SQLite is in
0230: 0a 5b 57 41 4c 20 6d 6f 64 65 5d 2c 20 61 20 77  .[WAL mode], a w
0240: 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20 66  rite-ahead log f
0250: 69 6c 65 2e 0a 49 66 20 74 68 65 20 61 70 70 6c  ile..If the appl
0260: 69 63 61 74 69 6f 6e 20 6f 72 0a 68 6f 73 74 20  ication or.host 
0270: 63 6f 6d 70 75 74 65 72 20 63 72 61 73 68 65 73  computer crashes
0280: 20 62 65 66 6f 72 65 20 74 68 65 20 74 72 61 6e   before the tran
0290: 73 61 63 74 69 6f 6e 20 63 6f 6d 70 6c 65 74 65  saction complete
02a0: 73 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 6c 6c  s, then the roll
02b0: 62 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 6f 72 20  back.journal or 
02c0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
02d0: 63 6f 6e 74 61 69 6e 73 20 63 72 69 74 69 63 61  contains critica
02e0: 6c 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  l state informat
02f0: 69 6f 6e 20 6e 65 65 64 65 64 20 0a 74 6f 20 72  ion needed .to r
0300: 65 73 74 6f 72 65 20 74 68 65 20 6d 61 69 6e 20  estore the main 
0310: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
0320: 20 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 73 74   a consistent st
0330: 61 74 65 2e 20 20 57 68 65 6e 20 61 20 72 6f 6c  ate.  When a rol
0340: 6c 62 61 63 6b 20 0a 6a 6f 75 72 6e 61 6c 20 6f  lback .journal o
0350: 72 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f  r write-ahead lo
0360: 67 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  g contains infor
0370: 6d 61 74 69 6f 6e 20 6e 65 63 65 73 73 61 72 79  mation necessary
0380: 20 66 6f 72 20 72 65 63 6f 76 65 72 69 6e 67 20   for recovering 
0390: 0a 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68  .the state of th
03a0: 65 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 79  e database, they
03b0: 20 61 72 65 20 63 61 6c 6c 65 64 20 61 20 22 68   are called a "h
03c0: 6f 74 20 6a 6f 75 72 6e 61 6c 22 20 6f 72 20 22  ot journal" or "
03d0: 68 6f 74 20 57 41 4c 20 66 69 6c 65 22 2e 0a 48  hot WAL file"..H
03e0: 6f 74 20 6a 6f 75 72 6e 61 6c 73 20 61 6e 64 20  ot journals and 
03f0: 57 41 4c 20 66 69 6c 65 73 20 61 72 65 20 6f 6e  WAL files are on
0400: 6c 79 20 61 20 66 61 63 74 6f 72 20 64 75 72 69  ly a factor duri
0410: 6e 67 20 65 72 72 6f 72 20 72 65 63 6f 76 65 72  ng error recover
0420: 79 0a 73 63 65 6e 61 72 69 6f 73 20 61 6e 64 20  y.scenarios and 
0430: 73 6f 20 61 72 65 20 75 6e 63 6f 6d 6d 6f 6e 2c  so are uncommon,
0440: 20 62 75 74 20 74 68 65 79 20 61 72 65 20 70 61   but they are pa
0450: 72 74 20 6f 66 20 74 68 65 20 73 74 61 74 65 20  rt of the state 
0460: 6f 66 20 61 6e 20 53 51 4c 69 74 65 0a 64 61 74  of an SQLite.dat
0470: 61 62 61 73 65 20 61 6e 64 20 73 6f 20 63 61 6e  abase and so can
0480: 6e 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 2e 20  not be ignored. 
0490: 20 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 64   This document d
04a0: 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
04b0: 74 0a 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20  t.of a rollback 
04c0: 6a 6f 75 72 6e 61 6c 20 61 6e 64 20 74 68 65 20  journal and the 
04d0: 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20  write-ahead log 
04e0: 66 69 6c 65 2c 20 62 75 74 20 74 68 65 20 66 6f  file, but the fo
04f0: 63 75 73 20 69 73 0a 6f 6e 20 74 68 65 20 6d 61  cus is.on the ma
0500: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
0510: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 31 20 50  .</p>..<h3>1.1 P
0520: 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  ages</h3>..<p>Th
0530: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
0540: 66 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  file consists of
0550: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67   one or more pag
0560: 65 73 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f  es.  ^The size o
0570: 66 20 61 0a 70 61 67 65 20 69 73 20 61 20 70 6f  f a.page is a po
0580: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
0590: 65 6e 20 35 31 32 20 61 6e 64 20 36 35 35 33 36  en 512 and 65536
05a0: 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6c 6c   inclusive.  All
05b0: 20 70 61 67 65 73 20 77 69 74 68 69 6e 0a 74 68   pages within.th
05c0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
05d0: 61 72 65 20 74 68 65 20 73 61 6d 65 20 73 69 7a  are the same siz
05e0: 65 2e 20 20 5e 54 68 65 20 70 61 67 65 20 73 69  e.  ^The page si
05f0: 7a 65 20 66 6f 72 20 61 20 64 61 74 61 62 61 73  ze for a databas
0600: 65 20 66 69 6c 65 0a 69 73 20 64 65 74 65 72 6d  e file.is determ
0610: 69 6e 65 64 20 62 79 20 74 68 65 20 32 2d 62 79  ined by the 2-by
0620: 74 65 20 69 6e 74 65 67 65 72 20 6c 6f 63 61 74  te integer locat
0630: 65 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  ed at an offset 
0640: 6f 66 0a 31 36 20 62 79 74 65 73 20 66 72 6f 6d  of.16 bytes from
0650: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
0660: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
0670: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 67  ile.</p>..<p>Pag
0680: 65 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20  es are numbered 
0690: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31  beginning with 1
06a0: 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 70  .  The maximum p
06b0: 61 67 65 20 6e 75 6d 62 65 72 20 69 73 0a 32 31  age number is.21
06c0: 34 37 34 38 33 36 34 36 20 28 32 3c 73 75 70 3e  47483646 (2<sup>
06d0: 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61 6c 6c  <small>31</small
06e0: 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20 20 54  ></sup> - 2).  T
06f0: 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a 65 0a  he minimum size.
0700: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0710: 69 73 20 61 20 73 69 6e 67 6c 65 20 35 31 32 2d  is a single 512-
0720: 62 79 74 65 20 70 61 67 65 2e 0a 54 68 65 20 6d  byte page..The m
0730: 61 78 69 6d 75 6d 20 73 69 7a 65 20 64 61 74 61  aximum size data
0740: 62 61 73 65 20 77 6f 75 6c 64 20 62 65 20 32 31  base would be 21
0750: 34 37 34 38 33 36 34 36 20 70 61 67 65 73 20 61  47483646 pages a
0760: 74 20 36 35 35 33 36 20 62 79 74 65 73 20 70 65  t 65536 bytes pe
0770: 72 0a 70 61 67 65 20 6f 72 20 31 34 30 2c 37 33  r.page or 140,73
0780: 37 2c 34 38 38 2c 32 32 34 2c 32 35 36 20 62 79  7,488,224,256 by
0790: 74 65 73 20 28 61 62 6f 75 74 20 31 34 30 20 74  tes (about 140 t
07a0: 65 72 61 62 79 74 65 73 29 2e 20 20 55 73 75 61  erabytes).  Usua
07b0: 6c 6c 79 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a  lly SQLite will.
07c0: 68 69 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  hit the maximum 
07d0: 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69 74 20  file size limit 
07e0: 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  of the underlyin
07f0: 67 20 66 69 6c 65 73 79 73 74 65 6d 20 6f 72 20  g filesystem or 
0800: 64 69 73 6b 0a 68 61 72 64 77 61 72 65 20 73 69  disk.hardware si
0810: 7a 65 20 6c 69 6d 69 74 20 6c 6f 6e 67 20 62 65  ze limit long be
0820: 66 6f 72 65 20 69 74 20 68 69 74 73 20 69 74 73  fore it hits its
0830: 20 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 73 69   own internal si
0840: 7a 65 20 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c  ze limit.</p>..<
0850: 70 3e 49 6e 20 63 6f 6d 6d 6f 6e 20 75 73 65 2c  p>In common use,
0860: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
0870: 73 20 74 65 6e 64 20 74 6f 20 72 61 6e 67 65 20  s tend to range 
0880: 69 6e 20 73 69 7a 65 20 66 72 6f 6d 20 61 20 66  in size from a f
0890: 65 77 20 6b 69 6c 6f 62 79 74 65 73 0a 74 6f 20  ew kilobytes.to 
08a0: 61 20 66 65 77 20 67 69 67 61 62 79 74 65 73 2e  a few gigabytes.
08b0: 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20 61 6e 79 20  </p>..<p>At any 
08c0: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 65  point in time, e
08d0: 76 65 72 79 20 70 61 67 65 20 69 6e 20 74 68 65  very page in the
08e0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68   main database h
08f0: 61 73 20 61 20 73 69 6e 67 6c 65 0a 75 73 65 20  as a single.use 
0900: 77 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66 20  which is one of 
0910: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 3c  the following:.<
0920: 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 6c 6f 63 6b  ul>.<li>The lock
0930: 2d 62 79 74 65 20 70 61 67 65 0a 3c 6c 69 3e 41  -byte page.<li>A
0940: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 0a 3c   freelist page.<
0950: 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ul>.<li>A freeli
0960: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 0a 3c 6c  st trunk page.<l
0970: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 6c 65 61  i>A freelist lea
0980: 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69  f page.</ul>.<li
0990: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 0a 3c  >A b-tree page.<
09a0: 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61 62 6c 65 20  ul>.<li>A table 
09b0: 62 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20  b-tree interior 
09c0: 70 61 67 65 0a 3c 6c 69 3e 41 20 74 61 62 6c 65  page.<li>A table
09d0: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
09e0: 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20 62  e.<li>An index b
09f0: 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20 70  -tree interior p
0a00: 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78  age.<li>An index
0a10: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
0a20: 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 70 61  e.</ul>.<li>A pa
0a30: 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70  yload overflow p
0a40: 61 67 65 0a 3c 6c 69 3e 41 20 70 6f 69 6e 74 65  age.<li>A pointe
0a50: 72 20 6d 61 70 20 70 61 67 65 0a 3c 2f 75 6c 3e  r map page.</ul>
0a60: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6c 6c 20 72  .</p>..<p>^All r
0a70: 65 61 64 73 20 66 72 6f 6d 20 61 6e 64 20 77 72  eads from and wr
0a80: 69 74 65 73 20 74 6f 20 74 68 65 20 6d 61 69 6e  ites to the main
0a90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
0aa0: 65 67 69 6e 20 61 74 20 61 20 70 61 67 65 0a 62  egin at a page.b
0ab0: 6f 75 6e 64 61 72 79 20 61 6e 64 20 61 6c 6c 20  oundary and all 
0ac0: 77 72 69 74 65 73 20 61 72 65 20 61 6e 20 69 6e  writes are an in
0ad0: 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20  teger number of 
0ae0: 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2e 20 20  pages in size.  
0af0: 5e 52 65 61 64 73 0a 61 72 65 20 61 6c 73 6f 20  ^Reads.are also 
0b00: 75 73 75 61 6c 6c 79 20 61 6e 20 69 6e 74 65 67  usually an integ
0b10: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  er number of pag
0b20: 65 73 20 69 6e 20 73 69 7a 65 2c 20 77 69 74 68  es in size, with
0b30: 20 74 68 65 20 6f 6e 65 20 65 78 63 65 70 74 69   the one excepti
0b40: 6f 6e 0a 74 68 61 74 20 77 68 65 6e 20 74 68 65  on.that when the
0b50: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
0b60: 73 74 20 6f 70 65 6e 65 64 2c 20 74 68 65 20 66  st opened, the f
0b70: 69 72 73 74 20 31 30 30 20 62 79 74 65 73 20 6f  irst 100 bytes o
0b80: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  f the.database f
0b90: 69 6c 65 20 28 74 68 65 20 64 61 74 61 62 61 73  ile (the databas
0ba0: 65 20 66 69 6c 65 20 68 65 61 64 65 72 29 20 61  e file header) a
0bb0: 72 65 20 72 65 61 64 20 61 73 20 61 20 73 75 62  re read as a sub
0bc0: 2d 70 61 67 65 20 73 69 7a 65 20 75 6e 69 74 2e  -page size unit.
0bd0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42 65 66 6f 72 65  </p>..<p>^Before
0be0: 20 61 6e 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   any information
0bf0: 2d 62 65 61 72 69 6e 67 20 70 61 67 65 20 6f 66  -bearing page of
0c00: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
0c10: 20 6d 6f 64 69 66 69 65 64 2c 20 0a 74 68 65 20   modified, .the 
0c20: 6f 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66  original unmodif
0c30: 69 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  ied content of t
0c40: 68 61 74 20 70 61 67 65 20 69 73 20 77 72 69 74  hat page is writ
0c50: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 0a 72 6f  ten into the .ro
0c60: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
0c70: 20 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   If a transactio
0c80: 6e 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64  n is interrupted
0c90: 20 61 6e 64 20 6e 65 65 64 73 20 74 6f 20 62 65   and needs to be
0ca0: 20 0a 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 20 74   .rolled back, t
0cb0: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
0cc0: 6e 61 6c 20 63 61 6e 20 74 68 65 6e 20 62 65 20  nal can then be 
0cd0: 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20  used to restore 
0ce0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
0cf0: 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 73 74 61  its original sta
0d00: 74 65 2e 20 20 5e 46 72 65 65 6c 69 73 74 20 6c  te.  ^Freelist l
0d10: 65 61 66 20 70 61 67 65 73 20 62 65 61 72 20 6e  eaf pages bear n
0d20: 6f 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  o.information th
0d30: 61 74 20 77 6f 75 6c 64 20 6e 65 65 64 20 74 6f  at would need to
0d40: 20 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 20   be restored on 
0d50: 61 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 73  a rollback and s
0d60: 6f 20 74 68 65 79 0a 61 72 65 20 6e 6f 74 20 77  o they.are not w
0d70: 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 6a 6f  ritten to the jo
0d80: 75 72 6e 61 6c 20 70 72 69 6f 72 20 74 6f 20 6d  urnal prior to m
0d90: 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 69 6e 20  odification, in 
0da0: 6f 72 64 65 72 20 74 6f 0a 72 65 64 75 63 65 20  order to.reduce 
0db0: 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c  disk I/O.</p>..<
0dc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
0dd0: 64 61 74 61 62 61 73 65 5f 68 65 61 64 65 72 20  database_header 
0de0: 7b 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72  {database header
0df0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 32 20  }</tcl>.<h3>1.2 
0e00: 54 68 65 20 44 61 74 61 62 61 73 65 20 48 65 61  The Database Hea
0e10: 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  der</h3>..<p>The
0e20: 20 66 69 72 73 74 20 31 30 30 20 62 79 74 65 73   first 100 bytes
0e30: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
0e40: 20 66 69 6c 65 20 63 6f 6d 70 72 69 73 65 20 74   file comprise t
0e50: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
0e60: 20 0a 68 65 61 64 65 72 2e 20 20 54 68 65 20 64   .header.  The d
0e70: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
0e80: 64 65 72 20 69 73 20 64 69 76 69 64 65 64 20 69  der is divided i
0e90: 6e 74 6f 20 66 69 65 6c 64 73 20 61 73 20 73 68  nto fields as sh
0ea0: 6f 77 6e 20 62 79 0a 74 68 65 20 74 61 62 6c 65  own by.the table
0eb0: 20 62 65 6c 6f 77 2e 20 20 41 6c 6c 20 6d 75 6c   below.  All mul
0ec0: 74 69 62 79 74 65 20 66 69 65 6c 64 73 20 69 6e  tibyte fields in
0ed0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0ee0: 6c 65 20 68 65 61 64 65 72 20 61 72 65 0a 73 74  le header are.st
0ef0: 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 6d 6f  ored with the mo
0f00: 73 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  st significant b
0f10: 79 74 65 20 66 69 72 73 74 20 28 62 69 67 2d 65  yte first (big-e
0f20: 6e 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63 65  ndian).</p>..<ce
0f30: 6e 74 65 72 3e 0a 3c 69 3e 44 61 74 61 62 61 73  nter>.<i>Databas
0f40: 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
0f50: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
0f60: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
0f70: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
0f80: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
0f90: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
0fa0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
0fb0: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
0fc0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
0fd0: 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 61 6c  =center>16<td al
0fe0: 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 68 65  ign=left>.The he
0ff0: 61 64 65 72 20 73 74 72 69 6e 67 3a 20 22 53 51  ader string: "SQ
1000: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 5c 30 30  Lite format 3\00
1010: 30 22 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  0".<tr><td valig
1020: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1030: 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>16<td valign=
1040: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1050: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
1060: 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65 20 70  >.The database p
1070: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
1080: 73 2e 20 20 4d 75 73 74 20 62 65 20 61 20 70 6f  s.  Must be a po
1090: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
10a0: 65 6e 20 35 31 32 0a 61 6e 64 20 33 32 37 36 38  en 512.and 32768
10b0: 20 69 6e 63 6c 75 73 69 76 65 2c 20 6f 72 20 74   inclusive, or t
10c0: 68 65 20 76 61 6c 75 65 20 31 20 72 65 70 72 65  he value 1 repre
10d0: 73 65 6e 74 69 6e 67 20 61 20 70 61 67 65 20 73  senting a page s
10e0: 69 7a 65 20 6f 66 20 36 35 35 33 36 2e 0a 3c 74  ize of 65536..<t
10f0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1100: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 38   align=center>18
1110: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1120: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
1130: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c   align=left>.Fil
1140: 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76  e format write v
1150: 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20 6c  ersion.  1 for l
1160: 65 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57 41  egacy; 2 for [WA
1170: 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  L]..<tr><td vali
1180: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1190: 74 65 72 3e 31 39 3c 74 64 20 76 61 6c 69 67 6e  ter>19<td valign
11a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11b0: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
11c0: 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 72  t>.File format r
11d0: 65 61 64 20 76 65 72 73 69 6f 6e 2e 20 20 31 20  ead version.  1 
11e0: 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f  for legacy; 2 fo
11f0: 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64  r [WAL]..<tr><td
1200: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1210: 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
1220: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1230: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
1240: 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 73 20 6f 66  n=left>.Bytes of
1250: 20 75 6e 75 73 65 64 20 22 72 65 73 65 72 76 65   unused "reserve
1260: 64 22 20 73 70 61 63 65 20 61 74 20 74 68 65 20  d" space at the 
1270: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
1280: 2e 20 20 55 73 75 61 6c 6c 79 20 30 2e 0a 3c 74  .  Usually 0..<t
1290: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 31   align=center>21
12b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
12d0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 61 78   align=left>.Max
12e0: 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61  imum embedded pa
12f0: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20  yload fraction. 
1300: 20 4d 75 73 74 20 62 65 20 36 34 2e 0a 3c 74 72   Must be 64..<tr
1310: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1320: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 32 3c  align=center>22<
1330: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1340: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
1350: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 69 6e 69  align=left>.Mini
1360: 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79  mum embedded pay
1370: 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20 20  load fraction.  
1380: 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72 3e  Must be 32..<tr>
1390: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 33 3c 74  lign=center>23<t
13b0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13c0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
13d0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65 61 66 20  lign=left>.Leaf 
13e0: 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e  payload fraction
13f0: 2e 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c  .  Must be 32..<
1400: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1410: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1420: 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
1430: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1440: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69  d align=left>.Fi
1450: 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  le change counte
1460: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
1470: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1480: 65 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>28<td valign=
1490: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14a0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
14b0: 3e 0a 53 69 7a 65 20 6f 66 20 74 68 65 20 64 61  >.Size of the da
14c0: 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70  tabase file in p
14d0: 61 67 65 73 2e 20 20 54 68 65 20 22 69 6e 2d 68  ages.  The "in-h
14e0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
14f0: 69 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  ize"..<tr><td va
1500: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1510: 65 6e 74 65 72 3e 33 32 3c 74 64 20 76 61 6c 69  enter>32<td vali
1520: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1530: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1540: 65 66 74 3e 0a 50 61 67 65 20 6e 75 6d 62 65 72  eft>.Page number
1550: 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72   of the first fr
1560: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
1570: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1580: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1590: 65 72 3e 33 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>36<td valign=
15a0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
15b0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
15c0: 3e 0a 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  >.Total number o
15d0: 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 73  f freelist pages
15e0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
15f0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1600: 72 3e 34 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>40<td valign=t
1610: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1620: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1630: 0a 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .The schema cook
1640: 69 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ie..<tr><td vali
1650: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1660: 74 65 72 3e 34 34 3c 74 64 20 76 61 6c 69 67 6e  ter>44<td valign
1670: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1680: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1690: 74 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f  t>.The schema fo
16a0: 72 6d 61 74 20 6e 75 6d 62 65 72 2e 20 20 53 75  rmat number.  Su
16b0: 70 70 6f 72 74 65 64 20 73 63 68 65 6d 61 20 66  pported schema f
16c0: 6f 72 6d 61 74 73 20 61 72 65 20 31 2c 20 32 2c  ormats are 1, 2,
16d0: 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72 3e 3c   3, and 4..<tr><
16e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
16f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c 74 64  ign=center>48<td
1700: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1710: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
1720: 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61 75 6c  ign=left>.Defaul
1730: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
1740: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1750: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1760: 65 72 3e 35 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>52<td valign=
1770: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1780: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1790: 3e 0a 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65  >.The page numbe
17a0: 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74  r of the largest
17b0: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
17c0: 65 20 77 68 65 6e 20 69 6e 20 61 75 74 6f 2d 76  e when in auto-v
17d0: 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65 6d 65  acuum or.increme
17e0: 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64 65  ntal-vacuum mode
17f0: 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68 65 72  s, or zero other
1800: 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  wise..<tr><td va
1810: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1820: 65 6e 74 65 72 3e 35 36 3c 74 64 20 76 61 6c 69  enter>56<td vali
1830: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1840: 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>4<td align=l
1850: 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73  eft>.The databas
1860: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
1870: 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20 6d    A value of 1 m
1880: 65 61 6e 73 20 55 54 46 2d 38 2e 20 20 41 20 76  eans UTF-8.  A v
1890: 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e 73 20  alue of 2.means 
18a0: 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61 6c  UTF-16le.  A val
18b0: 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54  ue of 3 means UT
18c0: 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74 64 20  F-16be..<tr><td 
18d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
18e0: 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64 20 76 61  =center>60<td va
18f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1900: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1910: 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75 73 65 72  =left>.The "user
1920: 20 76 65 72 73 69 6f 6e 22 20 61 73 20 72 65 61   version" as rea
1930: 64 20 61 6e 64 20 73 65 74 20 62 79 20 74 68 65  d and set by the
1940: 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70   [user_version p
1950: 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74 64 20  ragma]..<tr><td 
1960: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1970: 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64 20 76 61  =center>64<td va
1980: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1990: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
19a0: 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e 6f 6e  =left>.True (non
19b0: 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63 72 65  -zero) for incre
19c0: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f  mental-vacuum mo
19d0: 64 65 2e 20 20 46 61 6c 73 65 20 28 7a 65 72 6f  de.  False (zero
19e0: 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72  ) otherwise..<tr
19f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1a00: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 38 3c  align=center>68<
1a10: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1a20: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1a30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
1a40: 22 41 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 22  "Application ID"
1a50: 20 73 65 74 20 62 79 20 5b 50 52 41 47 4d 41 20   set by [PRAGMA 
1a60: 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 5d 2e  application_id].
1a70: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
1a80: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1a90: 3e 37 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >72<td valign=to
1aa0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1ab0: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
1ac0: 0a 52 65 73 65 72 76 65 64 20 66 6f 72 20 65 78  .Reserved for ex
1ad0: 70 61 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20 62  pansion.  Must b
1ae0: 65 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  e zero..<tr><td 
1af0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1b00: 3d 63 65 6e 74 65 72 3e 39 32 3c 74 64 20 76 61  =center>92<td va
1b10: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1b20: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1b30: 3d 6c 65 66 74 3e 0a 54 68 65 20 5b 76 65 72 73  =left>.The [vers
1b40: 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75  ion-valid-for nu
1b50: 6d 62 65 72 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  mber]..<tr><td v
1b60: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1b70: 63 65 6e 74 65 72 3e 39 36 3c 74 64 20 76 61 6c  center>96<td val
1b80: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1b90: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1ba0: 6c 65 66 74 3e 0a 5b 53 51 4c 49 54 45 5f 56 45  left>.[SQLITE_VE
1bb0: 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f  RSION_NUMBER].</
1bc0: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  table></center>.
1bd0: 0a 3c 68 34 3e 31 2e 32 2e 31 20 4d 61 67 69 63  .<h4>1.2.1 Magic
1be0: 20 48 65 61 64 65 72 20 53 74 72 69 6e 67 3c 2f   Header String</
1bf0: 68 34 3e 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76  h4>..<p>^Every v
1c00: 61 6c 69 64 20 53 51 4c 69 74 65 20 64 61 74 61  alid SQLite data
1c10: 62 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 73  base file begins
1c20: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
1c30: 69 6e 67 20 31 36 20 62 79 74 65 73 20 0a 28 69  ing 16 bytes .(i
1c40: 6e 20 68 65 78 29 3a 20 35 33 20 35 31 20 34 63  n hex): 53 51 4c
1c50: 20 36 39 20 37 34 20 36 35 20 32 30 20 36 36 20   69 74 65 20 66 
1c60: 36 66 20 37 32 20 36 64 20 36 31 20 37 34 20 32  6f 72 6d 61 74 2
1c70: 30 20 33 33 20 30 30 2e 20 20 54 68 69 73 20 62  0 33 00.  This b
1c80: 79 74 65 20 73 65 71 75 65 6e 63 65 0a 63 6f 72  yte sequence.cor
1c90: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
1ca0: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 22 53 51  UTF-8 string "SQ
1cb0: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22 20 69  Lite format 3" i
1cc0: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 75 6c  ncluding the nul
1cd0: 0a 74 65 72 6d 69 6e 61 74 6f 72 20 63 68 61 72  .terminator char
1ce0: 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64  acter at the end
1cf0: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 32  .</p>..<h4>1.2.2
1d00: 20 50 61 67 65 20 53 69 7a 65 3c 2f 68 34 3e 0a   Page Size</h4>.
1d10: 0a 3c 70 3e 54 68 65 20 74 77 6f 2d 62 79 74 65  .<p>The two-byte
1d20: 20 76 61 6c 75 65 20 62 65 67 69 6e 6e 69 6e 67   value beginning
1d30: 20 61 74 20 6f 66 66 73 65 74 20 31 36 20 64 65   at offset 16 de
1d40: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 70 61 67  termines the pag
1d50: 65 20 73 69 7a 65 20 6f 66 20 0a 74 68 65 20 64  e size of .the d
1d60: 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20 53 51  atabase.  For SQ
1d70: 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 33 2e  Lite versions 3.
1d80: 37 2e 30 2e 31 20 61 6e 64 20 65 61 72 6c 69 65  7.0.1 and earlie
1d90: 72 2c 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  r, this value is
1da0: 20 0a 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   .interpreted as
1db0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e   a big-endian in
1dc0: 74 65 67 65 72 20 61 6e 64 20 6d 75 73 74 20 62  teger and must b
1dd0: 65 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  e a power of two
1de0: 20 62 65 74 77 65 65 6e 0a 35 31 32 20 61 6e 64   between.512 and
1df0: 20 33 32 37 36 38 2c 20 69 6e 63 6c 75 73 69 76   32768, inclusiv
1e00: 65 2e 20 20 42 65 67 69 6e 6e 69 6e 67 20 77 69  e.  Beginning wi
1e10: 74 68 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  th SQLite versio
1e20: 6e 20 33 2e 37 2e 31 2c 20 61 20 70 61 67 65 0a  n 3.7.1, a page.
1e30: 73 69 7a 65 20 6f 66 20 36 35 35 33 36 20 62 79  size of 65536 by
1e40: 74 65 73 20 69 73 20 73 75 70 70 6f 72 74 65 64  tes is supported
1e50: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 36 35 35  .  The value 655
1e60: 33 36 20 77 69 6c 6c 20 6e 6f 74 20 66 69 74 20  36 will not fit 
1e70: 69 6e 20 61 0a 74 77 6f 2d 62 79 74 65 20 69 6e  in a.two-byte in
1e80: 74 65 67 65 72 2c 20 73 6f 20 74 6f 20 73 70 65  teger, so to spe
1e90: 63 69 66 79 20 61 20 36 35 35 33 36 2d 62 79 74  cify a 65536-byt
1ea0: 65 20 70 61 67 65 20 73 69 7a 65 2c 20 74 68 65  e page size, the
1eb0: 20 76 61 6c 75 65 0a 61 74 20 6f 66 66 73 65 74   value.at offset
1ec0: 20 31 36 20 69 73 20 30 78 30 30 20 30 78 30 31   16 is 0x00 0x01
1ed0: 2e 0a 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  ..This value can
1ee0: 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
1ef0: 61 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a  as a big-endian.
1f00: 31 20 61 6e 64 20 74 68 6f 75 67 68 74 20 6f 66  1 and thought of
1f10: 20 69 73 20 61 73 20 61 20 6d 61 67 69 63 20 6e   is as a magic n
1f20: 75 6d 62 65 72 20 74 6f 20 72 65 70 72 65 73 65  umber to represe
1f30: 6e 74 20 74 68 65 20 36 35 35 33 36 20 70 61 67  nt the 65536 pag
1f40: 65 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e 65 20 63  e size..Or one c
1f50: 61 6e 20 76 69 65 77 20 74 68 65 20 74 77 6f 2d  an view the two-
1f60: 62 79 74 65 20 66 69 65 6c 64 20 61 73 20 61 20  byte field as a 
1f70: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 6e 75  little endian nu
1f80: 6d 62 65 72 20 61 6e 64 20 73 61 79 0a 74 68 61  mber and say.tha
1f90: 74 20 69 74 20 72 65 70 72 65 73 65 6e 74 73 20  t it represents 
1fa0: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 64 69  the page size di
1fb0: 76 69 64 65 64 20 62 79 20 32 35 36 2e 20 20 54  vided by 256.  T
1fc0: 68 65 73 65 20 74 77 6f 20 0a 69 6e 74 65 72 70  hese two .interp
1fd0: 72 65 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65  retations of the
1fe0: 20 70 61 67 65 2d 73 69 7a 65 20 66 69 65 6c 64   page-size field
1ff0: 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 2e   are equivalent.
2000: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 33 20  </p>..<h4>1.2.3 
2010: 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73  File format vers
2020: 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 34 3e  ion numbers</h4>
2030: 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 66 6f  ..<p>The file fo
2040: 72 6d 61 74 20 77 72 69 74 65 20 76 65 72 73 69  rmat write versi
2050: 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66 6f 72 6d  on and file form
2060: 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 20  at read version 
2070: 61 74 20 6f 66 66 73 65 74 73 0a 31 38 20 61 6e  at offsets.18 an
2080: 64 20 31 39 20 61 72 65 20 69 6e 74 65 6e 64 65  d 19 are intende
2090: 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 65  d to allow for e
20a0: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20 74  nhancements of t
20b0: 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 69  he file format.i
20c0: 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  n future version
20d0: 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 49 6e  s of SQLite.  In
20e0: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
20f0: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f 74  s of SQLite, bot
2100: 68 20 6f 66 0a 74 68 65 73 65 20 76 61 6c 75 65  h of.these value
2110: 73 20 61 72 65 20 31 20 66 6f 72 20 72 6f 6c 6c  s are 1 for roll
2120: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e 67  back journalling
2130: 20 6d 6f 64 65 73 20 61 6e 64 20 32 20 66 6f 72   modes and 2 for
2140: 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c 69   [WAL].journalli
2150: 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20 61 20 76  ng mode.  If a v
2160: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
2170: 20 63 6f 64 65 64 20 74 6f 20 74 68 65 20 63 75   coded to the cu
2180: 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d 61  rrent.file forma
2190: 74 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  t specification 
21a0: 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 64 61 74  encounters a dat
21b0: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 72 65  abase file where
21c0: 20 74 68 65 20 72 65 61 64 0a 76 65 72 73 69 6f   the read.versio
21d0: 6e 20 69 73 20 31 20 6f 72 20 32 20 62 75 74 20  n is 1 or 2 but 
21e0: 74 68 65 20 77 72 69 74 65 20 76 65 72 73 69 6f  the write versio
21f0: 6e 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  n is greater tha
2200: 6e 20 32 2c 20 74 68 65 6e 20 74 68 65 20 64 61  n 2, then the da
2210: 74 61 62 61 73 65 0a 66 69 6c 65 20 6d 75 73 74  tabase.file must
2220: 20 62 65 20 74 72 65 61 74 65 64 20 61 73 20 72   be treated as r
2230: 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61 20  ead-only.  If a 
2240: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69  database file wi
2250: 74 68 20 61 20 72 65 61 64 20 76 65 72 73 69 6f  th a read versio
2260: 6e 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 32  n.greater than 2
2270: 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c   is encountered,
2280: 20 74 68 65 6e 20 74 68 61 74 20 64 61 74 61 62   then that datab
2290: 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 72 65  ase cannot be re
22a0: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c 2f  ad or written.</
22b0: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 34 20 52 65  p>..<h4>1.2.4 Re
22c0: 73 65 72 76 65 64 20 62 79 74 65 73 20 70 65 72  served bytes per
22d0: 20 70 61 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 53   page</h4>..<p>S
22e0: 51 4c 69 74 65 20 68 61 73 20 74 68 65 20 61 62  QLite has the ab
22f0: 69 6c 69 74 79 20 74 6f 20 73 65 74 20 61 73 69  ility to set asi
2300: 64 65 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65  de a small numbe
2310: 72 20 6f 66 20 65 78 74 72 61 20 62 79 74 65 73  r of extra bytes
2320: 20 61 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 65   at.the end of e
2330: 76 65 72 79 20 70 61 67 65 20 66 6f 72 20 75 73  very page for us
2340: 65 20 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e  e by extensions.
2350: 20 20 54 68 65 73 65 20 65 78 74 72 61 20 62 79    These extra by
2360: 74 65 73 20 61 72 65 0a 75 73 65 64 2c 20 66 6f  tes are.used, fo
2370: 72 20 65 78 61 6d 70 6c 65 2c 20 62 79 20 74 68  r example, by th
2380: 65 20 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74  e SQLite Encrypt
2390: 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f  ion Extension to
23a0: 20 73 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61   store a nonce.a
23b0: 6e 64 2f 6f 72 20 63 72 79 70 74 6f 67 72 61 70  nd/or cryptograp
23c0: 68 69 63 20 63 68 65 63 6b 73 75 6d 20 61 73 73  hic checksum ass
23d0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63  ociated with eac
23e0: 68 20 70 61 67 65 2e 20 20 5e 54 68 65 20 0a 22  h page.  ^The ."
23f0: 72 65 73 65 72 76 65 64 20 73 70 61 63 65 22 20  reserved space" 
2400: 73 69 7a 65 20 69 6e 20 74 68 65 20 31 2d 62 79  size in the 1-by
2410: 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  te integer at of
2420: 66 73 65 74 20 32 30 20 69 73 20 74 68 65 20 6e  fset 20 is the n
2430: 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 6f  umber.of bytes o
2440: 66 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65  f space at the e
2450: 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  nd of each page 
2460: 74 6f 20 72 65 73 65 72 76 65 20 66 6f 72 20 65  to reserve for e
2470: 78 74 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20  xtensions..This 
2480: 76 61 6c 75 65 20 69 73 20 75 73 75 61 6c 6c 79  value is usually
2490: 20 30 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63   0.  The value c
24a0: 61 6e 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a  an be odd.</p>..
24b0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
24c0: 20 75 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73   usable_size {us
24d0: 61 62 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e  able size}</tcl>
24e0: 0a 3c 70 3e 54 68 65 20 22 75 73 61 62 6c 65 20  .<p>The "usable 
24f0: 73 69 7a 65 22 20 6f 66 20 61 20 64 61 74 61 62  size" of a datab
2500: 61 73 65 20 70 61 67 65 20 69 73 20 74 68 65 20  ase page is the 
2510: 70 61 67 65 20 73 69 7a 65 20 73 70 65 63 69 66  page size specif
2520: 79 20 62 79 20 74 68 65 0a 32 2d 62 79 74 65 20  y by the.2-byte 
2530: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
2540: 74 20 31 36 20 69 6e 20 74 68 65 20 68 65 61 64  t 16 in the head
2550: 65 72 20 6c 65 73 73 20 74 68 65 20 22 72 65 73  er less the "res
2560: 65 72 76 65 64 22 20 73 70 61 63 65 20 73 69 7a  erved" space siz
2570: 65 0a 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68  e.recorded in th
2580: 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72  e 1-byte integer
2590: 20 61 74 20 6f 66 66 73 65 74 20 32 30 20 69 6e   at offset 20 in
25a0: 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54 68   the header.  Th
25b0: 65 20 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66  e usable.size of
25c0: 20 61 20 70 61 67 65 20 6d 69 67 68 74 20 62 65   a page might be
25d0: 20 61 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20   an odd number. 
25e0: 20 5e 28 48 6f 77 65 76 65 72 2c 20 74 68 65 20   ^(However, the 
25f0: 75 73 61 62 6c 65 20 73 69 7a 65 20 69 73 20 6e  usable size is n
2600: 6f 74 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ot.allowed to be
2610: 20 6c 65 73 73 20 74 68 61 6e 20 34 38 30 2e 20   less than 480. 
2620: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2630: 20 69 66 20 74 68 65 20 70 61 67 65 20 73 69 7a   if the page siz
2640: 65 20 69 73 20 35 31 32 2c 0a 74 68 65 6e 20 74  e is 512,.then t
2650: 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61 63  he reserved spac
2660: 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65 78  e size cannot ex
2670: 63 65 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a  ceed 32.)^</p>..
2680: 3c 68 34 3e 31 2e 32 2e 35 20 50 61 79 6c 6f 61  <h4>1.2.5 Payloa
2690: 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f 68 34 3e  d fractions</h4>
26a0: 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75  ..<p>^The maximu
26b0: 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20 65 6d  m and minimum em
26c0: 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20 66  bedded payload f
26d0: 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74 68 65  ractions and the
26e0: 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20 66 72   leaf.payload fr
26f0: 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20 6d 75  action values mu
2700: 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20 61 6e  st be 64, 32, an
2710: 64 20 33 32 2e 20 20 54 68 65 73 65 20 76 61 6c  d 32.  These val
2720: 75 65 73 20 77 65 72 65 0a 6f 72 69 67 69 6e 61  ues were.origina
2730: 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  lly intended to 
2740: 62 65 20 74 75 6e 61 62 6c 65 20 70 61 72 61 6d  be tunable param
2750: 65 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c 64  eters that could
2760: 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64 69   be used to.modi
2770: 66 79 20 74 68 65 20 73 74 6f 72 61 67 65 20 66  fy the storage f
2780: 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d 74  ormat of the b-t
2790: 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20 20  ree algorithm.  
27a0: 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66 75  However, that.fu
27b0: 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 6e  nctionality is n
27c0: 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e 64  ot supported and
27d0: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63 75   there are no cu
27e0: 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20 61  rrent plans to a
27f0: 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74 68  dd.support in th
2800: 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63 65  e future.  Hence
2810: 2c 20 74 68 65 73 65 20 74 68 72 65 65 20 62 79  , these three by
2820: 74 65 73 20 61 72 65 20 66 69 78 65 64 20 61 74  tes are fixed at
2830: 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65 63   the.values spec
2840: 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  ified.</p>..<h4>
2850: 31 2e 32 2e 36 20 46 69 6c 65 20 63 68 61 6e 67  1.2.6 File chang
2860: 65 20 63 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a 0a  e counter</h4>..
2870: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2880: 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e 67 65   chngctr {change
2890: 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e 0a   counter}</tcl>.
28a0: 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63 68 61  <p>^The file cha
28b0: 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 61  nge counter is a
28c0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
28d0: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 0a 6f 66  an integer at.of
28e0: 66 73 65 74 20 32 34 20 74 68 61 74 20 69 73 20  fset 24 that is 
28f0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
2900: 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
2910: 65 20 66 69 6c 65 20 69 73 20 75 6e 6c 6f 63 6b  e file is unlock
2920: 65 64 0a 61 66 74 65 72 20 68 61 76 69 6e 67 20  ed.after having 
2930: 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2e 0a 57  been modified..W
2940: 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  hen two or more 
2950: 70 72 6f 63 65 73 73 65 73 20 61 72 65 20 72 65  processes are re
2960: 61 64 69 6e 67 20 74 68 65 20 73 61 6d 65 20 64  ading the same d
2970: 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 65 61  atabase file, ea
2980: 63 68 20 0a 70 72 6f 63 65 73 73 20 63 61 6e 20  ch .process can 
2990: 64 65 74 65 63 74 20 64 61 74 61 62 61 73 65 20  detect database 
29a0: 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f 74 68  changes from oth
29b0: 65 72 20 70 72 6f 63 65 73 73 65 73 20 62 79 20  er processes by 
29c0: 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68 65 20  monitoring .the 
29d0: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 2e 0a  change counter..
29e0: 41 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 20 6e  A process will n
29f0: 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74 6f 20  ormally want to 
2a00: 66 6c 75 73 68 20 69 74 73 20 64 61 74 61 62 61  flush its databa
2a10: 73 65 20 70 61 67 65 20 63 61 63 68 65 20 77 68  se page cache wh
2a20: 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  en.another proce
2a30: 73 73 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20  ss modified the 
2a40: 64 61 74 61 62 61 73 65 2c 20 73 69 6e 63 65 20  database, since 
2a50: 74 68 65 20 63 61 63 68 65 20 68 61 73 20 62 65  the cache has be
2a60: 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68 65 20  come stale..The 
2a70: 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e  file change coun
2a80: 74 65 72 20 66 61 63 69 6c 69 74 61 74 65 73 20  ter facilitates 
2a90: 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  this.</p>..<p>In
2aa0: 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61 6e 67   WAL mode, chang
2ab0: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
2ac0: 73 65 20 61 72 65 20 64 65 74 65 63 74 65 64 20  se are detected 
2ad0: 75 73 69 6e 67 20 74 68 65 20 77 61 6c 2d 69 6e  using the wal-in
2ae0: 64 65 78 0a 61 6e 64 20 73 6f 20 74 68 65 20 63  dex.and so the c
2af0: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2b00: 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20 48 65   not needed.  He
2b10: 6e 63 65 2c 20 74 68 65 20 63 68 61 6e 67 65 20  nce, the change 
2b20: 63 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a 6e 6f  counter might.no
2b30: 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  t be incremented
2b40: 20 6f 6e 20 65 61 63 68 20 74 72 61 6e 73 61 63   on each transac
2b50: 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f 64 65  tion in WAL mode
2b60: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 37  .</p>..<h4>1.2.7
2b70: 20 49 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   In-header datab
2b80: 61 73 65 20 73 69 7a 65 3c 2f 68 34 3e 0a 0a 3c  ase size</h4>..<
2b90: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2ba0: 66 69 6c 65 73 69 7a 65 20 7b 69 6e 2d 68 65 61  filesize {in-hea
2bb0: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2bc0: 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  e}</tcl>.<p>^The
2bd0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
2be0: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
2bf0: 66 73 65 74 20 32 38 20 69 6e 74 6f 20 74 68 65  fset 28 into the
2c00: 20 68 65 61 64 65 72 20 0a 73 74 6f 72 65 73 20   header .stores 
2c10: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
2c20: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e  database file in
2c30: 20 70 61 67 65 73 2e 20 20 5e 49 66 20 74 68 69   pages.  ^If thi
2c40: 73 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61  s in-header.data
2c50: 73 69 7a 65 20 73 69 7a 65 20 69 73 20 6e 6f 74  size size is not
2c60: 20 76 61 6c 69 64 20 28 73 65 65 20 74 68 65 20   valid (see the 
2c70: 6e 65 78 74 20 70 61 72 61 67 72 61 70 68 29 2c  next paragraph),
2c80: 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
2c90: 73 65 20 0a 73 69 7a 65 20 69 73 20 63 6f 6d 70  se .size is comp
2ca0: 75 74 65 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 0a  uted by looking.
2cb0: 61 74 20 74 68 65 20 61 63 74 75 61 6c 20 73 69  at the actual si
2cc0: 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
2cd0: 73 65 20 66 69 6c 65 2e 20 4f 6c 64 65 72 20 76  se file. Older v
2ce0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2cf0: 65 0a 69 67 6e 6f 72 65 64 20 74 68 65 20 69 6e  e.ignored the in
2d00: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
2d10: 20 73 69 7a 65 20 61 6e 64 20 75 73 65 64 20 74   size and used t
2d20: 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20 73  he actual file s
2d30: 69 7a 65 0a 65 78 63 6c 75 73 69 76 65 6c 79 2e  ize.exclusively.
2d40: 20 20 5e 4e 65 77 65 72 20 76 65 72 73 69 6f 6e    ^Newer version
2d50: 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 20  s of SQLite use 
2d60: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  the in-header da
2d70: 74 61 62 61 73 65 0a 73 69 7a 65 20 69 66 20 69  tabase.size if i
2d80: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 62  t is available b
2d90: 75 74 20 66 61 6c 6c 20 62 61 63 6b 20 74 6f 20  ut fall back to 
2da0: 74 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20  the actual file 
2db0: 73 69 7a 65 20 69 66 0a 74 68 65 20 69 6e 2d 68  size if.the in-h
2dc0: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
2dd0: 69 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c 69 64  ize is not valid
2de0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 69  .</p>..<p>^The i
2df0: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2e00: 65 20 73 69 7a 65 20 69 73 20 6f 6e 6c 79 20 63  e size is only c
2e10: 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
2e20: 76 61 6c 69 64 20 69 66 0a 69 74 20 69 73 20 6e  valid if.it is n
2e30: 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 69 66 20 74  on-zero and if t
2e40: 68 65 20 34 2d 62 79 74 65 20 5b 63 68 61 6e 67  he 4-byte [chang
2e50: 65 20 63 6f 75 6e 74 65 72 5d 20 61 74 20 6f 66  e counter] at of
2e60: 66 73 65 74 20 32 34 0a 65 78 61 63 74 6c 79 20  fset 24.exactly 
2e70: 6d 61 74 63 68 65 73 20 74 68 65 20 34 2d 62 79  matches the 4-by
2e80: 74 65 20 5b 76 65 72 73 69 6f 6e 2d 76 61 6c 69  te [version-vali
2e90: 64 2d 66 6f 72 20 6e 75 6d 62 65 72 5d 20 61 74  d-for number] at
2ea0: 20 6f 66 66 73 65 74 20 39 32 2e 0a 5e 28 54 68   offset 92..^(Th
2eb0: 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61  e in-header data
2ec0: 62 61 73 65 20 73 69 7a 65 20 69 73 20 61 6c 77  base size is alw
2ed0: 61 79 73 20 76 61 6c 69 64 20 0a 77 68 65 6e 20  ays valid .when 
2ee0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2ef0: 6f 6e 6c 79 20 6d 6f 64 69 66 69 65 64 20 75 73  only modified us
2f00: 69 6e 67 20 72 65 63 65 6e 74 20 76 65 72 73 69  ing recent versi
2f10: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 28 76  ons of SQLite.(v
2f20: 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30 20 61 6e  ersions 3.7.0 an
2f30: 64 20 6c 61 74 65 72 29 2e 29 5e 0a 49 66 20 61  d later).)^.If a
2f40: 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e 20   legacy version 
2f50: 6f 66 20 53 51 4c 69 74 65 20 77 72 69 74 65 73  of SQLite writes
2f60: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2f70: 2c 20 69 74 20 77 69 6c 6c 20 6e 6f 74 0a 6b 6e  , it will not.kn
2f80: 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  ow to update the
2f90: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2fa0: 61 73 65 20 73 69 7a 65 20 61 6e 64 20 73 6f 20  ase size and so 
2fb0: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 0a 64 61  the in-header.da
2fc0: 74 61 62 61 73 65 20 73 69 7a 65 20 63 6f 75 6c  tabase size coul
2fd0: 64 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20  d be incorrect. 
2fe0: 20 42 75 74 20 6c 65 67 61 63 79 20 76 65 72 73   But legacy vers
2ff0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 77  ions of SQLite.w
3000: 69 6c 6c 20 61 6c 73 6f 20 6c 65 61 76 65 20 74  ill also leave t
3010: 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  he version-valid
3020: 2d 66 6f 72 20 6e 75 6d 62 65 72 20 61 74 20 6f  -for number at o
3030: 66 66 73 65 74 20 39 32 20 75 6e 63 68 61 6e 67  ffset 92 unchang
3040: 65 64 0a 73 6f 20 69 74 20 77 69 6c 6c 20 6e 6f  ed.so it will no
3050: 74 20 6d 61 74 63 68 20 74 68 65 20 63 68 61 6e  t match the chan
3060: 67 65 2d 63 6f 75 6e 74 65 72 2e 20 20 48 65 6e  ge-counter.  Hen
3070: 63 65 2c 20 69 6e 76 61 6c 69 64 20 69 6e 2d 68  ce, invalid in-h
3080: 65 61 64 65 72 0a 64 61 74 61 62 61 73 65 20 73  eader.database s
3090: 69 7a 65 73 20 63 61 6e 20 62 65 20 64 65 74 65  izes can be dete
30a0: 63 74 65 64 20 28 61 6e 64 20 69 67 6e 6f 72 65  cted (and ignore
30b0: 64 29 20 62 79 20 6f 62 73 65 72 76 69 6e 67 20  d) by observing 
30c0: 77 68 65 6e 0a 74 68 65 20 63 68 61 6e 67 65 2d  when.the change-
30d0: 63 6f 75 6e 74 65 72 20 64 6f 65 73 20 6e 6f 74  counter does not
30e0: 20 6d 61 74 63 68 20 74 68 65 20 76 65 72 73 69   match the versi
30f0: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
3100: 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  ber.</p>..<h4>1.
3110: 32 2e 38 20 46 72 65 65 20 70 61 67 65 20 6c 69  2.8 Free page li
3120: 73 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 55 6e 75 73  st</h4>..<p>Unus
3130: 65 64 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ed pages in the 
3140: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 72  database file ar
3150: 65 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 66 72  e stored on a fr
3160: 65 65 6c 69 73 74 2e 20 20 5e 54 68 65 0a 34 2d  eelist.  ^The.4-
3170: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3180: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3190: 74 20 33 32 20 73 74 6f 72 65 73 20 74 68 65 20  t 32 stores the 
31a0: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 0a 74  page number of.t
31b0: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66  he first page of
31c0: 20 74 68 65 20 66 72 65 65 6c 69 73 74 2c 20 6f   the freelist, o
31d0: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66 72  r zero if the fr
31e0: 65 65 6c 69 73 74 20 69 73 20 65 6d 70 74 79 2e  eelist is empty.
31f0: 0a 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  .^The 4-byte big
3200: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3210: 61 74 20 6f 66 66 73 65 74 20 33 36 20 73 74 6f  at offset 36 sto
3220: 72 65 73 20 73 74 6f 72 65 73 20 74 68 65 20 74  res stores the t
3230: 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20 6f 66 20  otal .number of 
3240: 70 61 67 65 73 20 6f 6e 20 74 68 65 20 66 72 65  pages on the fre
3250: 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  elist.</p>..<h4>
3260: 31 2e 32 2e 39 20 53 63 68 65 6d 61 20 63 6f 6f  1.2.9 Schema coo
3270: 6b 69 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68  kie</h4>..<p>^Th
3280: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
3290: 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  is a 4-byte big-
32a0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
32b0: 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68 61 74  t offset 40.that
32c0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
32d0: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
32e0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
32f0: 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70 61 72  nges.  A .prepar
3300: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
3310: 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74  compiled against
3320: 20 61 20 73 70 65 63 69 66 69 63 20 76 65 72 73   a specific vers
3330: 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74 61 62  ion of the.datab
3340: 61 73 65 20 73 63 68 65 6d 61 2e 20 20 57 68 65  ase schema.  Whe
3350: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
3360: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
3370: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 6d 75 73  he statement.mus
3380: 74 20 62 65 20 72 65 70 72 65 70 61 72 65 64 2e  t be reprepared.
3390: 20 20 5e 57 68 65 6e 20 61 20 70 72 65 70 61 72    ^When a prepar
33a0: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e  ed statement run
33b0: 73 2c 20 69 74 20 66 69 72 73 74 20 63 68 65 63  s, it first chec
33c0: 6b 73 0a 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks.the schema co
33d0: 6f 6b 69 65 20 74 6f 20 65 6e 73 75 72 65 20 74  okie to ensure t
33e0: 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  he value is the 
33f0: 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65  same as when the
3400: 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20 70   statement.was p
3410: 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20 74  repared and if t
3420: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
3430: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74 68   has changed, th
3440: 65 20 73 74 61 74 65 6d 65 6e 74 20 65 69 74 68  e statement eith
3450: 65 72 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  er.automatically
3460: 20 72 65 70 72 65 70 61 72 65 73 20 61 6e 64 20   reprepares and 
3470: 72 65 72 75 6e 73 20 6f 72 20 69 74 20 61 62 6f  reruns or it abo
3480: 72 74 73 20 77 69 74 68 20 61 6e 20 5b 53 51 4c  rts with an [SQL
3490: 49 54 45 5f 53 43 48 45 4d 41 5d 20 0a 65 72 72  ITE_SCHEMA] .err
34a0: 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  or.</p>..<tcl>hd
34b0: 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68 65 6d  _fragment {schem
34c0: 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61  aformat} {schema
34d0: 20 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61   format} {schema
34e0: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 7d 3c   format number}<
34f0: 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 30  /tcl>.<h4>1.2.10
3500: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e   Schema format n
3510: 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  umber</h4>..<p>T
3520: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  he schema format
3530: 20 6e 75 6d 62 65 72 20 69 73 20 61 20 34 2d 62   number is a 4-b
3540: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
3550: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3560: 20 34 34 2e 0a 54 68 65 20 73 63 68 65 6d 61 20   44..The schema 
3570: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20 69 73  format number is
3580: 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20   similar to the 
3590: 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65 61 64  file format read
35a0: 20 61 6e 64 20 77 72 69 74 65 0a 76 65 72 73 69   and write.versi
35b0: 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74 20 6f 66  on numbers at of
35c0: 66 73 65 74 73 20 31 38 20 61 6e 64 20 31 39 20  fsets 18 and 19 
35d0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
35e0: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
35f0: 6d 62 65 72 0a 72 65 66 65 72 73 20 74 6f 20 74  mber.refers to t
3600: 68 65 20 68 69 67 68 2d 6c 65 76 65 6c 20 53 51  he high-level SQ
3610: 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20 72 61 74  L formatting rat
3620: 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 6f 77  her than the low
3630: 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 0a 66 6f  -level b-tree.fo
3640: 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f 75 72 20  rmatting.  Four 
3650: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
3660: 6d 62 65 72 73 20 61 72 65 20 63 75 72 72 65 6e  mbers are curren
3670: 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c 2f 70 3e  tly defined:</p>
3680: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c 75 65  ..<ol>.<li value
3690: 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69 73 20 75  =1>Format 1 is u
36a0: 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 61 6c 6c  nderstood by all
36b0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
36c0: 69 74 65 20 62 61 63 6b 20 74 6f 0a 76 65 72 73  ite back to.vers
36d0: 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f 6c 69 3e 0a  ion 3.0.0.</li>.
36e0: 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46 6f 72 6d  <li value=2>Form
36f0: 61 74 20 32 20 61 64 64 73 20 74 68 65 20 61 62  at 2 adds the ab
3700: 69 6c 69 74 79 20 6f 66 20 72 6f 77 73 20 77 69  ility of rows wi
3710: 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 74 61  thin the same ta
3720: 62 6c 65 0a 74 6f 20 68 61 76 65 20 61 20 76 61  ble.to have a va
3730: 72 79 69 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20  rying number of 
3740: 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72 64 65  columns, in orde
3750: 72 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65  r to support the
3760: 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 20 7c 20  .[ALTER TABLE | 
3770: 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20  ALTER TABLE ... 
3780: 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66 75 6e 63  ADD COLUMN] func
3790: 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53 75 70 70  tionality.  Supp
37a0: 6f 72 74 20 66 6f 72 0a 72 65 61 64 69 6e 67 20  ort for.reading 
37b0: 61 6e 64 20 77 72 69 74 69 6e 67 20 66 6f 72 6d  and writing form
37c0: 61 74 20 32 20 77 61 73 20 61 64 64 65 64 20 69  at 2 was added i
37d0: 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  n SQLite version
37e0: 20 33 2e 31 2e 33 20 0a 6f 6e 20 32 30 30 35 2d   3.1.3 .on 2005-
37f0: 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20  02-19.</li>.<li 
3800: 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74 20 33  value=3>Format 3
3810: 20 61 64 64 73 20 74 68 65 20 61 62 69 6c 69 74   adds the abilit
3820: 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c 75 6d  y of extra colum
3830: 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41 4c 54  ns added by.[ALT
3840: 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54 45 52  ER TABLE | ALTER
3850: 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43   TABLE ... ADD C
3860: 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65 20 6e  OLUMN] to have n
3870: 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 0a  on-NULL default.
3880: 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20 63 61  values.  This ca
3890: 70 61 62 69 6c 69 74 79 20 77 61 73 20 61 64 64  pability was add
38a0: 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72  ed in SQLite ver
38b0: 73 69 6f 6e 20 33 2e 31 2e 34 20 0a 6f 6e 20 32  sion 3.1.4 .on 2
38c0: 30 30 35 2d 30 33 2d 31 31 2e 3c 2f 6c 69 3e 0a  005-03-11.</li>.
38d0: 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e 46 6f 72  <li value=4>^For
38e0: 6d 61 74 20 34 20 63 61 75 73 65 73 20 53 51 4c  mat 4 causes SQL
38f0: 69 74 65 20 74 6f 20 72 65 73 70 65 63 74 20 74  ite to respect t
3900: 68 65 0a 5b 64 65 73 63 65 6e 64 69 6e 67 20 69  he.[descending i
3910: 6e 64 65 78 65 73 20 7c 20 44 45 53 43 20 6b 65  ndexes | DESC ke
3920: 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e 64 65 78 20  yword] on.index 
3930: 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20 20 28  declarations.  (
3940: 5e 54 68 65 20 44 45 53 43 20 6b 65 79 77 6f 72  ^The DESC keywor
3950: 64 20 69 73 20 69 67 6e 6f 72 65 64 20 69 6e 20  d is ignored in 
3960: 69 6e 64 65 78 65 73 20 66 6f 72 20 0a 66 6f 72  indexes for .for
3970: 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e 64 20 33  mats 1, 2, and 3
3980: 2e 29 0a 5e 46 6f 72 6d 61 74 20 34 20 61 6c 73  .).^Format 4 als
3990: 6f 20 61 64 64 73 20 74 77 6f 20 6e 65 77 20 62  o adds two new b
39a0: 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64 20 74 79  oolean record ty
39b0: 70 65 20 76 61 6c 75 65 73 20 28 5b 73 65 72 69  pe values ([seri
39c0: 61 6c 20 74 79 70 65 73 5d 0a 38 20 61 6e 64 20  al types].8 and 
39d0: 39 29 2e 20 20 53 75 70 70 6f 72 74 20 66 6f 72  9).  Support for
39e0: 20 66 6f 72 6d 61 74 20 34 20 77 61 73 20 61 64   format 4 was ad
39f0: 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 33 2e  ded in SQLite 3.
3a00: 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30 31 2d 31  3.0 on.2006-01-1
3a10: 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c  0.</li>.</ol>..<
3a20: 70 3e 5e 4e 65 77 20 64 61 74 61 62 61 73 65 20  p>^New database 
3a30: 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 62 79  files created by
3a40: 20 53 51 4c 69 74 65 20 75 73 65 20 66 6f 72 6d   SQLite use form
3a50: 61 74 20 34 20 62 79 20 64 65 66 61 75 6c 74 2e  at 4 by default.
3a60: 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f 66 69  .^The [legacy_fi
3a70: 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d 61  le_format pragma
3a80: 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  ] can be used to
3a90: 20 63 61 75 73 65 20 53 51 4c 69 74 65 0a 74 6f   cause SQLite.to
3aa0: 20 63 72 65 61 74 65 20 6e 65 77 20 64 61 74 61   create new data
3ab0: 62 61 73 65 20 66 69 6c 65 73 20 75 73 69 6e 67  base files using
3ac0: 20 66 6f 72 6d 61 74 20 31 2e 0a 54 68 65 20 66   format 1..The f
3ad0: 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e 75  ormat version nu
3ae0: 6d 62 65 72 20 63 61 6e 20 62 65 20 6d 61 64 65  mber can be made
3af0: 20 74 6f 20 64 65 66 61 75 6c 74 20 74 6f 20 31   to default to 1
3b00: 20 69 6e 73 74 65 61 64 20 6f 66 20 34 20 62 79   instead of 4 by
3b10: 0a 73 65 74 74 69 6e 67 20 5b 53 51 4c 49 54 45  .setting [SQLITE
3b20: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
3b30: 52 4d 41 54 5d 3d 31 20 61 74 20 63 6f 6d 70 69  RMAT]=1 at compi
3b40: 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c  le-time..</p>..<
3b50: 68 34 3e 31 2e 32 2e 31 31 20 53 75 67 67 65 73  h4>1.2.11 Sugges
3b60: 74 65 64 20 63 61 63 68 65 20 73 69 7a 65 3c 2f  ted cache size</
3b70: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79  h4>..<p>The 4-by
3b80: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 73 69  te big-endian si
3b90: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61 74 20  gned integer at 
3ba0: 6f 66 66 73 65 74 20 34 38 20 69 73 20 74 68 65  offset 48 is the
3bb0: 20 73 75 67 67 65 73 74 65 64 0a 63 61 63 68 65   suggested.cache
3bc0: 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73 20 66   size in pages f
3bd0: 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
3be0: 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c 75 65  file.  The value
3bf0: 20 69 73 20 61 20 73 75 67 67 65 73 74 69 6f 6e   is a suggestion
3c00: 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69 74 65  .only and SQLite
3c10: 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f 62 6c   is under no obl
3c20: 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72  igation to honor
3c30: 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f 6c 75   it.  The absolu
3c40: 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68 65 20  te value.of the 
3c50: 69 6e 74 65 67 65 72 20 69 73 20 75 73 65 64 20  integer is used 
3c60: 61 73 20 74 68 65 20 73 75 67 67 65 73 74 65 64  as the suggested
3c70: 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75 67 67   size.  The sugg
3c80: 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65  ested cache size
3c90: 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73 69 6e  .can be set usin
3ca0: 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74 5f 63  g the [default_c
3cb0: 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d 61  ache_size pragma
3cc0: 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  ].</p>..<h4>1.2.
3cd0: 31 32 20 49 6e 63 72 65 6d 65 6e 74 61 6c 20 76  12 Incremental v
3ce0: 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73 3c 2f  acuum settings</
3cf0: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 74 77 6f 20  h4>..<p>The two 
3d00: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
3d10: 6e 20 69 6e 74 65 67 65 72 73 20 61 74 20 6f 66  n integers at of
3d20: 66 73 65 74 73 20 35 32 20 61 6e 64 20 36 34 20  fsets 52 and 64 
3d30: 61 72 65 20 75 73 65 64 0a 74 6f 20 6d 61 6e 61  are used.to mana
3d40: 67 65 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63  ge the [auto_vac
3d50: 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d  uum] and [increm
3d60: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f  ental_vacuum] mo
3d70: 64 65 73 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e  des.  ^If.the in
3d80: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3d90: 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e 20  52 is zero then 
3da0: 70 6f 69 6e 74 65 72 2d 6d 61 70 20 28 70 74 72  pointer-map (ptr
3db0: 6d 61 70 29 20 70 61 67 65 73 20 61 72 65 0a 6f  map) pages are.o
3dc0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
3dd0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
3de0: 64 20 6e 65 69 74 68 65 72 20 61 75 74 6f 5f 76  d neither auto_v
3df0: 61 63 75 75 6d 20 6e 6f 72 0a 69 6e 63 72 65 6d  acuum nor.increm
3e00: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61 72 65  ental_vacuum are
3e10: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 5e 49 66   supported.  ^If
3e20: 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   the integer at 
3e30: 6f 66 66 73 65 74 20 35 32 20 69 73 0a 6e 6f 6e  offset 52 is.non
3e40: 2d 7a 65 72 6f 20 74 68 65 6e 20 69 74 20 69 73  -zero then it is
3e50: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
3e60: 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   of the largest 
3e70: 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
3e80: 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20  .database file, 
3e90: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3ea0: 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 70  e will contain p
3eb0: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6e 64  trmap pages, and
3ec0: 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62   the.mode must b
3ed0: 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61  e either auto_va
3ee0: 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e  cuum or incremen
3ef0: 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 5e 49 6e  tal_vacuum.  ^In
3f00: 20 74 68 69 73 20 6c 61 74 74 65 72 0a 63 61 73   this latter.cas
3f10: 65 2c 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  e, the integer a
3f20: 74 20 6f 66 66 73 65 74 20 36 34 20 69 73 20 74  t offset 64 is t
3f30: 72 75 65 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e  rue for incremen
3f40: 74 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66  tal_vacuum and.f
3f50: 61 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f 76 61  alse for auto_va
3f60: 63 75 75 6d 2e 20 20 5e 49 66 20 74 68 65 20 69  cuum.  ^If the i
3f70: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3f80: 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e   52 is zero then
3f90: 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20  .the integer at 
3fa0: 6f 66 66 73 65 74 20 36 34 20 6d 75 73 74 20 61  offset 64 must a
3fb0: 6c 73 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e  lso be zero.</p>
3fc0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
3fd0: 6e 74 20 65 6e 63 20 7b 74 65 78 74 20 65 6e 63  nt enc {text enc
3fe0: 6f 64 69 6e 67 7d 3c 2f 74 63 6c 3e 0a 3c 68 34  oding}</tcl>.<h4
3ff0: 3e 31 2e 32 2e 31 33 20 54 65 78 74 20 65 6e 63  >1.2.13 Text enc
4000: 6f 64 69 6e 67 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e  oding</h4>..<p>^
4010: 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65  The 4-byte big-e
4020: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
4030: 20 6f 66 66 73 65 74 20 35 36 20 64 65 74 65 72   offset 56 deter
4040: 6d 69 6e 65 73 20 74 68 65 20 65 6e 63 6f 64 69  mines the encodi
4050: 6e 67 0a 75 73 65 64 20 66 6f 72 20 61 6c 6c 20  ng.used for all 
4060: 74 65 78 74 20 73 74 72 69 6e 67 73 20 73 74 6f  text strings sto
4070: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
4080: 61 73 65 2e 20 20 0a 5e 41 20 76 61 6c 75 65 20  ase.  .^A value 
4090: 6f 66 20 31 20 6d 65 61 6e 73 20 55 54 46 2d 38  of 1 means UTF-8
40a0: 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20  ..^A value of 2 
40b0: 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e 0a  means UTF-16le..
40c0: 5e 41 20 76 61 6c 75 65 20 6f 66 20 33 20 6d 65  ^A value of 3 me
40d0: 61 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a 4e 6f  ans UTF-16be..No
40e0: 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61 72   other values ar
40f0: 65 20 61 6c 6c 6f 77 65 64 2e 0a 5e 28 54 68 65  e allowed..^(The
4100: 20 73 71 6c 69 74 65 33 2e 68 20 68 65 61 64 65   sqlite3.h heade
4110: 72 20 66 69 6c 65 20 64 65 66 69 6e 65 73 20 43  r file defines C
4120: 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61  -preprocessor ma
4130: 63 72 6f 73 20 53 51 4c 49 54 45 5f 55 54 46 38  cros SQLITE_UTF8
4140: 20 61 73 20 31 2c 0a 53 51 4c 49 54 45 5f 55 54   as 1,.SQLITE_UT
4150: 46 31 36 4c 45 20 61 73 20 32 2c 20 61 6e 64 20  F16LE as 2, and 
4160: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 61  SQLITE_UTF16BE a
4170: 73 20 33 2c 20 74 6f 20 75 73 65 20 69 6e 20 70  s 3, to use in p
4180: 6c 61 63 65 20 6f 66 0a 74 68 65 20 6e 75 6d 65  lace of.the nume
4190: 72 69 63 20 63 6f 64 65 73 20 66 6f 72 20 74 68  ric codes for th
41a0: 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e  e text encoding.
41b0: 29 5e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  )^</p>..<h4>1.2.
41c0: 31 34 20 55 73 65 72 20 76 65 72 73 69 6f 6e 20  14 User version 
41d0: 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e  number</h4>..<p>
41e0: 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  ^The 4-byte big-
41f0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
4200: 74 20 6f 66 66 73 65 74 20 36 30 20 69 73 20 74  t offset 60 is t
4210: 68 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20  he user version 
4220: 77 68 69 63 68 0a 69 73 20 73 65 74 20 61 6e 64  which.is set and
4230: 20 71 75 65 72 69 65 64 20 62 79 20 74 68 65 20   queried by the 
4240: 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70 72  [user_version pr
4250: 61 67 6d 61 5d 2e 20 20 54 68 65 20 75 73 65 72  agma].  The user
4260: 20 76 65 72 73 69 6f 6e 20 69 73 0a 6e 6f 74 20   version is.not 
4270: 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 2e 3c  used by SQLite.<
4280: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
4290: 67 6d 65 6e 74 20 61 70 70 69 64 20 7b 41 70 70  gment appid {App
42a0: 6c 69 63 61 74 69 6f 6e 20 49 44 7d 3c 2f 74 63  lication ID}</tc
42b0: 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 35 20 41 70  l>.<h4>1.2.15 Ap
42c0: 70 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f 68 34  plication ID</h4
42d0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
42e0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
42f0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36  eger at offset 6
4300: 38 20 69 73 20 61 6e 20 22 41 70 70 6c 69 63 61  8 is an "Applica
4310: 74 69 6f 6e 20 49 44 22 20 74 68 61 74 0a 63 61  tion ID" that.ca
4320: 6e 20 62 65 20 73 65 74 20 62 79 20 74 68 65 20  n be set by the 
4330: 5b 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74  [PRAGMA applicat
4340: 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e 64 20  ion_id] command 
4350: 69 6e 20 6f 72 64 65 72 20 74 6f 20 69 64 65 6e  in order to iden
4360: 74 69 66 79 20 74 68 65 0a 64 61 74 61 62 61 73  tify the.databas
4370: 65 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74  e as belonging t
4380: 6f 20 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20  o or associated 
4390: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
43a0: 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 54  r application..T
43b0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49  he application I
43c0: 44 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  D is intended fo
43d0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
43e0: 20 75 73 65 64 20 61 73 20 61 6e 0a 5b 61 70 70   used as an.[app
43f0: 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d 66 6f  lication file-fo
4400: 72 6d 61 74 5d 2e 20 20 54 68 65 20 61 70 70 6c  rmat].  The appl
4410: 69 63 61 74 69 6f 6e 20 49 44 20 63 61 6e 20 62  ication ID can b
4420: 65 20 75 73 65 64 20 62 79 20 75 74 69 6c 69 74  e used by utilit
4430: 69 65 73 20 0a 73 75 63 68 20 61 73 20 5b 68 74  ies .such as [ht
4440: 74 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69 6e 73  tp://www.darwins
4450: 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c 20 66  ys.com/file/ | f
4460: 69 6c 65 28 31 29 5d 20 74 6f 20 64 65 74 65 72  ile(1)] to deter
4470: 6d 69 6e 65 20 74 68 65 20 73 70 65 63 69 66 69  mine the specifi
4480: 63 0a 66 69 6c 65 20 74 79 70 65 20 72 61 74 68  c.file type rath
4490: 65 72 20 74 68 61 6e 20 6a 75 73 74 20 72 65 70  er than just rep
44a0: 6f 72 74 69 6e 67 20 22 53 51 4c 69 74 65 33 20  orting "SQLite3 
44b0: 44 61 74 61 62 61 73 65 22 2e 20 20 41 20 6c 69  Database".  A li
44c0: 73 74 20 6f 66 0a 61 73 73 69 67 6e 65 64 20 61  st of.assigned a
44d0: 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 73 20 63  pplication IDs c
44e0: 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63 6f  an be seen by co
44f0: 6e 73 75 6c 74 69 6e 67 20 74 68 65 0a 5b 68 74  nsulting the.[ht
4500: 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e  tp://www.sqlite.
4510: 6f 72 67 2f 73 72 63 2f 61 72 74 69 66 61 63 74  org/src/artifact
4520: 3f 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e 61  ?ci=trunk&filena
4530: 6d 65 3d 6d 61 67 69 63 2e 74 78 74 7c 6d 61 67  me=magic.txt|mag
4540: 69 63 2e 74 78 74 5d 0a 66 69 6c 65 20 69 6e 20  ic.txt].file in 
4550: 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63  the SQLite sourc
4560: 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 3c 2f 70  e repository.</p
4570: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4580: 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76 65  ent validfor {ve
4590: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
45a0: 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68  number}</tcl>.<h
45b0: 34 3e 31 2e 32 2e 31 36 20 57 72 69 74 65 20 6c  4>1.2.16 Write l
45c0: 69 62 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e  ibrary version n
45d0: 75 6d 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f  umber and versio
45e0: 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62  n-valid-for numb
45f0: 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65  er</h4>..<p>^The
4600: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
4610: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
4620: 66 73 65 74 20 39 36 20 73 74 6f 72 65 73 20 74  fset 96 stores t
4630: 68 65 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53  he .[SQLITE_VERS
4640: 49 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75  ION_NUMBER] valu
4650: 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  e for the SQLite
4660: 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f   library that mo
4670: 73 74 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69  st.recently modi
4680: 66 69 65 64 20 74 68 65 20 64 61 74 61 62 61 73  fied the databas
4690: 65 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d  e file.  ^The 4-
46a0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
46b0: 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65  integer at.offse
46c0: 74 20 39 32 20 69 73 20 74 68 65 20 76 61 6c 75  t 92 is the valu
46d0: 65 20 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65  e of the [change
46e0: 20 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74   counter] when t
46f0: 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  he version numbe
4700: 72 0a 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54  r.was stored.  T
4710: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
4720: 66 73 65 74 20 39 32 20 69 6e 64 69 63 61 74 65  fset 92 indicate
4730: 73 20 77 68 69 63 68 20 74 72 61 6e 73 61 63 74  s which transact
4740: 69 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20  ion.the version 
4750: 6e 75 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20  number is valid 
4760: 66 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74  for and is somet
4770: 69 6d 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a  imes called the.
4780: 22 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66  "version-valid-f
4790: 6f 72 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34  or number"...<h4
47a0: 3e 31 2e 32 2e 31 36 20 48 65 61 64 65 72 20 73  >1.2.16 Header s
47b0: 70 61 63 65 20 72 65 73 65 72 76 65 64 20 66 6f  pace reserved fo
47c0: 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e  r expansion</h4>
47d0: 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62  ..<p>All other b
47e0: 79 74 65 73 20 6f 66 20 74 68 65 20 64 61 74 61  ytes of the data
47f0: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
4800: 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66 6f   are reserved fo
4810: 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e 73 69  r.future expansi
4820: 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65 20 73  on and must be s
4830: 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a  et to zero.</p>.
4840: 0a 3c 68 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63  .<h3>1.3 The Loc
4850: 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68 33 3e  k-Byte Page</h3>
4860: 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79  ..<p>The lock-by
4870: 74 65 20 70 61 67 65 20 69 73 20 74 68 65 20 73  te page is the s
4880: 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74 68  ingle page of th
4890: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  e database file.
48a0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
48b0: 65 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65  e bytes at offse
48c0: 74 73 20 62 65 74 77 65 65 6e 20 31 30 37 33 37  ts between 10737
48d0: 34 31 38 32 34 20 61 6e 64 20 31 30 37 33 37 34  41824 and 107374
48e0: 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e  2335,.inclusive.
48f0: 20 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c    A database fil
4900: 65 20 74 68 61 74 20 69 73 20 6c 65 73 73 20 74  e that is less t
4910: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
4920: 31 30 37 33 37 34 31 38 32 34 20 62 79 74 65 73  1073741824 bytes
4930: 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69   .in size contai
4940: 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20  ns no lock-byte 
4950: 70 61 67 65 2e 20 20 41 20 64 61 74 61 62 61 73  page.  A databas
4960: 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68  e file larger th
4970: 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20 63 6f  an.1073741824 co
4980: 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79 20 6f  ntains exactly o
4990: 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  ne lock-byte pag
49a0: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  e..</p>..<p>The 
49b0: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69  lock-byte page i
49c0: 73 20 73 65 74 20 61 73 69 64 65 20 66 6f 72 20  s set aside for 
49d0: 75 73 65 20 62 79 20 74 68 65 20 6f 70 65 72 61  use by the opera
49e0: 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63  ting-system spec
49f0: 69 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65  ific.[VFS] imple
4a00: 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70  mentation in imp
4a10: 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61  lementing the da
4a20: 74 61 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b  tabase file lock
4a30: 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a  ing primitives..
4a40: 5e 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74  ^SQLite does not
4a50: 20 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79   use the lock-by
4a60: 74 65 20 70 61 67 65 2e 20 20 5e 54 68 65 20 53  te page.  ^The S
4a70: 51 4c 69 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c  QLite core .will
4a80: 20 6e 65 76 65 72 20 72 65 61 64 20 6f 72 20 77   never read or w
4a90: 72 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79  rite the lock-by
4aa0: 74 65 20 70 61 67 65 2c 0a 74 68 6f 75 67 68 20  te page,.though 
4ab0: 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d  operating-system
4ac0: 20 73 70 65 63 69 66 69 63 20 5b 56 46 53 5d 20   specific [VFS] 
4ad0: 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73  .implementations
4ae0: 20 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f 20 72   may choose to r
4af0: 65 61 64 20 6f 72 20 77 72 69 74 65 20 62 79 74  ead or write byt
4b00: 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62  es on the lock-b
4b10: 79 74 65 20 0a 70 61 67 65 20 61 63 63 6f 72 64  yte .page accord
4b20: 69 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64  ing to the .need
4b30: 73 20 61 6e 64 20 70 72 6f 63 6c 69 76 69 74 69  s and procliviti
4b40: 65 73 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c  es of the underl
4b50: 79 69 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68  ying system.  Th
4b60: 65 20 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32  e unix and win32
4b70: 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74  .[VFS] implement
4b80: 61 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65  ations that come
4b90: 20 62 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69   built into SQLi
4ba0: 74 65 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20  te do not write 
4bb0: 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65  to the.lock-byte
4bc0: 20 70 61 67 65 2c 20 62 75 74 20 74 68 69 72 64   page, but third
4bd0: 2d 70 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65  -party VFS imple
4be0: 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f  mentations for.o
4bf0: 74 68 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73  ther operating s
4c00: 79 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70  ystems might.</p
4c10: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4c20: 65 6e 74 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b  ent {freelist} {
4c30: 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d  freelist} {free-
4c40: 70 61 67 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e  page list}</tcl>
4c50: 0a 3c 68 33 3e 31 2e 34 20 54 68 65 20 46 72 65  .<h3>1.4 The Fre
4c60: 65 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41  elist</h3>..<p>A
4c70: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
4c80: 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 65  ight contain one
4c90: 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 73 20 74   or more pages t
4ca0: 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 0a 61  hat are not in.a
4cb0: 63 74 69 76 65 20 75 73 65 2e 20 20 55 6e 75 73  ctive use.  Unus
4cc0: 65 64 20 70 61 67 65 73 20 63 61 6e 20 63 6f 6d  ed pages can com
4cd0: 65 20 61 62 6f 75 74 2c 20 66 6f 72 20 65 78 61  e about, for exa
4ce0: 6d 70 6c 65 2c 20 77 68 65 6e 20 69 6e 66 6f 72  mple, when infor
4cf0: 6d 61 74 69 6f 6e 0a 69 73 20 64 65 6c 65 74 65  mation.is delete
4d00: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
4d10: 61 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67  ase.  Unused pag
4d20: 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  es are stored on
4d30: 20 74 68 65 20 66 72 65 65 6c 69 73 74 0a 61 6e   the freelist.an
4d40: 64 20 61 72 65 20 72 65 75 73 65 64 20 77 68 65  d are reused whe
4d50: 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 67  n additional pag
4d60: 65 73 20 61 72 65 20 72 65 71 75 69 72 65 64 2e  es are required.
4d70: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 72 65  </p>..<p>The fre
4d80: 65 6c 69 73 74 20 69 73 20 6f 72 67 61 6e 69 7a  elist is organiz
4d90: 65 64 20 61 73 20 61 20 6c 69 6e 6b 65 64 20 6c  ed as a linked l
4da0: 69 73 74 20 6f 66 20 66 72 65 65 6c 69 73 74 20  ist of freelist 
4db0: 74 72 75 6e 6b 20 70 61 67 65 73 0a 77 69 74 68  trunk pages.with
4dc0: 20 65 61 63 68 20 74 72 75 6e 6b 20 70 61 67 65   each trunk page
4dd0: 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 61 67  s containing pag
4de0: 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 7a 65  e numbers for ze
4df0: 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 65 65 6c  ro or more freel
4e00: 69 73 74 0a 6c 65 61 66 20 70 61 67 65 73 2e 3c  ist.leaf pages.<
4e10: 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 6c 69  /p>..<p>A freeli
4e20: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 63 6f  st trunk page co
4e30: 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72  nsists of an arr
4e40: 61 79 20 6f 66 20 34 2d 62 79 74 65 20 62 69 67  ay of 4-byte big
4e50: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73  -endian integers
4e60: 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  ..The size of th
4e70: 65 20 61 72 72 61 79 20 69 73 20 61 73 20 6d 61  e array is as ma
4e80: 6e 79 20 69 6e 74 65 67 65 72 73 20 61 73 20 77  ny integers as w
4e90: 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75  ill fit in the u
4ea0: 73 61 62 6c 65 20 73 70 61 63 65 0a 6f 66 20 61  sable space.of a
4eb0: 20 70 61 67 65 2e 20 20 54 68 65 20 6d 69 6e 69   page.  The mini
4ec0: 6d 75 6d 20 75 73 61 62 6c 65 20 73 70 61 63 65  mum usable space
4ed0: 20 69 73 20 34 38 30 20 62 79 74 65 73 20 73 6f   is 480 bytes so
4ee0: 20 74 68 65 20 61 72 72 61 79 20 77 69 6c 6c 20   the array will 
4ef0: 61 6c 77 61 79 73 0a 62 65 20 61 74 20 6c 65 61  always.be at lea
4f00: 73 74 20 31 32 30 20 65 6e 74 72 69 65 73 20 69  st 120 entries i
4f10: 6e 20 6c 65 6e 67 74 68 2e 20 20 5e 54 68 65 20  n length.  ^The 
4f20: 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 6f 6e  first integer on
4f30: 20 61 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e   a freelist trun
4f40: 6b 0a 70 61 67 65 20 69 73 20 74 68 65 20 70 61  k.page is the pa
4f50: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
4f60: 20 6e 65 78 74 20 66 72 65 65 6c 69 73 74 20 74   next freelist t
4f70: 72 75 6e 6b 20 70 61 67 65 20 69 6e 20 74 68 65  runk page in the
4f80: 20 6c 69 73 74 20 6f 72 20 7a 65 72 6f 20 0a 69   list or zero .i
4f90: 66 20 74 68 69 73 20 69 73 20 74 68 65 20 6c 61  f this is the la
4fa0: 73 74 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e  st freelist trun
4fb0: 6b 20 70 61 67 65 2e 20 20 5e 54 68 65 20 73 65  k page.  ^The se
4fc0: 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 6f 6e 20  cond integer on 
4fd0: 61 20 66 72 65 65 6c 69 73 74 0a 74 72 75 6e 6b  a freelist.trunk
4fe0: 20 70 61 67 65 20 69 73 20 74 68 65 20 6e 75 6d   page is the num
4ff0: 62 65 72 20 6f 66 20 6c 65 61 66 20 70 61 67 65  ber of leaf page
5000: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 66 6f 6c   pointers to fol
5010: 6c 6f 77 2e 20 20 0a 5e 28 43 61 6c 6c 20 74 68  low.  .^(Call th
5020: 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72  e second integer
5030: 20 6f 6e 20 61 20 66 72 65 65 6c 69 73 74 20 74   on a freelist t
5040: 72 75 6e 6b 20 70 61 67 65 20 4c 2e 0a 49 66 20  runk page L..If 
5050: 4c 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  L is greater tha
5060: 6e 20 7a 65 72 6f 20 74 68 65 6e 20 69 6e 74 65  n zero then inte
5070: 67 65 72 73 20 77 69 74 68 20 61 72 72 61 79 20  gers with array 
5080: 69 6e 64 65 78 65 73 20 62 65 74 77 65 65 6e 20  indexes between 
5090: 32 20 61 6e 64 0a 4c 2b 31 20 69 6e 63 6c 75 73  2 and.L+1 inclus
50a0: 69 76 65 20 63 6f 6e 74 61 69 6e 20 70 61 67 65  ive contain page
50b0: 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 66 72 65   numbers for fre
50c0: 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73  elist leaf pages
50d0: 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 46 72 65 65  .)^</p>..<p>Free
50e0: 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20  list leaf pages 
50f0: 63 6f 6e 74 61 69 6e 20 6e 6f 20 69 6e 66 6f 72  contain no infor
5100: 6d 61 74 69 6f 6e 2e 20 20 5e 53 51 4c 69 74 65  mation.  ^SQLite
5110: 20 61 76 6f 69 64 73 20 72 65 61 64 69 6e 67 20   avoids reading 
5120: 6f 72 0a 77 72 69 74 69 6e 67 20 66 72 65 65 6c  or.writing freel
5130: 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20 69  ist leaf pages i
5140: 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 64 75 63  n order to reduc
5150: 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a  e disk I/O.</p>.
5160: 0a 3c 70 3e 41 20 62 75 67 20 69 6e 20 53 51 4c  .<p>A bug in SQL
5170: 69 74 65 20 76 65 72 73 69 6f 6e 73 20 70 72 69  ite versions pri
5180: 6f 72 20 74 6f 20 33 2e 36 2e 30 20 63 61 75 73  or to 3.6.0 caus
5190: 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ed the database 
51a0: 74 6f 20 62 65 0a 72 65 70 6f 72 74 65 64 20 61  to be.reported a
51b0: 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79  s corrupt if any
51c0: 20 6f 66 20 74 68 65 20 6c 61 73 74 20 36 20 65   of the last 6 e
51d0: 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 66 72  ntries in the fr
51e0: 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67  eelist trunk pag
51f0: 65 20 0a 61 72 72 61 79 20 63 6f 6e 74 61 69 6e  e .array contain
5200: 65 64 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75  ed non-zero valu
5210: 65 73 2e 20 20 4e 65 77 65 72 20 76 65 72 73 69  es.  Newer versi
5220: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 64 6f  ons of SQLite do
5230: 20 6e 6f 74 20 68 61 76 65 0a 74 68 69 73 20 70   not have.this p
5240: 72 6f 62 6c 65 6d 2e 20 20 5e 48 6f 77 65 76 65  roblem.  ^Howeve
5250: 72 2c 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e  r, newer version
5260: 73 20 6f 66 20 53 51 4c 69 74 65 20 73 74 69 6c  s of SQLite stil
5270: 6c 20 61 76 6f 69 64 20 75 73 69 6e 67 20 74 68  l avoid using th
5280: 65 20 0a 6c 61 73 74 20 73 69 78 20 65 6e 74 72  e .last six entr
5290: 69 65 73 20 69 6e 20 74 68 65 20 66 72 65 65 6c  ies in the freel
52a0: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 61  ist trunk page a
52b0: 72 72 61 79 20 69 6e 20 6f 72 64 65 72 20 74 68  rray in order th
52c0: 61 74 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  at database.file
52d0: 73 20 63 72 65 61 74 65 64 20 62 79 20 6e 65 77  s created by new
52e0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
52f0: 51 4c 69 74 65 20 63 61 6e 20 62 65 20 72 65 61  QLite can be rea
5300: 64 20 62 79 20 6f 6c 64 65 72 20 76 65 72 73 69  d by older versi
5310: 6f 6e 73 0a 6f 66 20 53 51 4c 69 74 65 2e 3c 2f  ons.of SQLite.</
5320: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62  p>..<p>^The numb
5330: 65 72 20 6f 66 20 66 72 65 65 6c 69 73 74 20 70  er of freelist p
5340: 61 67 65 73 20 69 73 20 73 74 6f 72 65 64 20 61  ages is stored a
5350: 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65  s a 4-byte big-e
5360: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 0a 69 6e  ndian integer.in
5370: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
5380: 61 64 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65  ader at an offse
5390: 74 20 6f 66 20 33 36 20 66 72 6f 6d 20 74 68 65  t of 36 from the
53a0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
53b0: 65 20 66 69 6c 65 2e 0a 5e 54 68 65 20 64 61 74  e file..^The dat
53c0: 61 62 61 73 65 20 68 65 61 64 65 72 20 61 6c 73  abase header als
53d0: 6f 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67  o stores the pag
53e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
53f0: 66 69 72 73 74 20 66 72 65 65 6c 69 73 74 20 74  first freelist t
5400: 72 75 6e 6b 0a 70 61 67 65 20 61 73 20 61 20 34  runk.page as a 4
5410: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
5420: 20 69 6e 74 65 67 65 72 20 61 74 20 61 6e 20 6f   integer at an o
5430: 66 66 73 65 74 20 6f 66 20 33 32 20 66 72 6f 6d  ffset of 32 from
5440: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f   the beginning.o
5450: 66 20 74 68 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  f the file.</p>.
5460: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
5470: 74 20 62 74 72 65 65 20 7b 42 2a 2d 54 72 65 65  t btree {B*-Tree
5480: 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 35  s}</tcl>.<h3>1.5
5490: 20 42 2d 74 72 65 65 20 50 61 67 65 73 3c 2f 68   B-tree Pages</h
54a0: 33 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65  3>..<p>The b-tre
54b0: 65 20 61 6c 67 6f 72 69 74 68 6d 20 70 72 6f 76  e algorithm prov
54c0: 69 64 65 73 20 6b 65 79 2f 64 61 74 61 20 73 74  ides key/data st
54d0: 6f 72 61 67 65 20 77 69 74 68 20 75 6e 69 71 75  orage with uniqu
54e0: 65 20 61 6e 64 0a 6f 72 64 65 72 65 64 20 6b 65  e and.ordered ke
54f0: 79 73 20 6f 6e 20 70 61 67 65 2d 6f 72 69 65 6e  ys on page-orien
5500: 74 65 64 20 73 74 6f 72 61 67 65 20 64 65 76 69  ted storage devi
5510: 63 65 73 2e 0a 46 6f 72 20 62 61 63 6b 67 72 6f  ces..For backgro
5520: 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
5530: 6f 6e 20 62 2d 74 72 65 65 73 2c 20 73 65 65 0a  on b-trees, see.
5540: 4b 6e 75 74 68 2c 20 3c 75 3e 54 68 65 20 41 72  Knuth, <u>The Ar
5550: 74 20 4f 66 20 43 6f 6d 70 75 74 65 72 20 50 72  t Of Computer Pr
5560: 6f 67 72 61 6d 6d 69 6e 67 3c 2f 75 3e 2c 20 56  ogramming</u>, V
5570: 6f 6c 75 6d 65 20 33 20 22 53 6f 72 74 69 6e 67  olume 3 "Sorting
5580: 0a 61 6e 64 20 53 65 61 72 63 68 69 6e 67 22 2c  .and Searching",
5590: 20 70 61 67 65 73 20 34 37 31 2d 34 37 39 2e 20   pages 471-479. 
55a0: 20 54 77 6f 20 6b 69 6e 64 73 20 6f 66 20 62 2d   Two kinds of b-
55b0: 74 72 65 65 73 20 61 72 65 20 75 73 65 64 20 62  trees are used b
55c0: 79 0a 53 51 4c 69 74 65 2e 20 20 54 68 65 20 61  y.SQLite.  The a
55d0: 6c 67 6f 72 69 74 68 6d 20 74 68 61 74 20 4b 6e  lgorithm that Kn
55e0: 75 74 68 20 63 61 6c 6c 73 20 22 42 2a 2d 54 72  uth calls "B*-Tr
55f0: 65 65 22 20 73 74 6f 72 65 73 20 61 6c 6c 20 64  ee" stores all d
5600: 61 74 61 0a 69 6e 20 74 68 65 20 6c 65 61 76 65  ata.in the leave
5610: 73 20 6f 66 20 74 68 65 20 74 72 65 65 2e 20 20  s of the tree.  
5620: 53 51 4c 69 74 65 20 63 61 6c 6c 73 20 74 68 69  SQLite calls thi
5630: 73 20 76 61 72 69 65 74 79 20 6f 66 20 62 2d 74  s variety of b-t
5640: 72 65 65 0a 61 20 22 74 61 62 6c 65 20 62 2d 74  ree.a "table b-t
5650: 72 65 65 22 2e 20 54 68 65 20 61 6c 67 6f 72 69  ree". The algori
5660: 74 68 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63  thm that Knuth c
5670: 61 6c 6c 73 20 73 69 6d 70 6c 79 20 22 42 2d 54  alls simply "B-T
5680: 72 65 65 22 0a 73 74 6f 72 65 73 20 62 6f 74 68  ree".stores both
5690: 20 74 68 65 20 6b 65 79 20 61 6e 64 20 74 68 65   the key and the
56a0: 20 64 61 74 61 20 74 6f 67 65 74 68 65 72 20 69   data together i
56b0: 6e 20 62 6f 74 68 20 6c 65 61 76 65 73 0a 61 6e  n both leaves.an
56c0: 64 20 69 6e 20 69 6e 74 65 72 69 6f 72 20 70 61  d in interior pa
56d0: 67 65 73 2e 20 20 49 6e 20 74 68 65 20 53 51 4c  ges.  In the SQL
56e0: 69 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ite implementati
56f0: 6f 6e 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  on, the original
5700: 0a 42 2d 54 72 65 65 20 61 6c 67 6f 72 69 74 68  .B-Tree algorith
5710: 6d 20 73 74 6f 72 65 73 20 6b 65 79 73 20 6f 6e  m stores keys on
5720: 6c 79 2c 20 6f 6d 69 74 74 69 6e 67 20 74 68 65  ly, omitting the
5730: 20 64 61 74 61 20 65 6e 74 69 72 65 6c 79 2c 20   data entirely, 
5740: 61 6e 64 0a 69 73 20 63 61 6c 6c 65 64 20 61 6e  and.is called an
5750: 20 22 69 6e 64 65 78 20 62 2d 74 72 65 65 22 2e   "index b-tree".
5760: 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61  ..<p>A b-tree pa
5770: 67 65 20 69 73 20 65 69 74 68 65 72 20 61 6e 20  ge is either an 
5780: 69 6e 74 65 72 69 6f 72 20 70 61 67 65 20 6f 72  interior page or
5790: 20 61 20 6c 65 61 66 20 70 61 67 65 2e 0a 41 20   a leaf page..A 
57a0: 6c 65 61 66 20 70 61 67 65 20 63 6f 6e 74 61 69  leaf page contai
57b0: 6e 73 20 6b 65 79 73 20 61 6e 64 20 69 6e 20 74  ns keys and in t
57c0: 68 65 20 63 61 73 65 20 6f 66 20 61 20 74 61 62  he case of a tab
57d0: 6c 65 20 62 2d 74 72 65 65 20 65 61 63 68 0a 6b  le b-tree each.k
57e0: 65 79 20 68 61 73 20 61 73 73 6f 63 69 61 74 65  ey has associate
57f0: 64 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 74 65  d data.  An inte
5800: 72 69 6f 72 20 70 61 67 65 20 63 6f 6e 74 61 69  rior page contai
5810: 6e 73 0a 4b 20 6b 65 79 73 20 74 6f 67 65 74 68  ns.K keys togeth
5820: 65 72 20 77 69 74 68 20 4b 2b 31 20 70 6f 69 6e  er with K+1 poin
5830: 74 65 72 73 20 74 6f 20 63 68 69 6c 64 20 62 2d  ters to child b-
5840: 74 72 65 65 20 70 61 67 65 73 2e 0a 41 20 22 70  tree pages..A "p
5850: 6f 69 6e 74 65 72 22 20 69 6e 20 61 6e 20 69 6e  ointer" in an in
5860: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
5870: 67 65 20 69 73 20 6a 75 73 74 20 74 68 65 20 33  ge is just the 3
5880: 31 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 70 61  1-bit integer.pa
5890: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
58a0: 20 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f 70 3e   child page.</p>
58b0: 0a 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20  ..<p>Define the 
58c0: 64 65 70 74 68 0a 6f 66 20 61 20 6c 65 61 66 20  depth.of a leaf 
58d0: 62 2d 74 72 65 65 20 74 6f 20 62 65 20 31 20 61  b-tree to be 1 a
58e0: 6e 64 20 74 68 65 20 64 65 70 74 68 20 6f 66 20  nd the depth of 
58f0: 61 6e 79 20 69 6e 74 65 72 69 6f 72 20 62 2d 74  any interior b-t
5900: 72 65 65 20 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f  ree to be one.mo
5910: 72 65 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69  re than the maxi
5920: 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 61 6e 79  mum depth of any
5930: 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e   of its children
5940: 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f  .  ^In a well-fo
5950: 72 6d 65 64 0a 64 61 74 61 62 61 73 65 2c 20 61  rmed.database, a
5960: 6c 6c 20 63 68 69 6c 64 72 65 6e 20 6f 66 20 61  ll children of a
5970: 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  n interior b-tre
5980: 65 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  e have the same 
5990: 64 65 70 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49  depth.</p>..<p>I
59a0: 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  n an interior b-
59b0: 74 72 65 65 20 70 61 67 65 2c 20 74 68 65 20 70  tree page, the p
59c0: 6f 69 6e 74 65 72 73 20 61 6e 64 20 6b 65 79 73  ointers and keys
59d0: 20 6c 6f 67 69 63 61 6c 6c 79 20 61 6c 74 65 72   logically alter
59e0: 6e 61 74 65 20 0a 77 69 74 68 20 61 20 70 6f 69  nate .with a poi
59f0: 6e 74 65 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64  nter on both end
5a00: 73 2e 20 28 54 68 65 20 70 72 65 76 69 6f 75 73  s. (The previous
5a10: 20 73 65 6e 74 65 6e 63 65 20 69 73 20 74 6f 20   sentence is to 
5a20: 62 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f  be understood.co
5a30: 6e 63 65 70 74 75 61 6c 6c 79 20 2d 20 74 68 65  nceptually - the
5a40: 20 61 63 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f   actual layout o
5a50: 66 20 74 68 65 20 6b 65 79 73 20 61 6e 64 0a 70  f the keys and.p
5a60: 6f 69 6e 74 65 72 73 20 77 69 74 68 69 6e 20 74  ointers within t
5a70: 68 65 20 70 61 67 65 20 69 73 20 6d 6f 72 65 20  he page is more 
5a80: 63 6f 6d 70 6c 69 63 61 74 65 64 20 61 6e 64 20  complicated and 
5a90: 77 69 6c 6c 20 62 65 20 64 65 73 63 72 69 62 65  will be describe
5aa0: 64 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e  d in.the sequel.
5ab0: 29 20 20 41 6c 6c 20 6b 65 79 73 20 77 69 74 68  )  All keys with
5ac0: 69 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65  in the same page
5ad0: 20 61 72 65 20 75 6e 69 71 75 65 20 61 6e 64 20   are unique and 
5ae0: 61 72 65 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72  are logically.or
5af0: 67 61 6e 69 7a 65 64 20 69 6e 20 61 73 63 65 6e  ganized in ascen
5b00: 64 69 6e 67 20 6f 72 64 65 72 20 66 72 6f 6d 20  ding order from 
5b10: 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20  left to right.  
5b20: 28 41 67 61 69 6e 2c 20 74 68 69 73 20 6f 72 64  (Again, this ord
5b30: 65 72 69 6e 67 0a 69 73 20 6c 6f 67 69 63 61 6c  ering.is logical
5b40: 2c 20 6e 6f 74 20 70 68 79 73 69 63 61 6c 2e 20  , not physical. 
5b50: 20 54 68 65 20 61 63 74 75 61 6c 20 6c 6f 63 61   The actual loca
5b60: 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74  tion of keys wit
5b70: 68 69 6e 20 74 68 65 20 70 61 67 65 0a 69 73 20  hin the page.is 
5b80: 61 72 62 69 74 72 61 72 79 2e 29 20 5e 46 6f 72  arbitrary.) ^For
5b90: 20 61 6e 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e   any key X, poin
5ba0: 74 65 72 73 20 74 6f 20 74 68 65 20 6c 65 66 74  ters to the left
5bb0: 0a 6f 66 20 61 20 58 20 72 65 66 65 72 20 74 6f  .of a X refer to
5bc0: 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e   b-tree pages on
5bd0: 20 77 68 69 63 68 20 61 6c 6c 20 6b 65 79 73 20   which all keys 
5be0: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6f 72  are less than or
5bf0: 20 65 71 75 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f   equal to X..^Po
5c00: 69 6e 74 65 72 73 20 74 6f 20 74 68 65 20 72 69  inters to the ri
5c10: 67 68 74 20 6f 66 20 58 20 72 65 66 65 72 20 74  ght of X refer t
5c20: 6f 20 70 61 67 65 73 20 77 68 65 72 65 20 61 6c  o pages where al
5c30: 6c 20 6b 65 79 73 20 61 72 65 20 0a 67 72 65 61  l keys are .grea
5c40: 74 65 72 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a  ter than X.</p>.
5c50: 0a 3c 70 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e  .<p>Within an in
5c60: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
5c70: 67 65 2c 20 65 61 63 68 20 6b 65 79 20 61 6e 64  ge, each key and
5c80: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20   the pointer to 
5c90: 69 74 73 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65  its.immediate le
5ca0: 66 74 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  ft are combined 
5cb0: 69 6e 74 6f 20 61 20 73 74 72 75 63 74 75 72 65  into a structure
5cc0: 20 63 61 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22   called a "cell"
5cd0: 2e 20 20 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73  .  The.right-mos
5ce0: 74 20 70 6f 69 6e 74 65 72 20 69 73 20 68 65 6c  t pointer is hel
5cf0: 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41  d separately.  A
5d00: 20 6c 65 61 66 20 62 2d 74 72 65 65 20 70 61 67   leaf b-tree pag
5d10: 65 20 68 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72  e has no.pointer
5d20: 73 2c 20 62 75 74 20 69 74 20 73 74 69 6c 6c 20  s, but it still 
5d30: 75 73 65 73 20 74 68 65 20 63 65 6c 6c 20 73 74  uses the cell st
5d40: 72 75 63 74 75 72 65 20 74 6f 20 68 6f 6c 64 20  ructure to hold 
5d50: 6b 65 79 73 20 66 6f 72 0a 69 6e 64 65 78 20 62  keys for.index b
5d60: 2d 74 72 65 65 73 20 6f 72 20 6b 65 79 73 20 61  -trees or keys a
5d70: 6e 64 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74  nd content for t
5d80: 61 62 6c 65 20 62 2d 74 72 65 65 73 2e 20 20 44  able b-trees.  D
5d90: 61 74 61 20 69 73 20 61 6c 73 6f 0a 63 6f 6e 74  ata is also.cont
5da0: 61 69 6e 65 64 20 69 6e 20 74 68 65 20 63 65 6c  ained in the cel
5db0: 6c 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72  l..</p>..<p>Ever
5dc0: 79 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61  y b-tree page ha
5dd0: 73 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61  s at most one pa
5de0: 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65  rent b-tree page
5df0: 2e 0a 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  ..A b-tree page 
5e00: 77 69 74 68 6f 75 74 20 61 20 70 61 72 65 6e 74  without a parent
5e10: 20 69 73 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f   is called a roo
5e20: 74 20 70 61 67 65 2e 20 20 41 20 72 6f 6f 74 20  t page.  A root 
5e30: 62 2d 74 72 65 65 20 70 61 67 65 0a 74 6f 67 65  b-tree page.toge
5e40: 74 68 65 72 20 77 69 74 68 20 74 68 65 20 63 6c  ther with the cl
5e50: 6f 73 75 72 65 20 6f 66 20 69 74 73 20 63 68 69  osure of its chi
5e60: 6c 64 72 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d  ldren form a com
5e70: 70 6c 65 74 65 20 62 2d 74 72 65 65 2e 0a 49 74  plete b-tree..It
5e80: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 28 61 6e   is possible (an
5e90: 64 20 69 6e 20 66 61 63 74 20 72 61 74 68 65 72  d in fact rather
5ea0: 20 63 6f 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65   common) to have
5eb0: 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72   a complete b-tr
5ec0: 65 65 0a 74 68 61 74 20 63 6f 6e 73 69 73 74 73  ee.that consists
5ed0: 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67   of a single pag
5ee0: 65 20 74 68 61 74 20 69 73 20 62 6f 74 68 20 61  e that is both a
5ef0: 20 6c 65 61 66 20 61 6e 64 20 74 68 65 20 72 6f   leaf and the ro
5f00: 6f 74 2e 0a 42 65 63 61 75 73 65 20 74 68 65 72  ot..Because ther
5f10: 65 20 61 72 65 20 70 6f 69 6e 74 65 72 73 20 66  e are pointers f
5f20: 72 6f 6d 20 70 61 72 65 6e 74 73 20 74 6f 20 63  rom parents to c
5f30: 68 69 6c 64 72 65 6e 2c 20 65 76 65 72 79 20 70  hildren, every p
5f40: 61 67 65 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74  age of a.complet
5f50: 65 20 62 2d 74 72 65 65 20 63 61 6e 20 62 65 20  e b-tree can be 
5f60: 6c 6f 63 61 74 65 64 20 69 66 20 6f 6e 6c 79 20  located if only 
5f70: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  the root page is
5f80: 20 6b 6e 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a   known.  Hence,.
5f90: 62 2d 74 72 65 65 73 20 61 72 65 20 69 64 65 6e  b-trees are iden
5fa0: 74 69 66 69 65 64 20 62 79 20 74 68 65 69 72 20  tified by their 
5fb0: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
5fc0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72  .</p>..<p>A b-tr
5fd0: 65 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65  ee page is eithe
5fe0: 72 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  r a table b-tree
5ff0: 20 70 61 67 65 20 6f 72 20 61 6e 20 69 6e 64 65   page or an inde
6000: 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41  x b-tree page..A
6010: 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 20  ll pages within 
6020: 65 61 63 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d  each complete b-
6030: 74 72 65 65 20 61 72 65 20 6f 66 20 74 68 65 20  tree are of the 
6040: 73 61 6d 65 20 74 79 70 65 3a 20 65 69 74 68 65  same type: eithe
6050: 72 20 74 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78  r table.or index
6060: 2e 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65 20  .  There is one 
6070: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 69 6e  table b-trees in
6080: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6090: 6c 65 0a 66 6f 72 20 65 61 63 68 20 72 6f 77 69  le.for each rowi
60a0: 64 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  d table in the d
60b0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
60c0: 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74 65 6d  including system
60d0: 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61 73 20   tables.such as 
60e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20 20  sqlite_master.  
60f0: 54 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 64  There is one ind
6100: 65 78 20 62 2d 74 72 65 65 0a 69 6e 20 74 68 65  ex b-tree.in the
6110: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
6120: 6f 72 20 65 61 63 68 20 69 6e 64 65 78 20 69 6e  or each index in
6130: 20 74 68 65 20 73 63 68 65 6d 61 2c 20 69 6e 63   the schema, inc
6140: 6c 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69  luding implied i
6150: 6e 64 65 78 65 73 0a 63 72 65 61 74 65 64 20 62  ndexes.created b
6160: 79 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  y uniqueness con
6170: 73 74 72 61 69 6e 74 73 2e 20 20 54 68 65 72 65  straints.  There
6180: 20 61 72 65 20 6e 6f 20 62 2d 74 72 65 65 73 20   are no b-trees 
6190: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
61a0: 5b 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d  [virtual tables]
61b0: 2e 20 20 53 70 65 63 69 66 69 63 20 76 69 72 74  .  Specific virt
61c0: 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d  ual table implem
61d0: 65 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20  entations might 
61e0: 6d 61 6b 65 20 75 73 65 0a 6f 66 20 5b 73 68 61  make use.of [sha
61f0: 64 6f 77 20 74 61 62 6c 65 73 5d 20 66 6f 72 20  dow tables] for 
6200: 73 74 6f 72 61 67 65 2c 20 62 75 74 20 74 68 6f  storage, but tho
6210: 73 65 20 73 68 61 64 6f 77 20 74 61 62 6c 65 73  se shadow tables
6220: 20 77 69 6c 6c 20 68 61 76 65 20 73 65 70 61 72   will have separ
6230: 61 74 65 0a 65 6e 74 72 69 65 73 20 69 6e 20 74  ate.entries in t
6240: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
6250: 6d 61 2e 20 20 5b 57 49 54 48 4f 55 54 20 52 4f  ma.  [WITHOUT RO
6260: 57 49 44 5d 20 74 61 62 6c 65 73 20 75 73 65 20  WID] tables use 
6270: 69 6e 64 65 78 20 62 2d 74 72 65 65 73 0a 72 61  index b-trees.ra
6280: 74 68 65 72 20 74 68 61 6e 20 61 20 74 61 62 6c  ther than a tabl
6290: 65 20 62 2d 74 72 65 65 73 2c 20 73 6f 20 74 68  e b-trees, so th
62a0: 65 72 65 20 69 73 20 6f 6e 65 0a 69 6e 64 65 78  ere is one.index
62b0: 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 64   b-tree in the d
62c0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72  atabase file for
62d0: 20 65 61 63 68 20 5b 57 49 54 48 4f 55 54 20 52   each [WITHOUT R
62e0: 4f 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65  OWID] table..The
62f0: 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f   b-tree correspo
6300: 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 73 71 6c  nding to the sql
6310: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
6320: 20 69 73 20 61 6c 77 61 79 73 20 61 20 74 61 62   is always a tab
6330: 6c 65 0a 62 2d 74 72 65 65 20 61 6e 64 20 61 6c  le.b-tree and al
6340: 77 61 79 73 20 68 61 73 20 61 20 72 6f 6f 74 20  ways has a root 
6350: 70 61 67 65 20 6f 66 20 31 2e 0a 54 68 65 20 73  page of 1..The s
6360: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
6370: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  le contains the 
6380: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
6390: 20 66 6f 72 20 65 76 65 72 79 20 6f 74 68 65 72   for every other
63a0: 20 0a 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65   .table and inde
63b0: 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  x in the databas
63c0: 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
63d0: 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 20  Each entry in a 
63e0: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e  table b-tree con
63f0: 73 69 73 74 73 20 6f 66 20 61 20 36 34 2d 62 69  sists of a 64-bi
6400: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
6410: 20 6b 65 79 0a 61 6e 64 20 75 70 20 74 6f 20 32   key.and up to 2
6420: 31 34 37 34 38 33 36 34 37 20 62 79 74 65 73 20  147483647 bytes 
6430: 6f 66 20 61 72 62 69 74 72 61 72 79 20 64 61 74  of arbitrary dat
6440: 61 2e 20 20 28 54 68 65 20 6b 65 79 20 6f 66 20  a.  (The key of 
6450: 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 0a 63  a table b-tree.c
6460: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
6470: 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65  e [rowid] of the
6480: 20 53 51 4c 20 74 61 62 6c 65 20 74 68 61 74 20   SQL table that 
6490: 74 68 65 20 62 2d 74 72 65 65 20 69 6d 70 6c 65  the b-tree imple
64a0: 6d 65 6e 74 73 2e 29 0a 49 6e 74 65 72 69 6f 72  ments.).Interior
64b0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68   table b-trees h
64c0: 6f 6c 64 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e  old only keys an
64d0: 64 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68  d pointers to ch
64e0: 69 6c 64 72 65 6e 2e 0a 41 6c 6c 20 64 61 74 61  ildren..All data
64f0: 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e   is contained in
6500: 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65   the table b-tre
6510: 65 20 6c 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c  e leaves.</p>..<
6520: 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20  p>Each entry in 
6530: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
6540: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
6550: 72 62 69 74 72 61 72 79 20 6b 65 79 20 6f 66 20  rbitrary key of 
6560: 75 70 0a 74 6f 20 32 31 34 37 34 38 33 36 34 37  up.to 2147483647
6570: 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
6580: 20 61 6e 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70   and no data.</p
6590: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
65a0: 65 6e 74 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64  ent cell_payload
65b0: 20 7b 63 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c   {cell payload}<
65c0: 2f 74 63 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20  /tcl>.<p>Define 
65d0: 74 68 65 20 22 70 61 79 6c 6f 61 64 22 20 6f 66  the "payload" of
65e0: 20 61 20 63 65 6c 6c 20 74 6f 20 62 65 20 74 68   a cell to be th
65f0: 65 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67  e arbitrary leng
6600: 74 68 20 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68  th section.of th
6610: 65 20 63 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20  e cell.  For an 
6620: 69 6e 64 65 78 20 62 2d 74 72 65 65 2c 20 74 68  index b-tree, th
6630: 65 20 6b 65 79 20 69 73 20 61 6c 77 61 79 73 20  e key is always 
6640: 61 72 62 69 74 72 61 72 79 20 69 6e 20 6c 65 6e  arbitrary in len
6650: 67 74 68 0a 61 6e 64 20 68 65 6e 63 65 20 74 68  gth.and hence th
6660: 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65  e payload is the
6670: 20 6b 65 79 2e 20 20 54 68 65 72 65 20 61 72 65   key.  There are
6680: 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 65   no arbitrary le
6690: 6e 67 74 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e  ngth elements.in
66a0: 20 74 68 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e   the cells of in
66b0: 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74  terior table b-t
66c0: 72 65 65 20 70 61 67 65 73 20 61 6e 64 20 73 6f  ree pages and so
66d0: 20 74 68 6f 73 65 20 63 65 6c 6c 73 20 68 61 76   those cells hav
66e0: 65 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54  e no.payload.  T
66f0: 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66  able b-tree leaf
6700: 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 20 61   pages contain a
6710: 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20  rbitrary length 
6720: 63 6f 6e 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66  content and.so f
6730: 6f 72 20 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73  or cells on thos
6740: 65 20 70 61 67 65 73 20 74 68 65 20 70 61 79 6c  e pages the payl
6750: 6f 61 64 20 69 73 20 74 68 65 20 63 6f 6e 74 65  oad is the conte
6760: 6e 74 2e 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20  nt..<p>When the 
6770: 73 69 7a 65 20 6f 66 20 70 61 79 6c 6f 61 64 20  size of payload 
6780: 66 6f 72 20 61 20 63 65 6c 6c 20 65 78 63 65 65  for a cell excee
6790: 64 73 20 61 20 63 65 72 74 61 69 6e 20 74 68 72  ds a certain thr
67a0: 65 73 68 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65  eshold (to.be de
67b0: 66 69 6e 65 64 20 6c 61 74 65 72 29 20 74 68 65  fined later) the
67c0: 6e 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74  n only the first
67d0: 20 66 65 77 20 62 79 74 65 73 20 6f 66 20 74 68   few bytes of th
67e0: 65 20 70 61 79 6c 6f 61 64 0a 61 72 65 20 73 74  e payload.are st
67f0: 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72  ored on the b-tr
6800: 65 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20  ee page and the 
6810: 62 61 6c 61 6e 63 65 20 69 73 20 73 74 6f 72 65  balance is store
6820: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
6830: 73 74 0a 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76  st.of content ov
6840: 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70  erflow pages.</p
6850: 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70  >..<p>A b-tree p
6860: 61 67 65 20 69 73 20 64 69 76 69 64 65 64 20 69  age is divided i
6870: 6e 74 6f 20 72 65 67 69 6f 6e 73 20 69 6e 20 74  nto regions in t
6880: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64  he following ord
6890: 65 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68  er:..<ol>.<li>Th
68a0: 65 20 31 30 30 2d 62 79 74 65 20 64 61 74 61 62  e 100-byte datab
68b0: 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20  ase file header 
68c0: 28 66 6f 75 6e 64 20 6f 6e 20 70 61 67 65 20 31  (found on page 1
68d0: 20 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38   only).<li>The 8
68e0: 20 6f 72 20 31 32 20 62 79 74 65 20 62 2d 74 72   or 12 byte b-tr
68f0: 65 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 3c  ee page header.<
6900: 6c 69 3e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e  li>The cell poin
6910: 74 65 72 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e  ter array.<li>Un
6920: 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 0a  allocated space.
6930: 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e  <li>The cell con
6940: 74 65 6e 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68  tent area.<li>Th
6950: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
6960: 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c  n..</ol>.</p>..<
6970: 70 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64  p>The 100-byte d
6980: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
6990: 64 65 72 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c  der is found onl
69a0: 79 20 6f 6e 20 70 61 67 65 20 31 2c 20 77 68 69  y on page 1, whi
69b0: 63 68 20 69 73 0a 61 6c 77 61 79 73 20 61 20 74  ch is.always a t
69c0: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
69d0: 2e 20 20 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74  .  All other b-t
69e0: 72 65 65 20 70 61 67 65 73 20 69 6e 20 74 68 65  ree pages in the
69f0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 6f   database file.o
6a00: 6d 69 74 20 74 68 69 73 20 31 30 30 2d 62 79 74  mit this 100-byt
6a10: 65 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c  e header.</p>..<
6a20: 70 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72  p>The reserved r
6a30: 65 67 69 6f 6e 20 69 73 20 61 6e 20 61 72 65 61  egion is an area
6a40: 20 6f 66 20 75 6e 75 73 65 64 20 73 70 61 63 65   of unused space
6a50: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65   at the end of e
6a60: 76 65 72 79 0a 70 61 67 65 20 28 65 78 63 65 70  very.page (excep
6a70: 74 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61  t the locking pa
6a80: 67 65 29 20 74 68 61 74 20 65 78 74 65 6e 73 69  ge) that extensi
6a90: 6f 6e 73 20 63 61 6e 20 75 73 65 20 74 6f 20 68  ons can use to h
6aa0: 6f 6c 64 20 70 65 72 2d 70 61 67 65 0a 69 6e 66  old per-page.inf
6ab0: 6f 72 6d 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20  ormation.  ^The 
6ac0: 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65  size of the rese
6ad0: 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 64  rved region is d
6ae0: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
6af0: 20 6f 6e 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e   one-byte.unsign
6b00: 65 64 20 69 6e 74 65 67 65 72 20 66 6f 75 6e 64  ed integer found
6b10: 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66   at an offset of
6b20: 20 32 30 20 69 6e 74 6f 20 74 68 65 20 64 61 74   20 into the dat
6b30: 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65  abase file heade
6b40: 72 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74  r..The size of t
6b50: 68 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69  he reserved regi
6b60: 6f 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 7a 65  on is usually ze
6b70: 72 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ro.</p>..<p>The 
6b80: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
6b90: 65 72 20 69 73 20 38 20 62 79 74 65 73 20 69 6e  er is 8 bytes in
6ba0: 20 73 69 7a 65 20 66 6f 72 20 6c 65 61 66 20 70   size for leaf p
6bb0: 61 67 65 73 20 61 6e 64 20 31 32 0a 62 79 74 65  ages and 12.byte
6bc0: 73 20 66 6f 72 20 69 6e 74 65 72 69 6f 72 20 70  s for interior p
6bd0: 61 67 65 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69  ages.  All multi
6be0: 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74  byte values in t
6bf0: 68 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 61  he page header.a
6c00: 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54  re big-endian..T
6c10: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  he b-tree page h
6c20: 65 61 64 65 72 20 69 73 20 63 6f 6d 70 6f 73 65  eader is compose
6c30: 64 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  d of the followi
6c40: 6e 67 20 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a  ng fields:</p>..
6c50: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72  <center>.<i>B-tr
6c60: 65 65 20 50 61 67 65 20 48 65 61 64 65 72 20 46  ee Page Header F
6c70: 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
6c80: 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69  able border=1 wi
6c90: 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c  dth="80%">.<tr><
6ca0: 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a  th>Offset<th>Siz
6cb0: 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e  e<th>Description
6cc0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
6cd0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
6ce0: 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >0<td align=cent
6cf0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c  er valign=top>1<
6d00: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
6d10: 54 68 65 20 6f 6e 65 2d 62 79 74 65 20 66 6c 61  The one-byte fla
6d20: 67 20 61 74 20 6f 66 66 73 65 74 20 30 20 69 6e  g at offset 0 in
6d30: 64 69 63 61 74 69 6e 67 20 74 68 65 20 62 2d 74  dicating the b-t
6d40: 72 65 65 20 70 61 67 65 20 74 79 70 65 2e 0a 5e  ree page type..^
6d50: 41 20 76 61 6c 75 65 20 6f 66 20 32 20 6d 65 61  A value of 2 mea
6d60: 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61  ns the page is a
6d70: 6e 20 69 6e 74 65 72 69 6f 72 20 69 6e 64 65 78  n interior index
6d80: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41   b-tree page..^A
6d90: 20 76 61 6c 75 65 20 6f 66 20 35 20 6d 65 61 6e   value of 5 mean
6da0: 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61 6e  s the page is an
6db0: 20 69 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20   interior table 
6dc0: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20  b-tree page..^A 
6dd0: 76 61 6c 75 65 20 6f 66 20 31 30 20 6d 65 61 6e  value of 10 mean
6de0: 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61 20  s the page is a 
6df0: 6c 65 61 66 20 69 6e 64 65 78 20 62 2d 74 72 65  leaf index b-tre
6e00: 65 20 70 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65  e page..^A value
6e10: 20 6f 66 20 31 33 20 6d 65 61 6e 73 20 74 68 65   of 13 means the
6e20: 20 70 61 67 65 20 69 73 20 61 20 6c 65 61 66 20   page is a leaf 
6e30: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67  table b-tree pag
6e40: 65 2e 0a 5e 41 6e 79 20 6f 74 68 65 72 20 76 61  e..^Any other va
6e50: 6c 75 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72  lue for the b-tr
6e60: 65 65 20 70 61 67 65 20 74 79 70 65 20 69 73 20  ee page type is 
6e70: 61 6e 20 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c 74  an error..<tr><t
6e80: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6e90: 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61  align=top>1<td a
6ea0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6eb0: 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67  gn=top>2<td alig
6ec0: 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f  n=left>.^The two
6ed0: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74  -byte integer at
6ee0: 20 6f 66 66 73 65 74 20 31 20 67 69 76 65 73 20   offset 1 gives 
6ef0: 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68 65  the start of the
6f00: 0a 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b  .first freeblock
6f10: 20 6f 6e 20 74 68 65 20 70 61 67 65 2c 20 6f 72   on the page, or
6f20: 20 69 73 20 7a 65 72 6f 20 69 66 20 74 68 65 72   is zero if ther
6f30: 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f  e are no freeblo
6f40: 63 6b 73 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  cks..<tr><td ali
6f50: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6f60: 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69 67 6e 3d  =top>3<td align=
6f70: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6f80: 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  p>2<td align=lef
6f90: 74 3e 0a 5e 54 68 65 20 74 77 6f 2d 62 79 74 65  t>.^The two-byte
6fa0: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
6fb0: 65 74 20 33 20 67 69 76 65 73 20 74 68 65 20 6e  et 3 gives the n
6fc0: 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f  umber of cells o
6fd0: 6e 20 74 68 65 20 70 61 67 65 2e 0a 3c 74 72 3e  n the page..<tr>
6fe0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6ff0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 35 3c 74 64   valign=top>5<td
7000: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7010: 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c  lign=top>2<td al
7020: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68 65 20  ign=left>.^(The 
7030: 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72  two-byte integer
7040: 20 61 74 20 6f 66 66 73 65 74 20 35 20 64 65 73   at offset 5 des
7050: 69 67 6e 61 74 65 73 20 74 68 65 20 73 74 61 72  ignates the star
7060: 74 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 63 6f  t of the cell co
7070: 6e 74 65 6e 74 0a 61 72 65 61 2e 20 20 41 20 7a  ntent.area.  A z
7080: 65 72 6f 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ero value for th
7090: 69 73 20 69 6e 74 65 67 65 72 20 69 73 20 69 6e  is integer is in
70a0: 74 65 72 70 72 65 74 65 64 20 61 73 20 36 35 35  terpreted as 655
70b0: 33 36 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 61 6c  36.)^.<tr><td al
70c0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
70d0: 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c 69 67 6e  n=top>7<td align
70e0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
70f0: 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  op>1<td align=le
7100: 66 74 3e 0a 5e 54 68 65 20 6f 6e 65 2d 62 79 74  ft>.^The one-byt
7110: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
7120: 73 65 74 20 37 20 67 69 76 65 73 20 74 68 65 20  set 7 gives the 
7130: 6e 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65  number of fragme
7140: 6e 74 65 64 20 66 72 65 65 0a 62 79 74 65 73 20  nted free.bytes 
7150: 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c 6c 20  within the cell 
7160: 63 6f 6e 74 65 6e 74 20 61 72 65 61 2e 0a 3c 74  content area..<t
7170: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
7180: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c  er valign=top>8<
7190: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
71a0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c 74 64 20  valign=top>4<td 
71b0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28 54 68  align=left>.^(Th
71c0: 65 20 66 6f 75 72 2d 62 79 74 65 20 70 61 67 65  e four-byte page
71d0: 20 6e 75 6d 62 65 72 20 61 74 20 6f 66 66 73 65   number at offse
71e0: 74 20 38 20 69 73 20 74 68 65 20 72 69 67 68 74  t 8 is the right
71f0: 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72 2e 20 20  -most pointer.  
7200: 54 68 69 73 0a 76 61 6c 75 65 20 61 70 70 65 61  This.value appea
7210: 72 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  rs in the header
7220: 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 62 2d 74   of interior b-t
7230: 72 65 65 20 70 61 67 65 73 20 6f 6e 6c 79 20 61  ree pages only a
7240: 6e 64 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  nd is omitted fr
7250: 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72 20 70 61 67  om.all other pag
7260: 65 73 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f  es.)^.</table></
7270: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 2f 63 65 6e  blockquote></cen
7280: 74 65 72 3e 0a 0a 3c 70 3e 5e 54 68 65 20 63 65  ter>..<p>^The ce
7290: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
72a0: 20 6f 66 20 61 20 62 2d 74 72 65 65 20 70 61 67   of a b-tree pag
72b0: 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  e immediately fo
72c0: 6c 6c 6f 77 73 20 74 68 65 20 62 2d 74 72 65 65  llows the b-tree
72d0: 0a 70 61 67 65 20 68 65 61 64 65 72 2e 20 20 4c  .page header.  L
72e0: 65 74 20 4b 20 62 65 20 74 68 65 20 6e 75 6d 62  et K be the numb
72f0: 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74  er of cells on t
7300: 68 65 20 62 74 72 65 65 2e 20 20 5e 54 68 65 20  he btree.  ^The 
7310: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 0a 61 72 72  cell pointer.arr
7320: 61 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 4b  ay consists of K
7330: 20 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   2-byte integer 
7340: 6f 66 66 73 65 74 73 20 74 6f 20 74 68 65 20 63  offsets to the c
7350: 65 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e 20 20 5e  ell contents.  ^
7360: 54 68 65 0a 63 65 6c 6c 20 70 6f 69 6e 74 65 72  The.cell pointer
7370: 73 20 61 72 65 20 61 72 72 61 6e 67 65 64 20 69  s are arranged i
7380: 6e 20 6b 65 79 20 6f 72 64 65 72 20 77 69 74 68  n key order with
7390: 20 6c 65 66 74 2d 6d 6f 73 74 20 63 65 6c 6c 20   left-most cell 
73a0: 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74  (the cell with t
73b0: 68 65 0a 73 6d 61 6c 6c 65 73 74 20 6b 65 79 29  he.smallest key)
73c0: 20 66 69 72 73 74 20 61 6e 64 20 74 68 65 20 72   first and the r
73d0: 69 67 68 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28  ight-most cell (
73e0: 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74 68  the cell with th
73f0: 65 20 6c 61 72 67 65 73 74 0a 6b 65 79 29 20 6c  e largest.key) l
7400: 61 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 65 6c  ast.</p>..<p>Cel
7410: 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 74 6f  l content is sto
7420: 72 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c 20  red in the cell 
7430: 63 6f 6e 74 65 6e 74 20 72 65 67 69 6f 6e 20 6f  content region o
7440: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
7450: 65 2e 0a 53 51 4c 69 74 65 20 73 74 72 69 76 65  e..SQLite strive
7460: 73 20 74 6f 20 70 6c 61 63 65 20 63 65 6c 6c 73  s to place cells
7470: 20 61 73 20 66 61 72 20 74 6f 77 61 72 64 20 74   as far toward t
7480: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 2d  he end of the b-
7490: 74 72 65 65 20 70 61 67 65 20 61 73 0a 69 74 20  tree page as.it 
74a0: 63 61 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f  can, in order to
74b0: 20 6c 65 61 76 65 20 73 70 61 63 65 20 66 6f 72   leave space for
74c0: 20 66 75 74 75 72 65 20 67 72 6f 77 74 68 20 6f   future growth o
74d0: 66 20 74 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74  f the cell point
74e0: 65 72 20 61 72 72 61 79 2e 0a 54 68 65 20 61 72  er array..The ar
74f0: 65 61 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68  ea in between th
7500: 65 20 6c 61 73 74 20 63 65 6c 6c 20 70 6f 69 6e  e last cell poin
7510: 74 65 72 20 61 72 72 61 79 20 65 6e 74 72 79 20  ter array entry 
7520: 61 6e 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  and the beginnin
7530: 67 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 63  g of.the first c
7540: 65 6c 6c 20 69 73 20 74 68 65 20 75 6e 61 6c 6c  ell is the unall
7550: 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 2e 0a 3c  ocated region..<
7560: 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 61 20 70 61  /p>..<p>^If a pa
7570: 67 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63  ge contains no c
7580: 65 6c 6c 73 20 28 77 68 69 63 68 20 69 73 20 6f  ells (which is o
7590: 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 66 6f 72  nly possible for
75a0: 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 6f 66 20   a root page.of 
75b0: 61 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  a table that con
75c0: 74 61 69 6e 73 20 6e 6f 20 72 6f 77 73 29 20 74  tains no rows) t
75d0: 68 65 6e 20 74 68 65 20 6f 66 66 73 65 74 20 74  hen the offset t
75e0: 6f 20 74 68 65 0a 63 65 6c 6c 20 63 6f 6e 74 65  o the.cell conte
75f0: 6e 74 20 61 72 65 61 20 77 69 6c 6c 20 65 71 75  nt area will equ
7600: 61 6c 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  al the page size
7610: 20 6d 69 6e 75 73 20 74 68 65 20 62 79 74 65 73   minus the bytes
7620: 20 6f 66 20 72 65 73 65 72 76 65 64 20 73 70 61   of reserved spa
7630: 63 65 2e 0a 5e 28 49 66 20 74 68 65 20 64 61 74  ce..^(If the dat
7640: 61 62 61 73 65 20 75 73 65 73 20 61 20 36 35 35  abase uses a 655
7650: 33 36 2d 62 79 74 65 20 70 61 67 65 20 73 69 7a  36-byte page siz
7660: 65 20 61 6e 64 20 74 68 65 20 72 65 73 65 72 76  e and the reserv
7670: 65 64 20 73 70 61 63 65 20 69 73 20 7a 65 72 6f  ed space is zero
7680: 0a 28 74 68 65 20 75 73 75 61 6c 20 76 61 6c 75  .(the usual valu
7690: 65 20 66 6f 72 20 72 65 73 65 72 76 65 64 20 73  e for reserved s
76a0: 70 61 63 65 29 20 74 68 65 6e 20 74 68 65 20 63  pace) then the c
76b0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 66 73  ell content offs
76c0: 65 74 20 6f 66 20 61 6e 0a 65 6d 70 74 79 20 70  et of an.empty p
76d0: 61 67 65 20 77 61 6e 74 73 20 74 6f 20 62 65 20  age wants to be 
76e0: 36 35 35 33 36 2e 20 20 0a 48 6f 77 65 76 65 72  65536.  .However
76f0: 2c 20 74 68 61 74 20 69 6e 74 65 67 65 72 20 69  , that integer i
7700: 73 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62  s too large to b
7710: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 0a 32 2d  e stored in a.2-
7720: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
7730: 74 65 67 65 72 2c 20 73 6f 20 61 20 76 61 6c 75  teger, so a valu
7740: 65 20 6f 66 20 30 20 69 73 20 75 73 65 64 20 69  e of 0 is used i
7750: 6e 20 69 74 73 20 70 6c 61 63 65 2e 29 5e 0a 0a  n its place.)^..
7760: 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 69  <p>A freeblock i
7770: 73 20 61 20 73 74 72 75 63 74 75 72 65 20 75 73  s a structure us
7780: 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20 75  ed to identify u
7790: 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65  nallocated space
77a0: 20 77 69 74 68 69 6e 0a 61 20 62 2d 74 72 65 65   within.a b-tree
77b0: 20 70 61 67 65 2e 20 20 46 72 65 65 62 6c 6f 63   page.  Freebloc
77c0: 6b 73 20 61 72 65 20 6f 72 67 61 6e 69 7a 65 64  ks are organized
77d0: 20 61 73 20 61 20 63 68 61 69 6e 2e 20 20 5e 54   as a chain.  ^T
77e0: 68 65 20 66 69 72 73 74 20 32 20 62 79 74 65 73  he first 2 bytes
77f0: 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f 63 6b 20   of.a freeblock 
7800: 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e  are a big-endian
7810: 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
7820: 73 20 74 68 65 20 6f 66 66 73 65 74 20 69 6e 20  s the offset in 
7830: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 0a  the b-tree page.
7840: 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72 65 65  of the next free
7850: 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 63 68 61  block in the cha
7860: 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74  in, or zero if t
7870: 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20  he freeblock is 
7880: 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74 68 65 20  the last on.the 
7890: 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 74 68 69  chain.  ^The thi
78a0: 72 64 20 61 6e 64 20 66 6f 75 72 74 68 20 62 79  rd and fourth by
78b0: 74 65 73 20 6f 66 20 65 61 63 68 20 66 72 65 65  tes of each free
78c0: 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20 62 69 67  block form.a big
78d0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
78e0: 77 68 69 63 68 20 69 73 20 74 68 65 20 73 69 7a  which is the siz
78f0: 65 20 6f 66 20 74 68 65 20 66 72 65 65 62 6c 6f  e of the freeblo
7900: 63 6b 20 69 6e 20 62 79 74 65 73 2c 20 69 6e 63  ck in bytes, inc
7910: 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d 62 79 74  luding.the 4-byt
7920: 65 20 68 65 61 64 65 72 2e 20 20 5e 46 72 65 65  e header.  ^Free
7930: 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c 77 61 79  blocks are alway
7940: 73 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 20 6f  s connected in o
7950: 72 64 65 72 20 0a 6f 66 20 69 6e 63 72 65 61 73  rder .of increas
7960: 69 6e 67 20 6f 66 66 73 65 74 2e 20 20 5e 54 68  ing offset.  ^Th
7970: 65 20 73 65 63 6f 6e 64 20 66 69 65 6c 64 20 6f  e second field o
7980: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
7990: 65 20 68 65 61 64 65 72 20 69 73 20 74 68 65 0a  e header is the.
79a0: 6f 66 66 73 65 74 20 6f 66 20 74 68 65 20 66 69  offset of the fi
79b0: 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2c 20 6f  rst freeblock, o
79c0: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20  r zero if there 
79d0: 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b  are no freeblock
79e0: 73 20 6f 6e 20 74 68 65 0a 70 61 67 65 2e 20 20  s on the.page.  
79f0: 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  ^In a well-forme
7a00: 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 74  d b-tree page, t
7a10: 68 65 72 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  here will always
7a20: 20 62 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65   be at least one
7a30: 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20 74 68 65   cell.before the
7a40: 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b   first freeblock
7a50: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65  .</p>..<p>A free
7a60: 62 6c 6f 63 6b 20 72 65 71 75 69 72 65 73 20 61  block requires a
7a70: 74 20 6c 65 61 73 74 20 34 20 62 79 74 65 73 20  t least 4 bytes 
7a80: 6f 66 20 73 70 61 63 65 2e 20 20 49 66 20 74 68  of space.  If th
7a90: 65 72 65 20 69 73 20 61 6e 20 69 73 6f 6c 61 74  ere is an isolat
7aa0: 65 64 0a 67 72 6f 75 70 20 6f 66 20 31 2c 20 32  ed.group of 1, 2
7ab0: 2c 20 6f 72 20 33 20 75 6e 75 73 65 64 20 62 79  , or 3 unused by
7ac0: 74 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63  tes within the c
7ad0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
7ae0: 2c 20 74 68 6f 73 65 20 62 79 74 65 73 0a 63 6f  , those bytes.co
7af0: 6d 70 72 69 73 65 20 61 20 66 72 61 67 6d 65 6e  mprise a fragmen
7b00: 74 2e 20 20 5e 54 68 65 20 74 6f 74 61 6c 20 6e  t.  ^The total n
7b10: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
7b20: 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e 74 73 20  n all fragments 
7b30: 69 73 20 73 74 6f 72 65 64 0a 69 6e 20 74 68 65  is stored.in the
7b40: 20 66 69 66 74 68 20 66 69 65 6c 64 20 6f 66 20   fifth field of 
7b50: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
7b60: 68 65 61 64 65 72 2e 20 20 5e 49 6e 20 61 20 77  header.  ^In a w
7b70: 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65  ell-formed b-tre
7b80: 65 20 70 61 67 65 2c 0a 74 68 65 20 74 6f 74 61  e page,.the tota
7b90: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
7ba0: 73 20 69 6e 20 66 72 61 67 6d 65 6e 74 73 20 6d  s in fragments m
7bb0: 61 79 20 6e 6f 74 20 65 78 63 65 65 64 20 36 30  ay not exceed 60
7bc0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 6f  .</p>..<p>The to
7bd0: 74 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 66 72  tal amount of fr
7be0: 65 65 20 73 70 61 63 65 20 6f 6e 20 61 20 62 2d  ee space on a b-
7bf0: 74 72 65 65 20 70 61 67 65 20 63 6f 6e 73 69 73  tree page consis
7c00: 74 73 20 6f 66 20 74 68 65 20 73 69 7a 65 0a 6f  ts of the size.o
7c10: 66 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65  f the unallocate
7c20: 64 20 72 65 67 69 6f 6e 20 70 6c 75 73 20 74 68  d region plus th
7c30: 65 20 74 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20  e total size of 
7c40: 61 6c 6c 20 66 72 65 65 62 6c 6f 63 6b 73 20 70  all freeblocks p
7c50: 6c 75 73 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f  lus the.number o
7c60: 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65  f fragmented fre
7c70: 65 20 62 79 74 65 73 2e 20 20 5e 53 51 4c 69 74  e bytes.  ^SQLit
7c80: 65 20 6d 61 79 20 66 72 6f 6d 20 74 69 6d 65 20  e may from time 
7c90: 74 6f 20 74 69 6d 65 20 72 65 6f 72 67 61 6e 69  to time reorgani
7ca0: 7a 65 0a 61 20 62 2d 74 72 65 65 20 70 61 67 65  ze.a b-tree page
7cb0: 20 73 6f 20 74 68 61 74 20 74 68 65 72 65 20 61   so that there a
7cc0: 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73  re no freeblocks
7cd0: 20 6f 72 20 66 72 61 67 6d 65 6e 74 20 62 79 74   or fragment byt
7ce0: 65 73 2c 20 61 6c 6c 0a 75 6e 75 73 65 64 20 62  es, all.unused b
7cf0: 79 74 65 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  ytes are contain
7d00: 65 64 20 69 6e 20 74 68 65 20 75 6e 61 6c 6c 6f  ed in the unallo
7d10: 63 61 74 65 64 20 73 70 61 63 65 20 72 65 67 69  cated space regi
7d20: 6f 6e 2c 20 61 6e 64 20 61 6c 6c 0a 63 65 6c 6c  on, and all.cell
7d30: 73 20 61 72 65 20 70 61 63 6b 65 64 20 74 69 67  s are packed tig
7d40: 68 74 6c 79 20 61 74 20 74 68 65 20 65 6e 64 20  htly at the end 
7d50: 6f 66 20 74 68 65 20 70 61 67 65 2e 20 20 54 68  of the page.  Th
7d60: 69 73 20 69 73 20 63 61 6c 6c 65 64 20 0a 22 64  is is called ."d
7d70: 65 66 72 61 67 6d 65 6e 74 69 6e 67 22 20 74 68  efragmenting" th
7d80: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 3c 2f  e b-tree page.</
7d90: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
7da0: 6d 65 6e 74 20 76 61 72 69 6e 74 20 7b 76 61 72  ment varint {var
7db0: 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
7dc0: 65 67 65 72 7d 20 7b 76 61 72 69 6e 74 7d 3c 2f  eger} {varint}</
7dd0: 74 63 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72 69 61  tcl>..<p>A varia
7de0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
7df0: 65 72 20 6f 72 20 22 76 61 72 69 6e 74 22 20 69  er or "varint" i
7e00: 73 20 61 20 73 74 61 74 69 63 20 48 75 66 66 6d  s a static Huffm
7e10: 61 6e 20 65 6e 63 6f 64 69 6e 67 0a 6f 66 20 36  an encoding.of 6
7e20: 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  4-bit twos-compl
7e30: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 73 20 74  ement integers t
7e40: 68 61 74 20 75 73 65 73 20 6c 65 73 73 20 73 70  hat uses less sp
7e50: 61 63 65 20 66 6f 72 20 73 6d 61 6c 6c 20 70 6f  ace for small po
7e60: 73 69 74 69 76 65 20 0a 76 61 6c 75 65 73 2e 20  sitive .values. 
7e70: 0a 41 20 76 61 72 69 6e 74 20 69 73 20 62 65 74  .A varint is bet
7e80: 77 65 65 6e 20 31 20 61 6e 64 20 39 20 62 79 74  ween 1 and 9 byt
7e90: 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 54  es in length.  T
7ea0: 68 65 20 76 61 72 69 6e 74 20 63 6f 6e 73 69 73  he varint consis
7eb0: 74 73 20 6f 66 20 65 69 74 68 65 72 0a 7a 65 72  ts of either.zer
7ec0: 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65 73 20  o or more bytes 
7ed0: 77 68 69 63 68 20 68 61 76 65 20 74 68 65 20 68  which have the h
7ee0: 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 73 65  igh-order bit se
7ef0: 74 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  t followed by a 
7f00: 73 69 6e 67 6c 65 20 62 79 74 65 0a 77 69 74 68  single byte.with
7f10: 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
7f20: 62 69 74 20 63 6c 65 61 72 2c 20 6f 72 20 6e 69  bit clear, or ni
7f30: 6e 65 20 62 79 74 65 73 2c 20 77 68 69 63 68 65  ne bytes, whiche
7f40: 76 65 72 20 69 73 20 73 68 6f 72 74 65 72 2e 0a  ver is shorter..
7f50: 54 68 65 20 6c 6f 77 65 72 20 73 65 76 65 6e 20  The lower seven 
7f60: 62 69 74 73 20 6f 66 20 65 61 63 68 20 6f 66 20  bits of each of 
7f70: 74 68 65 20 66 69 72 73 74 20 65 69 67 68 74 20  the first eight 
7f80: 62 79 74 65 73 20 61 6e 64 20 61 6c 6c 20 38 20  bytes and all 8 
7f90: 62 69 74 73 20 6f 66 0a 74 68 65 20 6e 69 6e 74  bits of.the nint
7fa0: 68 20 62 79 74 65 20 61 72 65 20 75 73 65 64 20  h byte are used 
7fb0: 74 6f 20 72 65 63 6f 6e 73 74 72 75 63 74 20 74  to reconstruct t
7fc0: 68 65 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63  he 64-bit twos-c
7fd0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
7fe0: 72 2e 0a 56 61 72 69 6e 74 73 20 61 72 65 20 62  r..Varints are b
7ff0: 69 67 2d 65 6e 64 69 61 6e 3a 20 62 69 74 73 20  ig-endian: bits 
8000: 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65 20 65  taken from the e
8010: 61 72 6c 69 65 72 20 62 79 74 65 20 6f 66 20 74  arlier byte of t
8020: 68 65 20 76 61 72 69 6e 74 0a 61 72 65 20 74 68  he varint.are th
8030: 65 20 6d 6f 72 65 20 73 69 67 6e 69 66 69 63 61  e more significa
8040: 6e 74 20 74 68 61 6e 20 62 69 74 73 20 74 61 6b  nt than bits tak
8050: 65 6e 20 66 72 6f 6d 20 74 68 65 20 6c 61 74 65  en from the late
8060: 72 20 62 79 74 65 73 2e 20 3c 2f 70 3e 0a 0a 3c  r bytes. </p>..<
8070: 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  p>The format of 
8080: 61 20 63 65 6c 6c 20 64 65 70 65 6e 64 73 20 6f  a cell depends o
8090: 6e 20 77 68 69 63 68 20 6b 69 6e 64 20 6f 66 20  n which kind of 
80a0: 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 65 20  b-tree page the 
80b0: 63 65 6c 6c 0a 61 70 70 65 61 72 73 20 6f 6e 2e  cell.appears on.
80c0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
80d0: 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65 20  table shows the 
80e0: 65 6c 65 6d 65 6e 74 73 20 6f 66 20 61 20 63 65  elements of a ce
80f0: 6c 6c 2c 20 69 6e 0a 6f 72 64 65 72 20 6f 66 20  ll, in.order of 
8100: 61 70 70 65 61 72 61 6e 63 65 2c 20 66 6f 72 20  appearance, for 
8110: 74 68 65 20 76 61 72 69 6f 75 73 20 62 2d 74 72  the various b-tr
8120: 65 65 20 70 61 67 65 20 74 79 70 65 73 2e 3c 2f  ee page types.</
8130: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
8140: 3c 64 6c 3e 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c  <dl>.<dt><p>Tabl
8150: 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65  e B-Tree Leaf Ce
8160: 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30 64 29  ll (header 0x0d)
8170: 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  :</p></dt>.<dd><
8180: 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72  p><ul>.<li>A var
8190: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
81a0: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
81b0: 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61   bytes of payloa
81c0: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79  d, including any
81d0: 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 41 20  .overflow.<li>A 
81e0: 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
81f0: 74 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79 2c  the integer key,
8200: 20 61 2e 6b 2e 61 2e 20 22 5b 72 6f 77 69 64 5d   a.k.a. "[rowid]
8210: 22 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61  ".<li>The initia
8220: 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  l portion of the
8230: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f   payload that do
8240: 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20  es not spill to 
8250: 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a  overflow.pages..
8260: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
8270: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
8280: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
8290: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  the first page o
82a0: 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70  f the.overflow p
82b0: 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74  age list - omitt
82c0: 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61  ed if all payloa
82d0: 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d  d fits on the b-
82e0: 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e  tree page..</ul>
82f0: 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
8300: 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49  p>Table B-Tree I
8310: 6e 74 65 72 69 6f 72 20 43 65 6c 6c 20 28 68 65  nterior Cell (he
8320: 61 64 65 72 20 30 78 30 35 29 3a 3c 2f 70 3e 3c  ader 0x05):</p><
8330: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e  /dt>.<dd><p><ul>
8340: 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69  .<li>A 4-byte bi
8350: 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20 6e 75  g-endian page nu
8360: 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 74 68  mber which is th
8370: 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70 6f 69  e left child poi
8380: 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69  nter..<li>A vari
8390: 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
83a0: 69 6e 74 65 67 65 72 20 6b 65 79 0a 3c 2f 75 6c  integer key.</ul
83b0: 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e  ></p></dd>..<dt>
83c0: 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20  <p>Index B-Tree 
83d0: 4c 65 61 66 20 43 65 6c 6c 20 28 68 65 61 64 65  Leaf Cell (heade
83e0: 72 20 30 78 30 61 29 3a 3c 2f 70 3e 3c 2f 64 74  r 0x0a):</p></dt
83f0: 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c  >.<dd><p><ul>.<l
8400: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
8410: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
8420: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
8430: 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e   key payload, in
8440: 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72  cluding any.over
8450: 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69  flow.<li>The ini
8460: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20  tial portion of 
8470: 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74  the payload that
8480: 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20   does not spill 
8490: 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65  to overflow.page
84a0: 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  s..<li>A 4-byte 
84b0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
84c0: 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  er page number f
84d0: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
84e0: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
84f0: 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d  w page list - om
8500: 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79  itted if all pay
8510: 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65  load fits on the
8520: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
8530: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ul></p></dd>..<d
8540: 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65  t><p>Index B-Tre
8550: 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 20  e Interior Cell 
8560: 28 68 65 61 64 65 72 20 30 78 30 32 29 3a 3c 2f  (header 0x02):</
8570: 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c  p></dt>.<dd><p><
8580: 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65  ul>.<li>A 4-byte
8590: 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65   big-endian page
85a0: 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20 69 73   number which is
85b0: 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20   the left child 
85c0: 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76  pointer..<li>A v
85d0: 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
85e0: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
85f0: 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20  of bytes of key 
8600: 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69  payload, includi
8610: 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a  ng any.overflow.
8620: 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20  <li>The initial 
8630: 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  portion of the p
8640: 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73  ayload that does
8650: 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76   not spill to ov
8660: 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c  erflow.pages..<l
8670: 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65  i>A 4-byte big-e
8680: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61  ndian integer pa
8690: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ge number for th
86a0: 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20  e first page of 
86b0: 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67  the.overflow pag
86c0: 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64  e list - omitted
86d0: 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20   if all payload 
86e0: 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72  fits on the b-tr
86f0: 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f  ee page..</ul></
8700: 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62  p></dd>.</dl></b
8710: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
8720: 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  he information a
8730: 62 6f 76 65 20 63 61 6e 20 62 65 20 72 65 63 61  bove can be reca
8740: 73 74 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20  st into a table 
8750: 66 6f 72 6d 61 74 20 61 73 20 66 6f 6c 6c 6f 77  format as follow
8760: 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  s:</p>..<tcl>hd_
8770: 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c 66 6f 72  fragment cellfor
8780: 6d 61 74 20 7b 63 65 6c 6c 20 66 6f 72 6d 61 74  mat {cell format
8790: 20 73 75 6d 6d 61 72 79 7d 3c 2f 74 63 6c 3e 0a   summary}</tcl>.
87a0: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72  <center>.<i>B-tr
87b0: 65 65 20 43 65 6c 6c 20 46 6f 72 6d 61 74 3c 2f  ee Cell Format</
87c0: 69 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  i>.<table border
87d0: 3d 31 20 77 69 64 74 68 3d 22 38 30 25 22 3e 0a  =1 width="80%">.
87e0: 3c 74 72 3e 3c 74 68 20 72 6f 77 73 70 61 6e 3d  <tr><th rowspan=
87f0: 32 3e 44 61 74 61 74 79 70 65 0a 20 20 20 20 3c  2>Datatype.    <
8800: 74 68 20 63 6f 6c 73 70 61 6e 3d 34 3e 41 70 70  th colspan=4>App
8810: 65 61 72 73 20 69 6e 2e 2e 2e 0a 20 20 20 20 3c  ears in....    <
8820: 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 65 73  th rowspan=2>Des
8830: 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 68  cription.<tr><th
8840: 3e 54 61 62 6c 65 20 4c 65 61 66 20 28 30 78 30  >Table Leaf (0x0
8850: 64 29 0a 20 20 20 20 3c 74 68 3e 54 61 62 6c 65  d).    <th>Table
8860: 20 49 6e 74 65 72 69 6f 72 20 28 30 78 30 35 29   Interior (0x05)
8870: 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 4c  .    <th>Index L
8880: 65 61 66 20 28 30 78 30 61 29 0a 20 20 20 20 3c  eaf (0x0a).    <
8890: 74 68 3e 49 6e 64 65 78 20 49 6e 74 65 72 69 6f  th>Index Interio
88a0: 72 20 28 30 78 30 32 29 0a 3c 74 72 3e 3c 74 64  r (0x02).<tr><td
88b0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
88c0: 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20  lign=top>4-byte 
88d0: 69 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64 20  integer.    <td 
88e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
88f0: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8900: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8910: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8920: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8930: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
8940: 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20  ign=top>&nbsp;. 
8950: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8960: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8970: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8980: 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20  align=left>Page 
8990: 6e 75 6d 62 65 72 20 6f 66 20 6c 65 66 74 20 63  number of left c
89a0: 68 69 6c 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  hild.<tr><td ali
89b0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
89c0: 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20  =top>varint.    
89d0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
89e0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
89f0: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8a00: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8a10: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8a20: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8a30: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8a40: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8a50: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8a60: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8a70: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74    <td align=left
8a80: 3e 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73  >Number of bytes
8a90: 20 6f 66 20 70 61 79 6c 6f 61 64 0a 3c 74 72 3e   of payload.<tr>
8aa0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8ab0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69   valign=top>vari
8ac0: 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  nt.    <td align
8ad0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8ae0: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8af0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8b00: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8b10: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8b20: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8b30: 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20  =top>&nbsp;.    
8b40: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8b50: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73   valign=top>&nbs
8b60: 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  p;.    <td align
8b70: 3d 6c 65 66 74 3e 52 6f 77 69 64 0a 3c 74 72 3e  =left>Rowid.<tr>
8b80: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8b90: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 62 79 74 65   valign=top>byte
8ba0: 20 61 72 72 61 79 0a 20 20 20 20 3c 74 64 20 61   array.    <td a
8bb0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8bc0: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8bd0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8be0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8bf0: 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61  &nbsp;.    <td a
8c00: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8c10: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8c20: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65      <td align=ce
8c30: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8c40: 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64  &#x2714;.    <td
8c50: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 79 6c   align=left>Payl
8c60: 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67  oad.<tr><td alig
8c70: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
8c80: 74 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67  top>4-byte integ
8c90: 65 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  er.    <td align
8ca0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8cb0: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8cc0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8cd0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73   valign=top>&nbs
8ce0: 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  p;.    <td align
8cf0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8d00: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
8d10: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
8d20: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32   valign=top>&#x2
8d30: 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  714;.    <td ali
8d40: 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d  gn=left>Page num
8d50: 62 65 72 20 6f 66 20 66 69 72 73 74 20 6f 76 65  ber of first ove
8d60: 72 66 6c 6f 77 20 70 61 67 65 0a 3c 2f 74 61 62  rflow page.</tab
8d70: 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 0a  le></center>....
8d80: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
8d90: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
8da0: 0a 0a 3c 70 3e 54 68 65 20 61 6d 6f 75 6e 74 20  ..<p>The amount 
8db0: 6f 66 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20  of payload that 
8dc0: 73 70 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76 65 72  spills onto over
8dd0: 66 6c 6f 77 20 70 61 67 65 73 20 61 6c 73 6f 20  flow pages also 
8de0: 64 65 70 65 6e 64 73 20 6f 6e 0a 74 68 65 20 70  depends on.the p
8df0: 61 67 65 20 74 79 70 65 2e 20 20 46 6f 72 20 74  age type.  For t
8e00: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d  he following com
8e10: 70 75 74 61 74 69 6f 6e 73 2c 20 6c 65 74 20 55  putations, let U
8e20: 20 62 65 20 74 68 65 20 75 73 61 62 6c 65 20 73   be the usable s
8e30: 69 7a 65 0a 6f 66 20 61 20 64 61 74 61 62 61 73  ize.of a databas
8e40: 65 20 70 61 67 65 2c 20 74 68 65 20 74 6f 74 61  e page, the tota
8e50: 6c 20 70 61 67 65 20 73 69 7a 65 20 6c 65 73 73  l page size less
8e60: 20 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70   the reserved sp
8e70: 61 63 65 20 61 74 20 74 68 65 0a 65 6e 64 20 6f  ace at the.end o
8e80: 66 20 65 61 63 68 20 70 61 67 65 2e 20 20 41 6e  f each page.  An
8e90: 64 20 6c 65 74 20 50 20 62 65 20 74 68 65 20 70  d let P be the p
8ea0: 61 79 6c 6f 61 64 20 73 69 7a 65 2e 3c 2f 70 3e  ayload size.</p>
8eb0: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64  ..<blockquote><d
8ec0: 6c 3e 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54  l>.<dt>Table B-T
8ed0: 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f  ree Leaf Cell:</
8ee0: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 49 66 20  dt>.<dd><p>.^If 
8ef0: 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65  the payload size
8f00: 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20   P is less than 
8f10: 6f 72 20 65 71 75 61 6c 20 74 6f 20 55 2d 33 35  or equal to U-35
8f20: 20 74 68 65 6e 0a 74 68 65 20 65 6e 74 69 72 65   then.the entire
8f30: 20 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72   payload is stor
8f40: 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ed on the b-tree
8f50: 20 6c 65 61 66 20 70 61 67 65 2e 20 20 0a 5e 28   leaf page.  .^(
8f60: 4c 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29  Let M be ((U-12)
8f70: 2a 33 32 2f 32 35 35 29 2d 32 33 2e 20 20 49 66  *32/255)-23.  If
8f80: 20 50 20 69 73 20 67 72 65 61 74 65 72 20 74 68   P is greater th
8f90: 61 6e 20 55 2d 33 35 0a 74 68 65 6e 20 74 68 65  an U-35.then the
8fa0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
8fb0: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62   stored on the b
8fc0: 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65 20  -tree leaf page 
8fd0: 69 73 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f  is the smaller o
8fe0: 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29  f.M+((P-M)%(U-4)
8ff0: 29 20 61 6e 64 20 55 2d 33 35 2e 29 5e 0a 5e 28  ) and U-35.)^.^(
9000: 4e 6f 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72  Note that number
9010: 20 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65 64   of bytes stored
9020: 20 6f 6e 20 74 68 65 20 6c 65 61 66 20 70 61 67   on the leaf pag
9030: 65 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20  e is never less 
9040: 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f  than M.)^.</p></
9050: 64 64 3e 0a 0a 3c 64 74 3e 54 61 62 6c 65 20 42  dd>..<dt>Table B
9060: 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43  -Tree Interior C
9070: 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  ell:</dt>.<dd><p
9080: 3e 0a 49 6e 74 65 72 69 6f 72 20 70 61 67 65 73  >.Interior pages
9090: 20 6f 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65   of table b-tree
90a0: 73 20 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61  s have no payloa
90b0: 64 20 61 6e 64 20 73 6f 20 74 68 65 72 65 20 69  d and so there i
90c0: 73 20 6e 65 76 65 72 0a 61 6e 79 20 70 61 79 6c  s never.any payl
90d0: 6f 61 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f  oad to spill..</
90e0: 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 49 6e 64  p></dd>..<dt>Ind
90f0: 65 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20 4f  ex B-Tree Leaf O
9100: 72 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a  r Interior Cell:
9110: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28  </dt>.<dd><p>.^(
9120: 4c 65 74 20 58 20 62 65 20 28 28 55 2d 31 32 29  Let X be ((U-12)
9130: 2a 36 34 2f 32 35 35 29 2d 32 33 29 2e 20 20 49  *64/255)-23).  I
9140: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69  f the payload si
9150: 7a 65 20 50 20 69 73 20 6c 65 73 73 20 74 68 61  ze P is less tha
9160: 6e 0a 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20  n.or equal to X 
9170: 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20  then the entire 
9180: 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65  payload is store
9190: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
91a0: 70 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20  page.)^.^(Let M 
91b0: 62 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35  be ((U-12)*32/25
91c0: 35 29 2d 32 33 2e 20 20 49 66 20 50 20 69 73 20  5)-23.  If P is 
91d0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 58 20 74  greater than X t
91e0: 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f  hen the number.o
91f0: 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f  f bytes stored o
9200: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
9210: 65 20 69 73 20 74 68 65 20 73 6d 61 6c 6c 65 72  e is the smaller
9220: 20 6f 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d   of.M+((P-M)%(U-
9230: 34 29 29 20 61 6e 64 20 58 2e 29 5e 0a 5e 28 4e  4)) and X.)^.^(N
9240: 6f 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20  ote that number 
9250: 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20  of bytes stored 
9260: 6f 6e 20 74 68 65 20 69 6e 64 65 78 20 70 61 67  on the index pag
9270: 65 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20  e is never less 
9280: 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f  than M.)^.</p></
9290: 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b  dd>.</dl></block
92a0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f  quote>..<p>The o
92b0: 76 65 72 66 6c 6f 77 20 74 68 72 65 73 68 6f 6c  verflow threshol
92c0: 64 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20  ds are designed 
92d0: 74 6f 20 67 69 76 65 20 61 20 6d 69 6e 69 6d 75  to give a minimu
92e0: 6d 20 66 61 6e 6f 75 74 20 6f 66 0a 34 20 66 6f  m fanout of.4 fo
92f0: 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20  r index b-trees 
9300: 61 6e 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  and to make sure
9310: 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 70   enough of the p
9320: 61 79 6c 6f 61 64 0a 69 73 20 6f 6e 20 74 68 65  ayload.is on the
9330: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 61   b-tree page tha
9340: 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  t the record hea
9350: 64 65 72 20 63 61 6e 20 75 73 75 61 6c 6c 79 20  der can usually 
9360: 62 65 20 61 63 63 65 73 73 65 64 0a 77 69 74 68  be accessed.with
9370: 6f 75 74 20 63 6f 6e 73 75 6c 74 69 6e 67 20 61  out consulting a
9380: 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2e  n overflow page.
9390: 20 20 49 6e 20 68 69 6e 64 73 69 67 68 74 2c 20    In hindsight, 
93a0: 74 68 65 20 64 65 73 69 67 6e 65 72 73 20 6f 66  the designers of
93b0: 0a 74 68 65 20 53 51 4c 69 74 65 20 62 2d 74 72  .the SQLite b-tr
93c0: 65 65 20 6c 6f 67 69 63 20 72 65 61 6c 69 7a 65  ee logic realize
93d0: 20 74 68 61 74 20 74 68 65 73 65 20 74 68 72 65   that these thre
93e0: 73 68 6f 6c 64 73 20 63 6f 75 6c 64 20 68 61 76  sholds could hav
93f0: 65 20 62 65 65 6e 0a 6d 61 64 65 20 6d 75 63 68  e been.made much
9400: 20 73 69 6d 70 6c 65 72 2e 20 20 48 6f 77 65 76   simpler.  Howev
9410: 65 72 2c 20 74 68 65 20 63 6f 6d 70 75 74 61 74  er, the computat
9420: 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 63  ions cannot be c
9430: 68 61 6e 67 65 64 0a 77 69 74 68 6f 75 74 20 72  hanged.without r
9440: 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 6e 20 69  esulting in an i
9450: 6e 63 6f 6d 70 61 74 69 62 6c 65 20 66 69 6c 65  ncompatible file
9460: 20 66 6f 72 6d 61 74 2e 20 20 41 6e 64 20 74 68   format.  And th
9470: 65 20 63 75 72 72 65 6e 74 20 63 6f 6d 70 75 74  e current comput
9480: 61 74 69 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c  ations.work well
9490: 2c 20 65 76 65 6e 20 69 66 20 74 68 65 79 20 61  , even if they a
94a0: 72 65 20 61 20 6c 69 74 74 6c 65 20 63 6f 6d 70  re a little comp
94b0: 6c 65 78 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  lex.</p>..<tcl>h
94c0: 64 5f 66 72 61 67 6d 65 6e 74 20 6f 76 66 6c 70  d_fragment ovflp
94d0: 67 73 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67  gs {overflow pag
94e0: 65 7d 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67  e} {overflow pag
94f0: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e  es}</tcl>.<h3>1.
9500: 36 20 43 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f  6 Cell Payload O
9510: 76 65 72 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68  verflow Pages</h
9520: 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  3>..<p>^When the
9530: 20 70 61 79 6c 6f 61 64 20 6f 66 20 61 20 62 2d   payload of a b-
9540: 74 72 65 65 20 63 65 6c 6c 20 69 73 20 74 6f 6f  tree cell is too
9550: 20 6c 61 72 67 65 20 66 6f 72 20 74 68 65 20 62   large for the b
9560: 2d 74 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20  -tree page,.the 
9570: 73 75 72 70 6c 75 73 20 69 73 20 73 70 69 6c 6c  surplus is spill
9580: 65 64 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77  ed onto overflow
9590: 20 70 61 67 65 73 2e 20 20 5e 4f 76 65 72 66 6c   pages.  ^Overfl
95a0: 6f 77 20 70 61 67 65 73 20 66 6f 72 6d 20 61 20  ow pages form a 
95b0: 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e 20 20 5e 54  linked.list.  ^T
95c0: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 62 79  he first four by
95d0: 74 65 73 20 6f 66 20 65 61 63 68 20 6f 76 65 72  tes of each over
95e0: 66 6c 6f 77 20 70 61 67 65 20 61 72 65 20 61 20  flow page are a 
95f0: 62 69 67 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67  big-endian.integ
9600: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
9610: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
9620: 68 65 20 6e 65 78 74 20 70 61 67 65 20 69 6e 20  he next page in 
9630: 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65  the chain, or ze
9640: 72 6f 0a 66 6f 72 20 74 68 65 20 66 69 6e 61 6c  ro.for the final
9650: 20 70 61 67 65 20 69 6e 20 74 68 65 20 63 68 61   page in the cha
9660: 69 6e 2e 20 20 5e 54 68 65 20 66 69 66 74 68 20  in.  ^The fifth 
9670: 62 79 74 65 20 74 68 72 6f 75 67 68 20 74 68 65  byte through the
9680: 20 6c 61 73 74 20 75 73 61 62 6c 65 0a 62 79 74   last usable.byt
9690: 65 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  e are used to ho
96a0: 6c 64 20 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74  ld overflow cont
96b0: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e  ent.</p>..<h3>1.
96c0: 37 20 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72  7 Pointer Map or
96d0: 20 50 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68   Ptrmap Pages</h
96e0: 33 3e 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d  3>..<p>Pointer m
96f0: 61 70 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67  ap or ptrmap pag
9700: 65 73 20 61 72 65 20 65 78 74 72 61 20 70 61 67  es are extra pag
9710: 65 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  es inserted into
9720: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f   the database.to
9730: 20 6d 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74   make the operat
9740: 69 6f 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63  ion of [auto_vac
9750: 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d  uum] and [increm
9760: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f  ental_vacuum] mo
9770: 64 65 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65  des.more efficie
9780: 6e 74 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20  nt.  Other page 
9790: 74 79 70 65 73 20 69 6e 20 74 68 65 20 64 61 74  types in the dat
97a0: 61 62 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20  abase typically 
97b0: 68 61 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72  have pointers.fr
97c0: 6f 6d 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69  om parent to chi
97d0: 6c 64 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ld.  For example
97e0: 2c 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  , an interior b-
97f0: 74 72 65 65 20 70 61 67 65 20 63 6f 6e 74 61 69  tree page contai
9800: 6e 73 20 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69  ns pointers.to i
9810: 74 73 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20  ts child b-tree 
9820: 70 61 67 65 73 20 61 6e 64 20 61 6e 20 6f 76 65  pages and an ove
9830: 72 66 6c 6f 77 20 63 68 61 69 6e 20 68 61 73 20  rflow chain has 
9840: 61 20 70 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65  a pointer.from e
9850: 61 72 6c 69 65 72 20 74 6f 20 6c 61 74 65 72 20  arlier to later 
9860: 6c 69 6e 6b 73 20 69 6e 20 74 68 65 20 63 68 61  links in the cha
9870: 69 6e 2e 20 20 41 20 70 74 72 6d 61 70 20 70 61  in.  A ptrmap pa
9880: 67 65 20 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b  ge contains link
9890: 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  age.information 
98a0: 67 6f 69 6e 67 20 69 6e 20 74 68 65 20 6f 70 70  going in the opp
98b0: 6f 73 69 74 65 20 64 69 72 65 63 74 69 6f 6e 2c  osite direction,
98c0: 20 66 72 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70   from child to p
98d0: 61 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  arent.</p>..<p>^
98e0: 50 74 72 6d 61 70 20 70 61 67 65 73 20 6d 75 73  Ptrmap pages mus
98f0: 74 20 65 78 69 73 74 20 69 6e 20 61 6e 79 20 64  t exist in any d
9900: 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 69  atabase file whi
9910: 63 68 20 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72  ch has a non-zer
9920: 6f 0a 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62  o.largest root b
9930: 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c 75 65  -tree page value
9940: 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 6e   at offset 52 in
9950: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
9960: 61 64 65 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61  ader..^If the la
9970: 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65  rgest root b-tre
9980: 65 20 70 61 67 65 20 76 61 6c 75 65 20 69 73 20  e page value is 
9990: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 64  zero, then the d
99a0: 61 74 61 62 61 73 65 20 6d 75 73 74 20 6e 6f 74  atabase must not
99b0: 0a 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20  .contain ptrmap 
99c0: 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  pages.</p>..<p>^
99d0: 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 77 69  In a database wi
99e0: 74 68 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c  th ptrmap pages,
99f0: 20 74 68 65 20 66 69 72 73 74 20 70 74 72 6d 61   the first ptrma
9a00: 70 20 70 61 67 65 20 69 73 20 70 61 67 65 20 32  p page is page 2
9a10: 2e 0a 41 20 70 74 72 6d 61 70 20 70 61 67 65 20  ..A ptrmap page 
9a20: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
9a30: 72 72 61 79 20 6f 66 20 35 2d 62 79 74 65 20 65  rray of 5-byte e
9a40: 6e 74 72 69 65 73 2e 20 20 4c 65 74 20 4a 20 62  ntries.  Let J b
9a50: 65 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20  e the.number of 
9a60: 35 2d 62 79 74 65 20 65 6e 74 72 69 65 73 20 74  5-byte entries t
9a70: 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20  hat will fit in 
9a80: 74 68 65 20 75 73 61 62 6c 65 20 73 70 61 63 65  the usable space
9a90: 20 6f 66 20 61 20 70 61 67 65 2e 0a 28 49 6e 20   of a page..(In 
9aa0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55  other words, J=U
9ab0: 2f 35 2e 29 20 20 5e 54 68 65 20 66 69 72 73 74  /5.)  ^The first
9ac0: 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c   ptrmap page wil
9ad0: 6c 20 63 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70  l contain back p
9ae0: 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69  ointer.informati
9af0: 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 33 20 74  on for pages 3 t
9b00: 68 72 6f 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c  hrough J+2, incl
9b10: 75 73 69 76 65 2e 20 20 5e 54 68 65 20 73 65 63  usive.  ^The sec
9b20: 6f 6e 64 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a  ond pointer map.
9b30: 70 61 67 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20  page will be on 
9b40: 70 61 67 65 20 4a 2b 33 20 61 6e 64 20 74 68 61  page J+3 and tha
9b50: 74 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69  t ptrmap page wi
9b60: 6c 6c 20 70 72 6f 76 69 64 65 20 62 61 63 6b 20  ll provide back 
9b70: 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74  pointer.informat
9b80: 69 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 4a 2b  ion for pages J+
9b90: 34 20 74 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20  4 through 2*J+3 
9ba0: 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6e 64 20  inclusive.  And 
9bb0: 73 6f 20 66 6f 72 74 68 20 66 6f 72 0a 74 68 65  so forth for.the
9bc0: 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
9bd0: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   file.</p>..<p>^
9be0: 28 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 74  (In a database t
9bf0: 68 61 74 20 75 73 65 73 20 70 74 72 6d 61 70 20  hat uses ptrmap 
9c00: 70 61 67 65 73 2c 20 61 6c 6c 20 70 61 67 65 73  pages, all pages
9c10: 20 61 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64   at locations id
9c20: 65 6e 74 69 66 69 65 64 0a 62 79 20 74 68 65 20  entified.by the 
9c30: 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 74  computation in t
9c40: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
9c50: 67 72 61 70 68 20 6d 75 73 74 20 62 65 20 70 74  graph must be pt
9c60: 72 6d 61 70 20 70 61 67 65 20 61 6e 64 20 6e 6f  rmap page and no
9c70: 0a 6f 74 68 65 72 20 70 61 67 65 20 6d 61 79 20  .other page may 
9c80: 62 65 20 61 20 70 74 72 6d 61 70 20 70 61 67 65  be a ptrmap page
9c90: 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 74 68  .  Except, if th
9ca0: 65 20 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65  e byte-lock page
9cb0: 20 68 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c   happens to.fall
9cc0: 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67   on the same pag
9cd0: 65 20 6e 75 6d 62 65 72 20 61 73 20 61 20 70 74  e number as a pt
9ce0: 72 6d 61 70 20 70 61 67 65 2c 20 74 68 65 6e 20  rmap page, then 
9cf0: 74 68 65 20 70 74 72 6d 61 70 20 69 73 20 6d 6f  the ptrmap is mo
9d00: 76 65 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ved.to the follo
9d10: 77 69 6e 67 20 70 61 67 65 20 66 6f 72 20 74 68  wing page for th
9d20: 61 74 20 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f  at one case.)^</
9d30: 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79  p>..<p>Each 5-by
9d40: 74 65 20 65 6e 74 72 79 20 6f 6e 20 61 20 70 74  te entry on a pt
9d50: 72 6d 61 70 20 70 61 67 65 20 70 72 6f 76 69 64  rmap page provid
9d60: 65 73 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66  es back-link inf
9d70: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a  ormation about .
9d80: 6f 6e 65 20 6f 66 20 74 68 65 20 70 61 67 65 73  one of the pages
9d90: 20 74 68 61 74 20 69 6d 6d 65 64 69 61 74 65 6c   that immediatel
9da0: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70 6f 69  y follow the poi
9db0: 6e 74 65 72 20 6d 61 70 2e 20 20 5e 28 49 66 20  nter map.  ^(If 
9dc0: 70 61 67 65 20 42 20 69 73 20 61 0a 70 74 72 6d  page B is a.ptrm
9dd0: 61 70 20 70 61 67 65 20 74 68 65 6e 20 62 61 63  ap page then bac
9de0: 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69  k-link informati
9df0: 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b  on about page B+
9e00: 31 20 69 73 20 70 72 6f 76 69 64 65 64 20 62 79  1 is provided by
9e10: 0a 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79  .the first entry
9e20: 20 6f 6e 20 74 68 65 20 70 6f 69 6e 74 65 72 20   on the pointer 
9e30: 6d 61 70 2e 20 20 49 6e 66 6f 72 6d 61 74 69 6f  map.  Informatio
9e40: 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b 32  n about page B+2
9e50: 20 69 73 0a 70 72 6f 76 69 64 65 64 20 62 79 20   is.provided by 
9e60: 74 68 65 20 73 65 63 6f 6e 64 20 65 6e 74 72 79  the second entry
9e70: 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e  .  And so forth.
9e80: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20  )^</p>..<p>Each 
9e90: 35 2d 62 79 74 65 20 70 74 72 6d 61 70 20 65 6e  5-byte ptrmap en
9ea0: 74 72 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  try consists of 
9eb0: 6f 6e 65 20 62 79 74 65 20 6f 66 20 22 70 61 67  one byte of "pag
9ec0: 65 20 74 79 70 65 22 20 69 6e 66 6f 72 6d 61 74  e type" informat
9ed0: 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ion.followed by 
9ee0: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
9ef0: 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  ian page number.
9f00: 20 20 46 69 76 65 20 70 61 67 65 20 74 79 70 65    Five page type
9f10: 73 20 61 72 65 20 72 65 63 6f 67 6e 69 7a 65 64  s are recognized
9f20: 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  :.</p>..<ol>.<li
9f30: 3e 41 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70  >A b-tree root p
9f40: 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e  age.  The.page n
9f50: 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65 20  umber should be 
9f60: 7a 65 72 6f 2e 0a 3c 6c 69 3e 41 20 66 72 65 65  zero..<li>A free
9f70: 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 65 20  list page.  The 
9f80: 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68 6f 75  page number shou
9f90: 6c 64 20 62 65 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e  ld be.zero..<li>
9fa0: 54 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  The first page o
9fb0: 66 20 61 0a 63 65 6c 6c 20 70 61 79 6c 6f 61 64  f a.cell payload
9fc0: 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e   overflow chain.
9fd0: 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65    The page numbe
9fe0: 72 20 69 73 20 74 68 65 20 62 2d 74 72 65 65 20  r is the b-tree 
9ff0: 70 61 67 65 20 74 68 61 74 0a 63 6f 6e 74 61 69  page that.contai
a000: 6e 73 20 74 68 65 20 63 65 6c 6c 20 77 68 6f 73  ns the cell whos
a010: 65 20 63 6f 6e 74 65 6e 74 20 68 61 73 20 6f 76  e content has ov
a020: 65 72 66 6c 6f 77 65 64 2e 0a 3c 6c 69 3e 41 20  erflowed..<li>A 
a030: 70 61 67 65 20 69 6e 20 61 6e 20 6f 76 65 72 66  page in an overf
a040: 6c 6f 77 20 63 68 61 69 6e 0a 6f 74 68 65 72 20  low chain.other 
a050: 74 68 61 6e 20 74 68 65 20 66 69 72 73 74 20 70  than the first p
a060: 61 67 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e  age.  The page n
a070: 75 6d 62 65 72 20 69 73 20 74 68 65 20 70 72 69  umber is the pri
a080: 6f 72 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f  or page of the.o
a090: 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e 0a 3c  verflow chain..<
a0a0: 6c 69 3e 41 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d  li>A non-root b-
a0b0: 74 72 65 65 20 70 61 67 65 2e 20 20 54 68 65 0a  tree page.  The.
a0c0: 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74  page number is t
a0d0: 68 65 20 70 61 72 65 6e 74 20 62 2d 74 72 65 65  he parent b-tree
a0e0: 20 70 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   page..</ol>..<p
a0f0: 3e 5e 49 6e 20 61 6e 79 20 64 61 74 61 62 61 73  >^In any databas
a100: 65 20 66 69 6c 65 20 74 68 61 74 20 63 6f 6e 74  e file that cont
a110: 61 69 6e 73 20 70 74 72 6d 61 70 20 70 61 67 65  ains ptrmap page
a120: 73 2c 20 61 6c 6c 20 62 2d 74 72 65 65 20 72 6f  s, all b-tree ro
a130: 6f 74 20 70 61 67 65 73 20 0a 6d 75 73 74 20 63  ot pages .must c
a140: 6f 6d 65 20 62 65 66 6f 72 65 20 61 6e 79 20 6e  ome before any n
a150: 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  on-root b-tree p
a160: 61 67 65 2c 20 63 65 6c 6c 20 70 61 79 6c 6f 61  age, cell payloa
a170: 64 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2c  d overflow page,
a180: 20 6f 72 0a 66 72 65 65 6c 69 73 74 20 70 61 67   or.freelist pag
a190: 65 2e 20 20 54 68 69 73 20 72 65 73 74 72 69 63  e.  This restric
a1a0: 74 69 6f 6e 20 65 6e 73 75 72 65 73 20 74 68 61  tion ensures tha
a1b0: 74 20 61 20 72 6f 6f 74 20 70 61 67 65 20 77 69  t a root page wi
a1c0: 6c 6c 20 6e 65 76 65 72 0a 62 65 20 6d 6f 76 65  ll never.be move
a1d0: 64 20 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f  d during an auto
a1e0: 2d 76 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65  -vacuum or incre
a1f0: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 2e 20 20  mental-vacuum.  
a200: 54 68 65 20 61 75 74 6f 2d 76 61 63 75 75 6d 0a  The auto-vacuum.
a210: 6c 6f 67 69 63 20 64 6f 65 73 20 6e 6f 74 20 6b  logic does not k
a220: 6e 6f 77 20 68 6f 77 20 74 6f 20 75 70 64 61 74  now how to updat
a230: 65 20 74 68 65 20 72 6f 6f 74 5f 70 61 67 65 20  e the root_page 
a240: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
a250: 69 74 65 5f 6d 61 73 74 65 72 0a 74 61 62 6c 65  ite_master.table
a260: 20 61 6e 64 20 73 6f 20 69 74 20 69 73 20 6e 65   and so it is ne
a270: 63 65 73 73 61 72 79 20 74 6f 20 70 72 65 76 65  cessary to preve
a280: 6e 74 20 72 6f 6f 74 20 70 61 67 65 73 20 66 72  nt root pages fr
a290: 6f 6d 20 62 65 69 6e 67 20 6d 6f 76 65 64 0a 64  om being moved.d
a2a0: 75 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61  uring an auto-va
a2b0: 63 75 75 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f  cuum in order to
a2c0: 20 70 72 65 73 65 72 76 65 20 74 68 65 20 69 6e   preserve the in
a2d0: 74 65 67 72 69 74 79 20 6f 66 20 74 68 65 0a 73  tegrity of the.s
a2e0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
a2f0: 6c 65 2e 20 20 5e 52 6f 6f 74 20 70 61 67 65 73  le.  ^Root pages
a300: 20 61 72 65 20 6d 6f 76 65 64 20 74 6f 20 74 68   are moved to th
a310: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
a320: 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  he.database file
a330: 20 62 79 20 74 68 65 20 43 52 45 41 54 45 20 54   by the CREATE T
a340: 41 42 4c 45 2c 20 43 52 45 41 54 45 20 49 4e 44  ABLE, CREATE IND
a350: 45 58 2c 20 44 52 4f 50 20 54 41 42 4c 45 2c 20  EX, DROP TABLE, 
a360: 61 6e 64 0a 44 52 4f 50 20 49 4e 44 45 58 20 6f  and.DROP INDEX o
a370: 70 65 72 61 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a  perations.</p>..
a380: 3c 68 32 3e 32 2e 30 20 53 63 68 65 6d 61 20 4c  <h2>2.0 Schema L
a390: 61 79 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  ayer</h2>..<p>Th
a3a0: 65 20 66 6f 72 65 67 6f 69 6e 67 20 74 65 78 74  e foregoing text
a3b0: 20 64 65 73 63 72 69 62 65 73 20 6c 6f 77 2d 6c   describes low-l
a3c0: 65 76 65 6c 20 61 73 70 65 63 74 73 20 6f 66 20  evel aspects of 
a3d0: 74 68 65 20 53 51 4c 69 74 65 20 66 69 6c 65 0a  the SQLite file.
a3e0: 66 6f 72 6d 61 74 2e 20 20 54 68 65 20 62 2d 74  format.  The b-t
a3f0: 72 65 65 20 6d 65 63 68 61 6e 69 73 6d 20 70 72  ree mechanism pr
a400: 6f 76 69 64 65 73 20 61 20 70 6f 77 65 72 66 75  ovides a powerfu
a410: 6c 20 61 6e 64 20 65 66 66 69 63 69 65 6e 74 20  l and efficient 
a420: 6d 65 61 6e 73 20 6f 66 0a 61 63 63 65 73 73 69  means of.accessi
a430: 6e 67 20 61 20 6c 61 72 67 65 20 64 61 74 61 20  ng a large data 
a440: 73 65 74 2e 20 20 54 68 69 73 20 73 65 63 74 69  set.  This secti
a450: 6f 6e 20 77 69 6c 6c 20 64 65 73 63 72 69 62 65  on will describe
a460: 20 68 6f 77 20 74 68 65 0a 6c 6f 77 2d 6c 65 76   how the.low-lev
a470: 65 6c 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  el b-tree layer 
a480: 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
a490: 6d 65 6e 74 20 68 69 67 68 65 72 2d 6c 65 76 65  ment higher-leve
a4a0: 6c 20 53 51 4c 0a 63 61 70 61 62 69 6c 69 74 69  l SQL.capabiliti
a4b0: 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  es.</p>..<tcl>hd
a4c0: 5f 66 72 61 67 6d 65 6e 74 20 72 65 63 6f 72 64  _fragment record
a4d0: 5f 66 6f 72 6d 61 74 20 7b 72 65 63 6f 72 64 20  _format {record 
a4e0: 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  format}</tcl>.<h
a4f0: 33 3e 32 2e 31 20 52 65 63 6f 72 64 20 46 6f 72  3>2.1 Record For
a500: 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  mat</h3>..<p>The
a510: 20 64 61 74 61 20 66 6f 72 20 61 20 74 61 62 6c   data for a tabl
a520: 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61  e b-tree leaf pa
a530: 67 65 20 61 6e 64 20 74 68 65 20 6b 65 79 0a 6f  ge and the key.o
a540: 66 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  f an index b-tre
a550: 65 20 70 61 67 65 20 77 61 73 20 63 68 61 72 61  e page was chara
a560: 63 74 65 72 69 7a 65 64 20 61 62 6f 76 65 0a 61  cterized above.a
a570: 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73  s an arbitrary s
a580: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
a590: 2e 0a 54 68 65 20 70 72 69 6f 72 20 64 69 73 63  ..The prior disc
a5a0: 75 73 73 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64  ussion mentioned
a5b0: 20 6f 6e 65 20 6b 65 79 20 62 65 69 6e 67 20 6c   one key being l
a5c0: 65 73 73 20 74 68 61 6e 20 61 6e 6f 74 68 65 72  ess than another
a5d0: 2c 20 62 75 74 0a 64 69 64 20 6e 6f 74 20 64 65  , but.did not de
a5e0: 66 69 6e 65 20 77 68 61 74 20 22 6c 65 73 73 20  fine what "less 
a5f0: 74 68 61 6e 22 20 6d 65 61 6e 74 2e 20 20 54 68  than" meant.  Th
a600: 65 20 63 75 72 72 65 6e 74 20 73 65 63 74 69 6f  e current sectio
a610: 6e 20 77 69 6c 6c 20 61 64 64 72 65 73 73 0a 74  n will address.t
a620: 68 65 73 65 20 6f 6d 69 73 73 69 6f 6e 73 2e 3c  hese omissions.<
a630: 2f 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f 61 64 2c  /p>..<p>Payload,
a640: 20 65 69 74 68 65 72 20 74 61 62 6c 65 20 62 2d   either table b-
a650: 74 72 65 65 20 64 61 74 61 20 6f 72 20 69 6e 64  tree data or ind
a660: 65 78 20 62 2d 74 72 65 65 20 6b 65 79 73 2c 20  ex b-tree keys, 
a670: 0a 69 73 20 61 6c 77 61 79 73 20 69 6e 20 74 68  .is always in th
a680: 65 20 22 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e "record format
a690: 22 2e 0a 54 68 65 20 72 65 63 6f 72 64 20 66 6f  "..The record fo
a6a0: 72 6d 61 74 20 64 65 66 69 6e 65 73 20 61 20 73  rmat defines a s
a6b0: 65 71 75 65 6e 63 65 20 6f 66 20 76 61 6c 75 65  equence of value
a6c0: 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a  s corresponding.
a6d0: 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20  to columns in a 
a6e0: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
a6f0: 20 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   The record form
a700: 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
a710: 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f 6c 75 6d   number.of colum
a720: 6e 73 2c 20 74 68 65 20 64 61 74 61 74 79 70 65  ns, the datatype
a730: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c   of each column,
a740: 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74   and the content
a750: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e   of each column.
a760: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 63  </p>..<p>The rec
a770: 6f 72 64 20 66 6f 72 6d 61 74 20 6d 61 6b 65 73  ord format makes
a780: 20 65 78 74 65 6e 73 69 76 65 20 75 73 65 20 6f   extensive use o
a790: 66 20 74 68 65 20 0a 5b 76 61 72 69 61 62 6c 65  f the .[variable
a7a0: 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 5d  -length integer]
a7b0: 20 6f 72 20 5b 76 61 72 69 6e 74 5d 0a 72 65 70   or [varint].rep
a7c0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 36  resentation of 6
a7d0: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
a7e0: 65 67 65 72 73 20 64 65 66 69 6e 65 64 20 61 62  egers defined ab
a7f0: 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ove.</p>..<tcl>h
a800: 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 72 69 61  d_fragment seria
a810: 6c 74 79 70 65 20 7b 73 65 72 69 61 6c 20 74 79  ltype {serial ty
a820: 70 65 7d 20 7b 73 65 72 69 61 6c 20 74 79 70 65  pe} {serial type
a830: 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41 20 72 65  s}</tcl>.<p>A re
a840: 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 61 20  cord contains a 
a850: 68 65 61 64 65 72 20 61 6e 64 20 61 20 62 6f 64  header and a bod
a860: 79 2c 20 69 6e 20 74 68 61 74 20 6f 72 64 65 72  y, in that order
a870: 2e 20 20 0a 5e 28 54 68 65 20 68 65 61 64 65 72  .  .^(The header
a880: 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20 73   begins with a s
a890: 69 6e 67 6c 65 20 76 61 72 69 6e 74 20 77 68 69  ingle varint whi
a8a0: 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  ch determines th
a8b0: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 0a 6f  e total number.o
a8c0: 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68  f bytes in the h
a8d0: 65 61 64 65 72 2e 20 20 54 68 65 20 76 61 72 69  eader.  The vari
a8e0: 6e 74 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  nt value is the 
a8f0: 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  size of the head
a900: 65 72 20 69 6e 0a 62 79 74 65 73 20 69 6e 63 6c  er in.bytes incl
a910: 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  uding the size v
a920: 61 72 69 6e 74 20 69 74 73 65 6c 66 2e 29 5e 20  arint itself.)^ 
a930: 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20   ^Following the 
a940: 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65 0a  size varint are.
a950: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 64 64 69  one or more addi
a960: 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20  tional varints, 
a970: 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20  one per column. 
a980: 20 54 68 65 73 65 20 61 64 64 69 74 69 6f 6e 61   These additiona
a990: 6c 20 76 61 72 69 6e 74 73 0a 61 72 65 20 63 61  l varints.are ca
a9a0: 6c 6c 65 64 20 22 73 65 72 69 61 6c 20 74 79 70  lled "serial typ
a9b0: 65 22 20 6e 75 6d 62 65 72 73 20 61 6e 64 0a 64  e" numbers and.d
a9c0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64 61 74  etermine the dat
a9d0: 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f  atype of each co
a9e0: 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69 6e 67 20  lumn, according 
a9f0: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
aa00: 20 63 68 61 72 74 3a 3c 2f 70 3e 0a 0a 3c 63 65   chart:</p>..<ce
aa10: 6e 74 65 72 3e 0a 3c 69 3e 53 65 72 69 61 6c 20  nter>.<i>Serial 
aa20: 54 79 70 65 20 43 6f 64 65 73 20 4f 66 20 54 68  Type Codes Of Th
aa30: 65 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c  e Record Format<
aa40: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
aa50: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
aa60: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 53 65 72  r=1>.<tr><th>Ser
aa70: 69 61 6c 20 54 79 70 65 3c 74 68 3e 43 6f 6e 74  ial Type<th>Cont
aa80: 65 6e 74 20 53 69 7a 65 3c 74 68 3e 4d 65 61 6e  ent Size<th>Mean
aa90: 69 6e 67 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ing.<tr><td vali
aaa0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
aab0: 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>0<td valign=
aac0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
aad0: 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >0<td align=left
aae0: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 4e 55  >.^Value is a NU
aaf0: 4c 4c 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  LL..<tr><td vali
ab00: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
ab10: 74 65 72 3e 31 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>1<td valign=
ab20: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
ab30: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
ab40: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 6e 20 38  >.^Value is an 8
ab50: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
ab60: 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74  ment integer..<t
ab70: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
ab80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c   align=center>2<
ab90: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
aba0: 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20  ign=center>2<td 
abb0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c  align=left>.^Val
abc0: 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69  ue is a big-endi
abd0: 61 6e 20 31 36 2d 62 69 74 20 74 77 6f 73 2d 63  an 16-bit twos-c
abe0: 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65  omplement intege
abf0: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
ac00: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
ac10: 65 72 3e 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>3<td valign=t
ac20: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
ac30: 33 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  3<td align=left>
ac40: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67  .^Value is a big
ac50: 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69 74 20 74  -endian 24-bit t
ac60: 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69  wos-complement i
ac70: 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  nteger..<tr><td 
ac80: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
ac90: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c  =center>4<td val
aca0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
acb0: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
acc0: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
acd0: 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d  a big-endian 32-
ace0: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
acf0: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72  ent integer..<tr
ad00: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
ad10: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 3c 74  align=center>5<t
ad20: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
ad30: 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 61  gn=center>6<td a
ad40: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75  lign=left>.^Valu
ad50: 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61  e is a big-endia
ad60: 6e 20 34 38 2d 62 69 74 20 74 77 6f 73 2d 63 6f  n 48-bit twos-co
ad70: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
ad80: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
ad90: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
ada0: 72 3e 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>6<td valign=to
adb0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
adc0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
add0: 5e 56 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d  ^Value is a big-
ade0: 65 6e 64 69 61 6e 20 36 34 2d 62 69 74 20 74 77  endian 64-bit tw
adf0: 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  os-complement in
ae00: 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76  teger..<tr><td v
ae10: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
ae20: 63 65 6e 74 65 72 3e 37 3c 74 64 20 76 61 6c 69  center>7<td vali
ae30: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
ae40: 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>8<td align=l
ae50: 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61  eft>.^Value is a
ae60: 20 62 69 67 2d 65 6e 64 69 61 6e 20 49 45 45 45   big-endian IEEE
ae70: 20 37 35 34 2d 32 30 30 38 20 36 34 2d 62 69 74   754-2008 64-bit
ae80: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
ae90: 6e 75 6d 62 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  number..<tr><td 
aea0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
aeb0: 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c  =center>8<td val
aec0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
aed0: 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d  nter>0<td align=
aee0: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
aef0: 74 68 65 20 69 6e 74 65 67 65 72 20 30 2e 20 28  the integer 0. (
af00: 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 66  Only available f
af10: 6f 72 20 5b 73 63 68 65 6d 61 20 66 6f 72 6d 61  or [schema forma
af20: 74 5d 20 34 20 61 6e 64 20 68 69 67 68 65 72 2e  t] 4 and higher.
af30: 29 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ).<tr><td valign
af40: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
af50: 72 3e 39 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>9<td valign=to
af60: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
af70: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
af80: 5e 56 61 6c 75 65 20 69 73 20 74 68 65 20 69 6e  ^Value is the in
af90: 74 65 67 65 72 20 31 2e 20 28 4f 6e 6c 79 20 61  teger 1. (Only a
afa0: 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 5b 73 63  vailable for [sc
afb0: 68 65 6d 61 20 66 6f 72 6d 61 74 5d 20 34 20 61  hema format] 4 a
afc0: 6e 64 20 68 69 67 68 65 72 2e 29 0a 3c 74 72 3e  nd higher.).<tr>
afd0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
afe0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 30 2c 31  lign=center>10,1
aff0: 31 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  1.    <td valign
b000: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b010: 72 3e 26 6e 62 73 70 3b 3c 74 64 20 61 6c 69 67  r>&nbsp;<td alig
b020: 6e 3d 6c 65 66 74 3e 0a 3c 69 3e 4e 6f 74 20 75  n=left>.<i>Not u
b030: 73 65 64 2e 20 20 52 65 73 65 72 76 65 64 20 66  sed.  Reserved f
b040: 6f 72 20 65 78 70 61 6e 73 69 6f 6e 2e 3c 2f 69  or expansion.</i
b050: 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  >.<tr><td valign
b060: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b070: 72 3e 4e 26 23 78 32 32 36 35 3b 31 32 20 61 6e  r>N&#x2265;12 an
b080: 64 20 65 76 65 6e 0a 20 20 20 20 3c 74 64 20 76  d even.    <td v
b090: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b0a0: 63 65 6e 74 65 72 3e 28 4e 2d 31 32 29 2f 32 3c  center>(N-12)/2<
b0b0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e  td align=left>.^
b0c0: 56 61 6c 75 65 20 69 73 20 61 20 42 4c 4f 42 20  Value is a BLOB 
b0d0: 74 68 61 74 20 69 73 20 28 4e 2d 31 32 29 2f 32  that is (N-12)/2
b0e0: 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
b0f0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
b100: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b110: 72 3e 4e 26 23 78 32 32 36 35 3b 31 33 20 61 6e  r>N&#x2265;13 an
b120: 64 20 6f 64 64 0a 20 20 20 20 3c 74 64 20 76 61  d odd.    <td va
b130: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
b140: 65 6e 74 65 72 3e 28 4e 2d 31 33 29 2f 32 3c 74  enter>(N-13)/2<t
b150: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56  d align=left>.^V
b160: 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67  alue is a string
b170: 20 69 6e 20 74 68 65 20 5b 74 65 78 74 20 65 6e   in the [text en
b180: 63 6f 64 69 6e 67 5d 20 61 6e 64 20 28 4e 2d 31  coding] and (N-1
b190: 33 29 2f 32 20 62 79 74 65 73 20 69 6e 20 6c 65  3)/2 bytes in le
b1a0: 6e 67 74 68 2e 0a 5e 54 68 65 20 6e 75 6c 20 74  ngth..^The nul t
b1b0: 65 72 6d 69 6e 61 74 6f 72 20 69 73 20 6e 6f 74  erminator is not
b1c0: 20 73 74 6f 72 65 64 2e 0a 3c 2f 74 61 62 6c 65   stored..</table
b1d0: 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 4e  ></center>..<p>N
b1e0: 6f 74 65 20 74 68 61 74 20 62 65 63 61 75 73 65  ote that because
b1f0: 20 6f 66 20 74 68 65 20 77 61 79 20 76 61 72 69   of the way vari
b200: 6e 74 73 20 61 72 65 20 64 65 66 69 6e 65 64 2c  nts are defined,
b210: 20 74 68 65 20 68 65 61 64 65 72 20 73 69 7a 65   the header size
b220: 20 76 61 72 69 6e 74 0a 61 6e 64 20 73 65 72 69   varint.and seri
b230: 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73 20  al type varints 
b240: 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 63 6f 6e  will usually con
b250: 73 69 73 74 20 6f 66 20 61 20 73 69 6e 67 6c 65  sist of a single
b260: 20 62 79 74 65 2e 20 20 54 68 65 0a 73 65 72 69   byte.  The.seri
b270: 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73 20  al type varints 
b280: 66 6f 72 20 6c 61 72 67 65 20 73 74 72 69 6e 67  for large string
b290: 73 20 61 6e 64 20 42 4c 4f 42 73 20 6d 69 67 68  s and BLOBs migh
b2a0: 74 20 65 78 74 65 6e 64 20 74 6f 20 74 77 6f 20  t extend to two 
b2b0: 6f 72 20 74 68 72 65 65 0a 62 79 74 65 20 76 61  or three.byte va
b2c0: 72 69 6e 74 73 2c 20 62 75 74 20 74 68 61 74 20  rints, but that 
b2d0: 69 73 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e  is the exception
b2e0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65   rather than the
b2f0: 20 72 75 6c 65 2e 20 0a 54 68 65 20 76 61 72 69   rule. .The vari
b300: 6e 74 20 66 6f 72 6d 61 74 20 69 73 20 76 65 72  nt format is ver
b310: 79 20 65 66 66 69 63 69 65 6e 74 20 61 74 20 63  y efficient at c
b320: 6f 64 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oding the record
b330: 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70   header.</p>..<p
b340: 3e 5e 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72  >^The values for
b350: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
b360: 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64  the record immed
b370: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68  iately follow th
b380: 65 20 68 65 61 64 65 72 2e 0a 5e 28 4e 6f 74 65  e header..^(Note
b390: 20 74 68 61 74 20 66 6f 72 20 73 65 72 69 61 6c   that for serial
b3a0: 20 74 79 70 65 73 20 30 2c 20 38 2c 20 39 2c 20   types 0, 8, 9, 
b3b0: 31 32 2c 20 61 6e 64 20 31 33 2c 20 74 68 65 20  12, and 13, the 
b3c0: 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 20 62 79  value is zero by
b3d0: 74 65 73 20 69 6e 0a 6c 65 6e 67 74 68 2e 20 20  tes in.length.  
b3e0: 49 66 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 61  If all columns a
b3f0: 72 65 20 6f 66 20 74 68 65 73 65 20 74 79 70 65  re of these type
b400: 73 20 74 68 65 6e 20 74 68 65 20 62 6f 64 79 20  s then the body 
b410: 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 0a 72  section of the.r
b420: 65 63 6f 72 64 20 69 73 20 65 6d 70 74 79 2e 29  ecord is empty.)
b430: 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 32 20 52  ^</p>..<h3>2.2 R
b440: 65 63 6f 72 64 20 53 6f 72 74 20 4f 72 64 65 72  ecord Sort Order
b450: 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 6f 72  </h3>..<p>The or
b460: 64 65 72 20 6f 66 20 6b 65 79 73 20 69 6e 20 61  der of keys in a
b470: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69  n index b-tree i
b480: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
b490: 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6f  the sort order o
b4a0: 66 0a 74 68 65 20 72 65 63 6f 72 64 73 20 74 68  f.the records th
b4b0: 61 74 20 74 68 65 20 6b 65 79 73 20 72 65 70 72  at the keys repr
b4c0: 65 73 65 6e 74 2e 20 20 52 65 63 6f 72 64 20 63  esent.  Record c
b4d0: 6f 6d 70 61 72 69 73 6f 6e 20 70 72 6f 67 72 65  omparison progre
b4e0: 73 73 65 73 20 63 6f 6c 75 6d 6e 0a 62 79 20 63  sses column.by c
b4f0: 6f 6c 75 6d 6e 2e 20 20 43 6f 6c 75 6d 6e 73 20  olumn.  Columns 
b500: 6f 66 20 61 20 72 65 63 6f 72 64 20 61 72 65 20  of a record are 
b510: 65 78 61 6d 69 6e 65 64 20 66 72 6f 6d 20 6c 65  examined from le
b520: 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20 54 68  ft to right.  Th
b530: 65 0a 66 69 72 73 74 20 70 61 69 72 20 6f 66 20  e.first pair of 
b540: 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65  columns that are
b550: 20 6e 6f 74 20 65 71 75 61 6c 20 64 65 74 65 72   not equal deter
b560: 6d 69 6e 65 73 20 74 68 65 20 72 65 6c 61 74 69  mines the relati
b570: 76 65 20 6f 72 64 65 72 0a 6f 66 20 74 68 65 20  ve order.of the 
b580: 74 77 6f 20 72 65 63 6f 72 64 73 2e 20 20 54 68  two records.  Th
b590: 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6f 66 20  e sort order of 
b5a0: 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d  individual colum
b5b0: 6e 73 20 69 73 20 61 73 0a 66 6f 6c 6c 6f 77 73  ns is as.follows
b5c0: 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
b5d0: 5e 28 4e 55 4c 4c 20 76 61 6c 75 65 73 20 28 73  ^(NULL values (s
b5e0: 65 72 69 61 6c 20 74 79 70 65 20 30 29 20 73 6f  erial type 0) so
b5f0: 72 74 20 66 69 72 73 74 2e 29 5e 0a 3c 6c 69 3e  rt first.)^.<li>
b600: 5e 28 4e 75 6d 65 72 69 63 20 76 61 6c 75 65 73  ^(Numeric values
b610: 20 28 73 65 72 69 61 6c 20 74 79 70 65 73 20 31   (serial types 1
b620: 20 74 68 72 6f 75 67 68 20 39 29 20 73 6f 72 74   through 9) sort
b630: 20 61 66 74 65 72 20 4e 55 4c 4c 73 0a 20 20 20   after NULLs.   
b640: 20 20 20 61 6e 64 20 69 6e 20 6e 75 6d 65 72 69     and in numeri
b650: 63 20 6f 72 64 65 72 2e 29 5e 0a 3c 6c 69 3e 5e  c order.)^.<li>^
b660: 28 54 65 78 74 20 76 61 6c 75 65 73 20 28 6f 64  (Text values (od
b670: 64 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 31  d serial types 1
b680: 33 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73 6f  3 and larger) so
b690: 72 74 20 61 66 74 65 72 20 6e 75 6d 65 72 69 63  rt after numeric
b6a0: 0a 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20 74  .    values in t
b6b0: 68 65 20 6f 72 64 65 72 20 64 65 74 65 72 6d 69  he order determi
b6c0: 6e 65 64 20 62 79 20 74 68 65 20 63 6f 6c 75 6d  ned by the colum
b6d0: 6e 73 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ns [collating fu
b6e0: 6e 63 74 69 6f 6e 5d 2e 29 5e 0a 3c 6c 69 3e 5e  nction].)^.<li>^
b6f0: 28 42 4c 4f 42 20 76 61 6c 75 65 73 20 28 65 76  (BLOB values (ev
b700: 65 6e 20 73 65 72 69 61 6c 20 74 79 70 65 73 20  en serial types 
b710: 31 32 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73  12 and larger) s
b720: 6f 72 74 20 6c 61 73 74 20 61 6e 64 20 69 6e 20  ort last and in 
b730: 74 68 65 20 6f 72 64 65 72 20 0a 20 20 20 20 64  the order .    d
b740: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6d 65 6d  etermined by mem
b750: 63 6d 70 28 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 0a  cmp().)^.</ol>..
b760: 3c 70 3e 41 20 5b 63 6f 6c 6c 61 74 69 6e 67 20  <p>A [collating 
b770: 66 75 6e 63 74 69 6f 6e 5d 20 66 6f 72 20 65 61  function] for ea
b780: 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 65 63  ch column is nec
b790: 65 73 73 61 72 79 20 69 6e 20 6f 72 64 65 72 20  essary in order 
b7a0: 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65 20 6f  to compute.the o
b7b0: 72 64 65 72 20 6f 66 20 74 65 78 74 20 66 69 65  rder of text fie
b7c0: 6c 64 73 2e 0a 5e 28 53 51 4c 69 74 65 20 64 65  lds..^(SQLite de
b7d0: 66 69 6e 65 73 20 74 68 72 65 65 20 62 75 69 6c  fines three buil
b7e0: 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 66  t-in collating f
b7f0: 75 6e 63 74 69 6f 6e 73 3a 29 5e 0a 3c 2f 70 3e  unctions:)^.</p>
b800: 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74  ..<blockquote><t
b810: 61 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65  able border=0 ce
b820: 6c 6c 73 70 61 63 69 6e 67 3d 31 30 3e 0a 3c 74  llspacing=10>.<t
b830: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
b840: 3e 42 49 4e 41 52 59 0a 20 20 20 20 3c 74 64 3e  >BINARY.    <td>
b850: 20 5e 28 54 68 65 20 62 75 69 6c 74 2d 69 6e 20   ^(The built-in 
b860: 42 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6f 6e  BINARY collation
b870: 20 63 6f 6d 70 61 72 65 73 20 73 74 72 69 6e 67   compares string
b880: 73 20 62 79 74 65 20 62 79 20 62 79 74 65 0a 20  s byte by byte. 
b890: 20 20 20 20 20 20 20 75 73 69 6e 67 20 74 68 65         using the
b8a0: 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63 74 69   memcmp() functi
b8b0: 6f 6e 0a 20 20 20 20 20 20 20 20 66 72 6f 6d 20  on.        from 
b8c0: 74 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c  the standard C l
b8d0: 69 62 72 61 72 79 2e 29 5e 0a 3c 74 72 3e 3c 74  ibrary.)^.<tr><t
b8e0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f 43  d valign=top>NOC
b8f0: 41 53 45 0a 20 20 20 20 3c 74 64 3e 20 5e 28 54  ASE.    <td> ^(T
b900: 68 65 20 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74  he NOCASE collat
b910: 69 6f 6e 20 69 73 20 6c 69 6b 65 20 42 49 4e 41  ion is like BINA
b920: 52 59 20 65 78 63 65 70 74 20 74 68 61 74 20 75  RY except that u
b930: 70 70 65 72 63 61 73 65 0a 20 20 20 20 20 20 20  ppercase.       
b940: 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
b950: 73 20 28 27 41 27 20 74 68 72 6f 75 67 68 20 27  s ('A' through '
b960: 5a 27 29 0a 20 20 20 20 20 20 20 20 61 72 65 20  Z').        are 
b970: 66 6f 6c 64 65 64 20 69 6e 74 6f 20 74 68 65 69  folded into thei
b980: 72 20 6c 6f 77 65 72 63 61 73 65 20 65 71 75 69  r lowercase equi
b990: 76 61 6c 65 6e 74 73 20 70 72 69 6f 72 20 74 6f  valents prior to
b9a0: 20 72 75 6e 6e 69 6e 67 20 74 68 65 0a 20 20 20   running the.   
b9b0: 20 20 20 20 20 63 6f 6d 70 61 72 69 73 6f 6e 2e       comparison.
b9c0: 20 20 4e 6f 74 65 20 74 68 61 74 20 6f 6e 6c 79    Note that only
b9d0: 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
b9e0: 73 20 61 72 65 20 63 61 73 65 2d 66 6f 6c 64 65  s are case-folde
b9f0: 64 2e 29 5e 0a 20 20 20 20 20 20 20 20 5e 28 4e  d.)^.        ^(N
ba00: 4f 43 41 53 45 0a 20 20 20 20 20 20 20 20 64 6f  OCASE.        do
ba10: 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74  es not implement
ba20: 20 61 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f   a general purpo
ba30: 73 65 20 75 6e 69 63 6f 64 65 20 63 61 73 65 6c  se unicode casel
ba40: 65 73 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 29  ess comparison.)
ba50: 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ^.<tr><td valign
ba60: 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20 20 20 3c  =top>RTRIM.    <
ba70: 74 64 3e 20 5e 28 52 54 52 49 4d 20 69 73 20 6c  td> ^(RTRIM is l
ba80: 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63 65 70  ike BINARY excep
ba90: 74 20 74 68 61 74 20 65 78 74 72 61 20 73 70 61  t that extra spa
baa0: 63 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ces at the end o
bab0: 66 20 65 69 74 68 65 72 0a 20 20 20 20 20 20 20  f either.       
bac0: 20 20 73 74 72 69 6e 67 20 64 6f 20 6e 6f 74 20    string do not 
bad0: 63 68 61 6e 67 65 20 74 68 65 20 72 65 73 75 6c  change the resul
bae0: 74 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  t.  In other wor
baf0: 64 73 2c 20 73 74 72 69 6e 67 73 20 77 69 6c 6c  ds, strings will
bb00: 0a 20 20 20 20 20 20 20 20 20 63 6f 6d 70 61 72  .         compar
bb10: 65 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61  e equal to one a
bb20: 6e 6f 74 68 65 72 20 61 73 20 6c 6f 6e 67 20 61  nother as long a
bb30: 73 20 74 68 65 79 0a 20 20 20 20 20 20 20 20 20  s they.         
bb40: 64 69 66 66 65 72 20 6f 6e 6c 79 20 69 6e 20 74  differ only in t
bb50: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 70 61  he number of spa
bb60: 63 65 73 20 61 74 20 74 68 65 20 65 6e 64 2e 29  ces at the end.)
bb70: 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  ^.</table></bloc
bb80: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41 64 64  kquote>..<p>^Add
bb90: 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74  itional applicat
bba0: 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 63 6f 6c  ion-specific col
bbb0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
bbc0: 20 63 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f   can be added to
bbd0: 0a 53 51 4c 69 74 65 20 75 73 69 6e 67 20 74 68  .SQLite using th
bbe0: 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
bbf0: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d 20 69  e_collation()] i
bc00: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
bc10: 70 3e 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  p>^The default c
bc20: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
bc30: 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
bc40: 73 20 69 73 20 42 49 4e 41 52 59 2e 0a 5e 41 6c  s is BINARY..^Al
bc50: 74 65 72 6e 61 74 69 76 65 20 63 6f 6c 6c 61 74  ternative collat
bc60: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f  ing functions fo
bc70: 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20  r table columns 
bc80: 63 61 6e 20 62 65 20 73 70 65 63 69 66 69 65 64  can be specified
bc90: 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20   in the.[CREATE 
bca0: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
bcb0: 20 75 73 69 6e 67 20 74 68 65 20 43 4f 4c 4c 41   using the COLLA
bcc0: 54 45 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65  TE clause on the
bcd0: 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   [column definit
bce0: 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61 20 63 6f  ion]..^When a co
bcf0: 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78 65 64 2c  lumn is indexed,
bd00: 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 6c 61 74   the same collat
bd10: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
bd20: 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43  cified in the.[C
bd30: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
bd40: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 66  tement is used f
bd50: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  or the column in
bd60: 20 74 68 65 20 69 6e 64 65 78 2c 20 62 79 20 64   the index, by d
bd70: 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67 68 20 74  efault,.though t
bd80: 68 69 73 20 63 61 6e 20 62 65 20 6f 76 65 72 72  his can be overr
bd90: 69 64 64 65 6e 20 75 73 69 6e 67 20 61 20 43 4f  idden using a CO
bda0: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20  LLATE clause in 
bdb0: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 49 4e 44  the .[CREATE IND
bdc0: 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  EX] statement...
bdd0: 3c 68 33 3e 32 2e 33 20 52 65 70 72 65 73 65 6e  <h3>2.3 Represen
bde0: 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 54 61  tation Of SQL Ta
bdf0: 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 20 5e  bles</h3>..<p> ^
be00: 45 61 63 68 20 6f 72 64 69 6e 61 72 79 20 53 51  Each ordinary SQ
be10: 4c 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64  L table in the d
be20: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
be30: 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 6f 6e  s represented on
be40: 2d 64 69 73 6b 0a 62 79 20 61 20 74 61 62 6c 65  -disk.by a table
be50: 20 62 2d 74 72 65 65 2e 20 20 5e 45 61 63 68 20   b-tree.  ^Each 
be60: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62  entry in the tab
be70: 6c 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65 73  le b-tree corres
be80: 70 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f  ponds to a row.o
be90: 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 2e  f the SQL table.
bea0: 20 20 5e 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f    ^The [rowid] o
beb0: 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20  f the SQL table 
bec0: 69 73 20 74 68 65 20 36 34 2d 62 69 74 20 73 69  is the 64-bit si
bed0: 67 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79  gned.integer key
bee0: 20 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20   for each entry 
bef0: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74  in the table b-t
bf00: 72 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54  ree.</p>..<p> ^T
bf10: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61  he content of ea
bf20: 63 68 20 53 51 4c 20 74 61 62 6c 65 20 72 6f 77  ch SQL table row
bf30: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
bf40: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
bf50: 62 79 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e 69  by.first combini
bf60: 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  ng the values in
bf70: 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6c   the various col
bf80: 75 6d 6e 73 20 69 6e 74 6f 20 61 20 62 79 74 65  umns into a byte
bf90: 20 61 72 72 61 79 0a 69 6e 20 74 68 65 20 72 65   array.in the re
bfa0: 63 6f 72 64 20 66 6f 72 6d 61 74 2c 20 74 68 65  cord format, the
bfb0: 6e 20 73 74 6f 72 69 6e 67 20 74 68 61 74 20 62  n storing that b
bfc0: 79 74 65 20 61 72 72 61 79 20 61 73 20 74 68 65  yte array as the
bfd0: 20 70 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65   payload in.an e
bfe0: 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c  ntry in the tabl
bff0: 65 20 62 2d 74 72 65 65 2e 20 20 5e 54 68 65 20  e b-tree.  ^The 
c000: 6f 72 64 65 72 20 6f 66 20 76 61 6c 75 65 73 20  order of values 
c010: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 73  in the record is
c020: 0a 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65  .the same as the
c030: 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e   order of column
c040: 73 20 69 6e 20 74 68 65 20 53 51 4c 20 74 61 62  s in the SQL tab
c050: 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e  le definition..^
c060: 57 68 65 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  When an SQL tabl
c070: 65 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b 49  e includes an.[I
c080: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
c090: 45 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69 63  EY] column (whic
c0a0: 68 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b 72  h aliases the [r
c0b0: 6f 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61 74  owid]) then that
c0c0: 0a 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73 20  .column appears 
c0d0: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 73  in the record as
c0e0: 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20 20   a NULL value.  
c0f0: 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77  ^SQLite will alw
c100: 61 79 73 20 75 73 65 0a 74 68 65 20 74 61 62 6c  ays use.the tabl
c110: 65 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61 74  e b-tree key rat
c120: 68 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55 4c  her than the NUL
c130: 4c 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65 66  L value when ref
c140: 65 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49 4e  erencing the.[IN
c150: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
c160: 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a  Y] column.</p>..
c170: 3c 70 3e 20 5e 49 66 20 74 68 65 20 5b 61 66 66  <p> ^If the [aff
c180: 69 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75  inity] of a colu
c190: 6d 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74  mn is REAL and t
c1a0: 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  hat column conta
c1b0: 69 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74  ins a.value that
c1c0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65   can be converte
c1d0: 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  d to an integer 
c1e0: 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20  without loss of 
c1f0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20  information.(if 
c200: 74 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  the value contai
c210: 6e 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c  ns no fractional
c220: 20 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74   part and is not
c230: 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65   too large to be
c240: 0a 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20  .represented as 
c250: 61 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e  an integer) then
c260: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20   the column may 
c270: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  be stored in the
c280: 20 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e   record.as an in
c290: 74 65 67 65 72 2e 20 20 5e 53 51 4c 69 74 65 20  teger.  ^SQLite 
c2a0: 77 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68 65  will convert the
c2b0: 20 76 61 6c 75 65 20 62 61 63 6b 20 74 6f 20 66   value back to f
c2c0: 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77 68  loating.point wh
c2d0: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 74  en extracting it
c2e0: 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
c2f0: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 34 20 52  .</p>..<h3>2.4 R
c300: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
c310: 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 54   WITHOUT ROWID T
c320: 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  ables</h3>..<p>^
c330: 49 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  If an SQL table 
c340: 69 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  is created using
c350: 20 74 68 65 20 22 57 49 54 48 4f 55 54 20 52 4f   the "WITHOUT RO
c360: 57 49 44 22 20 63 6c 61 75 73 65 20 61 74 20 74  WID" clause at t
c370: 68 65 0a 65 6e 64 20 6f 66 20 69 74 73 20 43 52  he.end of its CR
c380: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
c390: 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 61 74 20  ment, then that 
c3a0: 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
c3b0: 4f 55 54 20 52 4f 57 49 44 5d 0a 74 61 62 6c 65  OUT ROWID].table
c3c0: 20 61 6e 64 20 75 73 65 73 20 61 20 64 69 66 66   and uses a diff
c3d0: 65 72 65 6e 74 20 6f 6e 2d 64 69 73 6b 20 72 65  erent on-disk re
c3e0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 5e  presentation.  ^
c3f0: 41 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 0a  A WITHOUT ROWID.
c400: 74 61 62 6c 65 20 75 73 65 73 20 61 6e 20 69 6e  table uses an in
c410: 64 65 78 20 62 2d 74 72 65 65 20 72 61 74 68 65  dex b-tree rathe
c420: 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65 20 62  r than a table b
c430: 2d 74 72 65 65 20 66 6f 72 20 73 74 6f 72 61 67  -tree for storag
c440: 65 2e 0a 5e 54 68 65 20 6b 65 79 20 66 6f 72 20  e..^The key for 
c450: 65 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74 68  each entry in th
c460: 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  e WITHOUT ROWID 
c470: 62 2d 74 72 65 65 20 69 73 20 61 20 72 65 63 6f  b-tree is a reco
c480: 72 64 20 63 6f 6d 70 6f 73 65 64 0a 6f 66 20 74  rd composed.of t
c490: 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
c4a0: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f  e PRIMARY KEY fo
c4b0: 6c 6c 6f 77 65 64 20 62 79 20 61 6c 6c 20 72 65  llowed by all re
c4c0: 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  maining columns 
c4d0: 6f 66 0a 74 68 65 20 74 61 62 6c 65 2e 20 20 5e  of.the table.  ^
c4e0: 54 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  The primary key 
c4f0: 63 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69  columns appear i
c500: 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 65 79  n the order they
c510: 20 74 68 65 79 20 77 65 72 65 0a 64 65 63 6c 61   they were.decla
c520: 72 65 64 20 69 6e 20 74 68 65 20 50 52 49 4d 41  red in the PRIMA
c530: 52 59 20 4b 45 59 20 63 6c 61 75 73 65 20 61 6e  RY KEY clause an
c540: 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  d the remaining 
c550: 63 6f 6c 75 6d 6e 73 20 61 70 70 65 61 72 20 69  columns appear i
c560: 6e 0a 74 68 65 20 6f 72 64 65 72 20 74 68 65 79  n.the order they
c570: 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 43 52   occur in the CR
c580: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
c590: 6d 65 6e 74 2e 0a 0a 3c 70 3e 5e 48 65 6e 63 65  ment...<p>^Hence
c5a0: 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e  , the content en
c5b0: 63 6f 64 69 6e 67 20 66 6f 72 20 61 20 57 49 54  coding for a WIT
c5c0: 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
c5d0: 20 69 73 20 74 68 65 20 73 61 6d 65 0a 61 73 20   is the same.as 
c5e0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f  the content enco
c5f0: 64 69 6e 67 20 66 6f 72 20 61 6e 20 6f 72 64 69  ding for an ordi
c600: 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62 6c 65  nary rowid table
c610: 2c 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  , except that th
c620: 65 0a 6f 72 64 65 72 20 6f 66 20 74 68 65 20 63  e.order of the c
c630: 6f 6c 75 6d 6e 73 20 69 73 20 72 65 61 72 72 61  olumns is rearra
c640: 6e 67 65 64 20 73 6f 20 74 68 61 74 20 50 52 49  nged so that PRI
c650: 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73  MARY KEY columns
c660: 20 63 6f 6d 65 0a 66 69 72 73 74 2c 20 61 6e 64   come.first, and
c670: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
c680: 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20  used as the key 
c690: 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  in an index b-tr
c6a0: 65 65 20 72 61 74 68 65 72 0a 74 68 61 6e 20 61  ee rather.than a
c6b0: 73 20 74 68 65 20 64 61 74 61 20 69 6e 20 61 20  s the data in a 
c6c0: 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 0a 5e 54  table b-tree..^T
c6d0: 68 65 20 73 70 65 63 69 61 6c 20 65 6e 63 6f 64  he special encod
c6e0: 69 6e 67 20 72 75 6c 65 73 20 66 6f 72 20 63 6f  ing rules for co
c6f0: 6c 75 6d 6e 73 20 77 69 74 68 20 52 45 41 4c 20  lumns with REAL 
c700: 61 66 66 69 6e 69 74 79 0a 61 70 70 6c 79 20 74  affinity.apply t
c710: 6f 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  o WITHOUT ROWID 
c720: 74 61 62 6c 65 73 20 74 68 65 20 73 61 6d 65 20  tables the same 
c730: 61 73 20 74 68 65 79 20 64 6f 20 77 69 74 68 20  as they do with 
c740: 72 6f 77 69 64 20 74 61 62 6c 65 73 2e 0a 0a 3c  rowid tables...<
c750: 68 33 3e 32 2e 35 20 52 65 70 72 65 73 65 6e 74  h3>2.5 Represent
c760: 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 49 6e 64  ation Of SQL Ind
c770: 69 63 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45  ices</h3>..<p>^E
c780: 61 63 68 20 53 51 4c 20 69 6e 64 65 78 2c 20 77  ach SQL index, w
c790: 68 65 74 68 65 72 20 65 78 70 6c 69 63 69 74 6c  hether explicitl
c7a0: 79 20 64 65 63 6c 61 72 65 64 20 76 69 61 20 61  y declared via a
c7b0: 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20   [CREATE INDEX] 
c7c0: 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 69 6d 70  statement.or imp
c7d0: 6c 69 65 64 20 62 79 20 61 20 55 4e 49 51 55 45  lied by a UNIQUE
c7e0: 20 6f 72 20 50 52 49 4d 41 52 59 20 4b 45 59 20   or PRIMARY KEY 
c7f0: 63 6f 6e 73 74 72 61 69 6e 74 2c 20 63 6f 72 72  constraint, corr
c800: 65 73 70 6f 6e 64 73 20 74 6f 20 61 6e 20 0a 69  esponds to an .i
c810: 6e 64 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74  ndex b-tree in t
c820: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
c830: 2e 0a 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e  ..^Each entry in
c840: 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65   the index b-tre
c850: 65 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  e corresponds to
c860: 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 69 6e   a single row in
c870: 20 74 68 65 20 0a 61 73 73 6f 63 69 61 74 65 64   the .associated
c880: 20 53 51 4c 20 74 61 62 6c 65 2e 0a 5e 54 68 65   SQL table..^The
c890: 20 6b 65 79 20 74 6f 20 61 6e 20 69 6e 64 65 78   key to an index
c8a0: 20 62 2d 74 72 65 65 20 69 73 0a 61 20 72 65 63   b-tree is.a rec
c8b0: 6f 72 64 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20  ord composed of 
c8c0: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74  the columns that
c8d0: 20 61 72 65 20 62 65 69 6e 67 20 69 6e 64 65 78   are being index
c8e0: 65 64 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74  ed followed by t
c8f0: 68 65 0a 6b 65 79 20 6f 66 20 74 68 65 20 63 6f  he.key of the co
c900: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
c910: 65 20 72 6f 77 2e 20 20 46 6f 72 20 6f 72 64 69  e row.  For ordi
c920: 6e 61 72 79 20 74 61 62 6c 65 73 2c 20 74 68 65  nary tables, the
c930: 20 72 6f 77 20 6b 65 79 20 69 73 0a 74 68 65 20   row key is.the 
c940: 5b 72 6f 77 69 64 5d 2c 20 61 6e 64 20 66 6f 72  [rowid], and for
c950: 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
c960: 20 74 61 62 6c 65 73 20 74 68 65 20 72 6f 77 20   tables the row 
c970: 6b 65 79 20 69 73 20 74 68 65 20 50 52 49 4d 41  key is the PRIMA
c980: 52 59 20 4b 45 59 2e 0a 42 65 63 61 75 73 65 20  RY KEY..Because 
c990: 65 76 65 72 79 20 72 6f 77 20 69 6e 20 74 68 65  every row in the
c9a0: 20 74 61 62 6c 65 20 68 61 73 20 61 20 75 6e 69   table has a uni
c9b0: 71 75 65 20 72 6f 77 20 6b 65 79 2c 0a 61 6c 6c  que row key,.all
c9c0: 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
c9d0: 78 20 61 72 65 20 75 6e 69 71 75 65 2e 3c 2f 70  x are unique.</p
c9e0: 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20 6e 6f 72 6d  >..<p>^In a norm
c9f0: 61 6c 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20  al index, there 
ca00: 69 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20  is a one-to-one 
ca10: 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20  mapping between 
ca20: 72 6f 77 73 20 69 6e 20 61 20 0a 74 61 62 6c 65  rows in a .table
ca30: 20 61 6e 64 20 65 6e 74 72 69 65 73 20 69 6e 20   and entries in 
ca40: 65 61 63 68 20 69 6e 64 65 78 20 61 73 73 6f 63  each index assoc
ca50: 69 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20  iated with that 
ca60: 74 61 62 6c 65 2e 0a 5e 48 6f 77 65 76 65 72 2c  table..^However,
ca70: 20 69 6e 20 61 20 5b 70 61 72 74 69 61 6c 20 69   in a [partial i
ca80: 6e 64 65 78 5d 2c 20 74 68 65 20 69 6e 64 65 78  ndex], the index
ca90: 20 62 2d 74 72 65 65 20 6f 6e 6c 79 20 63 6f 6e   b-tree only con
caa0: 74 61 69 6e 73 20 65 6e 74 72 69 65 73 0a 63 6f  tains entries.co
cab0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74  rresponding to t
cac0: 61 62 6c 65 20 72 6f 77 73 20 66 6f 72 20 77 68  able rows for wh
cad0: 69 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  ich the WHERE cl
cae0: 61 75 73 65 20 65 78 70 72 65 73 73 69 6f 6e 20  ause expression 
caf0: 6f 6e 20 74 68 65 0a 43 52 45 41 54 45 20 49 4e  on the.CREATE IN
cb00: 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 73  DEX statement is
cb10: 20 74 72 75 65 2e 0a 5e 43 6f 72 72 65 73 70 6f   true..^Correspo
cb20: 6e 64 69 6e 67 20 72 6f 77 73 20 69 6e 20 74 68  nding rows in th
cb30: 65 20 69 6e 64 65 78 20 61 6e 64 20 74 61 62 6c  e index and tabl
cb40: 65 20 62 2d 74 72 65 65 73 20 73 68 61 72 65 20  e b-trees share 
cb50: 74 68 65 20 73 61 6d 65 20 72 6f 77 69 64 0a 6f  the same rowid.o
cb60: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 76 61  r primary key va
cb70: 6c 75 65 73 20 61 6e 64 20 63 6f 6e 74 61 69 6e  lues and contain
cb80: 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
cb90: 66 6f 72 20 61 6c 6c 20 69 6e 64 65 78 65 64 20  for all indexed 
cba0: 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68  columns.</p>..<h
cbb0: 34 3e 32 2e 35 2e 31 20 53 75 70 70 72 65 73 73  4>2.5.1 Suppress
cbc0: 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e 74  ion of redundant
cbd0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54 48   columns in WITH
cbe0: 4f 55 54 20 52 4f 57 49 44 20 73 65 63 6f 6e 64  OUT ROWID second
cbf0: 61 72 79 20 69 6e 64 65 78 65 64 0a 3c 2f 68 34  ary indexed.</h4
cc00: 3e 0a 0a 3c 70 3e 20 5e 49 6e 20 61 6e 20 69 6e  >..<p> ^In an in
cc10: 64 65 78 20 6f 6e 20 61 20 57 49 54 48 4f 55 54  dex on a WITHOUT
cc20: 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 69 66   ROWID table, if
cc30: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20   one or more of 
cc40: 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74  the columns.of t
cc50: 68 65 20 74 61 62 6c 65 20 50 52 49 4d 41 52 59  he table PRIMARY
cc60: 20 4b 45 59 20 61 72 65 20 61 6c 73 6f 20 63 6f   KEY are also co
cc70: 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 69 6e 64  lumns of the ind
cc80: 65 78 2c 20 74 68 65 6e 20 74 68 65 0a 69 6e 64  ex, then the.ind
cc90: 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e  exed column is n
cca0: 6f 74 20 72 65 70 65 61 74 65 64 20 69 6e 20 74  ot repeated in t
ccb0: 68 65 20 74 61 62 6c 65 2d 6b 65 79 20 73 75 66  he table-key suf
ccc0: 66 69 78 20 6f 6e 20 74 68 65 20 65 6e 64 20 6f  fix on the end o
ccd0: 66 0a 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f  f.the index reco
cce0: 72 64 2e 20 20 5e 28 41 73 20 61 6e 20 65 78 61  rd.  ^(As an exa
ccf0: 6d 70 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20 74  mple, consider t
cd00: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c  he following SQL
cd10: 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  :..<blockquote><
cd20: 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c  pre>.CREATE TABL
cd30: 45 20 65 78 32 35 28 61 2c 62 2c 63 2c 64 2c 65  E ex25(a,b,c,d,e
cd40: 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 64 2c 63  ,PRIMARY KEY(d,c
cd50: 2c 61 29 29 20 57 49 54 48 4f 55 54 20 72 6f 77  ,a)) WITHOUT row
cd60: 69 64 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58  id;.CREATE INDEX
cd70: 20 65 78 32 35 63 65 20 4f 4e 20 65 78 32 35 28   ex25ce ON ex25(
cd80: 63 2c 65 29 3b 0a 43 52 45 41 54 45 20 49 4e 44  c,e);.CREATE IND
cd90: 45 58 20 65 78 32 35 61 63 64 65 20 4f 4e 20 65  EX ex25acde ON e
cda0: 78 32 35 28 61 2c 63 2c 64 2c 65 29 3b 0a 3c 2f  x25(a,c,d,e);.</
cdb0: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
cdc0: 3e 0a 0a 3c 70 3e 45 61 63 68 20 72 6f 77 20 69  >..<p>Each row i
cdd0: 6e 20 74 68 65 20 65 78 32 35 63 65 20 69 6e 64  n the ex25ce ind
cde0: 65 78 20 69 73 20 61 20 72 65 63 6f 72 64 0a 77  ex is a record.w
cdf0: 69 74 68 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  ith these column
ce00: 73 3a 20 63 2c 20 65 2c 20 64 2c 20 61 2e 20 20  s: c, e, d, a.  
ce10: 54 68 65 20 66 69 72 73 74 20 74 77 6f 20 63 6f  The first two co
ce20: 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65 20 63 6f  lumns are.the co
ce30: 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64 65  lumns being inde
ce40: 78 65 64 2c 20 63 20 61 6e 64 20 65 2e 20 20 54  xed, c and e.  T
ce50: 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c  he remaining col
ce60: 75 6d 6e 73 20 61 72 65 20 74 68 65 20 70 72 69  umns are the pri
ce70: 6d 61 72 79 0a 6b 65 79 20 6f 66 20 74 68 65 20  mary.key of the 
ce80: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
ce90: 62 6c 65 20 72 6f 77 2e 20 20 4e 6f 72 6d 61 6c  ble row.  Normal
cea0: 6c 79 2c 20 74 68 65 20 70 72 69 6d 61 72 79 20  ly, the primary 
ceb0: 6b 65 79 20 77 6f 75 6c 64 20 62 65 0a 63 6f 6c  key would be.col
cec0: 75 6d 6e 73 20 64 2c 20 63 2c 20 61 6e 64 20 61  umns d, c, and a
ced0: 2c 20 62 75 74 20 62 65 63 61 75 73 65 20 63 6f  , but because co
cee0: 6c 75 6d 6e 20 63 20 61 6c 72 65 61 64 79 20 61  lumn c already a
cef0: 70 70 65 61 72 73 20 65 61 72 6c 69 65 72 20 69  ppears earlier i
cf00: 6e 20 74 68 65 0a 69 6e 64 65 78 2c 20 69 74 20  n the.index, it 
cf10: 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
cf20: 74 68 65 20 6b 65 79 20 73 75 66 66 69 78 2e 29  the key suffix.)
cf30: 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 74  ^</p>..<p>^(In t
cf40: 68 65 20 65 78 74 72 65 6d 65 20 63 61 73 65 20  he extreme case 
cf50: 77 68 65 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e  where the column
cf60: 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  s being indexed 
cf70: 63 6f 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  cover all column
cf80: 73 0a 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  s.of the PRIMARY
cf90: 20 4b 45 59 2c 20 74 68 65 20 69 6e 64 65 78 20   KEY, the index 
cfa0: 77 69 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66 20  will consist of 
cfb0: 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  only the columns
cfc0: 20 62 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e 20   being.indexed. 
cfd0: 20 54 68 65 20 65 78 32 35 61 63 64 65 20 65 78   The ex25acde ex
cfe0: 61 6d 70 6c 65 20 61 62 6f 76 65 20 64 65 6d 6f  ample above demo
cff0: 6e 73 74 72 61 74 65 73 20 74 68 69 73 2e 29 5e  nstrates this.)^
d000: 20 20 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e    ^Each entry in
d010: 0a 74 68 65 20 65 78 32 35 61 63 64 65 20 69 6e  .the ex25acde in
d020: 64 65 78 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  dex consists of 
d030: 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  only the columns
d040: 20 61 2c 20 63 2c 20 64 2c 20 61 6e 64 20 65 2c   a, c, d, and e,
d050: 20 69 6e 20 74 68 61 74 0a 6f 72 64 65 72 2e 3c   in that.order.<
d060: 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 73 75  /p>..<p> ^The su
d070: 70 70 72 65 73 73 69 6f 6e 20 6f 66 20 72 65 64  ppression of red
d080: 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20 69  undant columns i
d090: 6e 20 74 68 65 20 6b 65 79 20 73 75 66 66 69 78  n the key suffix
d0a0: 20 6f 66 20 61 6e 20 69 6e 64 65 78 0a 65 6e 74   of an index.ent
d0b0: 72 79 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20 69  ry only occurs i
d0c0: 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  n WITHOUT ROWID 
d0d0: 74 61 62 6c 65 73 2e 20 20 5e 49 6e 20 61 6e 20  tables.  ^In an 
d0e0: 6f 72 64 69 6e 61 72 79 20 72 6f 77 69 64 20 74  ordinary rowid t
d0f0: 61 62 6c 65 2c 0a 74 68 65 20 69 6e 64 65 78 20  able,.the index 
d100: 65 6e 74 72 79 20 61 6c 77 61 79 73 20 65 6e 64  entry always end
d110: 73 20 77 69 74 68 20 74 68 65 20 72 6f 77 69 64  s with the rowid
d120: 20 65 76 65 6e 20 69 66 20 74 68 65 20 5b 49 4e   even if the [IN
d130: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
d140: 59 5d 0a 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e 65  Y].column is one
d150: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
d160: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 3c 2f  being indexed.</
d170: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
d180: 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73 74  ment sqlite_mast
d190: 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65  er {sqlite_maste
d1a0: 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65  r} {sqlite_maste
d1b0: 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a 3c  r table}</tcl>.<
d1c0: 68 33 3e 32 2e 36 20 53 74 6f 72 61 67 65 20 4f  h3>2.6 Storage O
d1d0: 66 20 54 68 65 20 53 51 4c 20 44 61 74 61 62 61  f The SQL Databa
d1e0: 73 65 20 53 63 68 65 6d 61 3c 2f 68 33 3e 0a 0a  se Schema</h3>..
d1f0: 3c 70 3e 5e 50 61 67 65 20 31 20 6f 66 20 61 20  <p>^Page 1 of a 
d200: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
d210: 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6f   the root page o
d220: 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  f a table b-tree
d230: 20 74 68 61 74 0a 68 6f 6c 64 73 20 61 20 73 70   that.holds a sp
d240: 65 63 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65  ecial table name
d250: 64 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  d "sqlite_master
d260: 22 20 28 6f 72 20 22 73 71 6c 69 74 65 5f 74 65  " (or "sqlite_te
d270: 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a 74 68  mp_master" in.th
d280: 65 20 63 61 73 65 20 6f 66 20 61 20 54 45 4d 50  e case of a TEMP
d290: 20 64 61 74 61 62 61 73 65 29 20 77 68 69 63 68   database) which
d2a0: 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6d 70   stores the comp
d2b0: 6c 65 74 65 0a 64 61 74 61 62 61 73 65 20 73 63  lete.database sc
d2c0: 68 65 6d 61 2e 20 20 5e 28 54 68 65 20 73 74 72  hema.  ^(The str
d2d0: 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 73 71  ucture of the sq
d2e0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
d2f0: 65 20 69 73 20 61 73 0a 69 66 20 69 74 20 68 61  e is as.if it ha
d300: 64 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 75  d been created u
d310: 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69  sing the followi
d320: 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c  ng SQL:</p>..<bl
d330: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
d340: 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69  REATE TABLE sqli
d350: 74 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79 70  te_master(.  typ
d360: 65 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74  e text,.  name t
d370: 65 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20  ext,.  tbl_name 
d380: 74 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65  text,.  rootpage
d390: 20 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c 20   integer,.  sql 
d3a0: 74 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  text.);.</pre></
d3b0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
d3c0: 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  p>^The sqlite_ma
d3d0: 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 61  ster table conta
d3e0: 69 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20  ins one row for 
d3f0: 65 61 63 68 20 74 61 62 6c 65 2c 20 69 6e 64 65  each table, inde
d400: 78 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74 72 69  x, view,.and tri
d410: 67 67 65 72 20 28 63 6f 6c 6c 65 63 74 69 76 65  gger (collective
d420: 6c 79 20 22 6f 62 6a 65 63 74 73 22 29 20 69 6e  ly "objects") in
d430: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
d440: 68 65 6d 61 2c 20 65 78 63 65 70 74 20 74 68 65  hema, except the
d450: 72 65 0a 69 73 20 6e 6f 20 65 6e 74 72 79 20 66  re.is no entry f
d460: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  or the sqlite_ma
d470: 73 74 65 72 20 74 61 62 6c 65 20 69 74 73 65 6c  ster table itsel
d480: 66 2e 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f  f.  ^The sqlite_
d490: 6d 61 73 74 65 72 20 74 61 62 6c 65 0a 63 6f 6e  master table.con
d4a0: 74 61 69 6e 73 20 65 6e 74 72 69 65 73 20 66 6f  tains entries fo
d4b0: 72 20 5b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65  r [internal sche
d4c0: 6d 61 20 6f 62 6a 65 63 74 73 5d 20 69 6e 20 61  ma objects] in a
d4d0: 64 64 69 74 69 6f 6e 20 74 6f 20 61 70 70 6c 69  ddition to appli
d4e0: 63 61 74 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f 67  cation-.and prog
d4f0: 72 61 6d 6d 65 72 2d 64 65 66 69 6e 65 64 20 6f  rammer-defined o
d500: 62 6a 65 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28 54  bjects....<p>^(T
d510: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
d520: 2e 74 79 70 65 20 63 6f 6c 75 6d 6e 20 77 69 6c  .type column wil
d530: 6c 20 62 65 20 6f 6e 65 0a 6f 66 20 74 68 65 20  l be one.of the 
d540: 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74 20 73  following text s
d550: 74 72 69 6e 67 73 3a 20 20 27 74 61 62 6c 65 27  trings:  'table'
d560: 2c 20 27 69 6e 64 65 78 27 2c 20 27 76 69 65 77  , 'index', 'view
d570: 27 2c 20 6f 72 20 27 74 72 69 67 67 65 72 27 0a  ', or 'trigger'.
d580: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65  according to the
d590: 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 20   type of object 
d5a0: 64 65 66 69 6e 65 64 2e 20 20 54 68 65 20 27 74  defined.  The 't
d5b0: 61 62 6c 65 27 20 73 74 72 69 6e 67 20 69 73 20  able' string is 
d5c0: 75 73 65 64 0a 66 6f 72 20 62 6f 74 68 20 6f 72  used.for both or
d5d0: 64 69 6e 61 72 79 20 61 6e 64 20 5b 76 69 72 74  dinary and [virt
d5e0: 75 61 6c 20 74 61 62 6c 65 73 5d 2e 29 5e 3c 2f  ual tables].)^</
d5f0: 70 3e 0a 0a 3c 2f 70 3e 5e 28 54 68 65 20 73 71  p>..</p>^(The sq
d600: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65  lite_master.name
d610: 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 68 6f 6c   column will hol
d620: 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
d630: 65 20 6f 62 6a 65 63 74 2e 29 5e 0a 5e 28 5b 55  e object.)^.^([U
d640: 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d  NIQUE] and [PRIM
d650: 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61  ARY KEY] constra
d660: 69 6e 74 73 20 6f 6e 20 74 61 62 6c 65 73 20 63  ints on tables c
d670: 61 75 73 65 20 53 51 4c 69 74 65 20 74 6f 20 63  ause SQLite to c
d680: 72 65 61 74 65 0a 5b 69 6e 74 65 72 6e 61 6c 20  reate.[internal 
d690: 69 6e 64 65 78 65 73 5d 20 77 69 74 68 20 6e 61  indexes] with na
d6a0: 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  mes of the form 
d6b0: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
d6c0: 78 5f 54 41 42 4c 45 5f 4e 22 0a 77 68 65 72 65  x_TABLE_N".where
d6d0: 20 54 41 42 4c 45 20 69 73 20 72 65 70 6c 61 63   TABLE is replac
d6e0: 65 64 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f  ed by the name o
d6f0: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
d700: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 63 6f   contains the.co
d710: 6e 73 74 72 61 69 6e 74 20 61 6e 64 20 4e 20 69  nstraint and N i
d720: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 67  s an integer beg
d730: 69 6e 6e 69 6e 67 20 77 69 74 68 20 31 20 61 6e  inning with 1 an
d740: 64 20 69 6e 63 72 65 61 73 69 6e 67 20 62 79 20  d increasing by 
d750: 6f 6e 65 0a 77 69 74 68 20 65 61 63 68 20 63 6f  one.with each co
d760: 6e 73 74 72 61 69 6e 74 20 73 65 65 6e 20 69 6e  nstraint seen in
d770: 20 74 68 65 20 74 61 62 6c 65 20 64 65 66 69 6e   the table defin
d780: 69 74 69 6f 6e 2e 29 5e 0a 5e 28 49 6e 20 61 20  ition.)^.^(In a 
d790: 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20  [WITHOUT ROWID] 
d7a0: 74 61 62 6c 65 2c 20 74 68 65 72 65 20 69 73 20  table, there is 
d7b0: 6e 6f 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  no sqlite_master
d7c0: 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65 0a 50   entry for the.P
d7d0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 75 74 20  RIMARY KEY, but 
d7e0: 74 68 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f  the "sqlite_auto
d7f0: 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e  index_TABLE_N" n
d800: 61 6d 65 20 69 73 20 73 65 74 20 61 73 69 64 65  ame is set aside
d810: 0a 66 6f 72 20 74 68 65 20 50 52 49 4d 41 52 59  .for the PRIMARY
d820: 20 4b 45 59 20 61 73 20 69 66 20 74 68 65 20 73   KEY as if the s
d830: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74  qlite_master ent
d840: 72 79 20 64 69 64 20 65 78 69 73 74 2e 20 20 54  ry did exist.  T
d850: 68 69 73 0a 77 69 6c 6c 20 61 66 66 65 63 74 20  his.will affect 
d860: 74 68 65 20 6e 75 6d 62 65 72 69 6e 67 20 6f 66  the numbering of
d870: 20 73 75 62 73 65 71 75 65 6e 74 20 55 4e 49 51   subsequent UNIQ
d880: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29  UE constraints.)
d890: 5e 0a 5e 54 68 65 20 22 73 71 6c 69 74 65 5f 61  ^.^The "sqlite_a
d8a0: 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e  utoindex_TABLE_N
d8b0: 22 20 6e 61 6d 65 20 69 73 20 6e 65 76 65 72 20  " name is never 
d8c0: 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 6e  allocated for an
d8d0: 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  .[INTEGER PRIMAR
d8e0: 59 20 4b 45 59 5d 2c 20 65 69 74 68 65 72 20 69  Y KEY], either i
d8f0: 6e 20 72 6f 77 69 64 20 74 61 62 6c 65 73 20 6f  n rowid tables o
d900: 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  r WITHOUT ROWID 
d910: 74 61 62 6c 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70  tables..</p>..<p
d920: 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74  >The sqlite_mast
d930: 65 72 2e 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75  er.tbl_name colu
d940: 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d  mn holds the nam
d950: 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20  e of a table or 
d960: 76 69 65 77 0a 74 68 61 74 20 74 68 65 20 6f 62  view.that the ob
d970: 6a 65 63 74 20 69 73 20 61 73 73 6f 63 69 61 74  ject is associat
d980: 65 64 20 77 69 74 68 2e 20 20 5e 46 6f 72 20 61  ed with.  ^For a
d990: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 2c 20   table or view, 
d9a0: 74 68 65 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c  the.tbl_name col
d9b0: 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66  umn is a copy of
d9c0: 20 74 68 65 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e   the name column
d9d0: 2e 20 20 5e 46 6f 72 20 61 6e 20 69 6e 64 65 78  .  ^For an index
d9e0: 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 69  , the tbl_name.i
d9f0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s the name of th
da00: 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
da10: 69 6e 64 65 78 65 64 2e 20 20 5e 46 6f 72 20 61  indexed.  ^For a
da20: 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 74 62   trigger, the tb
da30: 6c 5f 6e 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74  l_name.column st
da40: 6f 72 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ores the name of
da50: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
da60: 65 77 20 74 68 61 74 20 63 61 75 73 65 73 20 74  ew that causes t
da70: 68 65 20 74 72 69 67 67 65 72 20 0a 74 6f 20 66  he trigger .to f
da80: 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  ire.</p>..<p>^(T
da90: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
daa0: 2e 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e  .rootpage column
dab0: 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67 65   stores the page
dac0: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 72   number of the r
dad0: 6f 6f 74 0a 62 2d 74 72 65 65 20 70 61 67 65 20  oot.b-tree page 
dae0: 66 6f 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69  for tables and i
daf0: 6e 64 65 78 65 73 2e 29 5e 20 20 5e 46 6f 72 20  ndexes.)^  ^For 
db00: 72 6f 77 73 20 74 68 61 74 20 64 65 66 69 6e 65  rows that define
db10: 20 76 69 65 77 73 2c 20 74 72 69 67 67 65 72 73   views, triggers
db20: 2c 0a 61 6e 64 20 76 69 72 74 75 61 6c 20 74 61  ,.and virtual ta
db30: 62 6c 65 73 2c 20 74 68 65 20 72 6f 6f 74 70 61  bles, the rootpa
db40: 67 65 20 63 6f 6c 75 6d 6e 20 69 73 20 30 20 6f  ge column is 0 o
db50: 72 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e  r NULL.</p>..<p>
db60: 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  ^(The sqlite_mas
db70: 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 73  ter.sql column s
db80: 74 6f 72 65 73 20 53 51 4c 20 74 65 78 74 20 74  tores SQL text t
db90: 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
dba0: 65 0a 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20  e.object.  This 
dbb0: 53 51 4c 20 74 65 78 74 20 69 73 20 61 20 5b 43  SQL text is a [C
dbc0: 52 45 41 54 45 20 54 41 42 4c 45 5d 2c 20 5b 43  REATE TABLE], [C
dbd0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
dbe0: 42 4c 45 5d 2c 0a 5b 43 52 45 41 54 45 20 49 4e  BLE],.[CREATE IN
dbf0: 44 45 58 5d 2c 0a 5b 43 52 45 41 54 45 20 56 49  DEX],.[CREATE VI
dc00: 45 57 5d 2c 20 6f 72 20 5b 43 52 45 41 54 45 20  EW], or [CREATE 
dc10: 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
dc20: 6e 74 20 74 68 61 74 20 69 66 20 65 76 61 6c 75  nt that if evalu
dc30: 61 74 65 64 20 61 67 61 69 6e 73 74 0a 74 68 65  ated against.the
dc40: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
dc50: 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6d 61  hen it is the ma
dc60: 69 6e 20 64 61 74 61 62 61 73 65 20 6f 66 20 61  in database of a
dc70: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
dc80: 63 74 69 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65 63  ction].would rec
dc90: 72 65 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74  reate the object
dca0: 2e 29 5e 20 20 54 68 65 20 74 65 78 74 20 69 73  .)^  The text is
dcb0: 20 75 73 75 61 6c 6c 79 20 61 20 63 6f 70 79 20   usually a copy 
dcc0: 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  of the original.
dcd0: 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 74  statement used t
dce0: 6f 20 63 72 65 61 74 65 20 74 68 65 20 6f 62 6a  o create the obj
dcf0: 65 63 74 20 62 75 74 20 77 69 74 68 20 6e 6f 72  ect but with nor
dd00: 6d 61 6c 69 7a 61 74 69 6f 6e 73 20 61 70 70 6c  malizations appl
dd10: 69 65 64 20 73 6f 0a 74 68 61 74 20 74 68 65 20  ied so.that the 
dd20: 74 65 78 74 20 63 6f 6e 66 6f 72 6d 73 20 74 6f  text conforms to
dd30: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72   the following r
dd40: 75 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e  ules:..<ul>.<li>
dd50: 5e 54 68 65 20 43 52 45 41 54 45 2c 20 54 41 42  ^The CREATE, TAB
dd60: 4c 45 2c 20 56 49 45 57 2c 20 54 52 49 47 47 45  LE, VIEW, TRIGGE
dd70: 52 2c 20 61 6e 64 20 49 4e 44 45 58 20 6b 65 79  R, and INDEX key
dd80: 77 6f 72 64 73 20 61 74 20 74 68 65 20 62 65 67  words at the beg
dd90: 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20 73 74  inning.of the st
dda0: 61 74 65 6d 65 6e 74 20 61 72 65 20 63 6f 6e 76  atement are conv
ddb0: 65 72 74 65 64 20 74 6f 20 61 6c 6c 20 75 70 70  erted to all upp
ddc0: 65 72 20 63 61 73 65 20 6c 65 74 74 65 72 73 2e  er case letters.
ddd0: 0a 3c 6c 69 3e 5e 54 68 65 20 54 45 4d 50 20 6f  .<li>^The TEMP o
dde0: 72 20 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77  r TEMPORARY keyw
ddf0: 6f 72 64 20 69 73 20 72 65 6d 6f 76 65 64 20 69  ord is removed i
de00: 66 20 69 74 20 6f 63 63 75 72 73 20 61 66 74 65  f it occurs afte
de10: 72 20 74 68 65 20 0a 69 6e 69 74 69 61 6c 20 43  r the .initial C
de20: 52 45 41 54 45 20 6b 65 79 77 6f 72 64 2e 0a 3c  REATE keyword..<
de30: 6c 69 3e 5e 41 6e 79 20 64 61 74 61 62 61 73 65  li>^Any database
de40: 20 6e 61 6d 65 20 71 75 61 6c 69 66 69 65 72 20   name qualifier 
de50: 74 68 61 74 20 6f 63 63 75 72 73 20 70 72 69 6f  that occurs prio
de60: 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66  r to the name of
de70: 20 74 68 65 0a 6f 62 6a 65 63 74 20 62 65 69 6e   the.object bein
de80: 67 20 63 72 65 61 74 65 64 20 69 73 20 72 65 6d  g created is rem
de90: 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 4c 65 61 64 69  oved..<li>^Leadi
dea0: 6e 67 20 73 70 61 63 65 73 20 61 72 65 20 72 65  ng spaces are re
deb0: 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20  moved..<li>^All 
dec0: 73 70 61 63 65 73 20 66 6f 6c 6c 6f 77 69 6e 67  spaces following
ded0: 20 74 68 65 20 66 69 72 73 74 20 74 77 6f 20 6b   the first two k
dee0: 65 79 77 6f 72 64 73 20 61 72 65 20 63 6f 6e 76  eywords are conv
def0: 65 72 74 65 64 20 69 6e 74 6f 20 61 20 73 69 6e  erted into a sin
df00: 67 6c 65 0a 73 70 61 63 65 2e 0a 3c 2f 75 6c 3e  gle.space..</ul>
df10: 0a 0a 3c 70 3e 5e 28 54 68 65 20 74 65 78 74 20  ..<p>^(The text 
df20: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  in the sqlite_ma
df30: 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20  ster.sql column 
df40: 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  is a copy of the
df50: 20 6f 72 69 67 69 6e 61 6c 0a 43 52 45 41 54 45   original.CREATE
df60: 20 73 74 61 74 65 6d 65 6e 74 20 74 65 78 74 20   statement text 
df70: 74 68 61 74 20 63 72 65 61 74 65 64 20 74 68 65  that created the
df80: 20 6f 62 6a 65 63 74 2c 20 65 78 63 65 70 74 20   object, except 
df90: 6e 6f 72 6d 61 6c 69 7a 65 64 20 61 73 0a 64 65  normalized as.de
dfa0: 73 63 72 69 62 65 64 20 61 62 6f 76 65 20 61 6e  scribed above an
dfb0: 64 20 61 73 20 6d 6f 64 69 66 69 65 64 20 62 79  d as modified by
dfc0: 20 73 75 62 73 65 71 75 65 6e 74 20 5b 41 4c 54   subsequent [ALT
dfd0: 45 52 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  ER TABLE] statem
dfe0: 65 6e 74 73 2e 29 5e 0a 5e 28 54 68 65 20 73 71  ents.)^.^(The sq
dff0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20  lite_master.sql 
e000: 69 73 20 4e 55 4c 4c 20 66 6f 72 20 74 68 65 20  is NULL for the 
e010: 5b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 65  [internal indexe
e020: 73 5d 20 74 68 61 74 20 61 72 65 0a 61 75 74 6f  s] that are.auto
e030: 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
e040: 64 20 62 79 20 5b 55 4e 49 51 55 45 5d 20 6f 72  d by [UNIQUE] or
e050: 20 5b 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63   [PRIMARY KEY] c
e060: 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 3c 2f 70  onstraints.)^</p
e070: 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  >...<tcl>hd_frag
e080: 6d 65 6e 74 20 69 6e 74 73 63 68 65 6d 61 20 7b  ment intschema {
e090: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
e0a0: 6f 62 6a 65 63 74 73 7d 20 5c 0a 7b 69 6e 74 65  objects} \.{inte
e0b0: 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65  rnal schema obje
e0c0: 63 74 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69 6e  ct} {internal in
e0d0: 64 65 78 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69  dex} {internal i
e0e0: 6e 64 65 78 65 73 7d 20 5c 0a 7b 69 6e 74 65 72  ndexes} \.{inter
e0f0: 6e 61 6c 20 74 61 62 6c 65 7d 20 7b 69 6e 74 65  nal table} {inte
e100: 72 6e 61 6c 20 74 61 62 6c 65 73 7d 3c 2f 74 63  rnal tables}</tc
e110: 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 31 20 49 6e 74  l>.<h4>2.6.1 Int
e120: 65 72 6e 61 6c 20 53 63 68 65 6d 61 20 4f 62 6a  ernal Schema Obj
e130: 65 63 74 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 49  ects</h4>..<p>^I
e140: 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 74 68  n addition to th
e150: 65 20 74 61 62 6c 65 73 2c 20 69 6e 64 65 78 65  e tables, indexe
e160: 73 2c 20 76 69 65 77 73 2c 20 61 6e 64 20 74 72  s, views, and tr
e170: 69 67 67 65 72 73 20 63 72 65 61 74 65 64 20 62  iggers created b
e180: 79 0a 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f  y.the applicatio
e190: 6e 20 61 6e 64 2f 6f 72 20 74 68 65 20 64 65 76  n and/or the dev
e1a0: 65 6c 6f 70 65 72 20 75 73 69 6e 67 20 43 52 45  eloper using CRE
e1b0: 41 54 45 20 73 74 61 74 65 6d 65 6e 74 73 20 53  ATE statements S
e1c0: 51 4c 2c 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d  QL, the.sqlite_m
e1d0: 61 73 74 65 72 20 74 61 62 6c 65 20 6d 61 79 20  aster table may 
e1e0: 63 6f 6e 74 61 69 6e 20 7a 65 72 6f 20 6f 72 20  contain zero or 
e1f0: 6d 6f 72 65 20 65 6e 74 72 69 65 73 20 66 6f 72  more entries for
e200: 20 0a 3c 69 3e 69 6e 74 65 72 6e 61 6c 20 73 63   .<i>internal sc
e210: 68 65 6d 61 20 6f 62 6a 65 63 74 73 3c 2f 69 3e  hema objects</i>
e220: 20 74 68 61 74 20 61 72 65 20 63 72 65 61 74 65   that are create
e230: 64 20 62 79 20 53 51 4c 69 74 65 20 66 6f 72 20  d by SQLite for 
e240: 69 74 73 20 0a 6f 77 6e 20 69 6e 74 65 72 6e 61  its .own interna
e250: 6c 20 75 73 65 2e 20 20 5e 54 68 65 20 6e 61 6d  l use.  ^The nam
e260: 65 73 20 6f 66 20 69 6e 74 65 72 6e 61 6c 20 73  es of internal s
e270: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 0a 61 6c  chema objects.al
e280: 77 61 79 73 20 62 65 67 69 6e 20 77 69 74 68 20  ways begin with 
e290: 22 73 71 6c 69 74 65 5f 22 20 61 6e 64 20 61 6e  "sqlite_" and an
e2a0: 79 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  y table, index, 
e2b0: 76 69 65 77 2c 20 6f 72 20 74 72 69 67 67 65 72  view, or trigger
e2c0: 0a 77 68 6f 73 65 20 6e 61 6d 65 20 62 65 67 69  .whose name begi
e2d0: 6e 73 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f  ns with "sqlite_
e2e0: 22 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c  " is an internal
e2f0: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 2e 0a   schema object..
e300: 5e 53 51 4c 69 74 65 20 70 72 6f 68 69 62 69 74  ^SQLite prohibit
e310: 73 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66  s applications f
e320: 72 6f 6d 20 63 72 65 61 74 69 6e 67 20 6f 62 6a  rom creating obj
e330: 65 63 74 73 20 77 68 6f 73 65 20 6e 61 6d 65 73  ects whose names
e340: 20 62 65 67 69 6e 0a 77 69 74 68 20 22 73 71 6c   begin.with "sql
e350: 69 74 65 5f 22 2e 20 20 0a 0a 3c 70 3e 49 6e 74  ite_".  ..<p>Int
e360: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
e370: 65 63 74 73 20 75 73 65 64 20 62 79 20 53 51 4c  ects used by SQL
e380: 69 74 65 20 6d 61 79 20 69 6e 63 6c 75 64 65 20  ite may include 
e390: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 0a  the following:..
e3a0: 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49 6e 64 69  <ul>.<li><p>Indi
e3b0: 63 65 73 20 77 69 74 68 20 6e 61 6d 65 73 20 6f  ces with names o
e3c0: 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c 69  f the form "sqli
e3d0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42  te_autoindex_TAB
e3e0: 4c 45 5f 4e 22 20 74 68 61 74 0a 20 20 20 20 20  LE_N" that.     
e3f0: 20 20 61 72 65 20 75 73 65 64 20 74 6f 20 69 6d    are used to im
e400: 70 6c 65 6d 65 6e 74 20 5b 55 4e 49 51 55 45 5d  plement [UNIQUE]
e410: 20 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b 45   and [PRIMARY KE
e420: 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f  Y] constraints o
e430: 6e 0a 20 20 20 20 20 20 20 6f 72 64 69 6e 61 72  n.       ordinar
e440: 79 20 74 61 62 6c 65 73 2e 0a 0a 3c 6c 69 3e 3c  y tables...<li><
e450: 70 3e 41 20 74 61 62 6c 65 20 77 69 74 68 20 74  p>A table with t
e460: 68 65 20 6e 61 6d 65 20 22 73 71 6c 69 74 65 5f  he name "sqlite_
e470: 73 65 71 75 65 6e 63 65 22 20 74 68 61 74 20 69  sequence" that i
e480: 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74  s used to keep t
e490: 72 61 63 6b 0a 20 20 20 20 20 20 20 6f 66 20 74  rack.       of t
e4a0: 68 65 20 6d 61 78 69 6d 75 6d 20 68 69 73 74 6f  he maximum histo
e4b0: 72 69 63 61 6c 20 5b 49 4e 54 45 47 45 52 20 50  rical [INTEGER P
e4c0: 52 49 4d 41 52 59 20 4b 45 59 5d 20 66 6f 72 20  RIMARY KEY] for 
e4d0: 61 20 74 61 62 6c 65 0a 20 20 20 20 20 20 20 75  a table.       u
e4e0: 73 69 6e 67 20 5b 41 55 54 4f 49 4e 43 52 45 4d  sing [AUTOINCREM
e4f0: 45 4e 54 5d 2e 0a 0a 3c 6c 69 3e 3c 70 3e 54 61  ENT]...<li><p>Ta
e500: 62 6c 65 73 20 77 69 74 68 20 6e 61 6d 65 73 20  bles with names 
e510: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73 71 6c  of the form "sql
e520: 69 74 65 5f 73 74 61 74 4e 22 20 77 68 65 72 65  ite_statN" where
e530: 20 4e 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   N is an integer
e540: 2e 0a 20 20 20 20 20 20 20 53 75 63 68 20 74 61  ..       Such ta
e550: 62 6c 65 73 20 73 74 6f 72 65 20 64 61 74 61 62  bles store datab
e560: 61 73 65 20 73 74 61 74 69 73 74 69 63 73 20 67  ase statistics g
e570: 61 74 68 65 72 65 64 20 62 79 20 74 68 65 20 5b  athered by the [
e580: 41 4e 41 4c 59 5a 45 5d 0a 20 20 20 20 20 20 20  ANALYZE].       
e590: 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 75 73 65 64  command and used
e5a0: 20 62 79 20 74 68 65 20 71 75 65 72 79 20 70 6c   by the query pl
e5b0: 61 6e 6e 65 72 20 74 6f 20 68 65 6c 70 20 64 65  anner to help de
e5c0: 74 65 72 6d 69 6e 65 20 74 68 65 20 62 65 73 74  termine the best
e5d0: 0a 20 20 20 20 20 20 20 61 6c 67 6f 72 69 74 68  .       algorith
e5e0: 6d 20 74 6f 20 75 73 65 20 66 6f 72 20 65 61 63  m to use for eac
e5f0: 68 20 71 75 65 72 79 2e 0a 3c 2f 75 6c 3e 0a 0a  h query..</ul>..
e600: 3c 70 3e 4e 65 77 20 69 6e 74 65 72 6e 61 6c 20  <p>New internal 
e610: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 6e  schema objects n
e620: 61 6d 65 73 2c 20 61 6c 77 61 79 73 20 62 65 67  ames, always beg
e630: 69 6e 6e 69 6e 67 20 77 69 74 68 20 22 73 71 6c  inning with "sql
e640: 69 74 65 5f 22 2c 0a 6d 61 79 20 62 65 20 61 64  ite_",.may be ad
e650: 64 65 64 20 74 6f 20 74 68 65 20 53 51 4c 69 74  ded to the SQLit
e660: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69 6e  e file format in
e670: 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65 73   future releases
e680: 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
e690: 65 6e 74 20 73 65 71 74 61 62 20 7b 73 71 6c 69  ent seqtab {sqli
e6a0: 74 65 5f 73 65 71 75 65 6e 63 65 7d 3c 2f 74 63  te_sequence}</tc
e6b0: 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 32 20 54 68 65  l>.<h4>2.6.2 The
e6c0: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
e6d0: 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e   table</h4>..<p>
e6e0: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  ^The sqlite_sequ
e6f0: 65 6e 63 65 20 74 61 62 6c 65 20 69 73 20 61 6e  ence table is an
e700: 20 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20   internal table 
e710: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
e720: 6c 65 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52  lement.[AUTOINCR
e730: 45 4d 45 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71  EMENT].  ^The sq
e740: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
e750: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 61  ble is created a
e760: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65  utomatically.whe
e770: 6e 65 76 65 72 20 61 6e 79 20 6f 72 64 69 6e 61  never any ordina
e780: 72 79 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e  ry table with an
e790: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69   AUTOINCREMENT i
e7a0: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a 6b  nteger primary.k
e7b0: 65 79 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  ey is created.  
e7c0: 5e 4f 6e 63 65 20 63 72 65 61 74 65 64 2c 20 74  ^Once created, t
e7d0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
e7e0: 63 65 20 74 61 62 6c 65 20 65 78 69 73 74 73 20  ce table exists 
e7f0: 69 6e 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61  in the.sqlite_ma
e800: 73 74 65 72 20 74 61 62 6c 65 20 66 6f 72 65 76  ster table forev
e810: 65 72 3b 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  er; it cannot be
e820: 20 64 72 6f 70 70 65 64 2e 0a 5e 28 54 68 65 20   dropped..^(The 
e830: 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 73  schema for the s
e840: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
e850: 61 62 6c 65 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b  able is:..<block
e860: 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41  quote><pre>.CREA
e870: 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f  TE TABLE sqlite_
e880: 73 65 71 75 65 6e 63 65 28 6e 61 6d 65 2c 73 65  sequence(name,se
e890: 71 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  q);.</pre></bloc
e8a0: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54  kquote>)^..<p>^T
e8b0: 68 65 72 65 20 69 73 20 61 20 73 69 6e 67 6c 65  here is a single
e8c0: 20 72 6f 77 20 69 6e 20 74 68 65 20 73 71 6c 69   row in the sqli
e8d0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
e8e0: 65 20 66 6f 72 20 65 61 63 68 20 6f 72 64 69 6e  e for each ordin
e8f0: 61 72 79 0a 74 61 62 6c 65 20 74 68 61 74 20 75  ary.table that u
e900: 73 65 73 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  ses AUTOINCREMEN
e910: 54 2e 20 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f  T.  ^(The name o
e920: 66 20 74 68 65 20 74 61 62 6c 65 20 28 61 73 20  f the table (as 
e930: 69 74 20 61 70 70 65 61 72 73 20 69 6e 0a 73 71  it appears in.sq
e940: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65  lite_master.name
e950: 29 20 69 73 20 69 6e 20 74 68 65 20 73 71 6c 69  ) is in the sqli
e960: 74 65 5f 73 65 71 75 65 6e 63 65 2e 6d 61 69 6e  te_sequence.main
e970: 20 66 69 65 6c 64 20 61 6e 64 20 74 68 65 20 6c   field and the l
e980: 61 72 67 65 73 74 0a 5b 49 4e 54 45 47 45 52 20  argest.[INTEGER 
e990: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 65 76 65  PRIMARY KEY] eve
e9a0: 72 20 75 73 65 64 20 62 79 20 74 68 61 74 20 74  r used by that t
e9b0: 61 62 6c 65 20 69 73 20 69 6e 20 74 68 65 20 73  able is in the s
e9c0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73  qlite_sequence.s
e9d0: 65 71 0a 66 69 65 6c 64 2e 29 5e 20 20 5e 4e 65  eq.field.)^  ^Ne
e9e0: 77 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  w automatically 
e9f0: 67 65 6e 65 72 61 74 65 64 20 69 6e 74 65 67 65  generated intege
ea00: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 73 20 66  r primary keys f
ea10: 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
ea20: 0a 74 61 62 6c 65 73 20 61 72 65 20 67 75 61 72  .tables are guar
ea30: 61 6e 74 65 65 64 20 74 6f 20 62 65 20 6c 61 72  anteed to be lar
ea40: 67 65 72 20 74 68 61 6e 20 74 68 65 20 73 71 6c  ger than the sql
ea50: 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71  ite_sequence.seq
ea60: 20 66 69 65 6c 64 20 66 6f 72 0a 74 68 61 74 20   field for.that 
ea70: 74 61 62 6c 65 2e 0a 5e 28 49 66 20 74 68 65 20  table..^(If the 
ea80: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e  sqlite_sequence.
ea90: 73 65 71 20 66 69 65 6c 64 20 6f 66 20 61 6e 20  seq field of an 
eaa0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
eab0: 62 6c 65 20 69 73 20 61 6c 72 65 61 64 79 20 61  ble is already a
eac0: 74 0a 74 68 65 20 6c 61 72 67 65 73 74 20 69 6e  t.the largest in
ead0: 74 65 67 65 72 20 76 61 6c 75 65 20 28 39 32 32  teger value (922
eae0: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
eaf0: 29 20 74 68 65 6e 20 61 74 74 65 6d 70 74 73 20  ) then attempts 
eb00: 74 6f 20 61 64 64 20 6e 65 77 0a 72 6f 77 73 20  to add new.rows 
eb10: 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 77 69  to that table wi
eb20: 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 61  th an automatica
eb30: 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69 6e  lly generated in
eb40: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 77 69  teger primary wi
eb50: 6c 6c 20 66 61 69 6c 0a 77 69 74 68 20 61 6e 20  ll fail.with an 
eb60: 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 20 65 72  [SQLITE_FULL] er
eb70: 72 6f 72 2e 29 5e 0a 5e 54 68 65 20 73 71 6c 69  ror.)^.^The sqli
eb80: 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 20  te_sequence.seq 
eb90: 66 69 65 6c 64 20 69 73 20 61 75 74 6f 6d 61 74  field is automat
eba0: 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64 20 69  ically updated i
ebb0: 66 20 72 65 71 75 69 72 65 64 20 77 68 65 6e 0a  f required when.
ebc0: 6e 65 77 20 65 6e 74 72 69 65 73 20 61 72 65 20  new entries are 
ebd0: 61 64 64 65 64 20 74 6f 20 61 6e 20 41 55 54 4f  added to an AUTO
ebe0: 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
ebf0: 20 20 0a 5e 54 68 65 20 73 71 6c 69 74 65 5f 73    .^The sqlite_s
ec00: 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f 72 20  equence row for 
ec10: 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
ec20: 20 74 61 62 6c 65 20 69 73 20 61 75 74 6f 6d 61   table is automa
ec30: 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64 0a  tically deleted.
ec40: 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  when the table i
ec50: 73 20 64 72 6f 70 70 65 64 2e 0a 5e 49 66 20 74  s dropped..^If t
ec60: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ec70: 63 65 20 72 6f 77 20 66 6f 72 20 61 6e 20 41 55  ce row for an AU
ec80: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
ec90: 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
eca0: 20 77 68 65 6e 0a 74 68 65 20 41 55 54 4f 49 4e   when.the AUTOIN
ecb0: 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73  CREMENT table is
ecc0: 20 75 70 64 61 74 65 64 2c 20 74 68 65 6e 20 61   updated, then a
ecd0: 20 6e 65 77 20 73 71 6c 69 74 65 5f 73 65 71 75   new sqlite_sequ
ece0: 65 6e 63 65 20 72 6f 77 20 69 73 20 63 72 65 61  ence row is crea
ecf0: 74 65 64 2e 0a 5e 28 49 66 20 74 68 65 20 73 71  ted..^(If the sq
ed00: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65  lite_sequence.se
ed10: 71 20 76 61 6c 75 65 20 66 6f 72 20 61 6e 20 41  q value for an A
ed20: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
ed30: 6c 65 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 0a  le is manually .
ed40: 73 65 74 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67  set to something
ed50: 20 6f 74 68 65 72 20 74 68 61 6e 20 61 6e 20 69   other than an i
ed60: 6e 74 65 67 65 72 20 61 6e 64 20 74 68 65 72 65  nteger and there
ed70: 20 69 73 20 61 20 73 75 62 73 65 71 75 65 6e 74   is a subsequent
ed80: 20 61 74 74 65 6d 70 74 20 74 6f 0a 69 6e 73 65   attempt to.inse
ed90: 72 74 20 74 68 65 20 6f 72 20 75 70 64 61 74 65  rt the or update
eda0: 20 74 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45   the AUTOINCREME
edb0: 4e 54 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74  NT table, then t
edc0: 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
edd0: 6e 64 65 66 69 6e 65 64 2e 29 5e 0a 0a 3c 70 3e  ndefined.)^..<p>
ede0: 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64  ^Application cod
edf0: 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e is allowed to 
ee00: 6d 6f 64 69 66 79 20 74 68 65 20 73 71 6c 69 74  modify the sqlit
ee10: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
ee20: 2c 20 74 6f 20 61 64 64 0a 6e 65 77 20 72 6f 77  , to add.new row
ee30: 73 2c 20 74 6f 20 64 65 6c 65 74 65 20 72 6f 77  s, to delete row
ee40: 73 2c 20 6f 72 20 74 6f 20 6d 6f 64 69 66 79 20  s, or to modify 
ee50: 65 78 69 73 74 69 6e 67 20 72 6f 77 73 2e 20 20  existing rows.  
ee60: 5e 48 6f 77 65 76 65 72 2c 20 61 70 70 6c 69 63  ^However, applic
ee70: 61 74 69 6f 6e 0a 63 6f 64 65 20 63 61 6e 6e 6f  ation.code canno
ee80: 74 20 63 72 65 61 74 65 20 74 68 65 20 73 71 6c  t create the sql
ee90: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
eea0: 6c 65 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f  le if it does no
eeb0: 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 2e  t already exist.
eec0: 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f  .^Application co
eed0: 64 65 20 63 61 6e 20 64 65 6c 65 74 65 20 61 6c  de can delete al
eee0: 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
eef0: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ef00: 63 65 20 74 61 62 6c 65 2c 0a 62 75 74 20 61 70  ce table,.but ap
ef10: 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65 20 63  plication code c
ef20: 61 6e 6e 6f 74 20 64 72 6f 70 20 74 68 65 20 73  annot drop the s
ef30: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
ef40: 61 62 6c 65 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  able...<tcl>hd_f
ef50: 72 61 67 6d 65 6e 74 20 73 74 61 74 31 74 61 62  ragment stat1tab
ef60: 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 31 7d 20   {sqlite_stat1} 
ef70: 53 51 4c 49 54 45 5f 53 54 41 54 31 20 3c 2f 74  SQLITE_STAT1 </t
ef80: 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 33 20 54 68  cl>.<h4>2.6.3 Th
ef90: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
efa0: 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54  able</h4>..<p>^T
efb0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
efc0: 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 74  is an internal t
efd0: 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
efe0: 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f  the [ANALYZE] co
eff0: 6d 6d 61 6e 64 0a 61 6e 64 20 75 73 65 64 20 74  mmand.and used t
f000: 6f 20 68 6f 6c 64 20 73 75 70 70 6c 65 6d 65 6e  o hold supplemen
f010: 74 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  tal information 
f020: 61 62 6f 75 74 20 74 61 62 6c 65 73 20 61 6e 64  about tables and
f030: 20 69 6e 64 65 78 65 73 20 74 68 61 74 20 74 68   indexes that th
f040: 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e.query planner 
f050: 63 61 6e 20 75 73 65 20 74 6f 20 68 65 6c 70 20  can use to help 
f060: 69 74 20 66 69 6e 64 20 62 65 74 74 65 72 20 77  it find better w
f070: 61 79 73 20 6f 66 20 70 65 72 66 6f 72 6d 69 6e  ays of performin
f080: 67 20 71 75 65 72 69 65 73 2e 0a 5e 41 70 70 6c  g queries..^Appl
f090: 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 75 70 64  ications can upd
f0a0: 61 74 65 2c 20 64 65 6c 65 74 65 20 66 72 6f 6d  ate, delete from
f0b0: 2c 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 6f 72  , insert into or
f0c0: 20 64 72 6f 70 20 74 68 65 20 73 71 6c 69 74 65   drop the sqlite
f0d0: 5f 73 74 61 74 31 0a 74 61 62 6c 65 2c 20 62 75  _stat1.table, bu
f0e0: 74 20 6d 61 79 20 6e 6f 74 20 63 72 65 61 74 65  t may not create
f0f0: 20 6f 72 20 61 6c 74 65 72 20 74 68 65 20 73 71   or alter the sq
f100: 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
f110: 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20 6f  ..^(The schema o
f120: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
f130: 74 31 20 74 61 62 6c 65 20 69 73 20 61 73 20 66  t1 table is as f
f140: 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  ollows:..<blockq
f150: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
f160: 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73  E TABLE sqlite_s
f170: 74 61 74 31 28 74 62 6c 2c 69 64 78 2c 73 74 61  tat1(tbl,idx,sta
f180: 74 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63  t);.</pre></bloc
f190: 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 20 5e  kquote>)^..<p> ^
f1a0: 28 54 68 65 72 65 20 69 73 20 6e 6f 72 6d 61 6c  (There is normal
f1b0: 6c 79 20 6f 6e 65 20 72 6f 77 20 70 65 72 20 69  ly one row per i
f1c0: 6e 64 65 78 2c 20 77 69 74 68 20 74 68 65 20 69  ndex, with the i
f1d0: 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65 64 20  ndex identified 
f1e0: 62 79 20 74 68 65 0a 6e 61 6d 65 20 69 6e 20 74  by the.name in t
f1f0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
f200: 69 64 78 20 63 6f 6c 75 6d 6e 2e 29 5e 20 20 5e  idx column.)^  ^
f210: 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
f220: 31 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 73 0a  1.tbl column is.
f230: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
f240: 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74  table to which t
f250: 68 65 20 69 6e 64 65 78 20 62 65 6c 6f 6e 67 73  he index belongs
f260: 2e 29 5e 20 20 5e 28 49 6e 20 65 61 63 68 20 73  .)^  ^(In each s
f270: 75 63 68 20 72 6f 77 2c 20 0a 74 68 65 20 73 71  uch row, .the sq
f280: 6c 69 74 65 5f 73 74 61 74 2e 73 74 61 74 20 63  lite_stat.stat c
f290: 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 0a 61 20  olumn will be.a 
f2a0: 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74 69 6e  string consistin
f2b0: 67 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 69  g of a list of i
f2c0: 6e 74 65 67 65 72 73 20 66 6f 6c 6c 6f 77 65 64  ntegers followed
f2d0: 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   by zero or more
f2e0: 20 0a 61 72 67 75 6d 65 6e 74 73 2e 29 5e 20 20   .arguments.)^  
f2f0: 5e 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67  ^The first integ
f300: 65 72 20 69 6e 20 74 68 69 73 0a 6c 69 73 74 20  er in this.list 
f310: 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  is the approxima
f320: 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  te number of row
f330: 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20  s in the index. 
f340: 20 28 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a   (The number of.
f350: 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
f360: 78 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  x is the same as
f370: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
f380: 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
f390: 2c 0a 65 78 63 65 70 74 20 66 6f 72 20 5b 70 61  ,.except for [pa
f3a0: 72 74 69 61 6c 20 69 6e 64 65 78 65 73 5d 2e 29  rtial indexes].)
f3b0: 0a 5e 54 68 65 20 73 65 63 6f 6e 64 20 69 6e 74  .^The second int
f3c0: 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70 72  eger is the appr
f3d0: 6f 78 69 6d 61 74 65 20 61 76 65 72 61 67 65 20  oximate average 
f3e0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
f3f0: 6e 20 74 68 65 20 69 6e 64 65 78 0a 74 68 61 74  n the index.that
f400: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
f410: 61 6c 75 65 20 69 6e 20 74 68 65 20 66 69 72 73  alue in the firs
f420: 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
f430: 69 6e 64 65 78 2e 20 20 5e 54 68 65 20 74 68 69  index.  ^The thi
f440: 72 64 20 0a 69 6e 74 65 67 65 72 20 69 73 20 74  rd .integer is t
f450: 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 61  he approximate a
f460: 76 65 72 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  verage number of
f470: 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
f480: 65 78 20 74 68 61 74 20 68 61 76 65 20 0a 74 68  ex that have .th
f490: 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
f4a0: 20 74 68 65 20 66 69 72 73 74 20 74 77 6f 20 63   the first two c
f4b0: 6f 6c 75 6d 6e 73 2e 20 20 5e 54 68 65 20 4e 2d  olumns.  ^The N-
f4c0: 74 68 20 69 6e 74 65 67 65 72 20 28 66 6f 72 20  th integer (for 
f4d0: 4e 3e 31 29 20 0a 69 73 20 74 68 65 20 61 70 70  N>1) .is the app
f4e0: 72 6f 78 69 6d 61 74 65 20 61 76 65 72 61 67 65  roximate average
f4f0: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
f500: 69 6e 20 0a 74 68 65 20 69 6e 64 65 78 20 77 68  in .the index wh
f510: 69 63 68 20 68 61 76 65 20 74 68 65 20 73 61 6d  ich have the sam
f520: 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
f530: 66 69 72 73 74 20 4e 2d 31 20 63 6f 6c 75 6d 6e  first N-1 column
f540: 73 2e 20 20 5e 46 6f 72 0a 61 20 4b 2d 63 6f 6c  s.  ^For.a K-col
f550: 75 6d 6e 20 69 6e 64 65 78 2c 20 74 68 65 72 65  umn index, there
f560: 20 77 69 6c 6c 20 62 65 20 4b 2b 31 20 69 6e 74   will be K+1 int
f570: 65 67 65 72 73 20 69 6e 20 74 68 65 20 73 74 61  egers in the sta
f580: 74 20 63 6f 6c 75 6d 6e 2e 20 20 5e 49 66 0a 74  t column.  ^If.t
f590: 68 65 20 69 6e 64 65 78 20 69 73 20 75 6e 69 71  he index is uniq
f5a0: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 6c 61 73  ue, then the las
f5b0: 74 20 69 6e 74 65 67 65 72 20 77 69 6c 6c 20 62  t integer will b
f5c0: 65 20 31 2e 0a 0a 3c 70 3e 5e 54 68 65 20 6c 69  e 1...<p>^The li
f5d0: 73 74 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  st of integers i
f5e0: 6e 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d  n the stat colum
f5f0: 6e 20 63 61 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79  n can optionally
f600: 20 62 65 20 66 6f 6c 6c 6f 77 65 64 0a 62 79 20   be followed.by 
f610: 61 72 67 75 6d 65 6e 74 73 2c 20 65 61 63 68 20  arguments, each 
f620: 6f 66 20 77 68 69 63 68 20 69 73 20 61 20 73 65  of which is a se
f630: 71 75 65 6e 63 65 20 6f 66 20 6e 6f 6e 2d 73 70  quence of non-sp
f640: 61 63 65 20 63 68 61 72 61 63 74 65 72 73 2e 0a  ace characters..
f650: 5e 41 6c 6c 20 61 72 67 75 6d 65 6e 74 73 20 61  ^All arguments a
f660: 72 65 20 70 72 65 63 65 64 65 64 20 62 79 20 61  re preceded by a
f670: 20 73 69 6e 67 6c 65 20 73 70 61 63 65 2e 0a 5e   single space..^
f680: 55 6e 72 65 63 6f 67 6e 69 7a 65 64 20 61 72 67  Unrecognized arg
f690: 75 6d 65 6e 74 73 20 61 72 65 20 73 69 6c 65 6e  uments are silen
f6a0: 74 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 70  tly ignored...<p
f6b0: 3e 5e 49 66 20 74 68 65 20 22 75 6e 6f 72 64 65  >^If the "unorde
f6c0: 72 65 64 22 20 61 72 67 75 6d 65 6e 74 20 69 73  red" argument is
f6d0: 20 70 72 65 73 65 6e 74 2c 20 74 68 65 6e 20 74   present, then t
f6e0: 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
f6f0: 20 61 73 73 75 6d 65 73 0a 74 68 61 74 20 74 68   assumes.that th
f700: 65 20 69 6e 64 65 78 20 69 73 20 75 6e 6f 72 64  e index is unord
f710: 65 72 65 64 20 61 6e 64 20 77 69 6c 6c 20 6e 6f  ered and will no
f720: 74 20 75 73 65 20 74 68 65 20 69 6e 64 65 78 20  t use the index 
f730: 66 6f 72 20 61 20 72 61 6e 67 65 20 71 75 65 72  for a range quer
f740: 79 0a 6f 72 20 66 6f 72 20 73 6f 72 74 69 6e 67  y.or for sorting
f750: 2e 0a 0a 3c 70 3e 5e 54 68 65 20 22 73 7a 3d 4e  ...<p>^The "sz=N
f760: 4e 4e 22 20 61 72 67 75 6d 65 6e 74 20 28 77 68  NN" argument (wh
f770: 65 72 65 20 4e 4e 4e 20 72 65 70 72 65 73 65 6e  ere NNN represen
f780: 74 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66  ts a sequence of
f790: 20 31 20 6f 72 20 6d 6f 72 65 20 64 69 67 69 74   1 or more digit
f7a0: 73 29 0a 6d 65 61 6e 73 20 74 68 61 74 20 74 68  s).means that th
f7b0: 65 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  e average row si
f7c0: 7a 65 20 6f 76 65 72 20 61 6c 6c 20 72 65 63 6f  ze over all reco
f7d0: 72 64 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  rds of the table
f7e0: 20 6f 72 0a 69 6e 64 65 78 20 69 73 20 4e 4e 4e   or.index is NNN
f7f0: 20 62 79 74 65 73 20 70 65 72 20 72 6f 77 2e 20   bytes per row. 
f800: 20 5e 54 68 65 20 53 51 4c 69 74 65 20 71 75 65   ^The SQLite que
f810: 72 79 20 70 6c 61 6e 6e 65 72 20 6d 69 67 68 74  ry planner might
f820: 20 75 73 65 20 74 68 65 0a 65 73 74 69 6d 61 74   use the.estimat
f830: 65 64 20 72 6f 77 20 73 69 7a 65 20 69 6e 66 6f  ed row size info
f840: 72 6d 61 74 69 6f 6e 20 70 72 6f 76 69 64 65 64  rmation provided
f850: 20 62 79 20 74 68 65 20 22 73 7a 3d 4e 4e 4e 22   by the "sz=NNN"
f860: 20 74 6f 6b 65 6e 0a 74 6f 20 68 65 6c 70 20 69   token.to help i
f870: 74 20 63 68 6f 6f 73 65 20 73 6d 61 6c 6c 65 72  t choose smaller
f880: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 65   tables and inde
f890: 78 65 73 20 74 68 61 74 20 72 65 71 75 69 72 65  xes that require
f8a0: 20 6c 65 73 73 20 64 69 73 6b 20 49 2f 4f 2e 0a   less disk I/O..
f8b0: 0a 3c 70 3e 5e 28 54 68 65 20 70 72 65 73 65 6e  .<p>^(The presen
f8c0: 63 65 20 6f 66 20 74 68 65 20 22 6e 6f 73 6b 69  ce of the "noski
f8d0: 70 73 63 61 6e 22 20 74 6f 6b 65 6e 20 6f 6e 20  pscan" token on 
f8e0: 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
f8f0: 2e 73 74 61 74 20 66 69 65 6c 64 0a 6f 66 20 61  .stat field.of a
f900: 6e 20 69 6e 64 65 78 20 70 72 65 76 65 6e 74 73  n index prevents
f910: 20 74 68 61 74 20 69 6e 64 65 78 20 66 72 6f 6d   that index from
f920: 20 62 65 69 6e 67 20 75 73 65 64 20 77 69 74 68   being used with
f930: 20 74 68 65 0a 5b 73 6b 69 70 2d 73 63 61 6e 20   the.[skip-scan 
f940: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 5d 2e 29 5e  optimization].)^
f950: 0a 0a 3c 70 3e 4e 65 77 20 74 65 78 74 20 74 6f  ..<p>New text to
f960: 6b 65 6e 73 20 6d 61 79 20 62 65 20 61 64 64 65  kens may be adde
f970: 64 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  d to the end of 
f980: 74 68 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20  the stat column 
f990: 69 6e 20 66 75 74 75 72 65 0a 65 6e 68 61 6e 63  in future.enhanc
f9a0: 65 6d 65 6e 74 73 20 74 6f 20 53 51 4c 69 74 65  ements to SQLite
f9b0: 2e 20 20 46 6f 72 20 63 6f 6d 70 61 74 69 62 69  .  For compatibi
f9c0: 6c 69 74 79 2c 20 75 6e 72 65 63 6f 67 6e 69 7a  lity, unrecogniz
f9d0: 65 64 20 74 6f 6b 65 6e 73 20 61 74 20 74 68 65  ed tokens at the
f9e0: 20 65 6e 64 0a 6f 66 20 74 68 65 20 73 74 61 74   end.of the stat
f9f0: 20 63 6f 6c 75 6d 6e 20 61 72 65 20 73 69 6c 65   column are sile
fa00: 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c  ntly ignored...<
fa10: 70 3e 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74  p>^(If the sqlit
fa20: 65 5f 73 74 61 74 31 2e 69 64 78 20 63 6f 6c 75  e_stat1.idx colu
fa30: 6d 6e 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  mn is NULL, then
fa40: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
fa50: 31 2e 73 74 61 74 0a 63 6f 6c 75 6d 6e 20 63 6f  1.stat.column co
fa60: 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 20  ntains a single 
fa70: 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
fa80: 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
fa90: 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20   number of.rows 
faa0: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 69 64 65  in the table ide
fab0: 6e 74 69 66 69 65 64 20 62 79 20 73 71 6c 69 74  ntified by sqlit
fac0: 65 5f 73 74 61 74 31 2e 74 62 6c 2e 29 5e 0a 0a  e_stat1.tbl.)^..
fad0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
fae0: 20 73 74 61 74 32 74 61 62 20 7b 73 71 6c 69 74   stat2tab {sqlit
faf0: 65 5f 73 74 61 74 32 7d 3c 2f 74 63 6c 3e 0a 3c  e_stat2}</tcl>.<
fb00: 68 34 3e 32 2e 36 2e 34 20 54 68 65 20 73 71 6c  h4>2.6.4 The sql
fb10: 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 3c  ite_stat2 table<
fb20: 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  /h4>..<p>The sql
fb30: 69 74 65 5f 73 74 61 74 32 20 69 73 20 6f 6e 6c  ite_stat2 is onl
fb40: 79 20 63 72 65 61 74 65 64 20 61 6e 64 20 69 73  y created and is
fb50: 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 53 51   only used if SQ
fb60: 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
fb70: 0a 77 69 74 68 20 53 51 4c 49 54 45 5f 45 4e 41  .with SQLITE_ENA
fb80: 42 4c 45 5f 53 54 41 54 32 20 61 6e 64 20 69 66  BLE_STAT2 and if
fb90: 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72 73   the SQLite vers
fba0: 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20 62 65  ion number is be
fbb0: 74 77 65 65 6e 0a 33 2e 36 2e 31 38 20 61 6e 64  tween.3.6.18 and
fbc0: 20 33 2e 37 2e 38 2e 20 20 54 68 65 20 73 71 6c   3.7.8.  The sql
fbd0: 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20  ite_stat2 table 
fbe0: 69 73 20 6e 65 69 74 68 65 72 20 72 65 61 64 20  is neither read 
fbf0: 6e 6f 72 20 77 72 69 74 74 65 6e 20 62 79 20 61  nor written by a
fc00: 6e 79 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51  ny.version of SQ
fc10: 4c 69 74 65 20 62 65 66 6f 72 65 20 33 2e 36 2e  Lite before 3.6.
fc20: 31 38 20 6e 6f 72 20 61 66 74 65 72 20 33 2e 37  18 nor after 3.7
fc30: 2e 38 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73  .8..The sqlite_s
fc40: 74 61 74 32 20 74 61 62 6c 65 20 63 6f 6e 74 61  tat2 table conta
fc50: 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  ins additional i
fc60: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74  nformation.about
fc70: 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f   the distributio
fc80: 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e  n of keys within
fc90: 20 61 6e 20 69 6e 64 65 78 2e 0a 54 68 65 20 73   an index..The s
fca0: 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c  chema of the sql
fcb0: 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20  ite_stat2 table 
fcc0: 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
fcd0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
fce0: 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
fcf0: 71 6c 69 74 65 5f 73 74 61 74 32 28 74 62 6c 2c  qlite_stat2(tbl,
fd00: 69 64 78 2c 73 61 6d 70 6c 65 6e 6f 2c 73 61 6d  idx,sampleno,sam
fd10: 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  ple);.</pre></bl
fd20: 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68  ockquote>..<p>Th
fd30: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 69  e sqlite_stat2.i
fd40: 64 78 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 74 68  dx column and th
fd50: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 74  e sqlite_stat2.t
fd60: 62 6c 20 63 6f 6c 75 6d 6e 20 69 6e 20 65 61 63  bl column in eac
fd70: 68 20 0a 72 6f 77 20 6f 66 20 74 68 65 20 73 71  h .row of the sq
fd80: 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65  lite_stat2 table
fd90: 20 69 64 65 6e 74 69 66 79 20 61 6e 20 69 6e 64   identify an ind
fda0: 65 78 20 64 65 73 63 72 69 62 65 64 20 62 79 20  ex described by 
fdb0: 74 68 61 74 20 72 6f 77 2e 0a 54 68 65 72 65 20  that row..There 
fdc0: 61 72 65 20 75 73 75 61 6c 6c 79 20 31 30 20 72  are usually 10 r
fdd0: 6f 77 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74  ows in the sqlit
fde0: 65 5f 73 74 61 74 32 0a 74 61 62 6c 65 20 66 6f  e_stat2.table fo
fdf0: 72 20 65 61 63 68 20 69 6e 64 65 78 2e 0a 0a 3c  r each index...<
fe00: 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  p>The sqlite_sta
fe10: 74 32 20 65 6e 74 72 69 65 73 20 66 6f 72 20 61  t2 entries for a
fe20: 6e 20 69 6e 64 65 78 20 74 68 61 74 20 68 61 76  n index that hav
fe30: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 73  e sqlite_stat2.s
fe40: 61 6d 70 6c 65 6e 6f 0a 62 65 74 77 65 65 6e 20  ampleno.between 
fe50: 30 20 61 6e 64 20 39 20 69 6e 63 6c 75 73 69 76  0 and 9 inclusiv
fe60: 65 20 61 72 65 20 73 61 6d 70 6c 65 73 20 6f 66  e are samples of
fe70: 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b   the left-most k
fe80: 65 79 20 76 61 6c 75 65 20 69 6e 20 74 68 65 0a  ey value in the.
fe90: 69 6e 64 65 78 20 74 61 6b 65 6e 20 61 74 20 65  index taken at e
fea0: 76 65 6e 6c 79 20 73 70 61 63 65 64 20 70 6f 69  venly spaced poi
feb0: 6e 74 73 20 61 6c 6f 6e 67 20 74 68 65 20 69 6e  nts along the in
fec0: 64 65 78 2e 0a 4c 65 74 20 43 20 62 65 20 74 68  dex..Let C be th
fed0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
fee0: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 54   in the index..T
fef0: 68 65 6e 20 74 68 65 20 73 61 6d 70 6c 65 64 20  hen the sampled 
ff00: 72 6f 77 73 20 61 72 65 20 67 69 76 65 6e 20 62  rows are given b
ff10: 79 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  y..<blockquote>.
ff20: 20 20 20 20 20 72 6f 77 6e 75 6d 62 65 72 20 3d       rownumber =
ff30: 20 28 69 2a 43 2a 32 20 2b 20 43 29 2f 32 30 0a   (i*C*2 + C)/20.
ff40: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
ff50: 70 3e 54 68 65 20 76 61 72 69 61 62 6c 65 20 69  p>The variable i
ff60: 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73   in the previous
ff70: 20 65 78 70 72 65 73 73 69 6f 6e 20 76 61 72 69   expression vari
ff80: 65 73 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64  es between 0 and
ff90: 20 39 2e 0a 43 6f 6e 63 65 70 74 75 61 6c 6c 79   9..Conceptually
ffa0: 2c 20 74 68 65 20 69 6e 64 65 78 20 73 70 61 63  , the index spac
ffb0: 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
ffc0: 6f 0a 31 30 20 75 6e 69 66 6f 72 6d 20 62 75 63  o.10 uniform buc
ffd0: 6b 65 74 73 20 61 6e 64 20 74 68 65 20 73 61 6d  kets and the sam
ffe0: 70 6c 65 73 20 61 72 65 20 74 68 65 20 6d 69 64  ples are the mid
fff0: 64 6c 65 20 72 6f 77 20 66 72 6f 6d 20 65 61 63  dle row from eac
10000 68 20 62 75 63 6b 65 74 2e 0a 0a 3c 70 3e 54 68  h bucket...<p>Th
10010 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 73 71 6c  e format for sql
10020 69 74 65 5f 73 74 61 74 32 20 69 73 20 72 65 63  ite_stat2 is rec
10030 6f 72 64 65 64 20 68 65 72 65 20 66 6f 72 20 6c  orded here for l
10040 65 67 61 63 79 20 72 65 66 65 72 65 6e 63 65 2e  egacy reference.
10050 20 20 0a 52 65 63 65 6e 74 20 76 65 72 73 69 6f    .Recent versio
10060 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 6e 6f 20  ns of SQLite no 
10070 6c 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 20 73  longer support s
10080 71 6c 69 74 65 5f 73 74 61 74 32 20 61 6e 64 20  qlite_stat2 and 
10090 74 68 65 0a 73 71 6c 69 74 65 5f 73 74 61 74 32  the.sqlite_stat2
100a0 20 74 61 62 6c 65 2c 20 69 74 20 69 73 20 65 78   table, it is ex
100b0 69 73 74 73 2c 20 69 73 20 73 69 6d 70 6c 79 20  ists, is simply 
100c0 69 67 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 68  ignored...<tcl>h
100d0 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74 33  d_fragment stat3
100e0 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74  tab {sqlite_stat
100f0 33 7d 20 53 51 4c 49 54 45 5f 53 54 41 54 33 3c  3} SQLITE_STAT3<
10100 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36 2e 35 20  /tcl>.<h4>2.6.5 
10110 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
10120 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70 3e   table</h4>..<p>
10130 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
10140 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66   is only used if
10150 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69   SQLite is compi
10160 6c 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54 45  led.with [SQLITE
10170 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 6f  _ENABLE_STAT3] o
10180 72 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  r [SQLITE_ENABLE
10190 5f 53 54 41 54 34 5d 0a 61 6e 64 20 69 66 20 74  _STAT4].and if t
101a0 68 65 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  he SQLite versio
101b0 6e 20 6e 75 6d 62 65 72 20 69 73 20 33 2e 37 2e  n number is 3.7.
101c0 39 20 6f 72 20 67 72 65 61 74 65 72 2e 0a 54 68  9 or greater..Th
101d0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
101e0 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20  able is neither 
101f0 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e  read nor written
10200 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20   by any.version 
10210 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65  of SQLite before
10220 20 33 2e 37 2e 39 2e 0a 49 66 20 74 68 65 20 5b   3.7.9..If the [
10230 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
10240 41 54 34 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  AT4] compile-tim
10250 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  e option is used
10260 20 61 6e 64 20 74 68 65 0a 53 51 4c 69 74 65 20   and the.SQLite 
10270 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69  version number i
10280 73 20 33 2e 38 2e 31 20 6f 72 20 67 72 65 61 74  s 3.8.1 or great
10290 65 72 2c 20 74 68 65 6e 20 73 71 6c 69 74 65 5f  er, then sqlite_
102a0 73 74 61 74 33 20 6d 69 67 68 74 0a 62 65 20 72  stat3 might.be r
102b0 65 61 64 20 62 75 74 20 6e 6f 74 20 77 72 69 74  ead but not writ
102c0 74 65 6e 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  ten..The sqlite_
102d0 73 74 61 74 33 20 74 61 62 6c 65 20 63 6f 6e 74  stat3 table cont
102e0 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c 20  ains additional 
102f0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75  information.abou
10300 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69  t the distributi
10310 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69  on of keys withi
10320 6e 20 61 6e 20 69 6e 64 65 78 2c 20 69 6e 66 6f  n an index, info
10330 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65  rmation that the
10340 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63  .query planner c
10350 61 6e 20 75 73 65 20 74 6f 20 64 65 76 69 73 65  an use to devise
10360 20 62 65 74 74 65 72 20 61 6e 64 20 66 61 73 74   better and fast
10370 65 72 20 71 75 65 72 79 20 61 6c 67 6f 72 69 74  er query algorit
10380 68 6d 73 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d  hms..^(The schem
10390 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f  a of the sqlite_
103a0 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 61  stat3 table is a
103b0 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f  s follows:..<blo
103c0 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
103d0 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74  EATE TABLE sqlit
103e0 65 5f 73 74 61 74 33 28 74 62 6c 2c 69 64 78 2c  e_stat3(tbl,idx,
103f0 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d  nEq,nLt,nDLt,sam
10400 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  ple);.</pre></bl
10410 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
10420 54 68 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c  There are usuall
10430 79 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69  y multiple entri
10440 65 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  es in the sqlite
10450 5f 73 74 61 74 33 20 74 61 62 6c 65 20 66 6f 72  _stat3 table for
10460 20 65 61 63 68 20 69 6e 64 65 78 2e 0a 5e 28 54   each index..^(T
10470 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e  he sqlite_stat3.
10480 73 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f  sample column ho
10490 6c 64 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  lds the value of
104a0 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 66   the left-most f
104b0 69 65 6c 64 20 6f 66 20 61 6e 0a 69 6e 64 65 78  ield of an.index
104c0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 73   identified by s
104d0 71 6c 69 74 65 5f 73 74 61 74 33 2e 69 64 78 20  qlite_stat3.idx 
104e0 61 6e 64 20 73 71 6c 69 74 65 5f 73 74 61 74 33  and sqlite_stat3
104f0 2e 74 62 6c 2e 29 5e 0a 5e 28 54 68 65 20 73 71  .tbl.)^.^(The sq
10500 6c 69 74 65 5f 73 74 61 74 33 2e 6e 45 71 20 63  lite_stat3.nEq c
10510 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20  olumn holds the 
10520 61 70 70 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62  approximate.numb
10530 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
10540 20 74 68 65 20 69 6e 64 65 78 20 77 68 6f 73 65   the index whose
10550 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
10560 6e 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 65  n exactly matche
10570 73 0a 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a  s.the sample.)^.
10580 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ^(The sqlite_sta
10590 74 33 2e 6e 4c 74 20 68 6f 6c 64 73 20 74 68 65  t3.nLt holds the
105a0 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d   approximate num
105b0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
105c0 6e 20 74 68 65 0a 69 6e 64 65 78 20 77 68 6f 73  n the.index whos
105d0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  e left-most colu
105e0 6d 6e 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  mn is less than 
105f0 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 5e 28  the sample.)^.^(
10600 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
10610 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c  .nDLt column hol
10620 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  ds the approxima
10630 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 69 73  te.number of dis
10640 74 69 6e 63 74 20 6c 65 66 74 2d 6d 6f 73 74 20  tinct left-most 
10650 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69  entries in the i
10660 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 6c 65  ndex that are le
10670 73 73 20 74 68 61 6e 0a 74 68 65 20 73 61 6d 70  ss than.the samp
10680 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 72 65  le.)^..<p>^There
10690 20 63 61 6e 20 62 65 20 61 6e 20 61 72 62 69 74   can be an arbit
106a0 72 61 72 79 20 6e 75 6d 62 65 72 20 6f 66 20 73  rary number of s
106b0 71 6c 69 74 65 5f 73 74 61 74 33 20 65 6e 74 72  qlite_stat3 entr
106c0 69 65 73 20 70 65 72 20 69 6e 64 65 78 2e 0a 54  ies per index..T
106d0 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d  he [ANALYZE] com
106e0 6d 61 6e 64 20 77 69 6c 6c 20 74 79 70 69 63 61  mand will typica
106f0 6c 6c 79 20 67 65 6e 65 72 61 74 65 20 73 71 6c  lly generate sql
10700 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 73  ite_stat3 tables
10710 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 62 65  .that contain be
10720 74 77 65 65 6e 20 31 30 20 61 6e 64 20 34 30 20  tween 10 and 40 
10730 73 61 6d 70 6c 65 73 20 74 68 61 74 20 61 72 65  samples that are
10740 20 64 69 73 74 72 69 62 75 74 65 64 20 61 63 72   distributed acr
10750 6f 73 73 0a 74 68 65 20 6b 65 79 20 73 70 61 63  oss.the key spac
10760 65 20 61 6e 64 20 77 69 74 68 20 6c 61 72 67 65  e and with large
10770 20 6e 45 71 20 76 61 6c 75 65 73 2e 0a 0a 3c 70   nEq values...<p
10780 3e 5e 28 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72  >^(In a well-for
10790 6d 65 64 20 73 71 6c 69 74 65 5f 73 74 61 74 33  med sqlite_stat3
107a0 20 74 61 62 6c 65 2c 20 74 68 65 20 73 61 6d 70   table, the samp
107b0 6c 65 73 20 66 6f 72 20 61 6e 79 20 73 69 6e 67  les for any sing
107c0 6c 65 0a 69 6e 64 65 78 20 6d 75 73 74 20 61 70  le.index must ap
107d0 70 65 61 72 20 69 6e 20 74 68 65 20 73 61 6d 65  pear in the same
107e0 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79   order that they
107f0 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 69 6e   occur in the in
10800 64 65 78 2e 20 20 0a 49 6e 20 6f 74 68 65 72 20  dex.  .In other 
10810 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 65 6e  words, if the en
10820 74 72 79 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f  try with left-mo
10830 73 74 20 63 6f 6c 75 6d 6e 20 53 31 20 69 73 20  st column S1 is 
10840 65 61 72 6c 69 65 72 20 69 6e 0a 74 68 65 20 69  earlier in.the i
10850 6e 64 65 78 20 62 2d 74 72 65 65 20 74 68 61 6e  ndex b-tree than
10860 20 74 68 65 0a 65 6e 74 72 79 20 77 69 74 68 20   the.entry with 
10870 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
10880 20 53 32 2c 20 74 68 65 6e 20 69 6e 20 74 68 65   S2, then in the
10890 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
108a0 62 6c 65 2c 20 0a 73 61 6d 70 6c 65 20 53 31 20  ble, .sample S1 
108b0 6d 75 73 74 20 68 61 76 65 20 61 20 73 6d 61 6c  must have a smal
108c0 6c 65 72 20 72 6f 77 69 64 20 74 68 61 6e 20 73  ler rowid than s
108d0 61 6d 70 6c 65 20 53 32 2e 29 5e 0a 0a 3c 74 63  ample S2.)^..<tc
108e0 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74  l>hd_fragment st
108f0 61 74 34 74 61 62 20 7b 73 71 6c 69 74 65 5f 73  at4tab {sqlite_s
10900 74 61 74 34 7d 20 53 51 4c 49 54 45 5f 53 54 41  tat4} SQLITE_STA
10910 54 34 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 36  T4</tcl>.<h4>2.6
10920 2e 36 20 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .6 The sqlite_st
10930 61 74 34 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a  at4 table</h4>..
10940 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74  <p>The sqlite_st
10950 61 74 34 20 69 73 20 6f 6e 6c 79 20 63 72 65 61  at4 is only crea
10960 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79 20  ted and is only 
10970 75 73 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  used if SQLite i
10980 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68 20  s compiled.with 
10990 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
109a0 54 41 54 34 5d 20 61 6e 64 20 69 66 20 74 68 65  TAT4] and if the
109b0 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
109c0 6e 75 6d 62 65 72 20 69 73 0a 33 2e 38 2e 31 20  number is.3.8.1 
109d0 6f 72 20 67 72 65 61 74 65 72 2e 20 20 54 68 65  or greater.  The
109e0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
109f0 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20 72  ble is neither r
10a00 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20  ead nor written 
10a10 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f  by any.version o
10a20 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20  f SQLite before 
10a30 33 2e 38 2e 31 2e 0a 54 68 65 20 73 71 6c 69 74  3.8.1..The sqlit
10a40 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 63 6f  e_stat4 table co
10a50 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61  ntains additiona
10a60 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62  l information.ab
10a70 6f 75 74 20 74 68 65 20 64 69 73 74 72 69 62 75  out the distribu
10a80 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74  tion of keys wit
10a90 68 69 6e 20 61 6e 20 69 6e 64 65 78 20 6f 72 20  hin an index or 
10aa0 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e  the distribution
10ab0 20 6f 66 0a 6b 65 79 73 20 69 6e 20 74 68 65 20   of.keys in the 
10ac0 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 66 20 61  primary key of a
10ad0 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d   [WITHOUT ROWID]
10ae0 20 74 61 62 6c 65 2e 0a 54 68 65 20 71 75 65 72   table..The quer
10af0 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 73 6f  y planner can so
10b00 6d 65 74 69 6d 65 73 20 75 73 65 20 74 68 65 20  metimes use the 
10b10 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
10b20 6d 61 74 69 6f 6e 20 69 6e 0a 74 68 65 20 73 71  mation in.the sq
10b30 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65  lite_stat4 table
10b40 20 74 6f 20 64 65 76 69 73 65 20 62 65 74 74 65   to devise bette
10b50 72 20 61 6e 64 20 66 61 73 74 65 72 20 71 75 65  r and faster que
10b60 72 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e  ry algorithms..^
10b70 28 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74  (The schema of t
10b80 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
10b90 74 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c  table is as foll
10ba0 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ows:..<blockquot
10bb0 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
10bc0 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74  ABLE sqlite_stat
10bd0 34 28 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c  4(tbl,idx,nEq,nL
10be0 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a  t,nDLt,sample);.
10bf0 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
10c00 74 65 3e 29 5e 0a 0a 3c 70 3e 54 68 65 72 65 20  te>)^..<p>There 
10c10 61 72 65 20 74 79 70 69 63 61 6c 6c 79 20 62 65  are typically be
10c20 74 77 65 65 6e 20 31 30 20 74 6f 20 34 30 20 65  tween 10 to 40 e
10c30 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 73 71  ntries in the sq
10c40 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65  lite_stat4 table
10c50 20 66 6f 72 0a 65 61 63 68 20 69 6e 64 65 78 20   for.each index 
10c60 66 6f 72 20 77 68 69 63 68 20 73 74 61 74 69 73  for which statis
10c70 74 69 63 73 20 61 72 65 20 61 76 61 69 6c 61 62  tics are availab
10c80 6c 65 2c 20 68 6f 77 65 76 65 72 20 74 68 65 73  le, however thes
10c90 65 20 6c 69 6d 69 74 73 20 61 72 65 0a 6e 6f 74  e limits are.not
10ca0 20 68 61 72 64 20 62 6f 75 6e 64 73 2e 0a 54 68   hard bounds..Th
10cb0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
10cc0 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
10cd0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
10ce0 62 6c 65 20 61 72 65 20 61 73 20 66 6f 6c 6c 6f  ble are as follo
10cf0 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 74  ws:..<center>.<t
10d00 61 62 6c 65 20 62 6f 72 64 65 72 3d 22 30 22 20  able border="0" 
10d10 77 69 64 74 68 3d 22 31 30 30 25 22 20 63 65 6c  width="100%" cel
10d20 6c 70 61 64 64 69 6e 67 3d 22 31 30 22 3e 0a 3c  lpadding="10">.<
10d30 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  tr><td valign="t
10d40 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
10d50 22 3e 74 62 6c 3a 3c 2f 74 64 3e 0a 20 20 20 20  ">tbl:</td>.    
10d60 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  <td>^(The sqlite
10d70 5f 73 74 61 74 34 2e 74 62 6c 20 63 6f 6c 75 6d  _stat4.tbl colum
10d80 6e 20 68 6f 6c 64 73 20 6e 61 6d 65 20 6f 66 20  n holds name of 
10d90 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 6f  the table that o
10da0 77 6e 73 0a 20 20 20 20 74 68 65 20 69 6e 64 65  wns.    the inde
10db0 78 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 64  x that the row d
10dc0 65 73 63 72 69 62 65 73 29 5e 0a 0a 3c 74 72 3e  escribes)^..<tr>
10dd0 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22  <td valign="top"
10de0 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 69   align="right">i
10df0 64 78 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64  dx:</td>.    <td
10e00 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  >^(The sqlite_st
10e10 61 74 34 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 68  at4.idx column h
10e20 6f 6c 64 73 20 6e 61 6d 65 20 6f 66 20 74 68 65  olds name of the
10e30 20 69 6e 64 65 78 20 74 68 61 74 20 74 68 65 0a   index that the.
10e40 20 20 20 20 72 6f 77 20 64 65 73 63 72 69 62 65      row describe
10e50 73 2c 20 6f 72 20 69 6e 20 74 68 65 20 63 61 73  s, or in the cas
10e60 65 20 6f 66 0a 20 20 20 20 61 6e 20 73 71 6c 69  e of.    an sqli
10e70 74 65 5f 73 74 61 74 34 20 65 6e 74 72 79 20 66  te_stat4 entry f
10e80 6f 72 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f  or a [WITHOUT RO
10e90 57 49 44 5d 20 74 61 62 6c 65 2c 20 74 68 65 0a  WID] table, the.
10ea0 20 20 20 20 6e 61 6d 65 20 6f 66 20 74 68 65 20      name of the 
10eb0 74 61 62 6c 65 20 69 74 73 65 6c 66 2e 29 5e 0a  table itself.)^.
10ec0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
10ed0 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67  "top" align="rig
10ee0 68 74 22 3e 73 61 6d 70 6c 65 3a 3c 2f 74 64 3e  ht">sample:</td>
10ef0 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73  .    <td>^(The s
10f00 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70  qlite_stat4.samp
10f10 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  le column holds 
10f20 61 20 42 4c 4f 42 0a 20 20 20 20 69 6e 20 74 68  a BLOB.    in th
10f30 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e [record format
10f40 5d 20 74 68 61 74 20 65 6e 63 6f 64 65 73 20 74  ] that encodes t
10f50 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  he indexed colum
10f60 6e 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 0a 20  ns followed by. 
10f70 20 20 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72     the rowid for
10f80 20 61 20 72 6f 77 69 64 20 74 61 62 6c 65 20 6f   a rowid table o
10f90 72 20 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73  r by the columns
10fa0 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
10fb0 6b 65 79 20 0a 20 20 20 20 66 6f 72 20 61 20 57  key .    for a W
10fc0 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
10fd0 6c 65 2e 29 5e 0a 20 20 20 20 5e 28 54 68 65 20  le.)^.    ^(The 
10fe0 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d  sqlite_stat4.sam
10ff0 70 6c 65 20 42 4c 4f 42 20 66 6f 72 20 74 68 65  ple BLOB for the
11000 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74   WITHOUT ROWID t
11010 61 62 6c 65 20 69 74 73 65 6c 66 20 0a 20 20 20  able itself .   
11020 20 63 6f 6e 74 61 69 6e 73 20 6a 75 73 74 20 74   contains just t
11030 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
11040 65 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 29 5e  e primary key.)^
11050 0a 20 20 20 20 4c 65 74 20 74 68 65 20 6e 75 6d  .    Let the num
11060 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 65  ber of columns e
11070 6e 63 6f 64 65 64 20 62 79 20 74 68 65 20 73 71  ncoded by the sq
11080 6c 69 74 65 5f 73 74 61 74 34 2e 73 61 6d 70 6c  lite_stat4.sampl
11090 65 20 62 6c 6f 62 20 62 65 20 4e 2e 0a 20 20 20  e blob be N..   
110a0 20 5e 46 6f 72 20 69 6e 64 65 78 65 73 20 6f 6e   ^For indexes on
110b0 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f 77   an ordinary row
110c0 69 64 20 74 61 62 6c 65 2c 20 4e 20 77 69 6c 6c  id table, N will
110d0 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61   be one more tha
110e0 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 0a 20 20  n the number .  
110f0 20 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 64    of columns ind
11100 65 78 65 64 2e 0a 20 20 20 20 5e 46 6f 72 20 69  exed..    ^For i
11110 6e 64 65 78 65 73 20 6f 6e 20 57 49 54 48 4f 55  ndexes on WITHOU
11120 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 2c 20  T ROWID tables, 
11130 4e 20 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75  N will be the nu
11140 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 0a  mber of columns.
11150 20 20 20 20 69 6e 64 65 78 65 64 20 70 6c 75 73      indexed plus
11160 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
11170 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 70 72  olumns in the pr
11180 69 6d 61 72 79 20 6b 65 79 2e 0a 20 20 20 20 5e  imary key..    ^
11190 46 6f 72 20 61 20 57 49 54 48 4f 55 54 20 52 4f  For a WITHOUT RO
111a0 57 49 44 20 74 61 62 6c 65 2c 20 4e 20 77 69 6c  WID table, N wil
111b0 6c 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20  l be the number 
111c0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
111d0 65 0a 20 20 20 20 70 72 69 6d 61 72 79 20 6b 65  e.    primary ke
111e0 79 2e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  y...<tr><td vali
111f0 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
11200 72 69 67 68 74 22 3e 6e 45 71 3a 3c 2f 74 64 3e  right">nEq:</td>
11210 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73  .    <td>^(The s
11220 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e 45 71 20  qlite_stat4.nEq 
11230 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c  column holds a l
11240 69 73 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72  ist of N integer
11250 73 20 77 68 65 72 65 20 0a 20 20 20 20 74 68 65  s where .    the
11260 20 4b 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73   K-th integer is
11270 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   the approximate
11280 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
11290 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a  es in the index.
112a0 20 20 20 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d      whose left-m
112b0 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 65 78  ost K columns ex
112c0 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20  actly match the 
112d0 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  K left-most colu
112e0 6d 6e 73 0a 20 20 20 20 6f 66 20 74 68 65 20 73  mns.    of the s
112f0 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74 72 3e 3c 74  ample.)^..<tr><t
11300 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61  d valign="top" a
11310 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 6e 4c 74  lign="right">nLt
11320 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e  :</td>.    <td>^
11330 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  (The sqlite_stat
11340 34 2e 6e 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c  4.nLt column hol
11350 64 73 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69  ds a list of N i
11360 6e 74 65 67 65 72 73 20 77 68 65 72 65 0a 20 20  ntegers where.  
11370 20 20 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67    the K-th integ
11380 65 72 20 69 73 20 74 68 65 20 61 70 70 72 6f 78  er is the approx
11390 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20  imate number of 
113a0 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a 20  entries in the. 
113b0 20 20 20 69 6e 64 65 78 20 77 68 6f 73 65 20 4b     index whose K
113c0 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
113d0 6e 73 20 61 72 65 20 63 6f 6c 6c 65 63 74 69 76  ns are collectiv
113e0 65 6c 79 20 6c 65 73 73 20 74 68 61 6e 20 74 68  ely less than th
113f0 65 20 0a 20 20 20 20 4b 20 6c 65 66 74 2d 6d 6f  e .    K left-mo
11400 73 74 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  st columns of th
11410 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74 72  e sample.)^..<tr
11420 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ><td valign="top
11430 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
11440 6e 44 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c  nDLt:</td>.    <
11450 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  td>^(The sqlite_
11460 73 74 61 74 34 2e 6e 44 4c 74 20 63 6f 6c 75 6d  stat4.nDLt colum
11470 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f  n holds a list o
11480 66 20 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65  f N integers whe
11490 72 65 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20  re.    the K-th 
114a0 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61  integer is the a
114b0 70 70 72 6f 78 69 6d 61 74 65 0a 20 20 20 20 6e  pproximate.    n
114c0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
114d0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68   in the index th
114e0 61 74 20 61 72 65 20 64 69 73 74 69 6e 63 74 20  at are distinct 
114f0 69 6e 20 74 68 65 20 66 69 72 73 74 20 4b 20 63  in the first K c
11500 6f 6c 75 6d 6e 73 20 61 6e 64 0a 20 20 20 20 77  olumns and.    w
11510 68 65 72 65 20 74 68 65 20 6c 65 66 74 2d 6d 6f  here the left-mo
11520 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20 61 72 65  st K columns are
11530 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65   collectively le
11540 73 73 20 74 68 61 6e 20 74 68 65 20 6c 65 66 74  ss than the left
11550 2d 6d 6f 73 74 0a 20 20 20 20 4b 20 63 6f 6c 75  -most.    K colu
11560 6d 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 70 6c  mns of the sampl
11570 65 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  e.)^.</table>.</
11580 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 54 68 65 20  center>..<p>The 
11590 73 71 6c 69 74 65 5f 73 74 61 74 34 20 69 73 20  sqlite_stat4 is 
115a0 61 20 67 65 6e 65 72 61 6c 69 7a 61 74 69 6f 6e  a generalization
115b0 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
115c0 74 61 74 33 20 74 61 62 6c 65 2e 20 20 54 68 65  tat3 table.  The
115d0 0a 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61  .sqlite_stat3 ta
115e0 62 6c 65 20 70 72 6f 76 69 64 65 73 20 69 6e 66  ble provides inf
115f0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
11600 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c  he left-most col
11610 75 6d 6e 20 6f 66 20 61 6e 0a 69 6e 64 65 78 20  umn of an.index 
11620 77 68 65 72 65 61 73 20 74 68 65 20 73 71 6c 69  whereas the sqli
11630 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 70  te_stat4 table p
11640 72 6f 76 69 64 65 73 20 69 6e 66 6f 72 6d 61 74  rovides informat
11650 69 6f 6e 20 61 62 6f 75 74 20 61 6c 6c 20 63 6f  ion about all co
11660 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20 69 6e 64  lumns.of the ind
11670 65 78 2e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 63  ex...<p>^There c
11680 61 6e 20 62 65 20 61 6e 20 61 72 62 69 74 72 61  an be an arbitra
11690 72 79 20 6e 75 6d 62 65 72 20 6f 66 20 73 71 6c  ry number of sql
116a0 69 74 65 5f 73 74 61 74 34 20 65 6e 74 72 69 65  ite_stat4 entrie
116b0 73 20 70 65 72 20 69 6e 64 65 78 2e 0a 54 68 65  s per index..The
116c0 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61   [ANALYZE] comma
116d0 6e 64 20 77 69 6c 6c 20 74 79 70 69 63 61 6c 6c  nd will typicall
116e0 79 20 67 65 6e 65 72 61 74 65 20 73 71 6c 69 74  y generate sqlit
116f0 65 5f 73 74 61 74 34 20 74 61 62 6c 65 73 0a 74  e_stat4 tables.t
11700 68 61 74 20 63 6f 6e 74 61 69 6e 20 62 65 74 77  hat contain betw
11710 65 65 6e 20 31 30 20 61 6e 64 20 34 30 20 73 61  een 10 and 40 sa
11720 6d 70 6c 65 73 20 74 68 61 74 20 61 72 65 20 64  mples that are d
11730 69 73 74 72 69 62 75 74 65 64 20 61 63 72 6f 73  istributed acros
11740 73 0a 74 68 65 20 6b 65 79 20 73 70 61 63 65 20  s.the key space 
11750 61 6e 64 20 77 69 74 68 20 6c 61 72 67 65 20 6e  and with large n
11760 45 71 20 76 61 6c 75 65 73 2e 0a 0a 3c 70 3e 5e  Eq values...<p>^
11770 28 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  (In a well-forme
11780 64 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74  d sqlite_stat4 t
11790 61 62 6c 65 2c 20 74 68 65 20 73 61 6d 70 6c 65  able, the sample
117a0 73 20 66 6f 72 20 61 6e 79 20 73 69 6e 67 6c 65  s for any single
117b0 0a 69 6e 64 65 78 20 6d 75 73 74 20 61 70 70 65  .index must appe
117c0 61 72 20 69 6e 20 74 68 65 20 73 61 6d 65 20 6f  ar in the same o
117d0 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20 6f  rder that they o
117e0 63 63 75 72 20 69 6e 20 74 68 65 20 69 6e 64 65  ccur in the inde
117f0 78 2e 20 20 0a 49 6e 20 6f 74 68 65 72 20 77 6f  x.  .In other wo
11800 72 64 73 2c 20 69 66 20 65 6e 74 72 79 20 53 31  rds, if entry S1
11810 20 69 73 20 65 61 72 6c 69 65 72 20 69 6e 20 74   is earlier in t
11820 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  he index b-tree 
11830 74 68 61 6e 20 0a 65 6e 74 72 79 20 53 32 2c 20  than .entry S2, 
11840 74 68 65 6e 20 69 6e 20 74 68 65 20 73 71 6c 69  then in the sqli
11850 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 2c 20  te_stat4 table, 
11860 73 61 6d 70 6c 65 20 53 31 20 6d 75 73 74 20 68  sample S1 must h
11870 61 76 65 20 61 0a 73 6d 61 6c 6c 65 72 20 72 6f  ave a.smaller ro
11880 77 69 64 20 74 68 61 6e 20 73 61 6d 70 6c 65 20  wid than sample 
11890 53 32 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  S2.)^..<tcl>hd_f
118a0 72 61 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b  ragment rollback
118b0 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63  journal {rollbac
118c0 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61 74  k journal format
118d0 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 33 2e 30 20  }</tcl>.<h2>3.0 
118e0 54 68 65 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75  The Rollback Jou
118f0 72 6e 61 6c 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68  rnal</h2>..<p>Th
11900 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
11910 61 6c 20 69 73 20 61 20 66 69 6c 65 20 61 73 73  al is a file ass
11920 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63  ociated with eac
11930 68 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  h SQLite databas
11940 65 0a 66 69 6c 65 20 74 68 61 74 20 68 6f 6c 64  e.file that hold
11950 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   information use
11960 64 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65  d to restore the
11970 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
11980 6f 20 69 74 73 20 69 6e 69 74 69 61 6c 0a 73 74  o its initial.st
11990 61 74 65 20 64 75 72 69 6e 67 20 74 68 65 20 63  ate during the c
119a0 6f 75 72 73 65 20 6f 66 20 61 20 74 72 61 6e 73  ourse of a trans
119b0 61 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f 6c  action..^The rol
119c0 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
119d0 6c 65 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63  le is always loc
119e0 61 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  ated in the same
119f0 20 0a 64 69 72 65 63 74 6f 72 79 20 61 73 20 74   .directory as t
11a00 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  he database.file
11a10 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d   and has the sam
11a20 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61  e name as the da
11a30 74 61 62 61 73 65 20 66 69 6c 65 20 62 75 74 20  tabase file but 
11a40 77 69 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a  with the string.
11a50 22 3c 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74  "<tt>-journal</t
11a60 74 3e 22 20 61 70 70 65 6e 64 65 64 2e 20 20 54  t>" appended.  T
11a70 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
11a80 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61   a single rollba
11a90 63 6b 20 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f 63  ck journal.assoc
11aa0 69 61 74 65 64 20 77 69 74 68 20 61 20 67 69 76  iated with a giv
11ab0 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68  e database and h
11ac0 65 6e 63 65 20 74 68 65 72 65 20 63 61 6e 20 6f  ence there can o
11ad0 6e 6c 79 20 62 65 20 6f 6e 65 20 77 72 69 74 65  nly be one write
11ae0 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70 65  .transaction ope
11af0 6e 20 61 67 61 69 6e 73 74 20 61 20 73 69 6e 67  n against a sing
11b00 6c 65 20 64 61 74 61 62 61 73 65 20 61 74 20 6f  le database at o
11b10 6e 65 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70  ne time.</p>..<p
11b20 3e 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f  >If a transactio
11b30 6e 20 69 73 20 61 62 6f 72 74 65 64 20 64 75 65  n is aborted due
11b40 20 74 6f 20 61 6e 20 61 70 70 6c 69 63 61 74 69   to an applicati
11b50 6f 6e 20 63 72 61 73 68 2c 20 61 6e 20 6f 70 65  on crash, an ope
11b60 72 61 74 69 6e 67 0a 73 79 73 74 65 6d 20 63 72  rating.system cr
11b70 61 73 68 2c 20 6f 72 20 61 20 68 61 72 64 77 61  ash, or a hardwa
11b80 72 65 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65  re power failure
11b90 20 6f 72 20 63 72 61 73 68 2c 20 74 68 65 6e 20   or crash, then 
11ba0 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 61 79  the database may
11bb0 0a 62 65 20 6c 65 66 74 20 69 6e 20 61 6e 20 69  .be left in an i
11bc0 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74  nconsistent stat
11bd0 65 2e 20 20 5e 54 68 65 20 6e 65 78 74 20 74 69  e.  ^The next ti
11be0 6d 65 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70  me SQLite attemp
11bf0 74 73 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20 64  ts to open.the d
11c00 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68  atabase file, th
11c10 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74 68  e presence of th
11c20 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
11c30 61 6c 20 66 69 6c 65 20 77 69 6c 6c 20 62 65 20  al file will be 
11c40 0a 64 65 74 65 63 74 65 64 20 61 6e 64 20 74 68  .detected and th
11c50 65 20 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c 20 62  e journal will b
11c60 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
11c70 70 6c 61 79 65 64 20 62 61 63 6b 20 74 6f 20 72  played back to r
11c80 65 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62  estore the.datab
11c90 61 73 65 20 74 6f 20 69 74 73 20 73 74 61 74 65  ase to its state
11ca0 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66   at the start of
11cb0 20 74 68 65 20 69 6e 63 6f 6d 70 6c 65 74 65 20   the incomplete 
11cc0 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e  transaction.</p>
11cd0 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b  ..<p>^A rollback
11ce0 20 6a 6f 75 72 6e 61 6c 20 69 73 20 6f 6e 6c 79   journal is only
11cf0 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62   considered to b
11d00 65 20 76 61 6c 69 64 20 69 66 20 69 74 20 65 78  e valid if it ex
11d10 69 73 74 73 20 61 6e 64 0a 63 6f 6e 74 61 69 6e  ists and.contain
11d20 73 20 61 20 76 61 6c 69 64 20 68 65 61 64 65 72  s a valid header
11d30 2e 20 20 48 65 6e 63 65 20 61 20 74 72 61 6e 73  .  Hence a trans
11d40 61 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 63 6f  action can be co
11d50 6d 6d 69 74 74 65 64 20 69 6e 20 6f 6e 65 0a 6f  mmitted in one.o
11d60 66 20 74 68 72 65 65 20 77 61 79 73 3a 0a 3c 6f  f three ways:.<o
11d70 6c 3e 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c  l>.<li>^(The rol
11d80 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
11d90 6c 65 20 63 61 6e 20 62 65 20 64 65 6c 65 74 65  le can be delete
11da0 64 29 5e 2c 0a 3c 6c 69 3e 5e 28 54 68 65 20 72  d)^,.<li>^(The r
11db0 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
11dc0 66 69 6c 65 20 63 61 6e 20 62 65 20 74 72 75 6e  file can be trun
11dd0 63 61 74 65 64 20 74 6f 20 7a 65 72 6f 20 6c 65  cated to zero le
11de0 6e 67 74 68 29 5e 2c 20 6f 72 0a 3c 6c 69 3e 5e  ngth)^, or.<li>^
11df0 28 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 74  (The header of t
11e00 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
11e10 6e 61 6c 20 63 61 6e 20 62 65 20 6f 76 65 72 77  nal can be overw
11e20 72 69 74 74 65 6e 20 77 69 74 68 0a 69 6e 76 61  ritten with.inva
11e30 6c 69 64 20 68 65 61 64 65 72 20 74 65 78 74 20  lid header text 
11e40 28 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c  (for example, al
11e50 6c 20 7a 65 72 6f 73 29 2e 29 5e 0a 3c 2f 6f 6c  l zeros).)^.</ol
11e60 3e 0a 5e 54 68 65 73 65 20 74 68 72 65 65 20 77  >.^These three w
11e70 61 79 73 20 6f 66 20 63 6f 6d 6d 69 74 74 69 6e  ays of committin
11e80 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  g a transaction 
11e90 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 74 68  correspond to th
11ea0 65 20 44 45 4c 45 54 45 2c 0a 54 52 55 4e 43 41  e DELETE,.TRUNCA
11eb0 54 45 2c 20 61 6e 64 20 50 45 52 53 49 53 54 20  TE, and PERSIST 
11ec0 73 65 74 74 69 6e 67 73 2c 20 72 65 73 70 65 63  settings, respec
11ed0 74 69 76 65 6c 79 2c 20 6f 66 20 74 68 65 20 5b  tively, of the [
11ee0 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61  journal_mode pra
11ef0 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e  gma]..</p>...<p>
11f00 41 20 76 61 6c 69 64 20 72 6f 6c 6c 62 61 63 6b  A valid rollback
11f10 20 6a 6f 75 72 6e 61 6c 20 62 65 67 69 6e 73 20   journal begins 
11f20 77 69 74 68 20 61 20 68 65 61 64 65 72 20 69 6e  with a header in
11f30 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66   the following f
11f40 6f 72 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e  ormat:</p>..<cen
11f50 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b  ter>.<i>Rollback
11f60 20 4a 6f 75 72 6e 61 6c 20 48 65 61 64 65 72 20   Journal Header 
11f70 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
11f80 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
11f90 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
11fa0 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69  <th>Offset<th>Si
11fb0 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f  ze<th>Descriptio
11fc0 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  n.<tr><td valign
11fd0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11fe0 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  r>0.    <td vali
11ff0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12000 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 3e 48 65  ter>8.    <td>He
12010 61 64 65 72 20 73 74 72 69 6e 67 3a 20 20 30 78  ader string:  0x
12020 64 39 2c 20 30 78 64 35 2c 20 30 78 30 35 2c 20  d9, 0xd5, 0x05, 
12030 30 78 66 39 2c 20 30 78 32 30 2c 20 30 78 61 31  0xf9, 0x20, 0xa1
12040 2c 20 30 78 36 33 2c 20 30 78 64 37 0a 3c 74 72  , 0x63, 0xd7.<tr
12050 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
12060 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20  align=center>8. 
12070 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
12080 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
12090 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 22 50 61  .    <td>The "Pa
120a0 67 65 20 43 6f 75 6e 74 22 20 2d 20 54 68 65 20  ge Count" - The 
120b0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
120c0 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65 67 6d  in the next segm
120d0 65 6e 74 20 6f 66 20 74 68 65 20 0a 20 20 20 20  ent of the .    
120e0 20 20 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f 72 20      journal, or 
120f0 2d 31 20 74 6f 0a 20 20 20 20 20 20 20 20 6d 65  -1 to.        me
12100 61 6e 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 74  an all content t
12110 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
12120 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61   file.<tr><td va
12130 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12140 65 6e 74 65 72 3e 31 32 0a 20 20 20 20 3c 74 64  enter>12.    <td
12150 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12160 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12170 74 64 3e 41 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63  td>A random nonc
12180 65 20 66 6f 72 20 74 68 65 20 63 68 65 63 6b 73  e for the checks
12190 75 6d 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  um.<tr><td valig
121a0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
121b0 65 72 3e 31 36 0a 20 20 20 20 3c 74 64 20 76 61  er>16.    <td va
121c0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
121d0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
121e0 49 6e 69 74 69 61 6c 20 73 69 7a 65 20 6f 66 20  Initial size of 
121f0 74 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20  the database in 
12200 70 61 67 65 73 0a 3c 74 72 3e 3c 74 64 20 76 61  pages.<tr><td va
12210 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
12220 65 6e 74 65 72 3e 32 30 0a 20 20 20 20 3c 74 64  enter>20.    <td
12230 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12240 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12250 74 64 3e 53 69 7a 65 20 6f 66 20 61 20 64 69 73  td>Size of a dis
12260 6b 20 73 65 63 74 6f 72 20 61 73 73 75 6d 65 64  k sector assumed
12270 20 62 79 20 74 68 65 20 70 72 6f 63 65 73 73 20   by the process 
12280 74 68 61 74 20 77 72 6f 74 65 20 74 68 69 73 0a  that wrote this.
12290 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2e          journal.
122a0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
122b0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
122c0 3e 32 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >24.    <td vali
122d0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
122e0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69  ter>4.    <td>Si
122f0 7a 65 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  ze of pages in t
12300 68 69 73 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 2f 74  his journal..</t
12310 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a  able>.</center>.
12320 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20  .<p>^A rollback 
12330 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 69  journal header i
12340 73 20 70 61 64 64 65 64 20 77 69 74 68 20 7a 65  s padded with ze
12350 72 6f 73 20 6f 75 74 20 74 6f 20 74 68 65 20 73  ros out to the s
12360 69 7a 65 20 6f 66 20 61 20 0a 73 69 6e 67 6c 65  ize of a .single
12370 20 73 65 63 74 6f 72 20 28 61 73 20 64 65 66 69   sector (as defi
12380 6e 65 64 20 62 79 20 74 68 65 20 73 65 63 74 6f  ned by the secto
12390 72 20 73 69 7a 65 20 69 6e 74 65 67 65 72 20 61  r size integer a
123a0 74 20 6f 66 66 73 65 74 20 32 30 29 2e 0a 54 68  t offset 20)..Th
123b0 65 20 68 65 61 64 65 72 20 69 73 20 69 6e 20 61  e header is in a
123c0 20 73 65 63 74 6f 72 20 62 79 20 69 74 73 65 6c   sector by itsel
123d0 66 20 73 6f 20 74 68 61 74 20 69 66 20 61 20 70  f so that if a p
123e0 6f 77 65 72 20 6c 6f 73 73 20 6f 63 63 75 72 73  ower loss occurs
123f0 20 77 68 69 6c 65 0a 77 72 69 74 69 6e 67 20 74   while.writing t
12400 68 65 20 73 65 63 74 6f 72 2c 20 69 6e 66 6f 72  he sector, infor
12410 6d 61 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c 6c  mation that foll
12420 6f 77 73 20 74 68 65 20 68 65 61 64 65 72 20 77  ows the header w
12430 69 6c 6c 20 62 65 0a 28 68 6f 70 65 66 75 6c 6c  ill be.(hopefull
12440 79 29 20 75 6e 64 61 6d 61 67 65 64 2e 3c 2f 70  y) undamaged.</p
12450 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20 74 68 65  >..<p>^After the
12460 20 68 65 61 64 65 72 20 61 6e 64 20 7a 65 72 6f   header and zero
12470 20 70 61 64 64 69 6e 67 20 61 72 65 20 7a 65 72   padding are zer
12480 6f 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 20 72  o or more page r
12490 65 63 6f 72 64 73 2e 20 20 5e 45 61 63 68 0a 70  ecords.  ^Each.p
124a0 61 67 65 20 72 65 63 6f 72 64 20 73 74 6f 72 65  age record store
124b0 73 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  s a copy of the 
124c0 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 70 61 67  content of a pag
124d0 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
124e0 61 73 65 20 66 69 6c 65 0a 62 65 66 6f 72 65 20  ase file.before 
124f0 69 74 20 77 61 73 20 63 68 61 6e 67 65 64 2e 20  it was changed. 
12500 20 5e 54 68 65 20 73 61 6d 65 20 70 61 67 65 20   ^The same page 
12510 6d 61 79 20 6e 6f 74 20 61 70 70 65 61 72 20 6d  may not appear m
12520 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 0a 77 69  ore than once.wi
12530 74 68 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  thin a single ro
12540 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a  llback journal..
12550 54 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 69  To rollback an i
12560 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61  ncomplete transa
12570 63 74 69 6f 6e 2c 20 61 20 70 72 6f 63 65 73 73  ction, a process
12580 0a 68 61 73 20 6d 65 72 65 6c 79 20 74 6f 20 72  .has merely to r
12590 65 61 64 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  ead the rollback
125a0 20 6a 6f 75 72 6e 61 6c 20 66 72 6f 6d 20 62 65   journal from be
125b0 67 69 6e 6e 69 6e 67 20 74 6f 20 65 6e 64 20 61  ginning to end a
125c0 6e 64 0a 77 72 69 74 65 20 70 61 67 65 73 20 66  nd.write pages f
125d0 6f 75 6e 64 20 69 6e 20 74 68 65 20 6a 6f 75 72  ound in the jour
125e0 6e 61 6c 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  nal back into th
125f0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
12600 61 74 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61  at the.appropria
12610 74 65 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f 70 3e  te location.</p>
12620 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 64 61 74  ..<p>Let the dat
12630 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20  abase page size 
12640 28 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68  (the value of th
12650 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
12660 73 65 74 20 32 34 20 0a 69 6e 20 74 68 65 20 6a  set 24 .in the j
12670 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 29 20 62  ournal header) b
12680 65 20 4e 2e 0a 54 68 65 6e 20 74 68 65 20 66 6f  e N..Then the fo
12690 72 6d 61 74 20 6f 66 20 61 20 70 61 67 65 20 72  rmat of a page r
126a0 65 63 6f 72 64 20 69 73 20 61 73 20 66 6f 6c 6c  ecord is as foll
126b0 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  ows:</p>..<cente
126c0 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a  r>.<i>Rollback J
126d0 6f 75 72 6e 61 6c 20 50 61 67 65 20 52 65 63 6f  ournal Page Reco
126e0 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72  rd Format</i><br
126f0 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
12700 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  80%" border=1>.<
12710 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68  tr><th>Offset<th
12720 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70  >Size<th>Descrip
12730 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  tion.<tr><td val
12740 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12750 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76  nter>0.    <td v
12760 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12770 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
12780 3e 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72  >The page number
12790 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
127a0 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61   file.<tr><td va
127b0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
127c0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 20  enter>4.    <td 
127d0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
127e0 3d 63 65 6e 74 65 72 3e 4e 0a 20 20 20 20 3c 74  =center>N.    <t
127f0 64 3e 4f 72 69 67 69 6e 61 6c 20 63 6f 6e 74 65  d>Original conte
12800 6e 74 20 6f 66 20 74 68 65 20 70 61 67 65 20 70  nt of the page p
12810 72 69 6f 72 20 74 6f 20 74 68 65 20 73 74 61 72  rior to the star
12820 74 20 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63  t of the transac
12830 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  tion.<tr><td val
12840 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12850 6e 74 65 72 3e 4e 2b 34 0a 20 20 20 20 3c 74 64  nter>N+4.    <td
12860 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12870 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12880 74 64 3e 43 68 65 63 6b 73 75 6d 0a 3c 2f 74 61  td>Checksum.</ta
12890 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a  ble>.</center>..
128a0 0a 3c 70 3e 5e 28 54 68 65 20 63 68 65 63 6b 73  .<p>^(The checks
128b0 75 6d 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  um is an unsigne
128c0 64 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  d 32-bit integer
128d0 20 63 6f 6d 70 75 74 65 64 20 61 73 20 66 6f 6c   computed as fol
128e0 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  lows:</p>..<ol>.
128f0 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 74  <li>Initialize t
12900 68 65 20 63 68 65 63 6b 73 75 6d 20 74 6f 20 74  he checksum to t
12910 68 65 20 63 68 65 63 6b 73 75 6d 20 6e 6f 6e 63  he checksum nonc
12920 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20 69 6e  e value found in
12930 20 74 68 65 0a 6a 6f 75 72 6e 61 6c 20 68 65 61   the.journal hea
12940 64 65 72 20 61 74 20 6f 66 66 73 65 74 20 31 32  der at offset 12
12950 2e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65  ..<li>Initialize
12960 20 69 6e 64 65 78 20 58 20 74 6f 20 62 65 20 4e   index X to be N
12970 2d 32 30 30 20 28 77 68 65 72 65 20 4e 20 69 73  -200 (where N is
12980 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20 64   the size of a d
12990 61 74 61 62 61 73 65 20 70 61 67 65 0a 69 6e 20  atabase page.in 
129a0 62 79 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65 72  bytes..<li>Inter
129b0 70 72 65 74 20 74 68 65 20 66 6f 75 72 20 62 79  pret the four by
129c0 74 65 73 20 61 74 20 6f 66 66 73 65 74 20 58 20  tes at offset X 
129d0 69 6e 74 6f 20 74 68 65 20 70 61 67 65 20 61 73  into the page as
129e0 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e   a 4-byte big-en
129f0 64 69 61 6e 0a 75 6e 73 69 67 6e 65 64 20 69 6e  dian.unsigned in
12a00 74 65 67 65 72 2e 20 20 41 64 64 20 74 68 65 20  teger.  Add the 
12a10 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20 69 6e  value of that in
12a20 74 65 67 65 72 20 74 6f 20 74 68 65 20 63 68 65  teger to the che
12a30 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72  cksum..<li>Subtr
12a40 61 63 65 20 32 30 30 20 66 72 6f 6d 20 58 2e 0a  ace 200 from X..
12a50 3c 6c 69 3e 49 66 20 58 20 69 73 20 67 72 65 61  <li>If X is grea
12a60 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
12a70 6c 20 74 6f 20 7a 65 72 6f 2c 20 67 6f 20 62 61  l to zero, go ba
12a80 63 6b 20 74 6f 20 73 74 65 70 20 33 2e 0a 3c 2f  ck to step 3..</
12a90 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20 63 68  ol>)^..<p>The ch
12aa0 65 63 6b 73 75 6d 20 76 61 6c 75 65 20 69 73 20  ecksum value is 
12ab0 75 73 65 64 20 74 6f 20 67 75 61 72 64 20 61 67  used to guard ag
12ac0 61 69 6e 73 74 20 69 6e 63 6f 6d 70 6c 65 74 65  ainst incomplete
12ad0 20 77 72 69 74 65 73 20 6f 66 0a 61 20 6a 6f 75   writes of.a jou
12ae0 72 6e 61 6c 20 70 61 67 65 20 72 65 63 6f 72 64  rnal page record
12af0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77   following a pow
12b00 65 72 20 66 61 69 6c 75 72 65 2e 20 20 41 20 64  er failure.  A d
12b10 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20  ifferent random 
12b20 6e 6f 6e 63 65 0a 69 73 20 75 73 65 64 20 65 61  nonce.is used ea
12b30 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e 73 61  ch time a transa
12b40 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
12b50 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e   in order to min
12b60 69 6d 69 7a 65 20 74 68 65 20 72 69 73 6b 0a 74  imize the risk.t
12b70 68 61 74 20 75 6e 77 72 69 74 74 65 6e 20 73 65  hat unwritten se
12b80 63 74 6f 72 73 20 6d 69 67 68 74 20 62 79 20 63  ctors might by c
12b90 68 61 6e 63 65 20 63 6f 6e 74 61 69 6e 20 64 61  hance contain da
12ba0 74 61 20 66 72 6f 6d 20 74 68 65 20 73 61 6d 65  ta from the same
12bb0 20 70 61 67 65 0a 74 68 61 74 20 77 61 73 20 61   page.that was a
12bc0 20 70 61 72 74 20 6f 66 20 70 72 69 6f 72 20 6a   part of prior j
12bd0 6f 75 72 6e 61 6c 73 2e 20 20 42 79 20 63 68 61  ournals.  By cha
12be0 6e 67 69 6e 67 20 74 68 65 20 6e 6f 6e 63 65 20  nging the nonce 
12bf0 66 6f 72 20 65 61 63 68 0a 74 72 61 6e 73 61 63  for each.transac
12c00 74 69 6f 6e 2c 20 73 74 61 6c 65 20 64 61 74 61  tion, stale data
12c10 20 6f 6e 20 64 69 73 6b 20 77 69 6c 6c 20 73 74   on disk will st
12c20 69 6c 6c 20 67 65 6e 65 72 61 74 65 20 61 6e 20  ill generate an 
12c30 69 6e 63 6f 72 72 65 63 74 20 63 68 65 63 6b 73  incorrect checks
12c40 75 6d 0a 61 6e 64 20 62 65 20 64 65 74 65 63 74  um.and be detect
12c50 65 64 20 77 69 74 68 20 68 69 67 68 20 70 72 6f  ed with high pro
12c60 62 61 62 69 6c 69 74 79 2e 20 20 54 68 65 20 63  bability.  The c
12c70 68 65 63 6b 73 75 6d 20 6f 6e 6c 79 20 75 73 65  hecksum only use
12c80 73 20 61 20 73 70 61 72 73 65 20 73 61 6d 70 6c  s a sparse sampl
12c90 65 0a 6f 66 20 33 32 2d 62 69 74 20 77 6f 72 64  e.of 32-bit word
12ca0 73 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 20  s from the data 
12cb0 72 65 63 6f 72 64 20 66 6f 72 20 70 65 72 66 6f  record for perfo
12cc0 72 6d 61 6e 63 65 20 72 65 61 73 6f 6e 73 20 2d  rmance reasons -
12cd0 20 64 65 73 69 67 6e 20 73 74 75 64 69 65 73 20   design studies 
12ce0 0a 64 75 72 69 6e 67 20 74 68 65 20 70 6c 61 6e  .during the plan
12cf0 6e 69 6e 67 20 70 68 61 73 65 73 20 6f 66 20 53  ning phases of S
12d00 51 4c 69 74 65 20 33 2e 30 2e 30 20 73 68 6f 77  QLite 3.0.0 show
12d10 65 64 0a 61 20 73 69 67 6e 69 66 69 63 61 6e 74  ed.a significant
12d20 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 68 69 74   performance hit
12d30 20 69 6e 20 63 68 65 63 6b 73 75 6d 6d 69 6e 67   in checksumming
12d40 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 67 65   the entire page
12d50 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68  .</p>..<p>Let th
12d60 65 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c  e page count val
12d70 75 65 20 61 74 20 6f 66 66 73 65 74 20 38 20 69  ue at offset 8 i
12d80 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65  n the journal he
12d90 61 64 65 72 20 62 65 20 4d 2e 0a 5e 49 66 20 4d  ader be M..^If M
12da0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
12db0 20 7a 65 72 6f 20 74 68 65 6e 20 61 66 74 65 72   zero then after
12dc0 20 4d 20 70 61 67 65 20 72 65 63 6f 72 64 73 20   M page records 
12dd0 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  the journal file
12de0 0a 6d 61 79 20 62 65 20 7a 65 72 6f 20 70 61 64  .may be zero pad
12df0 64 65 64 20 6f 75 74 20 74 6f 20 74 68 65 20 6e  ded out to the n
12e00 65 78 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  ext multiple of 
12e10 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a 65 20  the sector size 
12e20 61 6e 64 20 61 6e 6f 74 68 65 72 0a 6a 6f 75 72  and another.jour
12e30 6e 61 6c 20 68 65 61 64 65 72 20 6d 61 79 20 62  nal header may b
12e40 65 20 69 6e 73 65 72 74 65 64 2e 20 20 5e 41 6c  e inserted.  ^Al
12e50 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  l journal header
12e60 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
12e70 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75 73 74 20 63  e.journal must c
12e80 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20  ontain the same 
12e90 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
12ea0 7a 65 20 61 6e 64 20 73 65 63 74 6f 72 20 73 69  ze and sector si
12eb0 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20  ze.</p>..<p>^If 
12ec0 4d 20 69 73 20 2d 31 20 69 6e 20 74 68 65 20 69  M is -1 in the i
12ed0 6e 69 74 69 61 6c 20 6a 6f 75 72 6e 61 6c 20 68  nitial journal h
12ee0 65 61 64 65 72 2c 20 74 68 65 6e 20 74 68 65 20  eader, then the 
12ef0 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 20 72  number of page r
12f00 65 63 6f 72 64 73 0a 74 68 61 74 20 66 6f 6c 6c  ecords.that foll
12f10 6f 77 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62  ow is computed b
12f20 79 20 63 6f 6d 70 75 74 69 6e 67 20 68 6f 77 20  y computing how 
12f30 6d 61 6e 79 20 70 61 67 65 20 72 65 63 6f 72 64  many page record
12f40 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 0a 74 68  s will fit in.th
12f50 65 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  e available spac
12f60 65 20 6f 66 20 74 68 65 20 72 65 6d 61 69 6e 64  e of the remaind
12f70 65 72 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61  er of the journa
12f80 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  l file.</p>..<tc
12f90 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61  l>hd_fragment wa
12fa0 6c 66 6f 72 6d 61 74 20 7b 57 41 4c 20 66 6f 72  lformat {WAL for
12fb0 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 34  mat}</tcl>.<h2>4
12fc0 2e 30 20 54 68 65 20 57 72 69 74 65 2d 41 68 65  .0 The Write-Ahe
12fd0 61 64 20 4c 6f 67 3c 2f 68 32 3e 0a 0a 3c 70 3e  ad Log</h2>..<p>
12fe0 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 5b  Beginning with [
12ff0 76 65 72 73 69 6f 6e 20 33 2e 37 2e 30 5d 2c 20  version 3.7.0], 
13000 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
13010 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74 69 6f  a new transactio
13020 6e 0a 63 6f 6e 74 72 6f 6c 20 6d 65 63 68 61 6e  n.control mechan
13030 69 73 6d 20 63 61 6c 6c 65 64 20 22 5b 57 41 4c  ism called "[WAL
13040 20 7c 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c   | write-ahead l
13050 6f 67 5d 22 20 6f 72 20 22 5b 57 41 4c 5d 22 2e  og]" or "[WAL]".
13060 0a 5e 57 68 65 6e 20 61 20 64 61 74 61 62 61 73  .^When a databas
13070 65 20 69 73 20 69 6e 20 57 41 4c 20 6d 6f 64 65  e is in WAL mode
13080 2c 20 61 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e  , all connection
13090 73 20 74 6f 20 74 68 61 74 20 64 61 74 61 62 61  s to that databa
130a0 73 65 20 6d 75 73 74 0a 75 73 65 20 74 68 65 20  se must.use the 
130b0 57 41 4c 2e 20 20 5e 41 20 70 61 72 74 69 63 75  WAL.  ^A particu
130c0 6c 61 72 20 64 61 74 61 62 61 73 65 20 77 69 6c  lar database wil
130d0 6c 20 75 73 65 20 65 69 74 68 65 72 20 61 20 72  l use either a r
130e0 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a  ollback journal.
130f0 6f 72 20 61 20 57 41 4c 2c 20 62 75 74 20 6e 6f  or a WAL, but no
13100 74 20 62 6f 74 68 20 61 74 20 74 68 65 20 73 61  t both at the sa
13110 6d 65 20 74 69 6d 65 2e 0a 5e 54 68 65 20 57 41  me time..^The WA
13120 4c 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61  L is always loca
13130 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
13140 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68 65  directory as the
13150 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61   database.file a
13160 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65 20  nd has the same 
13170 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61 74 61  name as the data
13180 62 61 73 65 20 66 69 6c 65 20 62 75 74 20 77 69  base file but wi
13190 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c  th the string."<
131a0 74 74 3e 2d 77 61 6c 3c 2f 74 74 3e 22 20 61 70  tt>-wal</tt>" ap
131b0 70 65 6e 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33  pended.</p>..<h3
131c0 3e 34 2e 31 20 57 41 4c 20 46 69 6c 65 20 46 6f  >4.1 WAL File Fo
131d0 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20  rmat</h3>..<p>A 
131e0 57 41 4c 20 66 69 6c 65 20 63 6f 6e 73 69 73 74  WAL file consist
131f0 73 20 6f 66 20 61 20 68 65 61 64 65 72 20 66 6f  s of a header fo
13200 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f 20 6f  llowed by zero o
13210 72 20 6d 6f 72 65 20 22 66 72 61 6d 65 73 22 2e  r more "frames".
13220 0a 45 61 63 68 20 66 72 61 6d 65 20 72 65 63 6f  .Each frame reco
13230 72 64 73 20 74 68 65 20 72 65 76 69 73 65 64 20  rds the revised 
13240 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 73 69 6e  content of a sin
13250 67 6c 65 20 70 61 67 65 20 66 72 6f 6d 20 74 68  gle page from th
13260 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e.database file.
13270 20 20 41 6c 6c 20 63 68 61 6e 67 65 73 20 74 6f    All changes to
13280 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
13290 65 20 72 65 63 6f 72 64 65 64 20 62 79 20 77 72  e recorded by wr
132a0 69 74 69 6e 67 0a 66 72 61 6d 65 73 20 69 6e 74  iting.frames int
132b0 6f 20 74 68 65 20 57 41 4c 2e 20 20 54 72 61 6e  o the WAL.  Tran
132c0 73 61 63 74 69 6f 6e 73 20 63 6f 6d 6d 69 74 20  sactions commit 
132d0 77 68 65 6e 20 61 20 66 72 61 6d 65 20 69 73 20  when a frame is 
132e0 77 72 69 74 74 65 6e 20 74 68 61 74 0a 63 6f 6e  written that.con
132f0 74 61 69 6e 73 20 61 20 63 6f 6d 6d 69 74 20 6d  tains a commit m
13300 61 72 6b 65 72 2e 20 20 5e 41 20 73 69 6e 67 6c  arker.  ^A singl
13310 65 20 57 41 4c 20 63 61 6e 20 61 6e 64 20 75 73  e WAL can and us
13320 75 61 6c 6c 79 20 64 6f 65 73 20 72 65 63 6f 72  ually does recor
13330 64 20 0a 6d 75 6c 74 69 70 6c 65 20 74 72 61 6e  d .multiple tran
13340 73 61 63 74 69 6f 6e 73 2e 20 20 50 65 72 69 6f  sactions.  Perio
13350 64 69 63 61 6c 6c 79 2c 20 74 68 65 20 63 6f 6e  dically, the con
13360 74 65 6e 74 20 6f 66 20 74 68 65 20 57 41 4c 20  tent of the WAL 
13370 69 73 0a 74 72 61 6e 73 66 65 72 72 65 64 20 62  is.transferred b
13380 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74  ack into the dat
13390 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 61 6e  abase file in an
133a0 20 6f 70 65 72 61 74 69 6f 6e 20 63 61 6c 6c 65   operation calle
133b0 64 20 61 0a 22 63 68 65 63 6b 70 6f 69 6e 74 22  d a."checkpoint"
133c0 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 73 69 6e  .</p>..<p>^A sin
133d0 67 6c 65 20 57 41 4c 20 66 69 6c 65 20 63 61 6e  gle WAL file can
133e0 20 62 65 20 72 65 75 73 65 64 20 6d 75 6c 74 69   be reused multi
133f0 70 6c 65 20 74 69 6d 65 73 2e 20 20 5e 49 6e 20  ple times.  ^In 
13400 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
13410 0a 57 41 4c 20 63 61 6e 20 66 69 6c 6c 20 75 70  .WAL can fill up
13420 20 77 69 74 68 20 66 72 61 6d 65 73 20 61 6e 64   with frames and
13430 20 74 68 65 6e 20 62 65 20 63 68 65 63 6b 70 6f   then be checkpo
13440 69 6e 74 65 64 20 61 6e 64 20 74 68 65 6e 20 6e  inted and then n
13450 65 77 0a 66 72 61 6d 65 73 20 63 61 6e 20 6f 76  ew.frames can ov
13460 65 72 77 72 69 74 65 20 74 68 65 20 6f 6c 64 20  erwrite the old 
13470 6f 6e 65 73 2e 20 20 5e 41 20 57 41 4c 20 61 6c  ones.  ^A WAL al
13480 77 61 79 73 20 67 72 6f 77 73 20 66 72 6f 6d 20  ways grows from 
13490 62 65 67 69 6e 6e 69 6e 67 0a 74 6f 77 61 72 64  beginning.toward
134a0 20 74 68 65 20 65 6e 64 2e 20 20 43 68 65 63 6b   the end.  Check
134b0 73 75 6d 73 20 61 6e 64 20 63 6f 75 6e 74 65 72  sums and counter
134c0 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 65 61  s attached to ea
134d0 63 68 20 66 72 61 6d 65 20 61 72 65 0a 75 73 65  ch frame are.use
134e0 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77  d to determine w
134f0 68 69 63 68 20 66 72 61 6d 65 73 20 77 69 74 68  hich frames with
13500 69 6e 20 74 68 65 20 57 41 4c 20 61 72 65 20 76  in the WAL are v
13510 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68 0a 61  alid and which.a
13520 72 65 20 6c 65 66 74 6f 76 65 72 73 20 66 72 6f  re leftovers fro
13530 6d 20 70 72 69 6f 72 20 63 68 65 63 6b 70 6f 69  m prior checkpoi
13540 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54  nts.</p>..<p>^(T
13550 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 69 73  he WAL header is
13560 20 33 32 20 62 79 74 65 73 20 69 6e 20 73 69 7a   32 bytes in siz
13570 65 20 61 6e 64 20 63 6f 6e 73 69 73 74 73 20 6f  e and consists o
13580 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
13590 65 69 67 68 74 0a 62 69 67 2d 65 6e 64 69 61 6e  eight.big-endian
135a0 20 33 32 2d 62 69 74 20 75 6e 73 69 67 6e 65 64   32-bit unsigned
135b0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 3a   integer values:
135c0 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c  </p>..<center>.<
135d0 69 3e 57 41 4c 20 48 65 61 64 65 72 20 46 6f 72  i>WAL Header For
135e0 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62  mat</i><br>.<tab
135f0 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20 62  le width="80%" b
13600 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68  order=1>.<tr><th
13610 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c  >Offset<th>Size<
13620 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c  th>Description.<
13630 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13640 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
13650 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13660 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13670 20 20 3c 74 64 3e 4d 61 67 69 63 20 6e 75 6d 62    <td>Magic numb
13680 65 72 2e 20 20 30 78 33 37 37 66 30 36 38 32 20  er.  0x377f0682 
13690 6f 72 20 30 78 33 37 37 66 30 36 38 33 0a 3c 74  or 0x377f0683.<t
136a0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
136b0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
136c0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
136d0 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
136e0 20 3c 74 64 3e 46 69 6c 65 20 66 6f 72 6d 61 74   <td>File format
136f0 20 76 65 72 73 69 6f 6e 2e 20 20 43 75 72 72 65   version.  Curre
13700 6e 74 6c 79 20 33 30 30 37 30 30 30 2e 0a 3c 74  ntly 3007000..<t
13710 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
13720 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c   align=center>8<
13730 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13740 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
13750 20 3c 74 64 3e 44 61 74 61 62 61 73 65 20 70 61   <td>Database pa
13760 67 65 20 73 69 7a 65 2e 20 20 45 78 61 6d 70 6c  ge size.  Exampl
13770 65 3a 20 31 30 32 34 0a 3c 74 72 3e 3c 74 64 20  e: 1024.<tr><td 
13780 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13790 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20 76 61  =center>12<td va
137a0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
137b0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
137c0 43 68 65 63 6b 70 6f 69 6e 74 20 73 65 71 75 65  Checkpoint seque
137d0 6e 63 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c  nce number.<tr><
137e0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
137f0 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64  ign=center>16<td
13800 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13810 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
13820 74 64 3e 53 61 6c 74 2d 31 3a 20 72 61 6e 64 6f  td>Salt-1: rando
13830 6d 20 69 6e 74 65 67 65 72 20 69 6e 63 72 65 6d  m integer increm
13840 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
13850 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c  checkpoint.<tr><
13860 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13870 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64  ign=center>20<td
13880 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13890 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
138a0 74 64 3e 53 61 6c 74 2d 32 3a 20 61 20 64 69 66  td>Salt-2: a dif
138b0 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 75  ferent random nu
138c0 6d 62 65 72 20 66 6f 72 20 65 61 63 68 20 63 68  mber for each ch
138d0 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64  eckpoint.<tr><td
138e0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
138f0 6e 3d 63 65 6e 74 65 72 3e 32 34 3c 74 64 20 76  n=center>24<td v
13900 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13910 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
13920 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 46 69 72  >Checksum-1: Fir
13930 73 74 20 70 61 72 74 20 6f 66 20 61 20 63 68 65  st part of a che
13940 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66 69 72  cksum on the fir
13950 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20 68  st 24 bytes of h
13960 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  eader.<tr><td va
13970 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13980 65 6e 74 65 72 3e 32 38 3c 74 64 20 76 61 6c 69  enter>28<td vali
13990 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
139a0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
139b0 65 63 6b 73 75 6d 2d 32 3a 20 53 65 63 6f 6e 64  ecksum-2: Second
139c0 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 68 65   part of the che
139d0 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66 69 72  cksum on the fir
139e0 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20 68  st 24 bytes of h
139f0 65 61 64 65 72 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  eader.</table>.<
13a00 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70 3e 5e  /center>)^..<p>^
13a10 49 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  Immediately foll
13a20 6f 77 69 6e 67 20 74 68 65 20 77 61 6c 2d 68 65  owing the wal-he
13a30 61 64 65 72 20 61 72 65 20 7a 65 72 6f 20 6f 72  ader are zero or
13a40 20 6d 6f 72 65 20 66 72 61 6d 65 73 2e 20 5e 45   more frames. ^E
13a50 61 63 68 0a 66 72 61 6d 65 20 63 6f 6e 73 69 73  ach.frame consis
13a60 74 73 20 6f 66 20 61 20 32 34 2d 62 79 74 65 20  ts of a 24-byte 
13a70 66 72 61 6d 65 2d 68 65 61 64 65 72 20 66 6f 6c  frame-header fol
13a80 6c 6f 77 65 64 20 62 79 20 61 20 3c 69 3e 70 61  lowed by a <i>pa
13a90 67 65 2d 73 69 7a 65 3c 2f 69 3e 20 62 79 74 65  ge-size</i> byte
13aa0 73 0a 6f 66 20 70 61 67 65 20 64 61 74 61 2e 20  s.of page data. 
13ab0 5e 28 54 68 65 20 66 72 61 6d 65 2d 68 65 61 64  ^(The frame-head
13ac0 65 72 20 69 73 20 73 69 78 20 62 69 67 2d 65 6e  er is six big-en
13ad0 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e 73 69  dian 32-bit unsi
13ae0 67 6e 65 64 20 0a 69 6e 74 65 67 65 72 20 76 61  gned .integer va
13af0 6c 75 65 73 2c 20 61 73 20 66 6f 6c 6c 6f 77 73  lues, as follows
13b00 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57  :..<center>.<i>W
13b10 41 4c 20 46 72 61 6d 65 20 48 65 61 64 65 72 20  AL Frame Header 
13b20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
13b30 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
13b40 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
13b50 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69  <th>Offset<th>Si
13b60 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f  ze<th>Descriptio
13b70 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  n.<tr><td valign
13b80 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13b90 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>0<td valign=to
13ba0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13bb0 0a 20 20 20 20 3c 74 64 3e 50 61 67 65 20 6e 75  .    <td>Page nu
13bc0 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  mber.<tr><td val
13bd0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13be0 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e  nter>4<td valign
13bf0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13c00 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 6f 72 20  r>4.    <td>For 
13c10 63 6f 6d 6d 69 74 20 72 65 63 6f 72 64 73 2c 20  commit records, 
13c20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
13c30 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e  database file in
13c40 20 70 61 67 65 73 0a 20 20 20 20 20 20 20 20 61   pages.        a
13c50 66 74 65 72 20 74 68 65 20 63 6f 6d 6d 69 74 2e  fter the commit.
13c60 20 20 46 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20    For all other 
13c70 72 65 63 6f 72 64 73 2c 20 7a 65 72 6f 2e 0a 3c  records, zero..<
13c80 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
13c90 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
13ca0 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13cb0 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13cc0 20 20 3c 74 64 3e 53 61 6c 74 2d 31 20 63 6f 70    <td>Salt-1 cop
13cd0 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57 41 4c  ied from the WAL
13ce0 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20   header.<tr><td 
13cf0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13d00 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20 76 61  =center>12<td va
13d10 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13d20 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13d30 53 61 6c 74 2d 32 20 63 6f 70 69 65 64 20 66 72  Salt-2 copied fr
13d40 6f 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64 65  om the WAL heade
13d50 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
13d60 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13d70 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>16<td valign=t
13d80 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
13d90 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73  4.    <td>Checks
13da0 75 6d 2d 31 3a 20 20 43 75 6d 75 6c 61 74 69 76  um-1:  Cumulativ
13db0 65 20 63 68 65 63 6b 73 75 6d 20 75 70 20 74 68  e checksum up th
13dc0 72 6f 75 67 68 20 61 6e 64 20 69 6e 63 6c 75 64  rough and includ
13dd0 69 6e 67 20 74 68 69 73 20 70 61 67 65 0a 3c 74  ing this page.<t
13de0 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
13df0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30   align=center>20
13e00 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
13e10 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
13e20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32    <td>Checksum-2
13e30 3a 20 20 53 65 63 6f 6e 64 20 68 61 6c 66 20 6f  :  Second half o
13e40 66 20 74 68 65 20 63 75 6d 75 6c 61 74 69 76 65  f the cumulative
13e50 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 2f 74 61 62   checksum..</tab
13e60 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a  le>.</center>)^.
13e70 0a 5e 28 3c 70 3e 41 20 66 72 61 6d 65 20 69 73  .^(<p>A frame is
13e80 20 63 6f 6e 73 69 64 65 72 65 64 20 76 61 6c 69   considered vali
13e90 64 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  d if and only if
13ea0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
13eb0 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 0a 74 72  onditions are.tr
13ec0 75 65 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c  ue:</p>..<ol>.<l
13ed0 69 3e 3c 70 3e 54 68 65 20 73 61 6c 74 2d 31 20  i><p>The salt-1 
13ee0 61 6e 64 20 73 61 6c 74 2d 32 20 76 61 6c 75 65  and salt-2 value
13ef0 73 20 69 6e 20 74 68 65 20 66 72 61 6d 65 2d 68  s in the frame-h
13f00 65 61 64 65 72 20 6d 61 74 63 68 0a 20 20 20 20  eader match.    
13f10 20 20 20 73 61 6c 74 20 76 61 6c 75 65 73 20 69     salt values i
13f20 6e 20 74 68 65 20 77 61 6c 2d 68 65 61 64 65 72  n the wal-header
13f30 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c  </p></li>..<li><
13f40 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20 76  p>The checksum v
13f50 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66 69 6e  alues in the fin
13f60 61 6c 20 38 20 62 79 74 65 73 20 6f 66 20 74 68  al 8 bytes of th
13f70 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 0a 20  e frame-header. 
13f80 20 20 20 20 20 20 65 78 61 63 74 6c 79 20 6d 61        exactly ma
13f90 74 63 68 20 74 68 65 20 63 68 65 63 6b 73 75 6d  tch the checksum
13fa0 20 63 6f 6d 70 75 74 65 64 20 63 6f 6e 73 65 63   computed consec
13fb0 75 74 69 76 65 6c 79 20 6f 6e 20 74 68 65 0a 20  utively on the. 
13fc0 20 20 20 20 20 20 66 69 72 73 74 20 32 34 20 62        first 24 b
13fd0 79 74 65 73 20 6f 66 20 74 68 65 20 57 41 4c 20  ytes of the WAL 
13fe0 68 65 61 64 65 72 20 61 6e 64 20 74 68 65 20 66  header and the f
13ff0 69 72 73 74 20 38 20 62 79 74 65 73 20 61 6e 64  irst 8 bytes and
14000 0a 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e 74  .       the cont
14010 65 6e 74 20 6f 66 20 61 6c 6c 20 66 72 61 6d 65  ent of all frame
14020 73 0a 20 20 20 20 20 20 20 75 70 20 74 6f 20 61  s.       up to a
14030 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65  nd including the
14040 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 2e 3c   current frame.<
14050 2f 70 3e 3c 2f 6c 69 3e 3c 2f 6c 69 3e 0a 3c 2f  /p></li></li>.</
14060 6f 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  ol>)^..<tcl>hd_f
14070 72 61 67 6d 65 6e 74 20 77 61 6c 63 6b 73 6d 20  ragment walcksm 
14080 7b 57 41 4c 20 63 68 65 63 6b 73 75 6d 20 61 6c  {WAL checksum al
14090 67 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c  gorithm}</tcl>.<
140a0 68 33 3e 34 2e 32 20 43 68 65 63 6b 73 75 6d 20  h3>4.2 Checksum 
140b0 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a  Algorithm</h3>..
140c0 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20  <p>The checksum 
140d0 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 69  is computed by i
140e0 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68 65 20  nterpreting the 
140f0 69 6e 70 75 74 20 61 73 0a 61 6e 20 65 76 65 6e  input as.an even
14100 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 73 69 67   number of unsig
14110 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74 65 67  ned 32-bit integ
14120 65 72 73 3a 20 78 28 30 29 20 74 68 72 6f 75 67  ers: x(0) throug
14130 68 20 78 28 4e 29 2e 0a 5e 54 68 65 20 33 32 2d  h x(N)..^The 32-
14140 62 69 74 20 69 6e 74 65 67 65 72 73 20 61 72 65  bit integers are
14150 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 66 20 74   big-endian if t
14160 68 65 0a 6d 61 67 69 63 20 6e 75 6d 62 65 72 20  he.magic number 
14170 69 6e 20 74 68 65 20 66 69 72 73 74 20 34 20 62  in the first 4 b
14180 79 74 65 73 20 6f 66 20 74 68 65 20 57 41 4c 20  ytes of the WAL 
14190 68 65 61 64 65 72 20 69 73 20 30 78 33 37 37 66  header is 0x377f
141a0 30 36 38 33 20 61 6e 64 0a 74 68 65 20 69 6e 74  0683 and.the int
141b0 65 67 65 72 73 20 61 72 65 20 6c 69 74 74 6c 65  egers are little
141c0 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65 20 6d  -endian if the m
141d0 61 67 69 63 20 6e 75 6d 62 65 72 20 69 73 20 30  agic number is 0
141e0 78 33 37 37 66 30 36 38 32 2e 0a 5e 54 68 65 20  x377f0682..^The 
141f0 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73 20  checksum values 
14200 61 72 65 20 61 6c 77 61 79 73 20 73 74 6f 72 65  are always store
14210 64 20 69 6e 20 74 68 65 20 66 72 61 6d 65 20 68  d in the frame h
14220 65 61 64 65 72 20 69 6e 20 61 0a 62 69 67 2d 65  eader in a.big-e
14230 6e 64 69 61 6e 20 66 6f 72 6d 61 74 20 72 65 67  ndian format reg
14240 61 72 64 6c 65 73 73 20 6f 66 20 77 68 69 63 68  ardless of which
14250 20 62 79 74 65 20 6f 72 64 65 72 20 69 73 20 75   byte order is u
14260 73 65 64 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74  sed to compute.t
14270 68 65 20 63 68 65 63 6b 73 75 6d 2e 3c 2f 70 3e  he checksum.</p>
14280 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75  ..<p>The checksu
14290 6d 20 61 6c 67 6f 72 69 74 68 6d 20 6f 6e 6c 79  m algorithm only
142a0 20 77 6f 72 6b 73 20 66 6f 72 20 63 6f 6e 74 65   works for conte
142b0 6e 74 20 77 68 69 63 68 20 69 73 20 61 20 6d 75  nt which is a mu
142c0 6c 74 69 70 6c 65 20 6f 66 0a 38 20 62 79 74 65  ltiple of.8 byte
142d0 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 49 6e  s in length.  In
142e0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66   other words, if
142f0 20 74 68 65 20 69 6e 70 75 74 73 20 61 72 65 20   the inputs are 
14300 78 28 30 29 20 74 68 72 6f 75 67 68 20 78 28 4e  x(0) through x(N
14310 29 0a 74 68 65 6e 20 4e 20 6d 75 73 74 20 62 65  ).then N must be
14320 20 6f 64 64 2e 0a 5e 28 54 68 65 20 63 68 65 63   odd..^(The chec
14330 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 69  ksum algorithm i
14340 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  s as follows:..<
14350 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
14360 20 0a 73 30 20 3d 20 73 31 20 3d 20 30 0a 66 6f   .s0 = s1 = 0.fo
14370 72 20 69 20 66 72 6f 6d 20 30 20 74 6f 20 6e 2d  r i from 0 to n-
14380 31 20 73 74 65 70 20 32 3a 0a 20 20 20 73 30 20  1 step 2:.   s0 
14390 2b 3d 20 78 28 69 29 20 2b 20 73 31 3b 0a 20 20  += x(i) + s1;.  
143a0 20 73 31 20 2b 3d 20 78 28 69 2b 31 29 20 2b 20   s1 += x(i+1) + 
143b0 73 30 3b 0a 65 6e 64 66 6f 72 0a 23 20 72 65 73  s0;.endfor.# res
143c0 75 6c 74 20 69 6e 20 73 30 20 61 6e 64 20 73 31  ult in s0 and s1
143d0 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
143e0 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 20  ote>)^..<p>^The 
143f0 6f 75 74 70 75 74 73 20 73 30 20 61 6e 64 20 73  outputs s0 and s
14400 31 20 61 72 65 20 62 6f 74 68 20 77 65 69 67 68  1 are both weigh
14410 74 65 64 20 63 68 65 63 6b 73 75 6d 73 20 75 73  ted checksums us
14420 69 6e 67 20 46 69 62 6f 6e 61 63 63 69 20 77 65  ing Fibonacci we
14430 69 67 68 74 73 0a 69 6e 20 72 65 76 65 72 73 65  ights.in reverse
14440 20 6f 72 64 65 72 2e 20 20 28 5e 54 68 65 20 6c   order.  (^The l
14450 61 72 67 65 73 74 20 46 69 62 6f 6e 61 63 63 69  argest Fibonacci
14460 20 77 65 69 67 68 74 20 6f 63 63 75 72 73 20 6f   weight occurs o
14470 6e 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  n the first elem
14480 65 6e 74 0a 6f 66 20 74 68 65 20 73 65 71 75 65  ent.of the seque
14490 6e 63 65 20 62 65 69 6e 67 20 73 75 6d 6d 65 64  nce being summed
144a0 2e 29 20 20 5e 54 68 65 20 73 31 20 76 61 6c 75  .)  ^The s1 valu
144b0 65 20 73 70 61 6e 73 20 61 6c 6c 20 33 32 2d 62  e spans all 32-b
144c0 69 74 20 69 6e 74 65 67 65 72 0a 74 65 72 6d 73  it integer.terms
144d0 20 6f 66 20 74 68 65 20 73 65 71 75 65 6e 63 65   of the sequence
144e0 20 77 68 65 72 65 61 73 20 73 30 20 6f 6d 69 74   whereas s0 omit
144f0 73 20 74 68 65 20 66 69 6e 61 6c 20 74 65 72 6d  s the final term
14500 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 33 20 43  .</p>..<h3>4.3 C
14510 68 65 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69  heckpoint Algori
14520 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 4f 6e  thm</h3>..<p>^On
14530 20 61 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c   a [checkpoint],
14540 20 74 68 65 20 57 41 4c 20 69 73 20 66 69 72 73   the WAL is firs
14550 74 20 66 6c 75 73 68 65 64 20 74 6f 20 70 65 72  t flushed to per
14560 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67 65 20  sistent storage 
14570 75 73 69 6e 67 0a 74 68 65 20 78 53 79 6e 63 20  using.the xSync 
14580 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 5b 73  method of the [s
14590 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64  qlite3_io_method
145a0 73 20 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e  s | VFS]. .^Then
145b0 20 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f   valid content o
145c0 66 20 74 68 65 20 57 41 4c 20 69 73 20 74 72 61  f the WAL is tra
145d0 6e 73 66 65 72 72 65 64 20 69 6e 74 6f 20 74 68  nsferred into th
145e0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
145f0 0a 5e 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64  .^Finally, the d
14600 61 74 61 62 61 73 65 20 69 73 20 66 6c 75 73 68  atabase is flush
14610 65 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74  ed to persistent
14620 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67 20 61   storage using a
14630 6e 6f 74 68 65 72 0a 78 53 79 6e 63 20 6d 65 74  nother.xSync met
14640 68 6f 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53  hod call..The xS
14650 79 6e 63 20 6f 70 65 72 61 74 69 6f 6e 73 20 73  ync operations s
14660 65 72 76 65 20 61 73 20 77 72 69 74 65 20 62 61  erve as write ba
14670 72 72 69 65 72 73 20 2d 20 61 6c 6c 20 77 72 69  rriers - all wri
14680 74 65 73 20 6c 61 75 6e 63 68 65 64 0a 62 65 66  tes launched.bef
14690 6f 72 65 20 74 68 65 20 78 53 79 6e 63 20 6d 75  ore the xSync mu
146a0 73 74 20 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f  st complete befo
146b0 72 65 20 61 6e 79 20 77 72 69 74 65 20 74 68 61  re any write tha
146c0 74 20 6c 61 75 6e 63 68 65 73 20 61 66 74 65 72  t launches after
146d0 20 74 68 65 0a 78 53 79 6e 63 20 62 65 67 69 6e   the.xSync begin
146e0 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65  s.</p>..<p>^Afte
146f0 72 20 61 20 63 68 65 63 6b 70 6f 69 6e 74 2c 20  r a checkpoint, 
14700 6e 65 77 20 77 72 69 74 65 20 74 72 61 6e 73 61  new write transa
14710 63 74 69 6f 6e 73 20 6f 76 65 72 77 72 69 74 65  ctions overwrite
14720 0a 74 68 65 20 57 41 4c 20 66 69 6c 65 20 66 72  .the WAL file fr
14730 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
14740 2e 20 20 5e 41 74 20 74 68 65 20 73 74 61 72 74  .  ^At the start
14750 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 6e 65   of the first ne
14760 77 0a 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  w.write transact
14770 69 6f 6e 2c 20 74 68 65 20 57 41 4c 20 68 65 61  ion, the WAL hea
14780 64 65 72 20 73 61 6c 74 2d 31 20 76 61 6c 75 65  der salt-1 value
14790 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 0a   is incremented.
147a0 61 6e 64 20 74 68 65 20 73 61 6c 74 2d 32 20 76  and the salt-2 v
147b0 61 6c 75 65 20 69 73 20 72 61 6e 64 6f 6d 69 7a  alue is randomiz
147c0 65 64 2e 20 20 54 68 65 73 65 20 63 68 61 6e 67  ed.  These chang
147d0 65 73 20 74 6f 20 74 68 65 20 73 61 6c 74 73 20  es to the salts 
147e0 69 6e 76 61 6c 69 64 61 74 65 0a 6f 6c 64 20 66  invalidate.old f
147f0 72 61 6d 65 73 20 69 6e 20 74 68 65 20 57 41 4c  rames in the WAL
14800 20 74 68 61 74 20 68 61 76 65 20 61 6c 72 65 61   that have alrea
14810 64 79 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69  dy been checkpoi
14820 6e 74 65 64 20 62 75 74 20 6e 6f 74 20 79 65 74  nted but not yet
14830 0a 6f 76 65 72 77 72 69 74 74 65 6e 2c 20 61 6e  .overwritten, an
14840 64 20 70 72 65 76 65 6e 74 20 74 68 65 6d 20 66  d prevent them f
14850 72 6f 6d 20 62 65 69 6e 67 20 63 68 65 63 6b 70  rom being checkp
14860 6f 69 6e 74 65 64 20 61 67 61 69 6e 2e 3c 2f 70  ointed again.</p
14870 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
14880 65 6e 74 20 77 61 6c 72 65 61 64 20 7b 57 41 4c  ent walread {WAL
14890 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68 6d 7d   read algorithm}
148a0 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 34 20 52  </tcl>.<h3>4.4 R
148b0 65 61 64 65 72 20 41 6c 67 6f 72 69 74 68 6d 3c  eader Algorithm<
148c0 2f 68 33 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 72 65  /h3>..<p>^(To re
148d0 61 64 20 61 20 70 61 67 65 20 66 72 6f 6d 20 74  ad a page from t
148e0 68 65 20 64 61 74 61 62 61 73 65 20 28 63 61 6c  he database (cal
148f0 6c 20 69 74 20 70 61 67 65 20 6e 75 6d 62 65 72  l it page number
14900 20 50 29 2c 20 61 20 72 65 61 64 65 72 0a 66 69   P), a reader.fi
14910 72 73 74 20 63 68 65 63 6b 73 20 74 68 65 20 57  rst checks the W
14920 41 4c 20 74 6f 20 73 65 65 20 69 66 20 69 74 20  AL to see if it 
14930 63 6f 6e 74 61 69 6e 73 20 70 61 67 65 20 50 2e  contains page P.
14940 20 20 49 66 20 73 6f 2c 20 74 68 65 6e 20 74 68    If so, then th
14950 65 0a 6c 61 73 74 20 76 61 6c 69 64 20 69 6e 73  e.last valid ins
14960 74 61 6e 63 65 20 6f 66 20 70 61 67 65 20 50 20  tance of page P 
14970 74 68 61 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64  that is followed
14980 20 62 79 20 61 20 63 6f 6d 6d 69 74 20 66 72 61   by a commit fra
14990 6d 65 0a 6f 72 20 69 73 20 61 20 63 6f 6d 6d 69  me.or is a commi
149a0 74 20 66 72 61 6d 65 20 69 74 73 65 6c 66 20 62  t frame itself b
149b0 65 63 6f 6d 65 73 20 74 68 65 20 76 61 6c 75 65  ecomes the value
149c0 20 72 65 61 64 2e 29 5e 20 20 5e 49 66 20 74 68   read.)^  ^If th
149d0 65 20 57 41 4c 0a 63 6f 6e 74 61 69 6e 73 20 6e  e WAL.contains n
149e0 6f 20 63 6f 70 69 65 73 20 6f 66 20 70 61 67 65  o copies of page
149f0 20 50 20 74 68 61 74 20 61 72 65 20 76 61 6c 69   P that are vali
14a00 64 20 61 6e 64 20 77 68 69 63 68 20 61 72 65 20  d and which are 
14a10 61 20 63 6f 6d 6d 69 74 0a 66 72 61 6d 65 20 6f  a commit.frame o
14a20 72 20 61 72 65 20 66 6f 6c 6c 6f 77 65 64 20 62  r are followed b
14a30 79 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65  y a commit frame
14a40 2c 20 74 68 65 6e 20 70 61 67 65 20 50 20 69 73  , then page P is
14a50 20 72 65 61 64 20 66 72 6f 6d 0a 74 68 65 20 64   read from.the d
14a60 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70  atabase file.</p
14a70 3e 0a 0a 3c 70 3e 54 6f 20 73 74 61 72 74 20 61  >..<p>To start a
14a80 20 72 65 61 64 20 74 72 61 6e 73 61 63 74 69 6f   read transactio
14a90 6e 2c 20 74 68 65 20 72 65 61 64 65 72 20 72 65  n, the reader re
14aa0 63 6f 72 64 73 20 74 68 65 20 69 6e 64 65 78 20  cords the index 
14ab0 6f 66 20 74 68 65 20 6c 61 73 74 0a 76 61 6c 69  of the last.vali
14ac0 64 20 66 72 61 6d 65 20 69 6e 20 74 68 65 20 57  d frame in the W
14ad0 41 4c 2e 20 20 54 68 65 20 72 65 61 64 65 72 20  AL.  The reader 
14ae0 75 73 65 73 20 74 68 69 73 20 72 65 63 6f 72 64  uses this record
14af0 65 64 20 22 6d 78 46 72 61 6d 65 22 20 76 61 6c  ed "mxFrame" val
14b00 75 65 0a 66 6f 72 20 61 6c 6c 20 73 75 62 73 65  ue.for all subse
14b10 71 75 65 6e 74 20 72 65 61 64 20 6f 70 65 72 61  quent read opera
14b20 74 69 6f 6e 73 2e 20 20 4e 65 77 20 74 72 61 6e  tions.  New tran
14b30 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20  sactions can be 
14b40 61 70 70 65 6e 64 65 64 0a 74 6f 20 74 68 65 20  appended.to the 
14b50 57 41 4c 2c 20 62 75 74 20 61 73 20 6c 6f 6e 67  WAL, but as long
14b60 20 61 73 20 74 68 65 20 72 65 61 64 65 72 20 75   as the reader u
14b70 73 65 73 20 69 74 73 20 6f 72 69 67 69 6e 61 6c  ses its original
14b80 20 6d 78 46 72 61 6d 65 20 76 61 6c 75 65 0a 61   mxFrame value.a
14b90 6e 64 20 69 67 6e 6f 72 65 73 20 73 75 62 73 65  nd ignores subse
14ba0 71 75 65 6e 74 6c 79 20 61 70 70 65 6e 64 65 64  quently appended
14bb0 20 63 6f 6e 74 65 6e 74 2c 20 74 68 65 20 72 65   content, the re
14bc0 61 64 65 72 20 77 69 6c 6c 20 73 65 65 20 61 20  ader will see a 
14bd0 0a 63 6f 6e 73 69 73 74 65 6e 74 20 73 6e 61 70  .consistent snap
14be0 73 68 6f 74 20 6f 66 20 74 68 65 20 64 61 74 61  shot of the data
14bf0 62 61 73 65 20 66 72 6f 6d 20 61 20 73 69 6e 67  base from a sing
14c00 6c 65 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65  le point in time
14c10 2e 20 20 0a 5e 54 68 69 73 20 74 65 63 68 6e 69  .  .^This techni
14c20 71 75 65 20 61 6c 6c 6f 77 73 20 6d 75 6c 74 69  que allows multi
14c30 70 6c 65 20 63 6f 6e 63 75 72 72 65 6e 74 20 72  ple concurrent r
14c40 65 61 64 65 72 73 20 74 6f 20 76 69 65 77 20 64  eaders to view d
14c50 69 66 66 65 72 65 6e 74 20 0a 76 65 72 73 69 6f  ifferent .versio
14c60 6e 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ns of the databa
14c70 73 65 20 63 6f 6e 74 65 6e 74 20 73 69 6d 75 6c  se content simul
14c80 74 61 6e 65 6f 75 73 6c 79 2e 3c 2f 70 3e 0a 0a  taneously.</p>..
14c90 3c 70 3e 54 68 65 20 72 65 61 64 65 72 20 61 6c  <p>The reader al
14ca0 67 6f 72 69 74 68 6d 20 69 6e 20 74 68 65 20 70  gorithm in the p
14cb0 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
14cc0 68 73 20 77 6f 72 6b 73 20 63 6f 72 72 65 63 74  hs works correct
14cd0 6c 79 2c 20 62 75 74 20 0a 62 65 63 61 75 73 65  ly, but .because
14ce0 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67 65   frames for page
14cf0 20 50 20 63 61 6e 20 61 70 70 65 61 72 20 61 6e   P can appear an
14d00 79 77 68 65 72 65 20 77 69 74 68 69 6e 20 74 68  ywhere within th
14d10 65 20 57 41 4c 2c 20 74 68 65 0a 72 65 61 64 65  e WAL, the.reade
14d20 72 20 68 61 73 20 74 6f 20 73 63 61 6e 20 74 68  r has to scan th
14d30 65 20 65 6e 74 69 72 65 20 57 41 4c 20 6c 6f 6f  e entire WAL loo
14d40 6b 69 6e 67 20 66 6f 72 20 70 61 67 65 20 50 20  king for page P 
14d50 66 72 61 6d 65 73 2e 20 20 49 66 20 74 68 65 0a  frames.  If the.
14d60 57 41 4c 20 69 73 20 6c 61 72 67 65 20 28 6d 75  WAL is large (mu
14d70 6c 74 69 70 6c 65 20 6d 65 67 61 62 79 74 65 73  ltiple megabytes
14d80 20 69 73 20 74 79 70 69 63 61 6c 29 20 74 68 61   is typical) tha
14d90 74 20 73 63 61 6e 20 63 61 6e 20 62 65 20 73 6c  t scan can be sl
14da0 6f 77 2c 0a 61 6e 64 20 72 65 61 64 20 70 65 72  ow,.and read per
14db0 66 6f 72 6d 61 6e 63 65 20 73 75 66 66 65 72 73  formance suffers
14dc0 2e 20 20 5e 54 6f 20 6f 76 65 72 63 6f 6d 65 20  .  ^To overcome 
14dd0 74 68 69 73 20 70 72 6f 62 6c 65 6d 2c 20 61 20  this problem, a 
14de0 73 65 70 61 72 61 74 65 0a 64 61 74 61 20 73 74  separate.data st
14df0 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20 74  ructure called t
14e00 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20  he wal-index is 
14e10 6d 61 69 6e 74 61 69 6e 65 64 20 74 6f 20 65 78  maintained to ex
14e20 70 65 64 69 74 65 20 74 68 65 0a 73 65 61 72 63  pedite the.searc
14e30 68 20 66 6f 72 20 66 72 61 6d 65 73 20 6f 66 20  h for frames of 
14e40 61 20 70 61 72 74 69 63 75 6c 61 72 20 70 61 67  a particular pag
14e50 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  e.</p>..<tcl>hd_
14e60 66 72 61 67 6d 65 6e 74 20 77 61 6c 69 6e 64 65  fragment walinde
14e70 78 66 6f 72 6d 61 74 20 7b 77 61 6c 2d 69 6e 64  xformat {wal-ind
14e80 65 78 7d 20 7b 57 41 4c 2d 69 6e 64 65 78 20 66  ex} {WAL-index f
14e90 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  ormat}</tcl>.<h3
14ea0 3e 34 2e 35 20 57 41 4c 2d 49 6e 64 65 78 20 46  >4.5 WAL-Index F
14eb0 6f 72 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 43  ormat</h3>..<p>C
14ec0 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68 65  onceptually, the
14ed0 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73 68   wal-index is sh
14ee0 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 74 68 6f  ared memory, tho
14ef0 75 67 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a  ugh the current.
14f00 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  VFS implementati
14f10 6f 6e 73 20 75 73 65 20 61 20 6d 6d 61 70 70 65  ons use a mmappe
14f20 64 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20 77  d file for the w
14f30 61 6c 2d 69 6e 64 65 78 2e 20 20 5e 54 68 65 20  al-index.  ^The 
14f40 6d 6d 61 70 70 65 64 0a 66 69 6c 65 20 69 73 20  mmapped.file is 
14f50 69 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72 65  in the same dire
14f60 63 74 6f 72 79 20 61 73 20 74 68 65 20 64 61 74  ctory as the dat
14f70 61 62 61 73 65 20 61 6e 64 20 68 61 73 20 74 68  abase and has th
14f80 65 20 73 61 6d 65 20 6e 61 6d 65 0a 61 73 20 74  e same name.as t
14f90 68 65 20 64 61 74 61 62 61 73 65 20 77 69 74 68  he database with
14fa0 20 61 20 22 3c 74 74 3e 2d 73 68 6d 3c 2f 74 74   a "<tt>-shm</tt
14fb0 3e 22 20 73 75 66 66 69 78 20 61 70 70 65 6e 64  >" suffix append
14fc0 65 64 2e 20 20 42 65 63 61 75 73 65 0a 74 68 65  ed.  Because.the
14fd0 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73 68   wal-index is sh
14fe0 61 72 65 64 20 6d 65 6d 6f 72 79 2c 20 53 51 4c  ared memory, SQL
14ff0 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  ite does not sup
15000 70 6f 72 74 20 0a 5b 50 52 41 47 4d 41 20 6a 6f  port .[PRAGMA jo
15010 75 72 6e 61 6c 5f 6d 6f 64 65 20 7c 20 6a 6f 75  urnal_mode | jou
15020 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 5d 20 0a  rnal_mode=WAL] .
15030 6f 6e 20 61 20 6e 65 74 77 6f 72 6b 20 66 69 6c  on a network fil
15040 65 73 79 73 74 65 6d 20 77 68 65 6e 20 63 6c 69  esystem when cli
15050 65 6e 74 73 20 61 72 65 20 6f 6e 20 64 69 66 66  ents are on diff
15060 65 72 65 6e 74 20 6d 61 63 68 69 6e 65 73 2e 0a  erent machines..
15070 41 6c 6c 20 75 73 65 72 73 20 6f 66 20 74 68 65  All users of the
15080 20 64 61 74 61 62 61 73 65 20 6d 75 73 74 20 62   database must b
15090 65 20 61 62 6c 65 20 74 6f 20 73 68 61 72 65 20  e able to share 
150a0 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 2e  the same memory.
150b0 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 70 75 72  </p>..<p>The pur
150c0 70 6f 73 65 20 6f 66 20 74 68 65 20 77 61 6c 2d  pose of the wal-
150d0 69 6e 64 65 78 20 69 73 20 74 6f 20 61 6e 73 77  index is to answ
150e0 65 72 20 74 68 69 73 20 71 75 65 73 74 69 6f 6e  er this question
150f0 20 71 75 69 63 6b 6c 79 3a 3c 2f 70 3e 0a 0a 3c   quickly:</p>..<
15100 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e 0a 47  blockquote><i>.G
15110 69 76 65 6e 20 61 20 70 61 67 65 20 6e 75 6d 62  iven a page numb
15120 65 72 20 50 20 61 6e 64 20 61 20 6d 61 78 69 6d  er P and a maxim
15130 75 6d 20 57 41 4c 20 66 72 61 6d 65 20 69 6e 64  um WAL frame ind
15140 65 78 20 4d 2c 0a 72 65 74 75 72 6e 20 74 68 65  ex M,.return the
15150 20 6c 61 72 67 65 73 74 20 57 41 4c 20 66 72 61   largest WAL fra
15160 6d 65 20 69 6e 64 65 78 20 66 6f 72 20 70 61 67  me index for pag
15170 65 20 50 20 74 68 61 74 20 64 6f 65 73 20 6e 6f  e P that does no
15180 74 20 65 78 63 65 65 64 20 4d 2c 20 0a 6f 72 20  t exceed M, .or 
15190 72 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 74  return NULL if t
151a0 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 61 6d  here are no fram
151b0 65 73 20 66 6f 72 20 70 61 67 65 20 50 20 74 68  es for page P th
151c0 61 74 20 64 6f 20 6e 6f 74 20 65 78 63 65 65 64  at do not exceed
151d0 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71   M..</i></blockq
151e0 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 3c 69  uote>..<p>The <i
151f0 3e 4d 3c 2f 69 3e 20 76 61 6c 75 65 20 69 6e 20  >M</i> value in 
15200 74 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72  the previous par
15210 61 67 72 61 70 68 20 69 73 20 74 68 65 20 22 6d  agraph is the "m
15220 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 64 65  xFrame" value.de
15230 66 69 6e 65 64 20 69 6e 20 5b 57 41 4c 20 72 65  fined in [WAL re
15240 61 64 20 61 6c 67 6f 72 69 74 68 6d 20 7c 20 73  ad algorithm | s
15250 65 63 74 69 6f 6e 20 34 2e 34 5d 20 74 68 61 74  ection 4.4] that
15260 20 69 73 20 72 65 61 64 20 61 74 20 74 68 65 20   is read at the 
15270 73 74 61 72 74 20 0a 6f 66 20 61 20 74 72 61 6e  start .of a tran
15280 73 61 63 74 69 6f 6e 20 61 6e 64 20 77 68 69 63  saction and whic
15290 68 20 64 65 66 69 6e 65 73 20 74 68 65 20 6d 61  h defines the ma
152a0 78 69 6d 75 6d 20 66 72 61 6d 65 20 66 72 6f 6d  ximum frame from
152b0 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 0a 74   the WAL that .t
152c0 68 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20 75  he reader will u
152d0 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  se.</p>..<p>The 
152e0 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72 61  wal-index is tra
152f0 6e 73 69 65 6e 74 2e 20 20 41 66 74 65 72 20 61  nsient.  After a
15300 20 63 72 61 73 68 2c 20 74 68 65 20 77 61 6c 2d   crash, the wal-
15310 69 6e 64 65 78 20 69 73 0a 72 65 63 6f 6e 73 74  index is.reconst
15320 72 75 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20  ructed from the 
15330 6f 72 69 67 69 6e 61 6c 20 57 41 4c 20 66 69 6c  original WAL fil
15340 65 2e 20 20 5e 54 68 65 20 56 46 53 20 69 73 20  e.  ^The VFS is 
15350 72 65 71 75 69 72 65 64 0a 74 6f 20 65 69 74 68  required.to eith
15360 65 72 20 74 72 75 6e 63 61 74 65 20 6f 72 20 7a  er truncate or z
15370 65 72 6f 20 74 68 65 20 68 65 61 64 65 72 20 6f  ero the header o
15380 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  f the wal-index 
15390 77 68 65 6e 20 74 68 65 20 6c 61 73 74 0a 63 6f  when the last.co
153a0 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 69 74 20 63  nnection to it c
153b0 6c 6f 73 65 73 2e 20 20 42 65 63 61 75 73 65 20  loses.  Because 
153c0 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73  the wal-index is
153d0 20 74 72 61 6e 73 69 65 6e 74 2c 20 69 74 20 63   transient, it c
153e0 61 6e 0a 75 73 65 20 61 6e 20 61 72 63 68 69 74  an.use an archit
153f0 65 63 74 75 72 65 2d 73 70 65 63 69 66 69 63 20  ecture-specific 
15400 66 6f 72 6d 61 74 3b 20 69 74 20 64 6f 65 73 20  format; it does 
15410 6e 6f 74 20 68 61 76 65 20 74 6f 20 62 65 20 63  not have to be c
15420 72 6f 73 73 2d 70 6c 61 74 66 6f 72 6d 2e 0a 48  ross-platform..H
15430 65 6e 63 65 2c 20 75 6e 6c 69 6b 65 20 74 68 65  ence, unlike the
15440 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 57 41   database and WA
15450 4c 20 66 69 6c 65 20 66 6f 72 6d 61 74 73 20 77  L file formats w
15460 68 69 63 68 20 73 74 6f 72 65 20 61 6c 6c 20 76  hich store all v
15470 61 6c 75 65 73 0a 61 73 20 62 69 67 20 65 6e 64  alues.as big end
15480 69 61 6e 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64  ian, the wal-ind
15490 65 78 20 73 74 6f 72 65 73 20 6d 75 6c 74 69 2d  ex stores multi-
154a0 62 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74  byte values in t
154b0 68 65 20 6e 61 74 69 76 65 0a 62 79 74 65 20 6f  he native.byte o
154c0 72 64 65 72 20 6f 66 20 74 68 65 20 68 6f 73 74  rder of the host
154d0 20 63 6f 6d 70 75 74 65 72 2e 3c 2f 70 3e 0a 0a   computer.</p>..
154e0 3c 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e 74  <p>This document
154f0 20 69 73 20 63 6f 6e 63 65 72 6e 65 64 20 77 69   is concerned wi
15500 74 68 20 74 68 65 20 70 65 72 73 69 73 74 65 6e  th the persisten
15510 74 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64  t state of the d
15520 61 74 61 62 61 73 65 0a 66 69 6c 65 2c 20 61 6e  atabase.file, an
15530 64 20 73 69 6e 63 65 20 74 68 65 20 77 61 6c 2d  d since the wal-
15540 69 6e 64 65 78 20 69 73 20 61 20 74 72 61 6e 73  index is a trans
15550 69 65 6e 74 20 73 74 72 75 63 74 75 72 65 2c 20  ient structure, 
15560 6e 6f 20 66 75 72 74 68 65 72 20 0a 69 6e 66 6f  no further .info
15570 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
15580 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
15590 77 61 6c 2d 69 6e 64 65 78 20 77 69 6c 6c 20 62  wal-index will b
155a0 65 20 70 72 6f 76 69 64 65 64 20 68 65 72 65 2e  e provided here.
155b0 0a 43 6f 6d 70 6c 65 74 65 20 64 65 74 61 69 6c  .Complete detail
155c0 73 20 6f 6e 20 74 68 65 20 66 6f 72 6d 61 74 20  s on the format 
155d0 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  of the wal-index
155e0 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
155f0 69 74 68 69 6e 0a 63 6f 6d 6d 65 6e 74 73 20 69  ithin.comments i
15600 6e 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65 20  n SQLite source 
15610 63 6f 64 65 2e 3c 2f 70 3e 0a                    code.</p>.