Documentation Source Text

Hex Artifact Content
Login

Artifact b3873b27ae612e9fac84bbc32b6ac6e174e3b7e7:


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 20 69 73 0a 61 74 20 6f 66 66   value is.at off
1ec0: 73 65 74 20 31 36 20 69 73 20 30 78 30 30 20 30  set 16 is 0x00 0
1ed0: 78 30 31 2e 0a 54 68 69 73 20 76 61 6c 75 65 20  x01..This value 
1ee0: 63 61 6e 20 62 65 20 69 6e 74 65 72 70 72 65 74  can be interpret
1ef0: 65 64 20 61 73 20 61 20 62 69 67 2d 65 6e 64 69  ed as a big-endi
1f00: 61 6e 0a 31 20 61 6e 64 20 74 68 6f 75 67 68 74  an.1 and thought
1f10: 20 6f 66 20 69 73 20 61 73 20 61 20 6d 61 67 69   of is as a magi
1f20: 63 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 70 72  c number to repr
1f30: 65 73 65 6e 74 20 74 68 65 20 36 35 35 33 36 20  esent the 65536 
1f40: 70 61 67 65 20 73 69 7a 65 2e 0a 4f 72 20 6f 6e  page size..Or on
1f50: 65 20 63 61 6e 20 76 69 65 77 20 74 68 65 20 74  e can view the t
1f60: 77 6f 2d 62 79 74 65 20 66 69 65 6c 64 20 61 73  wo-byte field as
1f70: 20 61 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e   a little endian
1f80: 20 6e 75 6d 62 65 72 20 61 6e 64 20 73 61 79 0a   number and say.
1f90: 74 68 61 74 20 69 74 20 72 65 70 72 65 73 65 6e  that it represen
1fa0: 74 73 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  ts the page size
1fb0: 20 64 69 76 69 64 65 64 20 62 79 20 32 35 36 2e   divided by 256.
1fc0: 20 20 54 68 65 73 65 20 74 77 6f 20 0a 69 6e 74    These two .int
1fd0: 65 72 70 72 65 74 61 74 69 6f 6e 73 20 6f 66 20  erpretations of 
1fe0: 74 68 65 20 70 61 67 65 2d 73 69 7a 65 20 66 69  the page-size fi
1ff0: 65 6c 64 20 61 72 65 20 65 71 75 69 76 61 6c 65  eld are equivale
2000: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32  nt.</p>..<h4>1.2
2010: 2e 33 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 76  .3 File format v
2020: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f  ersion numbers</
2030: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65  h4>..<p>The file
2040: 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76 65   format write ve
2050: 72 73 69 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66  rsion and file f
2060: 6f 72 6d 61 74 20 72 65 61 64 20 76 65 72 73 69  ormat read versi
2070: 6f 6e 20 61 74 20 6f 66 66 73 65 74 73 0a 31 38  on at offsets.18
2080: 20 61 6e 64 20 31 39 20 61 72 65 20 69 6e 74 65   and 19 are inte
2090: 6e 64 65 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f  nded to allow fo
20a0: 72 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f  r enhancements o
20b0: 66 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61  f the file forma
20c0: 74 0a 69 6e 20 66 75 74 75 72 65 20 76 65 72 73  t.in future vers
20d0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 20  ions of SQLite. 
20e0: 20 49 6e 20 63 75 72 72 65 6e 74 20 76 65 72 73   In current vers
20f0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20  ions of SQLite, 
2100: 62 6f 74 68 20 6f 66 0a 74 68 65 73 65 20 76 61  both of.these va
2110: 6c 75 65 73 20 61 72 65 20 31 20 66 6f 72 20 72  lues are 1 for r
2120: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c  ollback journall
2130: 69 6e 67 20 6d 6f 64 65 73 20 61 6e 64 20 32 20  ing modes and 2 
2140: 66 6f 72 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61  for [WAL].journa
2150: 6c 6c 69 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20  lling mode.  If 
2160: 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  a version of SQL
2170: 69 74 65 20 63 6f 64 65 64 20 74 6f 20 74 68 65  ite coded to the
2180: 20 63 75 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f   current.file fo
2190: 72 6d 61 74 20 73 70 65 63 69 66 69 63 61 74 69  rmat specificati
21a0: 6f 6e 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 20  on encounters a 
21b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68  database file wh
21c0: 65 72 65 20 74 68 65 20 72 65 61 64 0a 76 65 72  ere the read.ver
21d0: 73 69 6f 6e 20 69 73 20 31 20 6f 72 20 32 20 62  sion is 1 or 2 b
21e0: 75 74 20 74 68 65 20 77 72 69 74 65 20 76 65 72  ut the write ver
21f0: 73 69 6f 6e 20 69 73 20 67 72 65 61 74 65 72 20  sion is greater 
2200: 74 68 61 6e 20 32 2c 20 74 68 65 6e 20 74 68 65  than 2, then the
2210: 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 6d   database.file m
2220: 75 73 74 20 62 65 20 74 72 65 61 74 65 64 20 61  ust be treated a
2230: 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66  s read-only.  If
2240: 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
2250: 20 77 69 74 68 20 61 20 72 65 61 64 20 76 65 72   with a read ver
2260: 73 69 6f 6e 0a 67 72 65 61 74 65 72 20 74 68 61  sion.greater tha
2270: 6e 20 32 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  n 2 is encounter
2280: 2c 20 74 68 65 6e 20 74 68 61 74 20 64 61 74 61  , then that data
2290: 62 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20 72  base cannot be r
22a0: 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c  ead or written.<
22b0: 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 34 20 52  /p>..<h4>1.2.4 R
22c0: 65 73 65 72 76 65 64 20 62 79 74 65 73 20 70 65  eserved bytes pe
22d0: 72 20 70 61 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e  r page</h4>..<p>
22e0: 53 51 4c 69 74 65 20 68 61 73 20 74 68 65 20 61  SQLite has the a
22f0: 62 69 6c 69 74 79 20 74 6f 20 73 65 74 20 61 73  bility to set as
2300: 69 64 65 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62  ide a small numb
2310: 65 72 20 6f 66 20 65 78 74 72 61 20 62 79 74 65  er of extra byte
2320: 73 20 61 74 0a 74 68 65 20 65 6e 64 20 6f 66 20  s at.the end of 
2330: 65 76 65 72 79 20 70 61 67 65 20 66 6f 72 20 75  every page for u
2340: 73 65 20 62 79 20 65 78 74 65 6e 73 69 6f 6e 73  se by extensions
2350: 2e 20 20 54 68 65 73 65 20 65 78 74 72 61 20 62  .  These extra b
2360: 79 74 65 73 20 61 72 65 0a 75 73 65 64 2c 20 66  ytes are.used, f
2370: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 62 79 20 74  or example, by t
2380: 68 65 20 53 51 4c 69 74 65 20 45 6e 63 72 79 70  he SQLite Encryp
2390: 74 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74  tion Extension t
23a0: 6f 20 73 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a  o store a nonce.
23b0: 61 6e 64 2f 6f 72 20 63 72 79 70 74 6f 67 72 61  and/or cryptogra
23c0: 70 68 69 63 20 63 68 65 63 6b 73 75 6d 20 61 73  phic checksum as
23d0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 65 61  sociated with ea
23e0: 63 68 20 70 61 67 65 2e 20 20 5e 54 68 65 20 0a  ch page.  ^The .
23f0: 22 72 65 73 65 72 76 65 64 20 73 70 61 63 65 22  "reserved space"
2400: 20 73 69 7a 65 20 69 6e 20 74 68 65 20 31 2d 62   size in the 1-b
2410: 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  yte integer at o
2420: 66 66 73 65 74 20 32 30 20 69 73 20 74 68 65 20  ffset 20 is the 
2430: 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20  number.of bytes 
2440: 6f 66 20 73 70 61 63 65 20 61 74 20 74 68 65 20  of space at the 
2450: 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65  end of each page
2460: 20 74 6f 20 72 65 73 65 72 76 65 20 66 6f 72 20   to reserve for 
2470: 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73  extensions..This
2480: 20 76 61 6c 75 65 20 69 73 20 75 73 75 61 6c 6c   value is usuall
2490: 79 20 30 2e 20 20 54 68 65 20 76 61 6c 75 65 20  y 0.  The value 
24a0: 63 61 6e 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a  can be odd.</p>.
24b0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
24c0: 74 20 75 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75  t usable_size {u
24d0: 73 61 62 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c  sable size}</tcl
24e0: 3e 0a 3c 70 3e 54 68 65 20 22 75 73 61 62 6c 65  >.<p>The "usable
24f0: 20 73 69 7a 65 22 20 6f 66 20 61 20 64 61 74 61   size" of a data
2500: 62 61 73 65 20 70 61 67 65 20 69 73 20 74 68 65  base page is the
2510: 20 70 61 67 65 20 73 69 7a 65 20 73 70 65 63 69   page size speci
2520: 66 79 20 62 79 20 74 68 65 0a 32 2d 62 79 74 65  fy by the.2-byte
2530: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
2540: 65 74 20 31 36 20 69 6e 20 74 68 65 20 68 65 61  et 16 in the hea
2550: 64 65 72 20 6c 65 73 73 20 74 68 65 20 22 72 65  der less the "re
2560: 73 65 72 76 65 64 22 20 73 70 61 63 65 20 73 69  served" space si
2570: 7a 65 0a 72 65 63 6f 72 64 65 64 20 69 6e 20 74  ze.recorded in t
2580: 68 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65  he 1-byte intege
2590: 72 20 61 74 20 6f 66 66 73 65 74 20 32 30 20 69  r at offset 20 i
25a0: 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54  n the header.  T
25b0: 68 65 20 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f  he usable.size o
25c0: 66 20 61 20 70 61 67 65 20 6d 69 67 68 74 20 62  f a page might b
25d0: 65 20 61 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e  e an odd number.
25e0: 20 20 5e 28 48 6f 77 65 76 65 72 2c 20 74 68 65    ^(However, the
25f0: 20 75 73 61 62 6c 65 20 73 69 7a 65 20 69 73 20   usable size is 
2600: 6e 6f 74 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62  not.allowed to b
2610: 65 20 6c 65 73 73 20 74 68 61 6e 20 34 38 30 2e  e less than 480.
2620: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
2630: 2c 20 69 66 20 74 68 65 20 70 61 67 65 20 73 69  , if the page si
2640: 7a 65 20 69 73 20 35 31 32 2c 0a 74 68 65 6e 20  ze is 512,.then 
2650: 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61  the reserved spa
2660: 63 65 20 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65  ce size cannot e
2670: 78 63 65 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a  xceed 32.)^</p>.
2680: 0a 3c 68 34 3e 31 2e 32 2e 35 20 50 61 79 6c 6f  .<h4>1.2.5 Paylo
2690: 61 64 20 66 72 61 63 74 69 6f 6e 73 3c 2f 68 34  ad fractions</h4
26a0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d  >..<p>^The maxim
26b0: 75 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20 65  um and minimum e
26c0: 6d 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20  mbedded payload 
26d0: 66 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74 68  fractions and th
26e0: 65 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20 66  e leaf.payload f
26f0: 72 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20 6d  raction values m
2700: 75 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20 61  ust be 64, 32, a
2710: 6e 64 20 33 32 2e 20 20 54 68 65 73 65 20 76 61  nd 32.  These va
2720: 6c 75 65 73 20 77 65 72 65 0a 6f 72 69 67 69 6e  lues were.origin
2730: 61 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f  ally intended to
2740: 20 61 73 20 74 75 6e 61 62 6c 65 20 70 61 72 61   as tunable para
2750: 6d 65 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c  meters that coul
2760: 64 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64  d be used to.mod
2770: 69 66 79 20 74 68 65 20 73 74 6f 72 61 67 65 20  ify the storage 
2780: 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d  format of the b-
2790: 74 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20  tree algorithm. 
27a0: 20 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66   However, that.f
27b0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
27c0: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e  not supported an
27d0: 64 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63  d there are no c
27e0: 75 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20  urrent plans to 
27f0: 61 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74  add.support in t
2800: 68 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63  he future.  Henc
2810: 65 2c 20 74 68 65 73 65 20 74 68 72 65 65 20 62  e, these three b
2820: 79 74 65 73 20 61 72 65 20 66 69 78 65 64 20 61  ytes are fixed a
2830: 74 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65  t the.values spe
2840: 63 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 34  cified.</p>..<h4
2850: 3e 31 2e 32 2e 36 20 46 69 6c 65 20 63 68 61 6e  >1.2.6 File chan
2860: 67 65 20 63 6f 75 6e 74 65 72 3c 2f 68 34 3e 0a  ge counter</h4>.
2870: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
2880: 74 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e 67  t chngctr {chang
2890: 65 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c 3e  e counter}</tcl>
28a0: 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63 68  .<p>^The file ch
28b0: 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
28c0: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
28d0: 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63  ian integer whic
28e0: 68 20 69 73 0a 69 6e 63 72 65 6d 65 6e 74 65 64  h is.incremented
28f0: 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
2900: 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 75  tabase file is u
2910: 6e 6c 6f 63 6b 65 64 20 61 66 74 65 72 20 68 61  nlocked after ha
2920: 76 69 6e 67 0a 62 65 65 6e 20 6d 6f 64 69 66 69  ving.been modifi
2930: 65 64 2e 0a 57 68 65 6e 20 74 77 6f 20 6f 72 20  ed..When two or 
2940: 6d 6f 72 65 20 70 72 6f 63 65 73 73 65 73 20 61  more processes a
2950: 72 65 20 72 65 61 64 69 6e 67 20 74 68 65 20 73  re reading the s
2960: 61 6d 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ame database fil
2970: 65 2c 20 65 61 63 68 20 0a 70 72 6f 63 65 73 73  e, each .process
2980: 20 63 61 6e 20 64 65 74 65 63 74 20 64 61 74 61   can detect data
2990: 62 61 73 65 20 63 68 61 6e 67 65 73 20 66 72 6f  base changes fro
29a0: 6d 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65  m other processe
29b0: 73 20 62 79 20 6d 6f 6e 69 74 6f 72 69 6e 67 20  s by monitoring 
29c0: 0a 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e  .the change coun
29d0: 74 65 72 2e 0a 41 20 70 72 6f 63 65 73 73 20 77  ter..A process w
29e0: 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ill normally wan
29f0: 74 20 74 6f 20 66 6c 75 73 68 20 69 74 73 20 64  t to flush its d
2a00: 61 74 61 62 61 73 65 20 70 61 67 65 20 63 61 63  atabase page cac
2a10: 68 65 20 77 68 65 6e 0a 61 6e 6f 74 68 65 72 20  he when.another 
2a20: 70 72 6f 63 65 73 73 20 6d 6f 64 69 66 69 65 64  process modified
2a30: 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 73   the database, s
2a40: 69 6e 63 65 20 74 68 65 20 63 61 63 68 65 20 68  ince the cache h
2a50: 61 73 20 62 65 63 6f 6d 65 20 73 74 61 6c 65 2e  as become stale.
2a60: 0a 54 68 65 20 66 69 6c 65 20 63 68 61 6e 67 65  .The file change
2a70: 20 63 6f 75 6e 74 65 72 20 66 61 63 69 6c 69 74   counter facilit
2a80: 61 74 65 73 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a  ates this.</p>..
2a90: 3c 70 3e 49 6e 20 57 41 4c 20 6d 6f 64 65 2c 20  <p>In WAL mode, 
2aa0: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
2ab0: 61 74 61 62 61 73 65 20 61 72 65 20 64 65 74 65  atabase are dete
2ac0: 63 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 77  cted using the w
2ad0: 61 6c 2d 69 6e 64 65 78 0a 61 6e 64 20 73 6f 20  al-index.and so 
2ae0: 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
2af0: 65 72 20 69 73 20 6e 6f 74 20 6e 65 65 64 65 64  er is not needed
2b00: 2e 20 20 48 65 6e 63 65 2c 20 74 68 65 20 63 68  .  Hence, the ch
2b10: 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 6d 69 67  ange counter mig
2b20: 68 74 0a 6e 6f 74 20 62 65 20 69 6e 63 72 65 6d  ht.not be increm
2b30: 65 6e 74 65 64 20 6f 6e 20 65 61 63 68 20 74 72  ented on each tr
2b40: 61 6e 73 61 63 74 69 6f 6e 20 69 6e 20 57 41 4c  ansaction in WAL
2b50: 20 6d 6f 64 65 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e   mode.</p>..<h4>
2b60: 31 2e 32 2e 37 20 49 6e 2d 68 65 61 64 65 72 20  1.2.7 In-header 
2b70: 64 61 74 61 62 61 73 65 20 73 69 7a 65 3c 2f 68  database size</h
2b80: 34 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  4>..<tcl>hd_frag
2b90: 6d 65 6e 74 20 66 69 6c 65 73 69 7a 65 20 7b 69  ment filesize {i
2ba0: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2bb0: 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70  e size}</tcl>.<p
2bc0: 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  >^The 4-byte big
2bd0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
2be0: 61 74 20 6f 66 66 73 65 74 20 32 38 20 69 6e 74  at offset 28 int
2bf0: 6f 20 74 68 65 20 68 65 61 64 65 72 20 0a 73 74  o the header .st
2c00: 6f 72 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66  ores the size of
2c10: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2c20: 6c 65 20 69 6e 20 70 61 67 65 73 2e 20 20 5e 49  le in pages.  ^I
2c30: 66 20 74 68 69 73 20 69 6e 2d 68 65 61 64 65 72  f this in-header
2c40: 0a 64 61 74 61 73 69 7a 65 20 73 69 7a 65 20 69  .datasize size i
2c50: 73 20 6e 6f 74 20 76 61 6c 69 64 20 28 73 65 65  s not valid (see
2c60: 20 74 68 65 20 6e 65 78 74 20 70 61 72 61 67 72   the next paragr
2c70: 61 70 68 29 2c 20 74 68 65 6e 20 74 68 65 20 64  aph), then the d
2c80: 61 74 61 62 61 73 65 20 0a 73 69 7a 65 20 69 73  atabase .size is
2c90: 20 63 6f 6d 70 75 74 65 64 20 62 79 20 6c 6f 6f   computed by loo
2ca0: 6b 69 6e 67 0a 61 74 20 74 68 65 20 61 63 74 75  king.at the actu
2cb0: 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  al size of the d
2cc0: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 4f 6c  atabase file. Ol
2cd0: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
2ce0: 53 51 4c 69 74 65 0a 69 67 6e 6f 72 65 64 20 74  SQLite.ignored t
2cf0: 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74  he in-header dat
2d00: 61 62 61 73 65 20 73 69 7a 65 20 61 6e 64 20 75  abase size and u
2d10: 73 65 64 20 74 68 65 20 61 63 74 75 61 6c 20 66  sed the actual f
2d20: 69 6c 65 20 73 69 7a 65 0a 65 78 63 6c 75 73 69  ile size.exclusi
2d30: 76 65 6c 79 2e 20 20 5e 4e 65 77 65 72 20 76 65  vely.  ^Newer ve
2d40: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
2d50: 20 75 73 65 20 74 68 65 20 69 6e 2d 68 65 61 64   use the in-head
2d60: 65 72 20 64 61 74 61 62 61 73 65 0a 73 69 7a 65  er database.size
2d70: 20 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61   if it is availa
2d80: 62 6c 65 20 62 75 74 20 66 61 6c 6c 20 62 61 63  ble but fall bac
2d90: 6b 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20  k to the actual 
2da0: 66 69 6c 65 20 73 69 7a 65 20 69 66 0a 74 68 65  file size if.the
2db0: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2dc0: 61 73 65 20 73 69 7a 65 20 69 73 20 6e 6f 74 20  ase size is not 
2dd0: 76 61 6c 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  valid.</p>..<p>^
2de0: 54 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  The in-header da
2df0: 74 61 62 61 73 65 20 73 69 7a 65 20 69 73 20 6f  tabase size is o
2e00: 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65 64 20 74  nly considered t
2e10: 6f 20 62 65 20 76 61 6c 69 64 20 69 66 0a 69 74  o be valid if.it
2e20: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64   is non-zero and
2e30: 20 69 66 20 74 68 65 20 34 2d 62 79 74 65 20 5b   if the 4-byte [
2e40: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 20  change counter] 
2e50: 61 74 20 6f 66 66 73 65 74 20 32 34 0a 65 78 61  at offset 24.exa
2e60: 63 74 6c 79 20 6d 61 74 63 68 65 73 20 74 68 65  ctly matches the
2e70: 20 34 2d 62 79 74 65 20 5b 76 65 72 73 69 6f 6e   4-byte [version
2e80: 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65  -valid-for numbe
2e90: 72 5d 20 61 74 20 6f 66 66 73 65 74 20 39 32 2e  r] at offset 92.
2ea0: 0a 5e 28 54 68 65 20 69 6e 2d 68 65 61 64 65 72  .^(The in-header
2eb0: 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 69   database size i
2ec0: 73 20 61 6c 77 61 79 73 20 76 61 6c 69 64 20 0a  s always valid .
2ed0: 77 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  when the databas
2ee0: 65 20 69 73 20 6f 6e 6c 79 20 6d 6f 64 69 66 69  e is only modifi
2ef0: 65 64 20 75 73 69 6e 67 20 72 65 63 65 6e 74 20  ed using recent 
2f00: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
2f10: 74 65 0a 28 76 65 72 73 69 6f 6e 73 20 33 2e 37  te.(versions 3.7
2f20: 2e 30 20 61 6e 64 20 6c 61 74 65 72 29 2e 29 5e  .0 and later).)^
2f30: 0a 49 66 20 61 20 6c 65 67 61 63 79 20 76 65 72  .If a legacy ver
2f40: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 77  sion of SQLite w
2f50: 72 69 74 65 73 20 74 6f 20 74 68 65 20 64 61 74  rites to the dat
2f60: 61 62 61 73 65 2c 20 69 74 20 77 69 6c 6c 20 6e  abase, it will n
2f70: 6f 74 0a 6b 6e 6f 77 20 74 6f 20 75 70 64 61 74  ot.know to updat
2f80: 65 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20  e the in-header 
2f90: 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 61 6e  database size an
2fa0: 64 20 73 6f 20 74 68 65 20 69 6e 2d 68 65 61 64  d so the in-head
2fb0: 65 72 0a 64 61 74 61 62 61 73 65 20 73 69 7a 65  er.database size
2fc0: 20 63 6f 75 6c 64 20 62 65 20 69 6e 63 6f 72 72   could be incorr
2fd0: 65 63 74 2e 20 20 42 75 74 20 6c 65 67 61 63 79  ect.  But legacy
2fe0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
2ff0: 69 74 65 0a 77 69 6c 6c 20 61 6c 73 6f 20 6c 65  ite.will also le
3000: 61 76 65 20 74 68 65 20 76 65 72 73 69 6f 6e 2d  ave the version-
3010: 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72  valid-for number
3020: 20 61 74 20 6f 66 66 73 65 74 20 39 32 20 75 6e   at offset 92 un
3030: 63 68 61 6e 67 65 64 0a 73 6f 20 69 74 20 77 69  changed.so it wi
3040: 6c 6c 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65  ll not match the
3050: 20 63 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72 2e   change-counter.
3060: 20 20 48 65 6e 63 65 2c 20 69 6e 76 61 6c 69 64    Hence, invalid
3070: 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61 62   in-header.datab
3080: 61 73 65 20 73 69 7a 65 73 20 63 61 6e 20 62 65  ase sizes can be
3090: 20 64 65 74 65 63 74 65 64 20 28 61 6e 64 20 69   detected (and i
30a0: 67 6e 6f 72 65 64 29 20 62 79 20 6f 62 73 65 72  gnored) by obser
30b0: 76 69 6e 67 20 77 68 65 6e 0a 74 68 65 20 63 68  ving when.the ch
30c0: 61 6e 67 65 2d 63 6f 75 6e 74 65 72 20 64 6f 65  ange-counter doe
30d0: 73 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65 20  s not match the 
30e0: 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f  version-valid-fo
30f0: 72 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c  r number.</p>..<
3100: 68 34 3e 31 2e 32 2e 38 20 46 72 65 65 20 70 61  h4>1.2.8 Free pa
3110: 67 65 20 6c 69 73 74 3c 2f 68 34 3e 0a 0a 3c 70  ge list</h4>..<p
3120: 3e 55 6e 75 73 65 64 20 70 61 67 65 73 20 69 6e  >Unused pages in
3130: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
3140: 6c 65 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  le are stored on
3150: 20 61 20 66 72 65 65 6c 69 73 74 2e 20 20 5e 54   a freelist.  ^T
3160: 68 65 0a 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he.4-byte big-en
3170: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20  dian integer at 
3180: 6f 66 66 73 65 74 20 33 32 20 73 74 6f 72 65 73  offset 32 stores
3190: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
31a0: 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 70 61   of.the first pa
31b0: 67 65 20 6f 66 20 74 68 65 20 66 72 65 65 6c 69  ge of the freeli
31c0: 73 74 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74  st, or zero if t
31d0: 68 65 20 66 72 65 65 6c 69 73 74 20 69 73 20 65  he freelist is e
31e0: 6d 70 74 79 2e 0a 5e 54 68 65 20 34 2d 62 79 74  mpty..^The 4-byt
31f0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
3200: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 33  eger at offset 3
3210: 36 20 73 74 6f 72 65 73 20 73 74 6f 72 65 73 20  6 stores stores 
3220: 74 68 65 20 74 6f 74 61 6c 20 0a 6e 75 6d 62 65  the total .numbe
3230: 72 20 6f 66 20 70 61 67 65 73 20 6f 6e 20 74 68  r of pages on th
3240: 65 20 66 72 65 65 6c 69 73 74 2e 3c 2f 70 3e 0a  e freelist.</p>.
3250: 0a 3c 68 34 3e 31 2e 32 2e 39 20 53 63 68 65 6d  .<h4>1.2.9 Schem
3260: 61 20 63 6f 6f 6b 69 65 3c 2f 68 34 3e 0a 0a 3c  a cookie</h4>..<
3270: 70 3e 5e 54 68 65 20 73 63 68 65 6d 61 20 63 6f  p>^The schema co
3280: 6f 6b 69 65 20 69 73 20 61 20 34 2d 62 79 74 65  okie is a 4-byte
3290: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
32a0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 34 30  ger at offset 40
32b0: 0a 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65  .that is increme
32c0: 6e 74 65 64 20 77 68 65 6e 65 76 65 72 20 74 68  nted whenever th
32d0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
32e0: 61 20 63 68 61 6e 67 65 73 2e 20 20 41 20 0a 70  a changes.  A .p
32f0: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
3300: 74 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 61 67  t is compiled ag
3310: 61 69 6e 73 74 20 61 20 73 70 65 63 69 66 69 63  ainst a specific
3320: 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 0a   version of the.
3330: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
3340: 20 20 5e 57 68 65 6e 65 76 65 72 20 74 68 65 20    ^Whenever the 
3350: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
3360: 63 68 61 6e 67 65 73 2c 20 74 68 65 20 73 74 61  changes, the sta
3370: 74 65 6d 65 6e 74 0a 6d 75 73 74 20 62 65 20 72  tement.must be r
3380: 65 70 72 65 70 61 72 65 64 2e 20 20 5e 57 68 65  eprepared.  ^Whe
3390: 6e 65 76 65 72 20 61 20 70 72 65 70 61 72 65 64  never a prepared
33a0: 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c   statement runs,
33b0: 20 69 74 20 66 69 72 73 74 20 63 68 65 63 6b 73   it first checks
33c0: 0a 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b  .the schema cook
33d0: 69 65 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ie to make sure 
33e0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65  the value is the
33f0: 20 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68   same as when th
3400: 65 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20  e statement.was 
3410: 70 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20  prepared and if 
3420: 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
3430: 65 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74  e has changed, t
3440: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f  he statement abo
3450: 72 74 73 0a 69 6e 20 6f 72 64 65 72 20 74 6f 20  rts.in order to 
3460: 66 6f 72 63 65 20 74 68 65 20 73 74 61 74 65 6d  force the statem
3470: 65 6e 74 20 74 6f 20 62 65 20 72 65 70 72 65 70  ent to be reprep
3480: 61 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  ared.</p>..<tcl>
3490: 68 64 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68  hd_fragment {sch
34a0: 65 6d 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65  emaformat} {sche
34b0: 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72  ma format number
34c0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e  }</tcl>.<h4>1.2.
34d0: 31 30 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  10 Schema format
34e0: 20 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70   number</h4>..<p
34f0: 3e 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d  >The schema form
3500: 61 74 20 6e 75 6d 62 65 72 20 69 73 20 61 20 34  at number is a 4
3510: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
3520: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3530: 65 74 20 34 34 2e 0a 54 68 65 20 73 63 68 65 6d  et 44..The schem
3540: 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20  a format number 
3550: 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  is similar to th
3560: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65  e file format re
3570: 61 64 20 61 6e 64 20 77 72 69 74 65 0a 76 65 72  ad and write.ver
3580: 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74 20  sion numbers at 
3590: 6f 66 66 73 65 74 73 20 31 38 20 61 6e 64 20 31  offsets 18 and 1
35a0: 39 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  9 except that th
35b0: 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  e schema format 
35c0: 6e 75 6d 62 65 72 0a 72 65 66 65 72 73 20 74 6f  number.refers to
35d0: 20 74 68 65 20 68 69 67 68 2d 6c 65 76 65 6c 20   the high-level 
35e0: 53 51 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20 72  SQL formatting r
35f0: 61 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c  ather than the l
3600: 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 0a  ow-level b-tree.
3610: 66 6f 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f 75  formatting.  Fou
3620: 72 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  r schema format 
3630: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 75 72 72  numbers are curr
3640: 65 6e 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c 2f  ently defined:</
3650: 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c  p>..<ol>.<li val
3660: 75 65 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69 73  ue=1>Format 1 is
3670: 20 75 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 61   understood by a
3680: 6c 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  ll versions of S
3690: 51 4c 69 74 65 20 62 61 63 6b 20 74 6f 0a 76 65  QLite back to.ve
36a0: 72 73 69 6f 6e 20 33 2e 30 2e 30 2e 3c 2f 6c 69  rsion 3.0.0.</li
36b0: 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46 6f  >.<li value=2>Fo
36c0: 72 6d 61 74 20 32 20 61 64 64 73 20 74 68 65 20  rmat 2 adds the 
36d0: 61 62 69 6c 69 74 79 20 6f 66 20 72 6f 77 73 20  ability of rows 
36e0: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
36f0: 74 61 62 6c 65 0a 74 6f 20 68 61 76 65 20 61 20  table.to have a 
3700: 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 20 6f  varying number o
3710: 66 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f 72  f columns, in or
3720: 64 65 72 20 74 6f 20 73 75 70 70 6f 72 74 20 74  der to support t
3730: 68 65 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 20  he.[ALTER TABLE 
3740: 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e  | ALTER TABLE ..
3750: 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66 75  . ADD COLUMN] fu
3760: 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53 75  nctionality.  Su
3770: 70 70 6f 72 74 20 66 6f 72 0a 72 65 61 64 69 6e  pport for.readin
3780: 67 20 61 6e 64 20 77 72 69 74 69 6e 67 20 66 6f  g and writing fo
3790: 72 6d 61 74 20 32 20 77 61 73 20 61 64 64 65 64  rmat 2 was added
37a0: 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69   in SQLite versi
37b0: 6f 6e 20 33 2e 31 2e 33 20 0a 6f 6e 20 32 30 30  on 3.1.3 .on 200
37c0: 35 2d 30 32 2d 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c  5-02-19.</li>.<l
37d0: 69 20 76 61 6c 75 65 3d 33 3e 46 6f 72 6d 61 74  i value=3>Format
37e0: 20 33 20 61 64 64 73 20 74 68 65 20 61 62 69 6c   3 adds the abil
37f0: 69 74 79 20 6f 66 20 65 78 74 72 61 20 63 6f 6c  ity of extra col
3800: 75 6d 6e 73 20 61 64 64 65 64 20 62 79 0a 5b 41  umns added by.[A
3810: 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54  LTER TABLE | ALT
3820: 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44  ER TABLE ... ADD
3830: 20 43 4f 4c 55 4d 4e 5d 20 74 6f 20 68 61 76 65   COLUMN] to have
3840: 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c   non-NULL defaul
3850: 74 0a 76 61 6c 75 65 73 2e 20 20 54 68 69 73 20  t.values.  This 
3860: 63 61 70 61 62 69 6c 69 74 79 20 77 61 73 20 61  capability was a
3870: 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20 76  dded in SQLite v
3880: 65 72 73 69 6f 6e 20 33 2e 31 2e 34 20 0a 6f 6e  ersion 3.1.4 .on
3890: 20 32 30 30 35 2d 30 33 2d 31 31 2e 3c 2f 6c 69   2005-03-11.</li
38a0: 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 34 3e 5e 46  >.<li value=4>^F
38b0: 6f 72 6d 61 74 20 34 20 63 61 75 73 65 73 20 53  ormat 4 causes S
38c0: 51 4c 69 74 65 20 74 6f 20 72 65 73 70 65 63 74  QLite to respect
38d0: 20 74 68 65 0a 5b 64 65 73 63 65 6e 64 69 6e 67   the.[descending
38e0: 20 69 6e 64 69 63 65 73 20 7c 20 44 45 53 43 20   indices | DESC 
38f0: 6b 65 79 77 6f 72 64 5d 20 6f 6e 0a 69 6e 64 65  keyword] on.inde
3900: 78 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20  x declarations. 
3910: 20 28 5e 54 68 65 20 44 45 53 43 20 6b 65 79 77   (^The DESC keyw
3920: 6f 72 64 20 69 73 20 69 67 6e 6f 72 65 64 20 69  ord is ignored i
3930: 6e 20 69 6e 64 69 63 65 73 20 66 6f 72 20 0a 66  n indices for .f
3940: 6f 72 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e 64  ormats 1, 2, and
3950: 20 33 2e 29 0a 5e 46 6f 72 6d 61 74 20 34 20 61   3.).^Format 4 a
3960: 6c 73 6f 20 61 64 64 73 20 74 77 6f 20 6e 65 77  lso adds two new
3970: 20 62 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64 20   boolean record 
3980: 74 79 70 65 20 76 61 6c 75 65 73 20 28 5b 73 65  type values ([se
3990: 72 69 61 6c 20 74 79 70 65 73 5d 0a 38 20 61 6e  rial types].8 an
39a0: 64 20 39 2e 29 20 20 53 75 70 70 6f 72 74 20 66  d 9.)  Support f
39b0: 6f 72 20 66 6f 72 6d 61 74 20 34 20 77 61 73 20  or format 4 was 
39c0: 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  added in SQLite 
39d0: 33 2e 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30 31  3.3.0 on.2006-01
39e0: 2d 31 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  -10.</li>.</ol>.
39f0: 0a 3c 70 3e 5e 4e 65 77 20 64 61 74 61 62 61 73  .<p>^New databas
3a00: 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20  e files created 
3a10: 62 79 20 53 51 4c 69 74 65 20 75 73 65 20 66 6f  by SQLite use fo
3a20: 72 6d 61 74 20 34 20 62 79 20 64 65 66 61 75 6c  rmat 4 by defaul
3a30: 74 2e 0a 5e 54 68 65 20 5b 6c 65 67 61 63 79 5f  t..^The [legacy_
3a40: 66 69 6c 65 5f 66 6f 72 6d 61 74 20 70 72 61 67  file_format prag
3a50: 6d 61 5d 20 63 61 6e 20 62 65 20 75 73 65 64 20  ma] can be used 
3a60: 74 6f 20 63 61 75 73 65 20 53 51 4c 69 74 65 0a  to cause SQLite.
3a70: 74 6f 20 63 72 65 61 74 65 20 6e 65 77 20 64 61  to create new da
3a80: 74 61 62 61 73 65 20 66 69 6c 65 73 20 75 73 69  tabase files usi
3a90: 6e 67 20 66 6f 72 6d 61 74 20 31 2e 0a 54 68 65  ng format 1..The
3aa0: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
3ab0: 6e 75 6d 62 65 72 20 63 61 6e 20 62 65 20 6d 61  number can be ma
3ac0: 64 65 20 74 6f 20 64 65 66 61 75 6c 74 20 74 6f  de to default to
3ad0: 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20 34 20   1 instead of 4 
3ae0: 62 79 0a 73 65 74 74 69 6e 67 20 5b 53 51 4c 49  by.setting [SQLI
3af0: 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f  TE_DEFAULT_FILE_
3b00: 46 4f 52 4d 41 54 5d 3d 31 20 61 74 20 63 6f 6d  FORMAT]=1 at com
3b10: 70 69 6c 65 2d 74 69 6d 65 2e 0a 3c 2f 70 3e 0a  pile-time..</p>.
3b20: 0a 3c 68 34 3e 31 2e 32 2e 31 31 20 53 75 67 67  .<h4>1.2.11 Sugg
3b30: 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65  ested cache size
3b40: 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d  </h4>..<p>The 4-
3b50: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3b60: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61  signed integer a
3b70: 74 20 6f 66 66 73 65 74 20 34 38 20 69 73 20 74  t offset 48 is t
3b80: 68 65 20 73 75 67 67 65 73 74 65 64 0a 63 61 63  he suggested.cac
3b90: 68 65 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73  he size in pages
3ba0: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
3bb0: 65 20 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c  e file.  The val
3bc0: 75 65 20 69 73 20 61 20 73 75 67 67 65 73 74 69  ue is a suggesti
3bd0: 6f 6e 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69  on.only and SQLi
3be0: 74 65 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f  te is under no o
3bf0: 62 6c 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e  bligation to hon
3c00: 6f 72 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f  or it.  The abso
3c10: 6c 75 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68  lute value.of th
3c20: 65 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 65  e integer is use
3c30: 64 20 61 73 20 74 68 65 20 73 75 67 67 65 73 74  d as the suggest
3c40: 65 64 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75  ed size.  The su
3c50: 67 67 65 73 74 65 64 20 63 61 63 68 65 20 73 69  ggested cache si
3c60: 7a 65 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73  ze.can be set us
3c70: 69 6e 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74  ing the [default
3c80: 5f 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67  _cache_size prag
3c90: 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  ma].</p>..<h4>1.
3ca0: 32 2e 31 32 20 49 6e 63 72 65 6d 65 6e 74 61 6c  2.12 Incremental
3cb0: 20 76 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73   vacuum settings
3cc0: 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 74 77  </h4>..<p>The tw
3cd0: 6f 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  o 4-byte big-end
3ce0: 69 61 6e 20 69 6e 74 65 67 65 72 73 20 61 74 20  ian integers at 
3cf0: 6f 66 66 73 65 74 73 20 35 32 20 61 6e 64 20 36  offsets 52 and 6
3d00: 34 20 61 72 65 20 75 73 65 64 0a 74 6f 20 6d 61  4 are used.to ma
3d10: 6e 61 67 65 20 74 68 65 20 5b 61 75 74 6f 5f 76  nage the [auto_v
3d20: 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72  acuum] and [incr
3d30: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20  emental_vacuum] 
3d40: 6d 6f 64 65 73 2e 20 20 5e 49 66 0a 74 68 65 20  modes.  ^If.the 
3d50: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3d60: 74 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65  t 52 is zero the
3d70: 6e 20 70 6f 69 6e 74 65 72 2d 6d 61 70 20 28 70  n pointer-map (p
3d80: 74 72 6d 61 70 29 20 70 61 67 65 73 20 61 72 65  trmap) pages are
3d90: 0a 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68  .omitted from th
3da0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
3db0: 61 6e 64 20 6e 65 69 74 68 65 72 20 61 75 74 6f  and neither auto
3dc0: 5f 76 61 63 75 75 6d 20 6e 6f 72 0a 69 6e 63 72  _vacuum nor.incr
3dd0: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61  emental_vacuum a
3de0: 72 65 20 73 75 70 70 6f 72 74 65 64 2e 20 20 5e  re supported.  ^
3df0: 49 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  If the integer a
3e00: 74 20 6f 66 66 73 65 74 20 35 32 20 69 73 0a 6e  t offset 52 is.n
3e10: 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20 69 74 20  on-zero then it 
3e20: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
3e30: 65 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  er of the larges
3e40: 74 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  t root page in t
3e50: 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  he.database file
3e60: 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  , the database f
3e70: 69 6c 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e  ile will contain
3e80: 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61   ptrmap pages, a
3e90: 6e 64 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74  nd the.mode must
3ea0: 20 62 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f   be either auto_
3eb0: 76 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d  vacuum or increm
3ec0: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 5e  ental_vacuum.  ^
3ed0: 49 6e 20 74 68 69 73 20 6c 61 74 74 65 72 0a 63  In this latter.c
3ee0: 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67 65 72  ase, the integer
3ef0: 20 61 74 20 6f 66 66 73 65 74 20 36 34 20 69 73   at offset 64 is
3f00: 20 74 72 75 65 20 66 6f 72 20 69 6e 63 72 65 6d   true for increm
3f10: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64  ental_vacuum and
3f20: 0a 66 61 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f  .false for auto_
3f30: 76 61 63 75 75 6d 2e 20 20 5e 49 66 20 74 68 65  vacuum.  ^If the
3f40: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
3f50: 65 74 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68  et 52 is zero th
3f60: 65 6e 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61  en.the integer a
3f70: 74 20 6f 66 66 73 65 74 20 36 34 20 6d 75 73 74  t offset 64 must
3f80: 20 61 6c 73 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f   also be zero.</
3f90: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 33 20 54  p>..<h4>1.2.13 T
3fa0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 3c 2f 68 34  ext encoding</h4
3fb0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
3fc0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
3fd0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35  eger at offset 5
3fe0: 36 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  6 determines the
3ff0: 20 65 6e 63 6f 64 69 6e 67 0a 75 73 65 64 20 66   encoding.used f
4000: 6f 72 20 61 6c 6c 20 74 65 78 74 20 73 74 72 69  or all text stri
4010: 6e 67 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ngs stored in th
4020: 65 20 64 61 74 61 62 61 73 65 2e 20 20 5e 41 20  e database.  ^A 
4030: 76 61 6c 75 65 20 6f 66 20 31 20 6d 65 61 6e 73  value of 1 means
4040: 0a 55 54 46 2d 38 2e 20 20 5e 41 20 76 61 6c 75  .UTF-8.  ^A valu
4050: 65 20 6f 66 20 32 20 6d 65 61 6e 73 20 55 54 46  e of 2 means UTF
4060: 2d 31 36 6c 65 2e 20 20 5e 41 20 76 61 6c 75 65  -16le.  ^A value
4070: 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54 46 2d   of 3 means UTF-
4080: 31 36 62 65 2e 0a 4e 6f 20 6f 74 68 65 72 20 76  16be..No other v
4090: 61 6c 75 65 73 20 61 72 65 20 61 6c 6c 6f 77 65  alues are allowe
40a0: 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  d.</p>..<h4>1.2.
40b0: 31 34 20 55 73 65 72 20 76 65 72 73 69 6f 6e 20  14 User version 
40c0: 6e 75 6d 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e  number</h4>..<p>
40d0: 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  ^The 4-byte big-
40e0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
40f0: 74 20 6f 66 66 73 65 74 20 36 30 20 69 73 20 74  t offset 60 is t
4100: 68 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20  he user version 
4110: 77 68 69 63 68 0a 69 73 20 73 65 74 20 61 6e 64  which.is set and
4120: 20 71 75 65 72 69 65 64 20 62 79 20 74 68 65 20   queried by the 
4130: 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70 72  [user_version pr
4140: 61 67 6d 61 5d 2e 20 20 54 68 65 20 75 73 65 72  agma].  The user
4150: 20 76 65 72 73 69 6f 6e 20 69 73 0a 6e 6f 74 20   version is.not 
4160: 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 2e 3c  used by SQLite.<
4170: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
4180: 67 6d 65 6e 74 20 61 70 70 69 64 20 7b 41 70 70  gment appid {App
4190: 6c 69 63 61 74 69 6f 6e 20 49 44 7d 3c 2f 74 63  lication ID}</tc
41a0: 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 35 20 41 70  l>.<h4>1.2.15 Ap
41b0: 70 6c 69 63 61 74 69 6f 6e 20 49 44 3c 2f 68 34  plication ID</h4
41c0: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74  >..<p>^The 4-byt
41d0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
41e0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 36  eger at offset 6
41f0: 38 20 69 73 20 61 6e 20 22 41 70 70 6c 69 63 61  8 is an "Applica
4200: 74 69 6f 6e 20 49 44 22 20 74 68 61 74 0a 63 61  tion ID" that.ca
4210: 6e 20 62 65 20 73 65 74 20 62 79 20 74 68 65 20  n be set by the 
4220: 5b 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74  [PRAGMA applicat
4230: 69 6f 6e 5f 69 64 5d 20 63 6f 6d 6d 61 6e 64 20  ion_id] command 
4240: 69 6e 20 6f 72 64 65 72 20 74 6f 20 69 64 65 6e  in order to iden
4250: 74 69 66 79 20 74 68 65 0a 64 61 74 61 62 61 73  tify the.databas
4260: 65 20 61 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74  e as belonging t
4270: 6f 20 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20  o or associated 
4280: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
4290: 72 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a 54  r application..T
42a0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49  he application I
42b0: 44 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f  D is intended fo
42c0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
42d0: 20 75 73 65 64 20 61 73 20 61 6e 0a 5b 61 70 70   used as an.[app
42e0: 6c 69 63 61 74 69 6f 6e 20 66 69 6c 65 2d 66 6f  lication file-fo
42f0: 72 6d 61 74 5d 2e 20 20 54 68 65 20 61 70 70 6c  rmat].  The appl
4300: 69 63 61 74 69 6f 6e 20 49 44 20 63 61 6e 20 62  ication ID can b
4310: 65 20 75 73 65 64 20 62 79 20 75 74 69 6c 69 74  e used by utilit
4320: 69 65 73 20 0a 73 75 63 68 20 61 73 20 5b 68 74  ies .such as [ht
4330: 74 70 3a 2f 2f 77 77 77 2e 64 61 72 77 69 6e 73  tp://www.darwins
4340: 79 73 2e 63 6f 6d 2f 66 69 6c 65 2f 20 7c 20 66  ys.com/file/ | f
4350: 69 6c 65 28 31 29 5d 20 63 61 6e 20 64 65 74 65  ile(1)] can dete
4360: 72 6d 69 6e 65 20 74 68 65 20 73 70 65 63 69 66  rmine the specif
4370: 69 63 0a 66 69 6c 65 20 74 79 70 65 20 72 61 74  ic.file type rat
4380: 68 65 72 20 74 68 61 6e 20 6a 75 73 74 20 72 65  her than just re
4390: 70 6f 72 74 69 6e 67 20 22 53 51 4c 69 74 65 33  porting "SQLite3
43a0: 20 44 61 74 61 62 61 73 65 22 2e 20 20 41 20 6c   Database".  A l
43b0: 69 73 74 20 6f 66 0a 61 73 73 69 67 6e 65 64 20  ist of.assigned 
43c0: 61 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 73 20  application IDs 
43d0: 63 61 6e 20 62 65 20 73 65 65 6e 20 62 79 20 63  can be seen by c
43e0: 6f 6e 73 75 6c 74 69 6e 67 20 74 68 65 0a 5b 68  onsulting the.[h
43f0: 74 74 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65  ttp://www.sqlite
4400: 2e 6f 72 67 2f 73 72 63 2f 61 72 74 69 66 61 63  .org/src/artifac
4410: 74 3f 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e  t?ci=trunk&filen
4420: 61 6d 65 3d 6d 61 67 69 63 2e 74 78 74 7c 6d 61  ame=magic.txt|ma
4430: 67 69 63 2e 74 78 74 5d 0a 66 69 6c 65 20 69 6e  gic.txt].file in
4440: 20 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72   the SQLite sour
4450: 63 65 20 72 65 70 6f 73 69 74 6f 72 79 2e 3c 2f  ce repository.</
4460: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
4470: 6d 65 6e 74 20 76 61 6c 69 64 66 6f 72 20 7b 76  ment validfor {v
4480: 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72  ersion-valid-for
4490: 20 6e 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c   number}</tcl>.<
44a0: 68 34 3e 31 2e 32 2e 31 36 20 57 72 69 74 65 20  h4>1.2.16 Write 
44b0: 6c 69 62 72 61 72 79 20 76 65 72 73 69 6f 6e 20  library version 
44c0: 6e 75 6d 62 65 72 20 61 6e 64 20 76 65 72 73 69  number and versi
44d0: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
44e0: 62 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68  ber</h4>..<p>^Th
44f0: 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  e 4-byte big-end
4500: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f  ian integer at o
4510: 66 66 73 65 74 20 39 36 20 73 74 6f 72 65 73 20  ffset 96 stores 
4520: 74 68 65 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52  the .[SQLITE_VER
4530: 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c  SION_NUMBER] val
4540: 75 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ue for the SQLit
4550: 65 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 6d  e library that m
4560: 6f 73 74 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64  ost.recently mod
4570: 69 66 69 65 64 20 74 68 65 20 64 61 74 61 62 61  ified the databa
4580: 73 65 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 34  se file.  ^The 4
4590: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
45a0: 20 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73   integer at.offs
45b0: 65 74 20 39 32 20 69 73 20 74 68 65 20 76 61 6c  et 92 is the val
45c0: 75 65 20 6f 66 20 74 68 65 20 5b 63 68 61 6e 67  ue of the [chang
45d0: 65 20 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20  e counter] when 
45e0: 74 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  the version numb
45f0: 65 72 0a 77 61 73 20 73 74 6f 72 65 64 2e 20 20  er.was stored.  
4600: 54 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  The integer at o
4610: 66 66 73 65 74 20 39 32 20 69 6e 64 69 63 61 74  ffset 92 indicat
4620: 65 73 20 77 68 69 63 68 20 74 72 61 6e 73 61 63  es which transac
4630: 74 69 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e  tion.the version
4640: 20 6e 75 6d 62 65 72 20 69 73 20 76 61 6c 69 64   number is valid
4650: 20 66 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d 65   for and is some
4660: 74 69 6d 65 73 20 63 61 6c 6c 65 64 20 74 68 65  times called the
4670: 0a 22 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d  ."version-valid-
4680: 66 6f 72 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68  for number"...<h
4690: 34 3e 31 2e 32 2e 31 36 20 48 65 61 64 65 72 20  4>1.2.16 Header 
46a0: 73 70 61 63 65 20 72 65 73 65 72 76 65 64 20 66  space reserved f
46b0: 6f 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68 34  or expansion</h4
46c0: 3e 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72 20  >..<p>All other 
46d0: 62 79 74 65 73 20 6f 66 20 74 68 65 20 64 61 74  bytes of the dat
46e0: 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65  abase file heade
46f0: 72 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66  r are reserved f
4700: 6f 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e 73  or.future expans
4710: 69 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65 20  ion and must be 
4720: 73 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e  set to zero.</p>
4730: 0a 0a 3c 68 33 3e 31 2e 33 20 54 68 65 20 4c 6f  ..<h3>1.3 The Lo
4740: 63 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68 33  ck-Byte Page</h3
4750: 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62  >..<p>The lock-b
4760: 79 74 65 20 70 61 67 65 20 69 73 20 74 68 65 20  yte page is the 
4770: 73 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20 74  single page of t
4780: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
4790: 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74  .that contains t
47a0: 68 65 20 62 79 74 65 73 20 61 74 20 6f 66 66 73  he bytes at offs
47b0: 65 74 73 20 62 65 74 77 65 65 6e 20 31 30 37 33  ets between 1073
47c0: 37 34 31 38 32 34 20 61 6e 64 20 31 30 37 33 37  741824 and 10737
47d0: 34 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76 65  42335,.inclusive
47e0: 2e 20 20 41 20 64 61 74 61 62 61 73 65 20 66 69  .  A database fi
47f0: 6c 65 20 74 68 61 74 20 69 73 20 6c 65 73 73 20  le that is less 
4800: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
4810: 20 31 30 37 33 37 34 31 38 32 34 20 62 79 74 65   1073741824 byte
4820: 73 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74 61  s .in size conta
4830: 69 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65  ins no lock-byte
4840: 20 70 61 67 65 2e 20 20 41 20 64 61 74 61 62 61   page.  A databa
4850: 73 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74  se file larger t
4860: 68 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20 63  han.1073741824 c
4870: 6f 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79 20  ontains exactly 
4880: 6f 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61  one lock-byte pa
4890: 67 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ge..</p>..<p>The
48a0: 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20   lock-byte page 
48b0: 69 73 20 73 65 74 20 61 73 69 64 65 20 66 6f 72  is set aside for
48c0: 20 75 73 65 20 62 79 20 74 68 65 20 6f 70 65 72   use by the oper
48d0: 61 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65  ating-system spe
48e0: 63 69 66 69 63 0a 5b 56 46 53 5d 20 69 6d 70 6c  cific.[VFS] impl
48f0: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d  ementation in im
4900: 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 64  plementing the d
4910: 61 74 61 62 61 73 65 20 66 69 6c 65 20 6c 6f 63  atabase file loc
4920: 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 2e  king primitives.
4930: 0a 5e 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  .^SQLite does no
4940: 74 20 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62  t use the lock-b
4950: 79 74 65 20 70 61 67 65 2e 20 20 5e 54 68 65 20  yte page.  ^The 
4960: 53 51 4c 69 74 65 20 63 6f 72 65 20 0a 77 69 6c  SQLite core .wil
4970: 6c 20 6e 65 76 65 72 20 72 65 61 64 20 6f 72 20  l never read or 
4980: 77 72 69 74 65 20 74 68 65 20 6c 6f 63 6b 2d 62  write the lock-b
4990: 79 74 65 20 70 61 67 65 2c 0a 74 68 6f 75 67 68  yte page,.though
49a0: 20 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65   operating-syste
49b0: 6d 20 73 70 65 63 69 66 69 63 20 5b 56 46 53 5d  m specific [VFS]
49c0: 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e   .implementation
49d0: 73 20 6d 61 79 20 63 68 6f 6f 73 65 20 74 6f 20  s may choose to 
49e0: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 62 79  read or write by
49f0: 74 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d  tes on the lock-
4a00: 62 79 74 65 20 0a 70 61 67 65 20 61 63 63 6f 72  byte .page accor
4a10: 64 69 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65 65  ding to the .nee
4a20: 64 73 20 61 6e 64 20 70 72 6f 63 6c 69 76 69 74  ds and proclivit
4a30: 69 65 73 20 6f 66 20 74 68 65 20 75 6e 64 65 72  ies of the under
4a40: 6c 79 69 6e 67 20 73 79 73 74 65 6d 2e 20 20 54  lying system.  T
4a50: 68 65 20 75 6e 69 78 20 61 6e 64 20 77 69 6e 33  he unix and win3
4a60: 32 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e  2.[VFS] implemen
4a70: 74 61 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d  tations that com
4a80: 65 20 62 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c  e built into SQL
4a90: 69 74 65 20 64 6f 20 6e 6f 74 20 77 72 69 74 65  ite do not write
4aa0: 20 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74   to the.lock-byt
4ab0: 65 20 70 61 67 65 2c 20 62 75 74 20 74 68 69 72  e page, but thir
4ac0: 64 2d 70 61 72 74 79 20 56 46 53 20 69 6d 70 6c  d-party VFS impl
4ad0: 65 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a  ementations for.
4ae0: 6f 74 68 65 72 20 6f 70 65 72 61 74 69 6e 67 20  other operating 
4af0: 73 79 73 74 65 6d 73 20 6d 69 67 68 74 2e 3c 2f  systems might.</
4b00: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
4b10: 6d 65 6e 74 20 7b 66 72 65 65 6c 69 73 74 7d 20  ment {freelist} 
4b20: 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65 65  {freelist} {free
4b30: 2d 70 61 67 65 20 6c 69 73 74 7d 3c 2f 74 63 6c  -page list}</tcl
4b40: 3e 0a 3c 68 33 3e 31 2e 34 20 54 68 65 20 46 72  >.<h3>1.4 The Fr
4b50: 65 65 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e  eelist</h3>..<p>
4b60: 41 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  A database file 
4b70: 6d 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 6f 6e  might contain on
4b80: 65 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 73 20  e or more pages 
4b90: 74 68 61 74 20 61 72 65 20 6e 6f 74 20 69 6e 0a  that are not in.
4ba0: 61 63 74 69 76 65 20 75 73 65 2e 20 20 55 6e 75  active use.  Unu
4bb0: 73 65 64 20 70 61 67 65 73 20 63 61 6e 20 63 6f  sed pages can co
4bc0: 6d 65 20 61 62 6f 75 74 2c 20 66 6f 72 20 65 78  me about, for ex
4bd0: 61 6d 70 6c 65 2c 20 77 68 65 6e 20 69 6e 66 6f  ample, when info
4be0: 72 6d 61 74 69 6f 6e 0a 69 73 20 64 65 6c 65 74  rmation.is delet
4bf0: 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ed from the data
4c00: 62 61 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61  base.  Unused pa
4c10: 67 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 6f  ges are stored o
4c20: 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74 0a 61  n the freelist.a
4c30: 6e 64 20 61 72 65 20 72 65 75 73 65 64 20 77 68  nd are reused wh
4c40: 65 6e 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61  en additional pa
4c50: 67 65 73 20 61 72 65 20 72 65 71 75 69 72 65 64  ges are required
4c60: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 72  .</p>..<p>The fr
4c70: 65 65 6c 69 73 74 20 69 73 20 6f 72 67 61 6e 69  eelist is organi
4c80: 7a 65 64 20 61 73 20 61 20 6c 69 6e 6b 65 64 20  zed as a linked 
4c90: 6c 69 73 74 20 6f 66 20 66 72 65 65 6c 69 73 74  list of freelist
4ca0: 20 74 72 75 6e 6b 20 70 61 67 65 73 0a 77 69 74   trunk pages.wit
4cb0: 68 20 65 61 63 68 20 74 72 75 6e 6b 20 70 61 67  h each trunk pag
4cc0: 65 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 70 61  es containing pa
4cd0: 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 7a  ge numbers for z
4ce0: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 65 65  ero or more free
4cf0: 6c 69 73 74 0a 6c 65 61 66 20 70 61 67 65 73 2e  list.leaf pages.
4d00: 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 6c  </p>..<p>A freel
4d10: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 63  ist trunk page c
4d20: 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72  onsists of an ar
4d30: 72 61 79 20 6f 66 20 34 2d 62 79 74 65 20 62 69  ray of 4-byte bi
4d40: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
4d50: 73 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74  s..The size of t
4d60: 68 65 20 61 72 72 61 79 20 69 73 20 61 73 20 6d  he array is as m
4d70: 61 6e 79 20 69 6e 74 65 67 65 72 73 20 61 73 20  any integers as 
4d80: 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20  will fit in the 
4d90: 75 73 61 62 6c 65 20 73 70 61 63 65 0a 6f 66 20  usable space.of 
4da0: 61 20 70 61 67 65 2e 20 20 54 68 65 20 6d 69 6e  a page.  The min
4db0: 69 6d 75 6d 20 75 73 61 62 6c 65 20 73 70 61 63  imum usable spac
4dc0: 65 20 69 73 20 34 38 30 20 62 79 74 65 73 20 73  e is 480 bytes s
4dd0: 6f 20 74 68 65 20 61 72 72 61 79 20 77 69 6c 6c  o the array will
4de0: 20 61 6c 77 61 79 73 0a 62 65 20 61 74 20 6c 65   always.be at le
4df0: 61 73 74 20 31 32 30 20 65 6e 74 72 69 65 73 20  ast 120 entries 
4e00: 69 6e 20 6c 65 6e 67 74 68 2e 20 20 5e 54 68 65  in length.  ^The
4e10: 20 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69   first integer i
4e20: 6e 20 74 68 65 20 61 72 72 61 79 20 0a 69 73 20  n the array .is 
4e30: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
4e40: 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72 65 65  of the next free
4e50: 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20  list trunk page 
4e60: 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 72 20 7a  in the list or z
4e70: 65 72 6f 20 0a 69 66 20 74 68 69 73 20 69 73 20  ero .if this is 
4e80: 74 68 65 20 6c 61 73 74 20 66 72 65 65 6c 69 73  the last freelis
4e90: 74 20 74 72 75 6e 6b 20 70 61 67 65 2e 20 20 5e  t trunk page.  ^
4ea0: 54 68 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67  The second integ
4eb0: 65 72 20 69 6e 20 74 68 65 20 61 72 72 61 79 0a  er in the array.
4ec0: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
4ed0: 20 6c 65 61 66 20 70 61 67 65 20 70 6f 69 6e 74   leaf page point
4ee0: 65 72 73 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20  ers to follow.  
4ef0: 43 61 6c 6c 20 74 68 65 20 73 65 63 6f 6e 64 20  Call the second 
4f00: 69 6e 74 65 67 65 72 20 4c 2e 0a 5e 49 66 20 4c  integer L..^If L
4f10: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
4f20: 20 7a 65 72 6f 20 74 68 65 6e 20 69 6e 74 65 67   zero then integ
4f30: 65 72 73 20 77 69 74 68 20 61 72 72 61 79 20 69  ers with array i
4f40: 6e 64 65 78 65 73 20 62 65 74 77 65 65 6e 20 32  ndexes between 2
4f50: 20 61 6e 64 0a 4c 2b 31 20 69 6e 63 6c 75 73 69   and.L+1 inclusi
4f60: 76 65 20 63 6f 6e 74 61 69 6e 20 70 61 67 65 20  ve contain page 
4f70: 6e 75 6d 62 65 72 73 20 66 6f 72 20 66 72 65 65  numbers for free
4f80: 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 2e  list leaf pages.
4f90: 3c 2f 70 3e 0a 0a 3c 70 3e 46 72 65 65 6c 69 73  </p>..<p>Freelis
4fa0: 74 20 6c 65 61 66 20 70 61 67 65 73 20 63 6f 6e  t leaf pages con
4fb0: 74 61 69 6e 20 6e 6f 20 69 6e 66 6f 72 6d 61 74  tain no informat
4fc0: 69 6f 6e 2e 20 20 5e 53 51 4c 69 74 65 20 61 76  ion.  ^SQLite av
4fd0: 6f 69 64 73 20 72 65 61 64 69 6e 67 20 6f 72 0a  oids reading or.
4fe0: 77 72 69 74 69 6e 67 20 66 72 65 65 6c 69 73 74  writing freelist
4ff0: 20 6c 65 61 66 20 70 61 67 65 73 20 69 6e 20 6f   leaf pages in o
5000: 72 64 65 72 20 74 6f 20 72 65 64 75 63 65 20 64  rder to reduce d
5010: 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70  isk I/O.</p>..<p
5020: 3e 41 20 62 75 67 20 69 6e 20 53 51 4c 69 74 65  >A bug in SQLite
5030: 20 76 65 72 73 69 6f 6e 73 20 70 72 69 6f 72 20   versions prior 
5040: 74 6f 20 33 2e 36 2e 30 20 63 61 75 73 65 64 20  to 3.6.0 caused 
5050: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
5060: 62 65 0a 72 65 70 6f 72 74 65 64 20 61 73 20 63  be.reported as c
5070: 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66  orrupt if any of
5080: 20 74 68 65 20 6c 61 73 74 20 36 20 65 6e 74 72   the last 6 entr
5090: 69 65 73 20 69 6e 20 74 68 65 20 66 72 65 65 6c  ies in the freel
50a0: 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 20 0a  ist trunk page .
50b0: 61 72 72 61 79 20 63 6f 6e 74 61 69 6e 65 64 20  array contained 
50c0: 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75 65 73 2e  non-zero values.
50d0: 20 20 4e 65 77 65 72 20 76 65 72 73 69 6f 6e 73    Newer versions
50e0: 20 6f 66 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f   of SQLite do no
50f0: 74 20 68 61 76 65 0a 74 68 69 73 20 70 72 6f 62  t have.this prob
5100: 6c 65 6d 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20  lem.  ^However, 
5110: 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f  newer versions o
5120: 66 20 53 51 4c 69 74 65 20 73 74 69 6c 6c 20 61  f SQLite still a
5130: 76 6f 69 64 20 75 73 69 6e 67 20 74 68 65 20 0a  void using the .
5140: 6c 61 73 74 20 73 69 78 20 65 6e 74 72 69 65 73  last six entries
5150: 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74   in the freelist
5160: 20 74 72 75 6e 6b 20 70 61 67 65 20 61 72 72 61   trunk page arra
5170: 79 20 69 6e 20 6f 72 64 65 72 20 74 68 61 74 20  y in order that 
5180: 64 61 74 61 62 61 73 65 0a 66 69 6c 65 73 20 63  database.files c
5190: 72 65 61 74 65 64 20 62 79 20 6e 65 77 65 72 20  reated by newer 
51a0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
51b0: 74 65 20 63 61 6e 20 62 65 20 72 65 61 64 20 62  te can be read b
51c0: 79 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  y older versions
51d0: 0a 6f 66 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a  .of SQLite.</p>.
51e0: 0a 3c 70 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20  .<p>^The number 
51f0: 6f 66 20 66 72 65 65 6c 69 73 74 20 70 61 67 65  of freelist page
5200: 73 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61  s is stored as a
5210: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
5220: 61 6e 20 69 6e 74 65 67 65 72 0a 69 6e 20 74 68  an integer.in th
5230: 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
5240: 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f  r at an offset o
5250: 66 20 33 36 20 66 72 6f 6d 20 74 68 65 20 62 65  f 36 from the be
5260: 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 66  ginning of the f
5270: 69 6c 65 2e 0a 5e 54 68 65 20 64 61 74 61 62 61  ile..^The databa
5280: 73 65 20 68 65 61 64 65 72 20 61 6c 73 6f 20 73  se header also s
5290: 74 6f 72 65 73 20 74 68 65 20 70 61 67 65 20 6e  tores the page n
52a0: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 66 69 72  umber of the fir
52b0: 73 74 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e  st freelist trun
52c0: 6b 0a 70 61 67 65 20 61 73 20 61 20 34 2d 62 79  k.page as a 4-by
52d0: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
52e0: 74 65 67 65 72 20 61 74 20 61 6e 20 6f 66 66 73  teger at an offs
52f0: 65 74 20 6f 66 20 33 32 20 66 72 6f 6d 20 74 68  et of 32 from th
5300: 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74  e beginning.of t
5310: 68 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 68  he file.</p>..<h
5320: 33 3e 31 2e 35 20 42 2d 74 72 65 65 20 50 61 67  3>1.5 B-tree Pag
5330: 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 62 2d  es</h3>..<p>A b-
5340: 74 72 65 65 20 70 61 67 65 20 69 73 20 65 69 74  tree page is eit
5350: 68 65 72 20 61 6e 20 69 6e 74 65 72 69 6f 72 20  her an interior 
5360: 70 61 67 65 20 6f 72 20 61 20 6c 65 61 66 20 70  page or a leaf p
5370: 61 67 65 2e 0a 41 20 6c 65 61 66 20 70 61 67 65  age..A leaf page
5380: 20 63 6f 6e 74 61 69 6e 73 20 6b 65 79 73 20 61   contains keys a
5390: 6e 64 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f  nd in the case o
53a0: 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  f a table b-tree
53b0: 20 65 61 63 68 0a 6b 65 79 20 68 61 73 20 61 73   each.key has as
53c0: 73 6f 63 69 61 74 65 64 20 63 6f 6e 74 65 6e 74  sociated content
53d0: 2e 20 20 41 6e 20 69 6e 74 65 72 69 6f 72 20 70  .  An interior p
53e0: 61 67 65 20 63 6f 6e 74 61 69 6e 73 0a 4b 20 6b  age contains.K k
53f0: 65 79 73 20 77 69 74 68 6f 75 74 20 63 6f 6e 74  eys without cont
5400: 65 6e 74 20 62 75 74 20 77 69 74 68 20 4b 2b 31  ent but with K+1
5410: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 69   pointers to chi
5420: 6c 64 20 62 2d 74 72 65 65 20 70 61 67 65 73 2e  ld b-tree pages.
5430: 0a 41 20 22 70 6f 69 6e 74 65 72 22 20 69 6e 20  .A "pointer" in 
5440: 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  an interior b-tr
5450: 65 65 20 70 61 67 65 20 69 73 20 6a 75 73 74 20  ee page is just 
5460: 74 68 65 20 33 31 2d 62 69 74 20 69 6e 74 65 67  the 31-bit integ
5470: 65 72 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  er.page number o
5480: 66 20 74 68 65 20 63 68 69 6c 64 20 70 61 67 65  f the child page
5490: 2e 3c 2f 70 3e 0a 0a 0a 3c 70 3e 44 65 66 69 6e  .</p>...<p>Defin
54a0: 65 20 74 68 65 20 64 65 70 74 68 0a 6f 66 20 61  e the depth.of a
54b0: 20 6c 65 61 66 20 62 2d 74 72 65 65 20 74 6f 20   leaf b-tree to 
54c0: 62 65 20 31 20 61 6e 64 20 74 68 65 20 64 65 70  be 1 and the dep
54d0: 74 68 20 6f 66 20 61 6e 79 20 69 6e 74 65 72 69  th of any interi
54e0: 6f 72 20 62 2d 74 72 65 65 20 74 6f 20 62 65 20  or b-tree to be 
54f0: 6f 6e 65 0a 6d 6f 72 65 20 74 68 61 6e 20 74 68  one.more than th
5500: 65 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  e maximum depth 
5510: 6f 66 20 61 6e 79 20 6f 66 20 69 74 73 20 63 68  of any of its ch
5520: 69 6c 64 72 65 6e 2e 20 20 5e 49 6e 20 61 20 77  ildren.  ^In a w
5530: 65 6c 6c 2d 66 6f 72 6d 65 64 0a 64 61 74 61 62  ell-formed.datab
5540: 61 73 65 2c 20 61 6c 6c 20 63 68 69 6c 64 72 65  ase, all childre
5550: 6e 20 6f 66 20 61 6e 79 20 6f 6e 65 20 69 6e 74  n of any one int
5560: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 68 61 76  erior b-tree hav
5570: 65 20 74 68 65 20 73 61 6d 65 20 64 65 70 74 68  e the same depth
5580: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 20  .</p>..<p>In an 
5590: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
55a0: 70 61 67 65 2c 20 74 68 65 20 70 6f 69 6e 74 65  page, the pointe
55b0: 72 73 20 61 6e 64 20 6b 65 79 73 20 6c 6f 67 69  rs and keys logi
55c0: 63 61 6c 6c 79 20 61 6c 74 65 72 6e 61 74 65 20  cally alternate 
55d0: 0a 77 69 74 68 20 61 20 70 6f 69 6e 74 65 72 20  .with a pointer 
55e0: 6f 6e 20 62 6f 74 68 20 65 6e 64 73 2e 20 28 54  on both ends. (T
55f0: 68 65 20 70 72 65 76 69 6f 75 73 20 73 65 6e 74  he previous sent
5600: 65 6e 63 65 20 69 73 20 74 6f 20 62 65 20 75 6e  ence is to be un
5610: 64 65 72 73 74 6f 6f 64 0a 63 6f 6e 63 65 70 74  derstood.concept
5620: 75 61 6c 6c 79 20 2d 20 74 68 65 20 61 63 74 75  ually - the actu
5630: 61 6c 20 6c 61 79 6f 75 74 20 6f 66 20 74 68 65  al layout of the
5640: 20 6b 65 79 73 20 61 6e 64 0a 70 6f 69 6e 74 65   keys and.pointe
5650: 72 73 20 77 69 74 68 69 6e 20 74 68 65 20 70 61  rs within the pa
5660: 67 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c  ge is more compl
5670: 69 63 61 74 65 64 20 61 6e 64 20 77 69 6c 6c 20  icated and will 
5680: 62 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a  be described in.
5690: 74 68 65 20 73 65 71 75 65 6c 2e 29 20 20 41 6c  the sequel.)  Al
56a0: 6c 20 6b 65 79 73 20 77 69 74 68 69 6e 20 74 68  l keys within th
56b0: 65 20 73 61 6d 65 20 70 61 67 65 20 61 72 65 20  e same page are 
56c0: 75 6e 69 71 75 65 20 61 6e 64 20 61 72 65 20 6c  unique and are l
56d0: 6f 67 69 63 61 6c 6c 79 0a 6f 72 67 61 6e 69 7a  ogically.organiz
56e0: 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  ed in ascending 
56f0: 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20  order from left 
5700: 74 6f 20 72 69 67 68 74 2e 20 20 28 41 67 61 69  to right.  (Agai
5710: 6e 2c 20 74 68 69 73 20 6f 72 64 65 72 69 6e 67  n, this ordering
5720: 0a 69 73 20 6c 6f 67 69 63 61 6c 2c 20 6e 6f 74  .is logical, not
5730: 20 70 68 79 73 69 63 61 6c 2e 20 20 54 68 65 20   physical.  The 
5740: 61 63 74 75 61 6c 20 6c 6f 63 61 74 69 6f 6e 20  actual location 
5750: 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20 74  of keys within t
5760: 68 65 20 70 61 67 65 0a 69 73 20 61 72 62 69 74  he page.is arbit
5770: 72 61 72 79 2e 29 20 5e 46 6f 72 20 61 6e 79 20  rary.) ^For any 
5780: 6b 65 79 20 58 2c 20 70 6f 69 6e 74 65 72 73 20  key X, pointers 
5790: 74 6f 20 74 68 65 20 6c 65 66 74 0a 6f 66 20 61  to the left.of a
57a0: 20 58 20 72 65 66 65 72 20 74 6f 20 62 2d 74 72   X refer to b-tr
57b0: 65 65 20 70 61 67 65 73 20 6f 6e 20 77 68 69 63  ee pages on whic
57c0: 68 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 6c  h all keys are l
57d0: 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
57e0: 6c 20 74 6f 20 58 2e 0a 5e 50 6f 69 6e 74 65 72  l to X..^Pointer
57f0: 73 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 6f  s to the right o
5800: 66 20 58 20 72 65 66 65 72 20 74 6f 20 70 61 67  f X refer to pag
5810: 65 73 20 77 68 65 72 65 20 61 6c 6c 20 6b 65 79  es where all key
5820: 73 20 61 72 65 20 0a 67 72 65 61 74 65 72 20 74  s are .greater t
5830: 68 61 6e 20 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57  han X.</p>..<p>W
5840: 69 74 68 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f  ithin an interio
5850: 72 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 65  r b-tree page, e
5860: 61 63 68 20 6b 65 79 20 61 6e 64 20 74 68 65 20  ach key and the 
5870: 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 73 0a 69  pointer to its.i
5880: 6d 6d 65 64 69 61 74 65 20 6c 65 66 74 20 61 72  mmediate left ar
5890: 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20  e combined into 
58a0: 61 20 73 74 72 75 63 74 75 72 65 20 63 61 6c 6c  a structure call
58b0: 65 64 20 61 20 22 63 65 6c 6c 22 2e 20 20 54 68  ed a "cell".  Th
58c0: 65 0a 72 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69  e.right-most poi
58d0: 6e 74 65 72 20 69 73 20 68 65 6c 64 20 73 65 70  nter is held sep
58e0: 61 72 61 74 65 6c 79 2e 20 20 41 20 6c 65 61 66  arately.  A leaf
58f0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61 73   b-tree page has
5900: 20 6e 6f 0a 70 6f 69 6e 74 65 72 73 2c 20 62 75   no.pointers, bu
5910: 74 20 69 74 20 73 74 69 6c 6c 20 75 73 65 73 20  t it still uses 
5920: 74 68 65 20 63 65 6c 6c 20 73 74 72 75 63 74 75  the cell structu
5930: 72 65 20 74 6f 20 68 6f 6c 64 20 6b 65 79 73 20  re to hold keys 
5940: 66 6f 72 0a 69 6e 64 65 78 20 62 2d 74 72 65 65  for.index b-tree
5950: 73 20 6f 72 20 6b 65 79 73 20 61 6e 64 20 63 6f  s or keys and co
5960: 6e 74 65 6e 74 20 66 6f 72 20 74 61 62 6c 65 20  ntent for table 
5970: 62 2d 74 72 65 65 73 2e 3c 2f 70 3e 0a 3c 2f 70  b-trees.</p>.</p
5980: 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 62 2d 74 72  >..<p>Every b-tr
5990: 65 65 20 70 61 67 65 20 68 61 73 20 61 74 20 6d  ee page has at m
59a0: 6f 73 74 20 6f 6e 65 20 70 61 72 65 6e 74 20 62  ost one parent b
59b0: 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 20 62 2d  -tree page..A b-
59c0: 74 72 65 65 20 70 61 67 65 20 77 69 74 68 6f 75  tree page withou
59d0: 74 20 61 20 70 61 72 65 6e 74 20 69 73 20 63 61  t a parent is ca
59e0: 6c 6c 65 64 20 61 20 72 6f 6f 74 20 70 61 67 65  lled a root page
59f0: 2e 20 20 41 20 72 6f 6f 74 20 62 2d 74 72 65 65  .  A root b-tree
5a00: 20 70 61 67 65 0a 74 6f 67 65 74 68 65 72 20 77   page.together w
5a10: 69 74 68 20 74 68 65 20 63 6c 6f 73 75 72 65 20  ith the closure 
5a20: 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e 20  of its children 
5a30: 66 6f 72 6d 20 61 20 63 6f 6d 70 6c 65 74 65 20  form a complete 
5a40: 62 2d 74 72 65 65 2e 0a 49 74 20 69 73 20 70 6f  b-tree..It is po
5a50: 73 73 69 62 6c 65 20 28 61 6e 64 20 69 6e 20 66  ssible (and in f
5a60: 61 63 74 20 72 61 74 68 65 72 20 63 6f 6d 6d 6f  act rather commo
5a70: 6e 29 20 74 6f 20 68 61 76 65 20 61 20 63 6f 6d  n) to have a com
5a80: 70 6c 65 74 65 20 62 2d 74 72 65 65 0a 74 68 61  plete b-tree.tha
5a90: 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
5aa0: 73 69 6e 67 6c 65 20 70 61 67 65 20 74 68 61 74  single page that
5ab0: 20 69 73 20 62 6f 74 68 20 61 20 6c 65 61 66 20   is both a leaf 
5ac0: 61 6e 64 20 74 68 65 20 72 6f 6f 74 2e 0a 42 65  and the root..Be
5ad0: 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 20  cause there are 
5ae0: 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d 20 70 61  pointers from pa
5af0: 72 65 6e 74 73 20 74 6f 20 63 68 69 6c 64 72 65  rents to childre
5b00: 6e 2c 20 65 76 65 72 79 20 70 61 67 65 20 6f 66  n, every page of
5b10: 20 61 0a 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72   a.complete b-tr
5b20: 65 65 20 63 61 6e 20 62 65 20 6c 6f 63 61 74 65  ee can be locate
5b30: 64 20 69 66 20 6f 6e 6c 79 20 74 68 65 20 72 6f  d if only the ro
5b40: 6f 74 20 70 61 67 65 20 69 73 20 6b 6e 6f 77 6e  ot page is known
5b50: 2e 20 20 48 65 6e 63 65 2c 0a 62 2d 74 72 65 65  .  Hence,.b-tree
5b60: 73 20 61 72 65 20 69 64 65 6e 74 69 66 69 65 64  s are identified
5b70: 20 62 79 20 74 68 65 69 72 20 72 6f 6f 74 20 70   by their root p
5b80: 61 67 65 20 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a  age number.</p>.
5b90: 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67  .<p>A b-tree pag
5ba0: 65 20 69 73 20 65 69 74 68 65 72 20 61 20 74 61  e is either a ta
5bb0: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  ble b-tree page 
5bc0: 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  or an index b-tr
5bd0: 65 65 20 70 61 67 65 2e 0a 41 6c 6c 20 70 61 67  ee page..All pag
5be0: 65 73 20 77 69 74 68 69 6e 20 65 61 63 68 20 63  es within each c
5bf0: 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 20 61  omplete b-tree a
5c00: 72 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20 74  re of the same t
5c10: 79 70 65 3a 20 65 69 74 68 65 72 20 74 61 62 6c  ype: either tabl
5c20: 65 0a 6f 72 20 69 6e 64 65 78 2e 20 20 54 68 65  e.or index.  The
5c30: 72 65 20 69 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f  re is a one-to-o
5c40: 6e 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  ne mapping from 
5c50: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 69 6e  table b-trees in
5c60: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a 66   the database .f
5c70: 69 6c 65 20 74 6f 20 28 6e 6f 6e 2d 76 69 72 74  ile to (non-virt
5c80: 75 61 6c 29 20 74 61 62 6c 65 73 20 69 6e 20 74  ual) tables in t
5c90: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
5ca0: 6d 61 2c 20 69 6e 63 6c 75 64 69 6e 67 20 73 79  ma, including sy
5cb0: 73 74 65 6d 20 74 61 62 6c 65 73 0a 73 75 63 68  stem tables.such
5cc0: 20 61 73 20 73 71 6c 69 74 65 5f 6d 61 73 74 65   as sqlite_maste
5cd0: 72 2e 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65  r.  There is one
5ce0: 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20  -to-one mapping 
5cf0: 62 65 74 77 65 65 6e 20 69 6e 64 65 78 20 62 2d  between index b-
5d00: 74 72 65 65 73 0a 69 6e 20 74 68 65 20 64 61 74  trees.in the dat
5d10: 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69  abase file and i
5d20: 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20 73 63  ndices in the sc
5d30: 68 65 6d 61 2c 20 69 6e 63 6c 75 64 69 6e 67 20  hema, including 
5d40: 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65 73 0a  implied indices.
5d50: 63 72 65 61 74 65 64 20 62 79 20 75 6e 69 71 75  created by uniqu
5d60: 65 6e 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 74  eness constraint
5d70: 73 2e 20 20 54 68 65 20 62 2d 74 72 65 65 20 63  s.  The b-tree c
5d80: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
5d90: 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65  the.sqlite_maste
5da0: 72 20 74 61 62 6c 65 20 61 6c 77 61 79 73 20 68  r table always h
5db0: 61 73 20 69 74 73 20 72 6f 6f 74 20 70 61 67 65  as its root page
5dc0: 20 6f 6e 20 61 20 70 61 67 65 20 6e 75 6d 62 65   on a page numbe
5dd0: 72 20 6f 66 20 31 2e 0a 54 68 65 20 73 71 6c 69  r of 1..The sqli
5de0: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
5df0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
5e00: 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
5e10: 72 20 65 76 65 72 79 20 6f 74 68 65 72 20 0a 74  r every other .t
5e20: 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 69  able and index i
5e30: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
5e40: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63  ile.</p>..<p>Eac
5e50: 68 20 65 6e 74 72 79 20 69 6e 20 61 20 74 61 62  h entry in a tab
5e60: 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e 73 69 73  le b-tree consis
5e70: 74 73 20 6f 66 20 61 20 36 34 2d 62 69 74 20 73  ts of a 64-bit s
5e80: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6b 65  igned integer ke
5e90: 79 0a 61 6e 64 20 75 70 20 74 6f 20 32 31 34 37  y.and up to 2147
5ea0: 34 38 33 36 34 37 20 62 79 74 65 73 20 6f 66 20  483647 bytes of 
5eb0: 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
5ec0: 20 49 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20   Interior table 
5ed0: 62 2d 74 72 65 65 73 0a 68 6f 6c 64 20 6f 6e 6c  b-trees.hold onl
5ee0: 79 20 6b 65 79 73 20 61 6e 64 20 70 6f 69 6e 74  y keys and point
5ef0: 65 72 73 20 74 6f 20 63 68 69 6c 64 72 65 6e 2e  ers to children.
5f00: 20 20 41 6c 6c 20 64 61 74 61 20 69 73 20 63 6f    All data is co
5f10: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 0a 74  ntained in the.t
5f20: 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 76  able b-tree leav
5f30: 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68  es.</p>..<p>Each
5f40: 20 65 6e 74 72 79 20 69 6e 20 61 6e 20 69 6e 64   entry in an ind
5f50: 65 78 20 62 2d 74 72 65 65 20 63 6f 6e 73 69 73  ex b-tree consis
5f60: 74 73 20 6f 66 20 61 6e 20 61 72 62 69 74 72 61  ts of an arbitra
5f70: 72 79 20 6b 65 79 20 6f 66 20 75 70 0a 74 6f 20  ry key of up.to 
5f80: 32 31 34 37 34 38 33 36 34 37 20 62 79 74 65 73  2147483647 bytes
5f90: 20 69 6e 20 6c 65 6e 67 74 68 20 61 6e 64 20 6e   in length and n
5fa0: 6f 20 64 61 74 61 2e 3c 2f 70 3e 0a 0a 3c 74 63  o data.</p>..<tc
5fb0: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 65  l>hd_fragment ce
5fc0: 6c 6c 5f 70 61 79 6c 6f 61 64 20 7b 63 65 6c 6c  ll_payload {cell
5fd0: 20 70 61 79 6c 6f 61 64 7d 3c 2f 74 63 6c 3e 0a   payload}</tcl>.
5fe0: 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20 22 70  <p>Define the "p
5ff0: 61 79 6c 6f 61 64 22 20 6f 66 20 61 20 63 65 6c  ayload" of a cel
6000: 6c 20 74 6f 20 62 65 20 74 68 65 20 61 72 62 69  l to be the arbi
6010: 74 72 61 72 79 20 6c 65 6e 67 74 68 20 73 65 63  trary length sec
6020: 74 69 6f 6e 0a 6f 66 20 74 68 65 20 63 65 6c 6c  tion.of the cell
6030: 2e 20 20 46 6f 72 20 61 6e 20 69 6e 64 65 78 20  .  For an index 
6040: 62 2d 74 72 65 65 2c 20 74 68 65 20 6b 65 79 20  b-tree, the key 
6050: 69 73 20 61 6c 77 61 79 73 20 61 72 62 69 74 72  is always arbitr
6060: 61 72 79 20 69 6e 20 6c 65 6e 67 74 68 0a 61 6e  ary in length.an
6070: 64 20 68 65 6e 63 65 20 74 68 65 20 70 61 79 6c  d hence the payl
6080: 6f 61 64 20 69 73 20 74 68 65 20 6b 65 79 2e 20  oad is the key. 
6090: 20 54 68 65 72 65 20 61 72 65 20 6e 6f 20 61 72   There are no ar
60a0: 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20 65  bitrary length e
60b0: 6c 65 6d 65 6e 74 73 0a 69 6e 20 74 68 65 20 63  lements.in the c
60c0: 65 6c 6c 73 20 6f 66 20 69 6e 74 65 72 69 6f 72  ells of interior
60d0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61   table b-tree pa
60e0: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 6f 73 65  ges and so those
60f0: 20 63 65 6c 6c 73 20 68 61 76 65 20 6e 6f 0a 70   cells have no.p
6100: 61 79 6c 6f 61 64 2e 20 20 54 61 62 6c 65 20 62  ayload.  Table b
6110: 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65 73  -tree leaf pages
6120: 20 63 6f 6e 74 61 69 6e 20 61 72 62 69 74 72 61   contain arbitra
6130: 72 79 20 6c 65 6e 67 74 68 20 63 6f 6e 74 65 6e  ry length conten
6140: 74 20 61 6e 64 0a 73 6f 20 66 6f 72 20 63 65 6c  t and.so for cel
6150: 6c 73 20 6f 6e 20 74 68 6f 73 65 20 70 61 67 65  ls on those page
6160: 73 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 73  s the payload is
6170: 20 74 68 65 20 63 6f 6e 74 65 6e 74 2e 0a 3c 70   the content..<p
6180: 3e 57 68 65 6e 20 74 68 65 20 73 69 7a 65 20 6f  >When the size o
6190: 66 20 70 61 79 6c 6f 61 64 20 66 6f 72 20 61 20  f payload for a 
61a0: 63 65 6c 6c 20 65 78 63 65 65 64 73 20 61 20 63  cell exceeds a c
61b0: 65 72 74 61 69 6e 20 74 68 72 65 73 68 6f 6c 64  ertain threshold
61c0: 20 28 74 6f 0a 62 65 20 64 65 66 69 6e 65 64 20   (to.be defined 
61d0: 6c 61 74 65 72 29 20 74 68 65 6e 20 6f 6e 6c 79  later) then only
61e0: 20 74 68 65 20 66 69 72 73 74 20 66 65 77 20 62   the first few b
61f0: 79 74 65 73 20 6f 66 20 74 68 65 20 70 61 79 6c  ytes of the payl
6200: 6f 61 64 0a 61 72 65 20 73 74 6f 72 65 64 20 6f  oad.are stored o
6210: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
6220: 65 20 61 6e 64 20 74 68 65 20 62 61 6c 61 6e 63  e and the balanc
6230: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  e is stored in a
6240: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 6f 66 20   linked list.of 
6250: 63 6f 6e 74 65 6e 74 20 6f 76 65 72 66 6c 6f 77  content overflow
6260: 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e   pages.</p>..<p>
6270: 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73  A b-tree page is
6280: 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 72 65   divided into re
6290: 67 69 6f 6e 73 20 69 6e 20 74 68 65 20 66 6f 6c  gions in the fol
62a0: 6c 6f 77 69 6e 67 20 6f 72 64 65 72 3a 0a 0a 3c  lowing order:..<
62b0: 6f 6c 3e 0a 3c 6c 69 3e 54 68 65 20 31 30 30 2d  ol>.<li>The 100-
62c0: 62 79 74 65 20 64 61 74 61 62 61 73 65 20 66 69  byte database fi
62d0: 6c 65 20 68 65 61 64 65 72 20 28 66 6f 75 6e 64  le header (found
62e0: 20 6f 6e 20 70 61 67 65 20 31 20 6f 6e 6c 79 29   on page 1 only)
62f0: 0a 3c 6c 69 3e 54 68 65 20 38 20 6f 72 20 31 32  .<li>The 8 or 12
6300: 20 62 79 74 65 20 62 2d 74 72 65 65 20 70 61 67   byte b-tree pag
6310: 65 20 68 65 61 64 65 72 0a 3c 6c 69 3e 54 68 65  e header.<li>The
6320: 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72   cell pointer ar
6330: 72 61 79 0a 3c 6c 69 3e 55 6e 61 6c 6c 6f 63 61  ray.<li>Unalloca
6340: 74 65 64 20 73 70 61 63 65 0a 3c 6c 69 3e 54 68  ted space.<li>Th
6350: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61  e cell content a
6360: 72 65 61 0a 3c 6c 69 3e 54 68 65 20 72 65 73 65  rea.<li>The rese
6370: 72 76 65 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 6f  rved region..</o
6380: 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  l>.</p>..<p>The 
6390: 31 30 30 2d 62 79 74 65 20 64 61 74 61 62 61 73  100-byte databas
63a0: 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 69 73  e file header is
63b0: 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 6f 6e 20 70   found only on p
63c0: 61 67 65 20 31 2c 20 77 68 69 63 68 20 69 73 0a  age 1, which is.
63d0: 61 6c 77 61 79 73 20 61 20 74 61 62 6c 65 20 62  always a table b
63e0: 2d 74 72 65 65 20 70 61 67 65 2e 20 20 41 6c 6c  -tree page.  All
63f0: 20 6f 74 68 65 72 20 62 2d 74 72 65 65 20 70 61   other b-tree pa
6400: 67 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ges in the datab
6410: 61 73 65 20 66 69 6c 65 0a 6f 6d 69 74 20 74 68  ase file.omit th
6420: 69 73 20 31 30 30 2d 62 79 74 65 20 68 65 61 64  is 100-byte head
6430: 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  er.</p>..<p>The 
6440: 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20  reserved region 
6450: 69 73 20 61 6e 20 61 72 65 61 20 6f 66 20 75 6e  is an area of un
6460: 75 73 65 64 20 73 70 61 63 65 20 61 74 20 74 68  used space at th
6470: 65 20 65 6e 64 20 6f 66 20 65 76 65 72 79 0a 70  e end of every.p
6480: 61 67 65 20 28 65 78 63 65 70 74 20 74 68 65 20  age (except the 
6490: 6c 6f 63 6b 69 6e 67 20 70 61 67 65 29 20 74 68  locking page) th
64a0: 61 74 20 65 78 74 65 6e 73 69 6f 6e 73 20 63 61  at extensions ca
64b0: 6e 20 75 73 65 20 74 6f 20 68 6f 6c 64 20 70 65  n use to hold pe
64c0: 72 2d 70 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69  r-page.informati
64d0: 6f 6e 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f  on.  ^The size o
64e0: 66 20 74 68 65 20 72 65 73 65 72 76 65 64 20 72  f the reserved r
64f0: 65 67 69 6f 6e 20 69 73 20 64 65 74 65 72 6d 69  egion is determi
6500: 6e 65 64 20 62 79 20 74 68 65 20 6f 6e 65 2d 62  ned by the one-b
6510: 79 74 65 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte.unsigned int
6520: 65 67 65 72 20 66 6f 75 6e 64 20 61 74 20 61 6e  eger found at an
6530: 20 6f 66 66 73 65 74 20 6f 66 20 32 30 20 69 6e   offset of 20 in
6540: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
6550: 66 69 6c 65 20 68 65 61 64 65 72 2e 0a 54 68 65  file header..The
6560: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73   size of the res
6570: 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20  erved region is 
6580: 75 73 75 61 6c 6c 79 20 7a 65 72 6f 2e 3c 2f 70  usually zero.</p
6590: 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65 65  >..<p>The b-tree
65a0: 20 70 61 67 65 20 68 65 61 64 65 72 20 69 73 20   page header is 
65b0: 38 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 20  8 bytes in size 
65c0: 66 6f 72 20 6c 65 61 66 20 70 61 67 65 73 20 61  for leaf pages a
65d0: 6e 64 20 31 32 0a 62 79 74 65 73 20 66 6f 72 20  nd 12.bytes for 
65e0: 69 6e 74 65 72 69 6f 72 20 70 61 67 65 73 2e 20  interior pages. 
65f0: 20 41 6c 6c 20 6d 75 6c 74 69 62 79 74 65 20 76   All multibyte v
6600: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 70 61 67  alues in the pag
6610: 65 20 68 65 61 64 65 72 0a 61 72 65 20 62 69 67  e header.are big
6620: 2d 65 6e 64 69 61 6e 2e 0a 54 68 65 20 62 2d 74  -endian..The b-t
6630: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 20  ree page header 
6640: 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74  is composed of t
6650: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69 65  he following fie
6660: 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  lds:</p>..<cente
6670: 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 50 61 67  r>.<i>B-tree Pag
6680: 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
6690: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 62  /i><br>.<table b
66a0: 6f 72 64 65 72 3d 31 20 77 69 64 74 68 3d 22 38  order=1 width="8
66b0: 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  0%">.<tr><th>Off
66c0: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
66d0: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
66e0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
66f0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 30 3c 74 64 20  valign=top>0<td 
6700: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6710: 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69  ign=top>1<td ali
6720: 67 6e 3d 6c 65 66 74 3e 0a 41 20 66 6c 61 67 20  gn=left>.A flag 
6730: 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 62  indicating the b
6740: 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65 0a  -tree page type.
6750: 5e 41 20 76 61 6c 75 65 20 6f 66 20 32 20 6d 65  ^A value of 2 me
6760: 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20  ans the page is 
6770: 61 6e 20 69 6e 74 65 72 69 6f 72 20 69 6e 64 65  an interior inde
6780: 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e  x b-tree page..^
6790: 41 20 76 61 6c 75 65 20 6f 66 20 35 20 6d 65 61  A value of 5 mea
67a0: 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61  ns the page is a
67b0: 6e 20 69 6e 74 65 72 69 6f 72 20 74 61 62 6c 65  n interior table
67c0: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 5e 41   b-tree page..^A
67d0: 20 76 61 6c 75 65 20 6f 66 20 31 30 20 6d 65 61   value of 10 mea
67e0: 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61  ns the page is a
67f0: 20 6c 65 61 66 20 69 6e 64 65 78 20 62 2d 74 72   leaf index b-tr
6800: 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61 6c 75  ee page..^A valu
6810: 65 20 6f 66 20 31 33 20 6d 65 61 6e 73 20 74 68  e of 13 means th
6820: 65 20 70 61 67 65 20 69 73 20 61 20 6c 65 61 66  e page is a leaf
6830: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61   table b-tree pa
6840: 67 65 2e 0a 5e 41 6e 79 20 6f 74 68 65 72 20 76  ge..^Any other v
6850: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 62 2d 74  alue for the b-t
6860: 72 65 65 20 70 61 67 65 20 74 79 70 65 20 69 73  ree page type is
6870: 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c   an error..<tr><
6880: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6890: 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20  valign=top>1<td 
68a0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
68b0: 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69  ign=top>2<td ali
68c0: 67 6e 3d 6c 65 66 74 3e 0a 42 79 74 65 20 6f 66  gn=left>.Byte of
68d0: 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20 70 61  fset into the pa
68e0: 67 65 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ge of the first 
68f0: 66 72 65 65 62 6c 6f 63 6b 0a 3c 74 72 3e 3c 74  freeblock.<tr><t
6900: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6910: 61 6c 69 67 6e 3d 74 6f 70 3e 33 3c 74 64 20 61  align=top>3<td a
6920: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6930: 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67  gn=top>2<td alig
6940: 6e 3d 6c 65 66 74 3e 0a 4e 75 6d 62 65 72 20 6f  n=left>.Number o
6950: 66 20 63 65 6c 6c 73 20 6f 6e 20 74 68 69 73 20  f cells on this 
6960: 70 61 67 65 0a 3c 74 72 3e 3c 74 64 20 61 6c 69  page.<tr><td ali
6970: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6980: 3d 74 6f 70 3e 35 3c 74 64 20 61 6c 69 67 6e 3d  =top>5<td align=
6990: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
69a0: 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  p>2<td align=lef
69b0: 74 3e 0a 4f 66 66 73 65 74 20 74 6f 20 74 68 65  t>.Offset to the
69c0: 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
69d0: 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20  he cell content 
69e0: 61 72 65 61 2e 20 20 41 20 7a 65 72 6f 20 76 61  area.  A zero va
69f0: 6c 75 65 20 69 73 20 75 73 65 64 20 74 6f 20 72  lue is used to r
6a00: 65 70 72 65 73 65 6e 74 20 61 6e 20 6f 66 66 73  epresent an offs
6a10: 65 74 20 6f 66 20 36 35 35 33 36 2c 20 77 68 69  et of 65536, whi
6a20: 63 68 20 6f 63 63 75 72 73 20 6f 6e 20 61 6e 20  ch occurs on an 
6a30: 65 6d 70 74 79 20 72 6f 6f 74 20 70 61 67 65 20  empty root page 
6a40: 77 68 65 6e 20 75 73 69 6e 67 20 61 20 36 35 35  when using a 655
6a50: 33 36 2d 62 79 74 65 20 70 61 67 65 20 73 69 7a  36-byte page siz
6a60: 65 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  e..<tr><td align
6a70: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
6a80: 6f 70 3e 37 3c 74 64 20 61 6c 69 67 6e 3d 63 65  op>7<td align=ce
6a90: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6aa0: 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  1<td align=left>
6ab0: 0a 4e 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d  .Number of fragm
6ac0: 65 6e 74 65 64 20 66 72 65 65 20 62 79 74 65 73  ented free bytes
6ad0: 20 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c 6c   within the cell
6ae0: 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 0a 3c 74   content area.<t
6af0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
6b00: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c  er valign=top>8<
6b10: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6b20: 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 3c 74 64 20  valign=top>4<td 
6b30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
6b40: 72 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74  right-most point
6b50: 65 72 20 28 69 6e 74 65 72 69 6f 72 20 62 2d 74  er (interior b-t
6b60: 72 65 65 20 70 61 67 65 73 20 6f 6e 6c 79 29 0a  ree pages only).
6b70: 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71  </table></blockq
6b80: 75 6f 74 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a  uote></center>..
6b90: 3c 70 3e 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69  <p>^The cell poi
6ba0: 6e 74 65 72 20 61 72 72 61 79 20 6f 66 20 61 20  nter array of a 
6bb0: 62 2d 74 72 65 65 20 70 61 67 65 20 69 6d 6d 65  b-tree page imme
6bc0: 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20  diately follows 
6bd0: 74 68 65 20 62 2d 74 72 65 65 0a 70 61 67 65 20  the b-tree.page 
6be0: 68 65 61 64 65 72 2e 20 20 4c 65 74 20 4b 20 62  header.  Let K b
6bf0: 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
6c00: 63 65 6c 6c 73 20 6f 6e 20 74 68 65 20 62 74 72  cells on the btr
6c10: 65 65 2e 20 20 5e 54 68 65 20 63 65 6c 6c 20 70  ee.  ^The cell p
6c20: 6f 69 6e 74 65 72 0a 61 72 72 61 79 20 63 6f 6e  ointer.array con
6c30: 73 69 73 74 73 20 6f 66 20 4b 20 32 2d 62 79 74  sists of K 2-byt
6c40: 65 20 69 6e 74 65 67 65 72 20 6f 66 66 73 65 74  e integer offset
6c50: 73 20 74 6f 20 74 68 65 20 63 65 6c 6c 20 63 6f  s to the cell co
6c60: 6e 74 65 6e 74 73 2e 20 20 5e 54 68 65 0a 63 65  ntents.  ^The.ce
6c70: 6c 6c 20 70 6f 69 6e 74 65 72 73 20 61 72 65 20  ll pointers are 
6c80: 61 72 72 61 6e 67 65 64 20 69 6e 20 6b 65 79 20  arranged in key 
6c90: 6f 72 64 65 72 20 77 69 74 68 20 6c 65 66 74 2d  order with left-
6ca0: 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68 65 20 63  most cell (the c
6cb0: 65 6c 6c 20 77 69 74 68 20 74 68 65 0a 73 6d 61  ell with the.sma
6cc0: 6c 6c 65 73 74 20 6b 65 79 29 20 66 69 72 73 74  llest key) first
6cd0: 20 61 6e 64 20 74 68 65 20 72 69 67 68 74 2d 6d   and the right-m
6ce0: 6f 73 74 20 63 65 6c 6c 20 28 74 68 65 20 63 65  ost cell (the ce
6cf0: 6c 6c 20 77 69 74 68 20 74 68 65 20 6c 61 72 67  ll with the larg
6d00: 65 73 74 0a 6b 65 79 29 20 6c 61 73 74 2e 3c 2f  est.key) last.</
6d10: 70 3e 0a 0a 3c 70 3e 43 65 6c 6c 20 63 6f 6e 74  p>..<p>Cell cont
6d20: 65 6e 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ent is stored in
6d30: 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e   the cell conten
6d40: 74 20 72 65 67 69 6f 6e 20 6f 66 20 74 68 65 20  t region of the 
6d50: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 53 51 4c  b-tree page..SQL
6d60: 69 74 65 20 73 74 72 69 76 65 73 20 74 6f 20 70  ite strives to p
6d70: 6c 61 63 65 20 63 65 6c 6c 73 20 61 73 20 66 61  lace cells as fa
6d80: 72 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  r toward the end
6d90: 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70   of the b-tree p
6da0: 61 67 65 20 61 73 0a 69 74 20 63 61 6e 2c 20 69  age as.it can, i
6db0: 6e 20 6f 72 64 65 72 20 74 6f 20 6c 65 61 76 65  n order to leave
6dc0: 20 73 70 61 63 65 20 66 6f 72 20 66 75 74 75 72   space for futur
6dd0: 65 20 67 72 6f 77 74 68 20 6f 66 20 74 68 65 20  e growth of the 
6de0: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72  cell pointer arr
6df0: 61 79 2e 0a 54 68 65 20 61 72 65 61 20 69 6e 20  ay..The area in 
6e00: 62 65 74 77 65 65 6e 20 74 68 65 20 6c 61 73 74  between the last
6e10: 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72   cell pointer ar
6e20: 72 61 79 20 65 6e 74 72 79 20 61 6e 64 20 74 68  ray entry and th
6e30: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 74  e beginning of.t
6e40: 68 65 20 66 69 72 73 74 20 63 65 6c 6c 20 69 73  he first cell is
6e50: 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64   the unallocated
6e60: 20 72 65 67 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c   region..</p>..<
6e70: 70 3e 5e 49 66 20 61 20 70 61 67 65 20 63 6f 6e  p>^If a page con
6e80: 74 61 69 6e 73 20 6e 6f 20 63 65 6c 6c 73 20 28  tains no cells (
6e90: 77 68 69 63 68 20 69 73 20 6f 6e 6c 79 20 70 6f  which is only po
6ea0: 73 73 69 62 6c 65 20 66 6f 72 20 61 20 72 6f 6f  ssible for a roo
6eb0: 74 20 70 61 67 65 0a 6f 66 20 61 20 74 61 62 6c  t page.of a tabl
6ec0: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
6ed0: 6e 6f 20 72 6f 77 73 29 20 74 68 65 6e 20 74 68  no rows) then th
6ee0: 65 20 6f 66 66 73 65 74 20 74 6f 20 74 68 65 20  e offset to the 
6ef0: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 0a 61 72 65  cell content.are
6f00: 61 20 77 69 6c 6c 20 65 71 75 61 6c 20 74 68 65  a will equal the
6f10: 20 70 61 67 65 20 73 69 7a 65 20 6d 69 6e 75 73   page size minus
6f20: 20 74 68 65 20 62 79 74 65 73 20 6f 66 20 72 65   the bytes of re
6f30: 73 65 72 76 65 64 20 73 70 61 63 65 2e 20 20 5e  served space.  ^
6f40: 28 49 66 0a 74 68 65 20 64 61 74 61 62 61 73 65  (If.the database
6f50: 20 75 73 65 73 20 61 20 36 35 35 33 36 2d 62 79   uses a 65536-by
6f60: 74 65 20 70 61 67 65 20 73 69 7a 65 20 61 6e 64  te page size and
6f70: 20 74 68 65 20 72 65 73 65 72 76 65 64 20 73 70   the reserved sp
6f80: 61 63 65 20 69 73 20 7a 65 72 6f 0a 28 74 68 65  ace is zero.(the
6f90: 20 75 73 75 61 6c 20 76 61 6c 75 65 20 66 6f 72   usual value for
6fa0: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 29   reserved space)
6fb0: 20 74 68 65 6e 20 74 68 65 20 63 65 6c 6c 20 63   then the cell c
6fc0: 6f 6e 74 65 6e 74 20 6f 66 66 73 65 74 20 6f 66  ontent offset of
6fd0: 20 61 6e 0a 65 6d 70 74 79 20 70 61 67 65 20 77   an.empty page w
6fe0: 61 6e 74 73 20 74 6f 20 62 65 20 36 35 35 33 36  ants to be 65536
6ff0: 2e 20 20 0a 48 6f 77 65 76 65 72 2c 20 74 68 61  .  .However, tha
7000: 74 20 69 6e 74 65 67 65 72 20 69 73 20 74 6f 6f  t integer is too
7010: 20 6c 61 72 67 65 20 74 6f 20 62 65 20 73 74 6f   large to be sto
7020: 72 65 64 20 69 6e 20 61 0a 32 2d 62 79 74 65 20  red in a.2-byte 
7030: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
7040: 2c 20 73 6f 20 61 20 76 61 6c 75 65 20 6f 66 20  , so a value of 
7050: 30 20 69 73 20 75 73 65 64 20 69 6e 20 69 74 73  0 is used in its
7060: 20 70 6c 61 63 65 2e 29 5e 0a 0a 3c 70 3e 41 20   place.)^..<p>A 
7070: 66 72 65 65 62 6c 6f 63 6b 20 69 73 20 61 20 73  freeblock is a s
7080: 74 72 75 63 74 75 72 65 20 75 73 65 64 20 74 6f  tructure used to
7090: 20 69 64 65 6e 74 69 66 79 20 75 6e 61 6c 6c 6f   identify unallo
70a0: 63 61 74 65 64 20 73 70 61 63 65 20 77 69 74 68  cated space with
70b0: 69 6e 0a 61 20 62 2d 74 72 65 65 20 70 61 67 65  in.a b-tree page
70c0: 2e 20 20 46 72 65 65 62 6c 6f 63 6b 73 20 61 72  .  Freeblocks ar
70d0: 65 20 6f 72 67 61 6e 69 7a 65 64 20 61 73 20 61  e organized as a
70e0: 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 66 69   chain.  ^The fi
70f0: 72 73 74 20 32 20 62 79 74 65 73 20 6f 66 0a 61  rst 2 bytes of.a
7100: 20 66 72 65 65 62 6c 6f 63 6b 20 61 72 65 20 61   freeblock are a
7110: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
7120: 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
7130: 20 6f 66 66 73 65 74 20 69 6e 20 74 68 65 20 62   offset in the b
7140: 2d 74 72 65 65 20 70 61 67 65 0a 6f 66 20 74 68  -tree page.of th
7150: 65 20 6e 65 78 74 20 66 72 65 65 62 6c 6f 63 6b  e next freeblock
7160: 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2c 20 6f   in the chain, o
7170: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66 72  r zero if the fr
7180: 65 65 62 6c 6f 63 6b 20 69 73 20 74 68 65 20 6c  eeblock is the l
7190: 61 73 74 20 6f 6e 0a 74 68 65 20 63 68 61 69 6e  ast on.the chain
71a0: 2e 20 20 5e 54 68 65 20 74 68 69 72 64 20 61 6e  .  ^The third an
71b0: 64 20 66 6f 75 72 74 68 20 62 79 74 65 73 20 6f  d fourth bytes o
71c0: 66 20 65 61 63 68 20 66 72 65 65 62 6c 6f 63 6b  f each freeblock
71d0: 20 66 6f 72 6d 0a 61 20 62 69 67 2d 65 6e 64 69   form.a big-endi
71e0: 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
71f0: 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20   is the size of 
7200: 74 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e  the freeblock in
7210: 20 62 79 74 65 73 2c 20 69 6e 63 6c 75 64 69 6e   bytes, includin
7220: 67 0a 74 68 65 20 34 2d 62 79 74 65 20 68 65 61  g.the 4-byte hea
7230: 64 65 72 2e 20 20 5e 46 72 65 65 62 6c 6f 63 6b  der.  ^Freeblock
7240: 73 20 61 72 65 20 61 6c 77 61 79 73 20 63 6f 6e  s are always con
7250: 6e 65 63 74 65 64 20 69 6e 20 6f 72 64 65 72 20  nected in order 
7260: 0a 6f 66 20 69 6e 63 72 65 61 73 69 6e 67 20 6f  .of increasing o
7270: 66 66 73 65 74 2e 20 20 5e 54 68 65 20 73 65 63  ffset.  ^The sec
7280: 6f 6e 64 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ond field of the
7290: 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61   b-tree page hea
72a0: 64 65 72 20 69 73 20 74 68 65 0a 6f 66 66 73 65  der is the.offse
72b0: 74 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66  t of the first f
72c0: 72 65 65 62 6c 6f 63 6b 2c 20 6f 72 20 7a 65 72  reeblock, or zer
72d0: 6f 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  o if there are n
72e0: 6f 20 66 72 65 65 62 6c 6f 63 6b 73 20 6f 6e 20  o freeblocks on 
72f0: 74 68 65 0a 70 61 67 65 2e 20 20 5e 49 6e 20 61  the.page.  ^In a
7300: 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74   well-formed b-t
7310: 72 65 65 20 70 61 67 65 2c 20 74 68 65 72 65 20  ree page, there 
7320: 77 69 6c 6c 20 61 6c 77 61 79 73 20 62 65 20 61  will always be a
7330: 74 20 6c 65 61 73 74 20 6f 6e 65 20 63 65 6c 6c  t least one cell
7340: 0a 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73  .before the firs
7350: 74 20 66 72 65 65 62 6c 6f 63 6b 2e 3c 2f 70 3e  t freeblock.</p>
7360: 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b  ..<p>A freeblock
7370: 20 72 65 71 75 69 72 65 73 20 61 74 20 6c 65 61   requires at lea
7380: 73 74 20 34 20 62 79 74 65 73 20 6f 66 20 73 70  st 4 bytes of sp
7390: 61 63 65 2e 20 20 49 66 20 74 68 65 72 65 20 69  ace.  If there i
73a0: 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 0a 67 72  s an isolated.gr
73b0: 6f 75 70 20 6f 66 20 31 2c 20 32 2c 20 6f 72 20  oup of 1, 2, or 
73c0: 33 20 75 6e 75 73 65 64 20 62 79 74 65 73 20 77  3 unused bytes w
73d0: 69 74 68 69 6e 20 74 68 65 20 63 65 6c 6c 20 63  ithin the cell c
73e0: 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68 6f  ontent area, tho
73f0: 73 65 20 62 79 74 65 73 0a 63 6f 6d 70 72 69 73  se bytes.compris
7400: 65 20 61 20 66 72 61 67 6d 65 6e 74 2e 20 20 5e  e a fragment.  ^
7410: 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  The total number
7420: 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 6c 6c   of bytes in all
7430: 20 66 72 61 67 6d 65 6e 74 73 20 69 73 20 73 74   fragments is st
7440: 6f 72 65 64 0a 69 6e 20 74 68 65 20 66 69 66 74  ored.in the fift
7450: 68 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 62  h field of the b
7460: 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65  -tree page heade
7470: 72 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66  r.  ^In a well-f
7480: 6f 72 6d 65 64 20 62 2d 74 72 65 65 20 70 61 67  ormed b-tree pag
7490: 65 2c 0a 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  e,.the total num
74a0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
74b0: 66 72 61 67 6d 65 6e 74 73 20 6d 61 79 20 6e 6f  fragments may no
74c0: 74 20 65 78 63 65 65 64 20 36 30 2e 3c 2f 70 3e  t exceed 60.</p>
74d0: 0a 0a 3c 70 3e 54 68 65 20 74 6f 74 61 6c 20 61  ..<p>The total a
74e0: 6d 6f 75 6e 74 20 6f 66 20 66 72 65 65 20 73 70  mount of free sp
74f0: 61 63 65 20 6f 6e 20 61 20 62 2d 74 72 65 65 20  ace on a b-tree 
7500: 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  page consists of
7510: 20 74 68 65 20 73 69 7a 65 0a 6f 66 20 74 68 65   the size.of the
7520: 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65 67   unallocated reg
7530: 69 6f 6e 20 70 6c 75 73 20 74 68 65 20 74 6f 74  ion plus the tot
7540: 61 6c 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20 66  al size of all f
7550: 72 65 65 62 6c 6f 63 6b 73 20 70 6c 75 73 20 74  reeblocks plus t
7560: 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 66 72 61  he.number of fra
7570: 67 6d 65 6e 74 65 64 20 66 72 65 65 20 62 79 74  gmented free byt
7580: 65 73 2e 20 20 5e 53 51 4c 69 74 65 20 6d 61 79  es.  ^SQLite may
7590: 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69   from time to ti
75a0: 6d 65 20 72 65 6f 72 67 61 6e 69 7a 65 0a 61 20  me reorganize.a 
75b0: 62 2d 74 72 65 65 20 70 61 67 65 20 73 6f 20 74  b-tree page so t
75c0: 68 61 74 20 74 68 65 72 65 20 61 72 65 20 6e 6f  hat there are no
75d0: 20 66 72 65 65 62 6c 6f 63 6b 73 20 6f 72 20 66   freeblocks or f
75e0: 72 61 67 6d 65 6e 74 20 62 79 74 65 73 2c 20 61  ragment bytes, a
75f0: 6c 6c 0a 75 6e 75 73 65 64 20 62 79 74 65 73 20  ll.unused bytes 
7600: 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  are contained in
7610: 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64   the unallocated
7620: 20 73 70 61 63 65 20 72 65 67 69 6f 6e 2c 20 61   space region, a
7630: 6e 64 20 61 6c 6c 0a 63 65 6c 6c 73 20 61 72 65  nd all.cells are
7640: 20 70 61 63 6b 65 64 20 74 69 67 68 74 6c 79 20   packed tightly 
7650: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
7660: 65 20 70 61 67 65 2e 20 20 54 68 69 73 20 69 73  e page.  This is
7670: 20 63 61 6c 6c 65 64 20 0a 22 64 65 66 72 61 67   called ."defrag
7680: 6d 65 6e 74 69 6e 67 22 20 74 68 65 20 62 2d 74  menting" the b-t
7690: 72 65 65 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c  ree page.</p>..<
76a0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
76b0: 76 61 72 69 6e 74 20 7b 76 61 72 69 61 62 6c 65  varint {variable
76c0: 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 7d  -length integer}
76d0: 20 7b 76 61 72 69 6e 74 7d 3c 2f 74 63 6c 3e 0a   {varint}</tcl>.
76e0: 0a 3c 70 3e 41 20 76 61 72 69 61 62 6c 65 2d 6c  .<p>A variable-l
76f0: 65 6e 67 74 68 20 69 6e 74 65 67 65 72 20 6f 72  ength integer or
7700: 20 22 76 61 72 69 6e 74 22 20 69 73 20 61 20 73   "varint" is a s
7710: 74 61 74 69 63 20 48 75 66 66 6d 61 6e 20 65 6e  tatic Huffman en
7720: 63 6f 64 69 6e 67 0a 6f 66 20 36 34 2d 62 69 74  coding.of 64-bit
7730: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
7740: 20 69 6e 74 65 67 65 72 73 20 74 68 61 74 20 75   integers that u
7750: 73 65 73 20 6c 65 73 73 20 73 70 61 63 65 20 66  ses less space f
7760: 6f 72 20 73 6d 61 6c 6c 20 70 6f 73 69 74 69 76  or small positiv
7770: 65 20 0a 76 61 6c 75 65 73 2e 20 0a 41 20 76 61  e .values. .A va
7780: 72 69 6e 74 20 69 73 20 62 65 74 77 65 65 6e 20  rint is between 
7790: 31 20 61 6e 64 20 39 20 62 79 74 65 73 20 69 6e  1 and 9 bytes in
77a0: 20 6c 65 6e 67 74 68 2e 20 20 54 68 65 20 76 61   length.  The va
77b0: 72 69 6e 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  rint consists of
77c0: 20 65 69 74 68 65 72 0a 7a 65 72 6f 20 6f 72 20   either.zero or 
77d0: 6d 6f 72 65 20 62 79 74 65 20 77 68 69 63 68 20  more byte which 
77e0: 68 61 76 65 20 74 68 65 20 68 69 67 68 2d 6f 72  have the high-or
77f0: 64 65 72 20 62 69 74 20 73 65 74 20 66 6f 6c 6c  der bit set foll
7800: 6f 77 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  owed by a single
7810: 20 62 79 74 65 0a 77 69 74 68 20 74 68 65 20 68   byte.with the h
7820: 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 63 6c  igh-order bit cl
7830: 65 61 72 2c 20 6f 72 20 6e 69 6e 65 20 62 79 74  ear, or nine byt
7840: 65 73 2c 20 77 68 69 63 68 65 76 65 72 20 69 73  es, whichever is
7850: 20 73 68 6f 72 74 65 72 2e 0a 54 68 65 20 6c 6f   shorter..The lo
7860: 77 65 72 20 73 65 76 65 6e 20 62 69 74 73 20 6f  wer seven bits o
7870: 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 66 69  f each of the fi
7880: 72 73 74 20 65 69 67 68 74 20 62 79 74 65 73 20  rst eight bytes 
7890: 61 6e 64 20 61 6c 6c 20 38 20 62 69 74 73 20 6f  and all 8 bits o
78a0: 66 0a 74 68 65 20 6e 69 6e 74 68 20 62 79 74 65  f.the ninth byte
78b0: 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
78c0: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 36 34 2d  onstruct the 64-
78d0: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
78e0: 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 56 61 72  ent integer..Var
78f0: 69 6e 74 73 20 61 72 65 20 62 69 67 2d 65 6e 64  ints are big-end
7900: 69 61 6e 3a 20 62 69 74 73 20 74 61 6b 65 6e 20  ian: bits taken 
7910: 66 72 6f 6d 20 74 68 65 20 65 61 72 6c 69 65 72  from the earlier
7920: 20 62 79 74 65 20 6f 66 20 74 68 65 20 76 61 72   byte of the var
7930: 69 6e 74 0a 61 72 65 20 74 68 65 20 6d 6f 72 65  int.are the more
7940: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
7950: 20 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d   bits taken from
7960: 20 74 68 65 20 6c 61 74 65 72 20 62 79 74 65 73   the later bytes
7970: 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66  . </p>..<p>The f
7980: 6f 72 6d 61 74 20 6f 66 20 61 20 63 65 6c 6c 20  ormat of a cell 
7990: 64 65 70 65 6e 64 73 20 6f 6e 20 77 68 69 63 68  depends on which
79a0: 20 6b 69 6e 64 20 6f 66 20 62 2d 74 72 65 65 20   kind of b-tree 
79b0: 70 61 67 65 20 74 68 65 20 63 65 6c 6c 0a 61 70  page the cell.ap
79c0: 70 65 61 72 73 20 6f 6e 2e 20 20 54 68 65 20 66  pears on.  The f
79d0: 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 73  ollowing table s
79e0: 68 6f 77 73 20 74 68 65 20 65 6c 65 6d 65 6e 74  hows the element
79f0: 73 20 6f 66 20 61 20 63 65 6c 6c 2c 20 69 6e 0a  s of a cell, in.
7a00: 6f 72 64 65 72 20 6f 66 20 61 70 70 65 61 72 61  order of appeara
7a10: 6e 63 65 2c 20 66 6f 72 20 74 68 65 20 76 61 72  nce, for the var
7a20: 69 6f 75 73 20 62 2d 74 72 65 65 20 70 61 67 65  ious b-tree page
7a30: 20 74 79 70 65 73 2e 3c 2f 70 3e 0a 0a 3c 62 6c   types.</p>..<bl
7a40: 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c 3e 0a 3c 64  ockquote><dl>.<d
7a50: 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65  t><p>Table B-Tre
7a60: 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 70 3e  e Leaf Cell:</p>
7a70: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c  </dt>.<dd><p><ul
7a80: 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77  >.<li>A varint w
7a90: 68 69 63 68 20 69 73 20 74 68 65 20 74 6f 74 61  hich is the tota
7aa0: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
7ab0: 73 20 6f 66 20 70 61 79 6c 6f 61 64 2c 20 69 6e  s of payload, in
7ac0: 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72  cluding any.over
7ad0: 66 6c 6f 77 0a 3c 6c 69 3e 41 20 76 61 72 69 6e  flow.<li>A varin
7ae0: 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 69  t which is the i
7af0: 6e 74 65 67 65 72 20 6b 65 79 2c 20 61 2e 6b 2e  nteger key, a.k.
7b00: 61 2e 20 22 72 6f 77 69 64 22 0a 3c 6c 69 3e 54  a. "rowid".<li>T
7b10: 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69  he initial porti
7b20: 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  on of the payloa
7b30: 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20  d that does not 
7b40: 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f  spill to overflo
7b50: 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34  w.pages..<li>A 4
7b60: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
7b70: 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75   integer page nu
7b80: 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69 72  mber for the fir
7b90: 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f  st page of the.o
7ba0: 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73  verflow page lis
7bb0: 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61  t - omitted if a
7bc0: 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20  ll payload fits 
7bd0: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
7be0: 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64  ge..</ul></p></d
7bf0: 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65  d>..<dt><p>Table
7c00: 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72   B-Tree Interior
7c10: 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a   Cell:</p></dt>.
7c20: 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e  <dd><p><ul>.<li>
7c30: 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  A 4-byte big-end
7c40: 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 20  ian page number 
7c50: 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 65 66  which is the lef
7c60: 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e  t child pointer.
7c70: 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68  .<li>A varint wh
7c80: 69 63 68 20 69 73 20 74 68 65 20 69 6e 74 65 67  ich is the integ
7c90: 65 72 20 6b 65 79 0a 3c 2f 75 6c 3e 3c 2f 70 3e  er key.</ul></p>
7ca0: 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e  </dd>..<dt><p>In
7cb0: 64 65 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20  dex B-Tree Leaf 
7cc0: 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c  Cell:</p></dt>.<
7cd0: 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41  dd><p><ul>.<li>A
7ce0: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
7cf0: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
7d00: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65  r of bytes of ke
7d10: 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75  y payload, inclu
7d20: 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f  ding any.overflo
7d30: 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61  w.<li>The initia
7d40: 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  l portion of the
7d50: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f   payload that do
7d60: 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20  es not spill to 
7d70: 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a  overflow.pages..
7d80: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
7d90: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
7da0: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
7db0: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  the first page o
7dc0: 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70  f the.overflow p
7dd0: 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74  age list - omitt
7de0: 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61  ed if all payloa
7df0: 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d  d fits on the b-
7e00: 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e  tree page..</ul>
7e10: 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c  </p></dd>..<dt><
7e20: 70 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20 49  p>Index B-Tree I
7e30: 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 70  nterior Cell:</p
7e40: 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75  ></dt>.<dd><p><u
7e50: 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  l>.<li>A 4-byte 
7e60: 62 69 67 2d 65 6e 64 69 61 6e 70 61 67 65 20 6e  big-endianpage n
7e70: 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 74  umber which is t
7e80: 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70 6f  he left child po
7e90: 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72  inter..<li>A var
7ea0: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
7eb0: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
7ec0: 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20 70 61   bytes of key pa
7ed0: 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67  yload, including
7ee0: 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c   any.overflow.<l
7ef0: 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f  i>The initial po
7f00: 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79  rtion of the pay
7f10: 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e  load that does n
7f20: 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72  ot spill to over
7f30: 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e  flow.pages..<li>
7f40: 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  A 4-byte big-end
7f50: 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65  ian integer page
7f60: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
7f70: 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74 68  first page of th
7f80: 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  e.overflow page 
7f90: 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69  list - omitted i
7fa0: 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69  f all payload fi
7fb0: 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ts on the b-tree
7fc0: 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e   page..</ul></p>
7fd0: 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f  </dd>.</dl></blo
7fe0: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
7ff0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
8000: 76 65 20 63 61 6e 20 62 65 20 72 65 63 61 73 74  ve can be recast
8010: 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 66 6f   into a table fo
8020: 72 6d 61 74 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  rmat as follows:
8030: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
8040: 61 67 6d 65 6e 74 20 63 65 6c 6c 66 6f 72 6d 61  agment cellforma
8050: 74 20 7b 63 65 6c 6c 20 66 6f 72 6d 61 74 20 73  t {cell format s
8060: 75 6d 6d 61 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 63  ummary}</tcl>.<c
8070: 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65  enter>.<i>B-tree
8080: 20 43 65 6c 6c 20 46 6f 72 6d 61 74 3c 2f 69 3e   Cell Format</i>
8090: 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
80a0: 20 77 69 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74   width="80%">.<t
80b0: 72 3e 3c 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e  r><th rowspan=2>
80c0: 44 61 74 61 74 79 70 65 0a 20 20 20 20 3c 74 68  Datatype.    <th
80d0: 20 63 6f 6c 73 70 61 6e 3d 34 3e 41 70 70 65 61   colspan=4>Appea
80e0: 72 73 20 69 6e 2e 2e 2e 0a 20 20 20 20 3c 74 68  rs in....    <th
80f0: 20 72 6f 77 73 70 61 6e 3d 32 3e 44 65 73 63 72   rowspan=2>Descr
8100: 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 68 3e 54  iption.<tr><th>T
8110: 61 62 6c 65 20 4c 65 61 66 0a 20 20 20 20 3c 74  able Leaf.    <t
8120: 68 3e 54 61 62 6c 65 20 49 6e 74 65 72 69 6f 72  h>Table Interior
8130: 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 4c  .    <th>Index L
8140: 65 61 66 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65  eaf.    <th>Inde
8150: 78 20 49 6e 74 65 72 69 6f 72 0a 3c 74 72 3e 3c  x Interior.<tr><
8160: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
8170: 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74  valign=top>4-byt
8180: 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 3c 74  e integer.    <t
8190: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
81a0: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
81b0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
81c0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
81d0: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
81e0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
81f0: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
8200: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8210: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8220: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8230: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67  d align=left>Pag
8240: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 65 66 74  e number of left
8250: 20 63 68 69 6c 64 0a 3c 74 72 3e 3c 74 64 20 61   child.<tr><td a
8260: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8270: 67 6e 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20  gn=top>varint.  
8280: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8290: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
82a0: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
82b0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
82c0: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
82d0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
82e0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
82f0: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
8300: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
8310: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
8320: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65      <td align=le
8330: 66 74 3e 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  ft>Number of byt
8340: 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 0a 3c 74  es of payload.<t
8350: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
8360: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61  er valign=top>va
8370: 72 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69  rint.    <td ali
8380: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8390: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
83a0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
83b0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
83c0: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
83d0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
83e0: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
83f0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8400: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
8410: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
8420: 67 6e 3d 6c 65 66 74 3e 52 6f 77 69 64 0a 3c 74  gn=left>Rowid.<t
8430: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
8440: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 62 79  er valign=top>by
8450: 74 65 20 61 72 72 61 79 0a 20 20 20 20 3c 74 64  te array.    <td
8460: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8470: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8480: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8490: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
84a0: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
84b0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
84c0: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
84d0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
84e0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
84f0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
8500: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61  td align=left>Pa
8510: 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c  yload.<tr><td al
8520: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8530: 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74  n=top>4-byte int
8540: 65 67 65 72 0a 20 20 20 20 3c 74 64 20 61 6c 69  eger.    <td ali
8550: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8560: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8570: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8580: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
8590: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
85a0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
85b0: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
85c0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
85d0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
85e0: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
85f0: 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e  lign=left>Page n
8600: 75 6d 62 65 72 20 6f 66 20 66 69 72 73 74 20 6f  umber of first o
8610: 76 65 72 66 6c 6f 77 20 70 61 67 65 0a 3c 2f 74  verflow page.</t
8620: 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a  able></center>..
8630: 0a 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  ..<tr><td align=
8640: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8650: 70 3e 0a 0a 3c 70 3e 54 68 65 20 61 6d 6f 75 6e  p>..<p>The amoun
8660: 74 20 6f 66 20 70 61 79 6c 6f 61 64 20 74 68 61  t of payload tha
8670: 74 20 73 70 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76  t spills onto ov
8680: 65 72 66 6c 6f 77 20 70 61 67 65 73 20 61 6c 73  erflow pages als
8690: 6f 20 64 65 70 65 6e 64 73 20 6f 6e 0a 74 68 65  o depends on.the
86a0: 20 70 61 67 65 20 74 79 70 65 2e 20 20 46 6f 72   page type.  For
86b0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
86c0: 6f 6d 70 75 74 61 74 69 6f 6e 73 2c 20 6c 65 74  omputations, let
86d0: 20 55 20 62 65 20 74 68 65 20 75 73 61 62 6c 65   U be the usable
86e0: 20 73 69 7a 65 0a 6f 66 20 61 20 64 61 74 61 62   size.of a datab
86f0: 61 73 65 20 70 61 67 65 2c 20 74 68 65 20 74 6f  ase page, the to
8700: 74 61 6c 20 70 61 67 65 20 73 69 7a 65 20 6c 65  tal page size le
8710: 73 73 20 74 68 65 20 72 65 73 65 72 76 65 64 20  ss the reserved 
8720: 73 70 61 63 65 20 61 74 20 74 68 65 0a 65 6e 64  space at the.end
8730: 20 6f 66 20 65 61 63 68 20 70 61 67 65 2e 20 20   of each page.  
8740: 41 6e 64 20 6c 65 74 20 50 20 62 65 20 74 68 65  And let P be the
8750: 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2e 3c 2f   payload size.</
8760: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
8770: 3c 64 6c 3e 0a 3c 64 74 3e 54 61 62 6c 65 20 42  <dl>.<dt>Table B
8780: 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a  -Tree Leaf Cell:
8790: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 49  </dt>.<dd><p>.^I
87a0: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69  f the payload si
87b0: 7a 65 20 50 20 69 73 20 6c 65 73 73 20 74 68 61  ze P is less tha
87c0: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 55 2d  n or equal to U-
87d0: 33 35 20 74 68 65 6e 0a 74 68 65 20 65 6e 74 69  35 then.the enti
87e0: 72 65 20 70 61 79 6c 6f 61 64 20 69 73 20 73 74  re payload is st
87f0: 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72  ored on the b-tr
8800: 65 65 20 6c 65 61 66 20 70 61 67 65 2e 20 20 0a  ee leaf page.  .
8810: 5e 28 4c 65 74 20 4d 20 62 65 20 28 28 55 2d 31  ^(Let M be ((U-1
8820: 32 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e 20 20  2)*32/255)-23.  
8830: 49 66 20 50 20 69 73 20 67 72 65 61 74 65 72 20  If P is greater 
8840: 74 68 61 6e 20 55 2d 33 35 0a 74 68 65 6e 20 74  than U-35.then t
8850: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
8860: 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  e stored on the 
8870: 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65  b-tree leaf page
8880: 20 69 73 20 74 68 65 20 73 6d 61 6c 6c 65 72 20   is the smaller 
8890: 6f 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34  of.M+((P-M)%(U-4
88a0: 29 29 20 61 6e 64 20 55 2d 33 35 2e 29 5e 0a 5e  )) and U-35.)^.^
88b0: 28 4e 6f 74 65 20 74 68 61 74 20 6e 75 6d 62 65  (Note that numbe
88c0: 72 20 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65  r of bytes store
88d0: 64 20 6f 6e 20 74 68 65 20 6c 65 61 66 20 70 61  d on the leaf pa
88e0: 67 65 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73  ge is never less
88f0: 20 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c   than M.)^.</p><
8900: 2f 64 64 3e 0a 0a 3c 64 74 3e 54 61 62 6c 65 20  /dd>..<dt>Table 
8910: 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20  B-Tree Interior 
8920: 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  Cell:</dt>.<dd><
8930: 70 3e 0a 49 6e 74 65 72 69 6f 72 20 70 61 67 65  p>.Interior page
8940: 73 20 6f 66 20 74 61 62 6c 65 20 62 2d 74 72 65  s of table b-tre
8950: 65 73 20 68 61 76 65 20 6e 6f 20 70 61 79 6c 6f  es have no paylo
8960: 61 64 20 61 6e 64 20 73 6f 20 74 68 65 72 65 20  ad and so there 
8970: 69 73 20 6e 65 76 65 72 0a 61 6e 79 20 70 61 79  is never.any pay
8980: 6c 6f 61 64 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c  load to spill..<
8990: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 49 6e  /p></dd>..<dt>In
89a0: 64 65 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20  dex B-Tree Leaf 
89b0: 4f 72 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c  Or Interior Cell
89c0: 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e  :</dt>.<dd><p>.^
89d0: 28 4c 65 74 20 58 20 62 65 20 28 28 55 2d 31 32  (Let X be ((U-12
89e0: 29 2a 36 34 2f 32 35 35 29 2d 32 33 29 2e 20 20  )*64/255)-23).  
89f0: 49 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73  If the payload s
8a00: 69 7a 65 20 50 20 69 73 20 6c 65 73 73 20 74 68  ize P is less th
8a10: 61 6e 0a 6f 72 20 65 71 75 61 6c 20 74 6f 20 58  an.or equal to X
8a20: 20 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65   then the entire
8a30: 20 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72   payload is stor
8a40: 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ed on the b-tree
8a50: 20 70 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d   page.)^.^(Let M
8a60: 20 62 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32   be ((U-12)*32/2
8a70: 35 35 29 2d 32 33 2e 20 20 49 66 20 50 20 69 73  55)-23.  If P is
8a80: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 58 20   greater than X 
8a90: 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 0a  then the number.
8aa0: 6f 66 20 62 79 74 65 20 73 74 6f 72 65 64 20 6f  of byte stored o
8ab0: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
8ac0: 65 20 69 73 20 74 68 65 20 73 6d 61 6c 6c 65 72  e is the smaller
8ad0: 20 6f 66 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d   of.M+((P-M)%(U-
8ae0: 34 29 29 20 61 6e 64 20 58 2e 29 5e 0a 5e 28 4e  4)) and X.)^.^(N
8af0: 6f 74 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20  ote that number 
8b00: 6f 66 20 62 79 74 65 73 20 73 74 6f 72 65 64 20  of bytes stored 
8b10: 6f 6e 20 74 68 65 20 69 6e 64 65 78 20 70 61 67  on the index pag
8b20: 65 20 69 73 20 6e 65 76 65 72 20 6c 65 73 73 20  e is never less 
8b30: 74 68 61 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f  than M.)^.</p></
8b40: 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b  dd>.</dl></block
8b50: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f  quote>..<p>The o
8b60: 76 65 72 66 6c 6f 77 20 74 68 72 65 73 68 6f 6c  verflow threshol
8b70: 64 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20  ds are designed 
8b80: 74 6f 20 67 69 76 65 20 61 20 6d 69 6e 69 6d 75  to give a minimu
8b90: 6d 20 66 61 6e 6f 75 74 20 6f 66 0a 34 20 66 6f  m fanout of.4 fo
8ba0: 72 20 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20  r index b-trees 
8bb0: 61 6e 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  and to make sure
8bc0: 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 70   enough of the p
8bd0: 61 79 6c 6f 61 64 0a 69 73 20 6f 6e 20 74 68 65  ayload.is on the
8be0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 61   b-tree page tha
8bf0: 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  t the record hea
8c00: 64 65 72 20 63 61 6e 20 75 73 75 61 6c 6c 79 20  der can usually 
8c10: 62 65 20 61 63 63 65 73 73 65 64 0a 77 69 74 68  be accessed.with
8c20: 6f 75 74 20 63 6f 6e 73 75 6c 74 69 6e 67 20 61  out consulting a
8c30: 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2e  n overflow page.
8c40: 20 20 49 6e 20 68 69 6e 64 73 69 67 68 74 2c 20    In hindsight, 
8c50: 74 68 65 20 64 65 73 69 67 6e 65 72 73 20 6f 66  the designers of
8c60: 0a 74 68 65 20 53 51 4c 69 74 65 20 62 2d 74 72  .the SQLite b-tr
8c70: 65 65 20 6c 6f 67 69 63 20 72 65 61 6c 69 7a 65  ee logic realize
8c80: 20 74 68 61 74 20 74 68 65 73 65 20 74 68 72 65   that these thre
8c90: 73 68 6f 6c 64 73 20 63 6f 75 6c 64 20 68 61 76  sholds could hav
8ca0: 65 20 62 65 65 6e 0a 6d 61 64 65 20 6d 75 63 68  e been.made much
8cb0: 20 73 69 6d 70 6c 65 72 2e 20 20 48 6f 77 65 76   simpler.  Howev
8cc0: 65 72 2c 20 74 68 65 20 63 6f 6d 70 75 74 61 74  er, the computat
8cd0: 69 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 63  ions cannot be c
8ce0: 68 61 6e 67 65 64 0a 77 69 74 68 6f 75 74 20 72  hanged.without r
8cf0: 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 6e 20 69  esulting in an i
8d00: 6e 63 6f 6d 70 61 74 69 62 6c 65 20 66 69 6c 65  ncompatible file
8d10: 20 66 6f 72 6d 61 74 2e 20 20 41 6e 64 20 74 68   format.  And th
8d20: 65 20 63 75 72 72 65 6e 74 20 63 6f 6d 70 75 74  e current comput
8d30: 61 74 69 6f 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c  ations.work well
8d40: 2c 20 65 76 65 6e 20 69 66 20 74 68 65 79 20 61  , even if they a
8d50: 72 65 20 61 20 6c 69 74 74 6c 65 20 63 6f 6d 70  re a little comp
8d60: 6c 65 78 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  lex.</p>..<tcl>h
8d70: 64 5f 66 72 61 67 6d 65 6e 74 20 6f 76 66 6c 70  d_fragment ovflp
8d80: 67 73 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67  gs {overflow pag
8d90: 65 7d 20 7b 6f 76 65 72 66 6c 6f 77 20 70 61 67  e} {overflow pag
8da0: 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e  es}</tcl>.<h3>1.
8db0: 36 20 43 65 6c 6c 20 50 61 79 6c 6f 61 64 20 4f  6 Cell Payload O
8dc0: 76 65 72 66 6c 6f 77 20 50 61 67 65 73 3c 2f 68  verflow Pages</h
8dd0: 33 3e 0a 0a 3c 70 3e 5e 57 68 65 6e 20 74 68 65  3>..<p>^When the
8de0: 20 70 61 79 6c 6f 61 64 20 6f 66 20 61 20 62 2d   payload of a b-
8df0: 74 72 65 65 20 63 65 6c 6c 20 69 73 20 74 6f 6f  tree cell is too
8e00: 20 6c 61 72 67 65 20 66 6f 72 20 74 68 65 20 62   large for the b
8e10: 2d 74 72 65 65 20 70 61 67 65 2c 0a 74 68 65 20  -tree page,.the 
8e20: 73 75 72 70 6c 75 73 20 69 73 20 73 70 69 6c 6c  surplus is spill
8e30: 65 64 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f 77  ed onto overflow
8e40: 20 70 61 67 65 73 2e 20 20 5e 4f 76 65 72 66 6c   pages.  ^Overfl
8e50: 6f 77 20 70 61 67 65 73 20 66 6f 72 6d 20 61 20  ow pages form a 
8e60: 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e 20 20 5e 54  linked.list.  ^T
8e70: 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 62 79  he first four by
8e80: 74 65 73 20 6f 66 20 65 61 63 68 20 6f 76 65 72  tes of each over
8e90: 66 6c 6f 77 20 70 61 67 65 20 61 72 65 20 61 20  flow page are a 
8ea0: 62 69 67 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67  big-endian.integ
8eb0: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
8ec0: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
8ed0: 68 65 20 6e 65 78 74 20 70 61 67 65 20 69 6e 20  he next page in 
8ee0: 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65  the chain, or ze
8ef0: 72 6f 0a 66 6f 72 20 74 68 65 20 66 69 6e 61 6c  ro.for the final
8f00: 20 70 61 67 65 20 69 6e 20 74 68 65 20 63 68 61   page in the cha
8f10: 69 6e 2e 20 20 5e 54 68 65 20 66 69 66 74 68 20  in.  ^The fifth 
8f20: 62 79 74 65 20 74 68 72 6f 75 67 68 20 74 68 65  byte through the
8f30: 20 6c 61 73 74 20 75 73 61 62 6c 65 0a 62 79 74   last usable.byt
8f40: 65 20 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f  e are used to ho
8f50: 6c 64 20 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74  ld overflow cont
8f60: 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e  ent.</p>..<h3>1.
8f70: 37 20 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72  7 Pointer Map or
8f80: 20 50 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68   Ptrmap Pages</h
8f90: 33 3e 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d  3>..<p>Pointer m
8fa0: 61 70 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67  ap or ptrmap pag
8fb0: 65 73 20 61 72 65 20 65 78 74 72 61 20 70 61 67  es are extra pag
8fc0: 65 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  es inserted into
8fd0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f   the database.to
8fe0: 20 6d 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74   make the operat
8ff0: 69 6f 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63  ion of [auto_vac
9000: 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d  uum] and [increm
9010: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f  ental_vacuum] mo
9020: 64 65 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65  des.more efficie
9030: 6e 74 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20  nt.  Other page 
9040: 74 79 70 65 73 20 69 6e 20 74 68 65 20 64 61 74  types in the dat
9050: 61 62 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20  abase typically 
9060: 68 61 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72  have pointers.fr
9070: 6f 6d 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69  om parent to chi
9080: 6c 64 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ld.  For example
9090: 2c 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  , an interior b-
90a0: 74 72 65 65 20 70 61 67 65 20 63 6f 6e 74 61 69  tree page contai
90b0: 6e 73 20 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69  ns pointers.to i
90c0: 74 73 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20  ts child b-tree 
90d0: 70 61 67 65 73 20 61 6e 64 20 61 6e 20 6f 76 65  pages and an ove
90e0: 72 66 6c 6f 77 20 63 68 61 69 6e 20 68 61 73 20  rflow chain has 
90f0: 61 20 70 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65  a pointer.from e
9100: 61 72 6c 69 65 72 20 74 6f 20 6c 61 74 65 72 20  arlier to later 
9110: 6c 69 6e 6b 73 20 69 6e 20 74 68 65 20 63 68 61  links in the cha
9120: 69 6e 2e 20 20 41 20 70 74 72 6d 61 70 20 70 61  in.  A ptrmap pa
9130: 67 65 20 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b  ge contains link
9140: 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  age.information 
9150: 67 6f 69 6e 67 20 69 6e 20 74 68 65 20 6f 70 70  going in the opp
9160: 6f 73 69 74 65 20 64 69 72 65 63 74 69 6f 6e 2c  osite direction,
9170: 20 66 72 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70   from child to p
9180: 61 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  arent.</p>..<p>^
9190: 50 74 72 6d 61 70 20 70 61 67 65 73 20 6d 75 73  Ptrmap pages mus
91a0: 74 20 65 78 69 73 74 20 69 6e 20 61 6e 79 20 64  t exist in any d
91b0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 69  atabase file whi
91c0: 63 68 20 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72  ch has a non-zer
91d0: 6f 0a 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62  o.largest root b
91e0: 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c 75 65  -tree page value
91f0: 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 6e   at offset 52 in
9200: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
9210: 61 64 65 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61  ader..^If the la
9220: 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65  rgest root b-tre
9230: 65 20 70 61 67 65 20 76 61 6c 75 65 20 69 73 20  e page value is 
9240: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 64  zero, then the d
9250: 61 74 61 62 61 73 65 20 6d 75 73 74 20 6e 6f 74  atabase must not
9260: 0a 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20  .contain ptrmap 
9270: 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  pages.</p>..<p>^
9280: 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 77 69  In a database wi
9290: 74 68 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c  th ptrmap pages,
92a0: 20 74 68 65 20 66 69 72 73 74 20 70 74 72 6d 61   the first ptrma
92b0: 70 20 70 61 67 65 20 69 73 20 70 61 67 65 20 32  p page is page 2
92c0: 2e 0a 41 20 70 74 72 6d 61 70 20 70 61 67 65 20  ..A ptrmap page 
92d0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
92e0: 72 72 61 79 20 6f 66 20 35 2d 62 79 74 65 20 65  rray of 5-byte e
92f0: 6e 74 72 69 65 73 2e 20 20 4c 65 74 20 4a 20 62  ntries.  Let J b
9300: 65 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20  e the.number of 
9310: 35 2d 62 79 74 65 20 65 6e 74 72 69 65 73 20 74  5-byte entries t
9320: 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20  hat will fit in 
9330: 74 68 65 20 75 73 61 62 6c 65 20 73 70 61 63 65  the usable space
9340: 20 6f 66 20 61 20 70 61 67 65 2e 0a 28 49 6e 20   of a page..(In 
9350: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55  other words, J=U
9360: 2f 35 2e 29 20 20 5e 54 68 65 20 66 69 72 73 74  /5.)  ^The first
9370: 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c   ptrmap page wil
9380: 6c 20 63 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70  l contain back p
9390: 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69  ointer.informati
93a0: 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 33 20 74  on for pages 3 t
93b0: 68 72 6f 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c  hrough J+2, incl
93c0: 75 73 69 76 65 2e 20 20 5e 54 68 65 20 73 65 63  usive.  ^The sec
93d0: 6f 6e 64 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a  ond pointer map.
93e0: 70 61 67 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20  page will be on 
93f0: 70 61 67 65 20 4a 2b 33 20 61 6e 64 20 74 68 61  page J+3 and tha
9400: 74 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69  t ptrmap page wi
9410: 6c 6c 20 70 72 6f 76 69 64 65 20 62 61 63 6b 20  ll provide back 
9420: 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74  pointer.informat
9430: 69 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 4a 2b  ion for pages J+
9440: 34 20 74 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20  4 through 2*J+3 
9450: 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6e 64 20  inclusive.  And 
9460: 73 6f 20 66 6f 72 74 68 20 66 6f 72 0a 74 68 65  so forth for.the
9470: 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
9480: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   file.</p>..<p>^
9490: 28 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 74  (In a database t
94a0: 68 61 74 20 75 73 65 73 20 70 74 72 6d 61 70 20  hat uses ptrmap 
94b0: 70 61 67 65 73 2c 20 61 6c 6c 20 70 61 67 65 73  pages, all pages
94c0: 20 61 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64   at locations id
94d0: 65 6e 74 69 66 69 65 64 0a 62 79 20 74 68 65 20  entified.by the 
94e0: 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 74  computation in t
94f0: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
9500: 67 72 61 70 68 20 6d 75 73 74 20 62 65 20 70 74  graph must be pt
9510: 72 6d 61 70 20 70 61 67 65 20 61 6e 64 20 6e 6f  rmap page and no
9520: 0a 6f 74 68 65 72 20 70 61 67 65 20 6d 61 79 20  .other page may 
9530: 62 65 20 61 20 70 74 72 6d 61 70 20 70 61 67 65  be a ptrmap page
9540: 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 74 68  .  Except, if th
9550: 65 20 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65  e byte-lock page
9560: 20 68 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c   happens to.fall
9570: 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67   on the same pag
9580: 65 20 6e 75 6d 62 65 72 20 61 73 20 61 20 70 74  e number as a pt
9590: 72 6d 61 70 20 70 61 67 65 2c 20 74 68 65 6e 20  rmap page, then 
95a0: 74 68 65 20 70 74 72 6d 61 70 20 69 73 20 6d 6f  the ptrmap is mo
95b0: 76 65 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ved.to the follo
95c0: 77 69 6e 67 20 70 61 67 65 20 66 6f 72 20 74 68  wing page for th
95d0: 61 74 20 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f  at one case.)^</
95e0: 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79  p>..<p>Each 5-by
95f0: 74 65 20 65 6e 74 72 79 20 6f 6e 20 61 20 70 74  te entry on a pt
9600: 72 6d 61 70 20 70 61 67 65 20 70 72 6f 76 69 64  rmap page provid
9610: 65 73 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66  es back-link inf
9620: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a  ormation about .
9630: 6f 6e 65 20 6f 66 20 70 61 67 65 73 20 74 68 61  one of pages tha
9640: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  t immediately fo
9650: 6c 6c 6f 77 20 74 68 65 20 70 6f 69 6e 74 65 72  llow the pointer
9660: 20 6d 61 70 2e 20 20 5e 28 49 66 20 70 61 67 65   map.  ^(If page
9670: 20 42 20 69 73 20 61 0a 70 74 72 6d 61 70 20 70   B is a.ptrmap p
9680: 61 67 65 20 74 68 65 6e 20 62 61 63 6b 2d 6c 69  age then back-li
9690: 6e 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  nk information a
96a0: 62 6f 75 74 20 70 61 67 65 20 42 2b 31 20 69 73  bout page B+1 is
96b0: 20 70 72 6f 76 69 64 65 64 20 62 79 0a 74 68 65   provided by.the
96c0: 20 66 69 72 73 74 20 65 6e 74 72 79 20 6f 6e 20   first entry on 
96d0: 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e  the pointer map.
96e0: 20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62    Information ab
96f0: 6f 75 74 20 70 61 67 65 20 42 2b 32 20 69 73 0a  out page B+2 is.
9700: 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20  provided by the 
9710: 73 65 63 6f 6e 64 20 65 6e 74 72 79 2e 20 20 41  second entry.  A
9720: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 29 5e 3c 2f  nd so forth.)^</
9730: 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79  p>..<p>Each 5-by
9740: 74 65 20 70 74 72 6d 61 70 20 65 6e 74 72 79 20  te ptrmap entry 
9750: 63 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e 65 20  consists of one 
9760: 62 79 74 65 20 6f 66 20 22 70 61 67 65 20 74 79  byte of "page ty
9770: 70 65 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  pe" information.
9780: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 34 2d  followed by a 4-
9790: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
97a0: 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 46 69  page number.  Fi
97b0: 76 65 20 70 61 67 65 20 74 79 70 65 73 20 61 72  ve page types ar
97c0: 65 20 72 65 63 6f 67 6e 69 7a 65 64 3a 0a 3c 2f  e recognized:.</
97d0: 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20 62  p>..<ol>.<li>A b
97e0: 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67 65 2e  -tree root page.
97f0: 20 20 54 68 65 0a 70 61 67 65 20 6e 75 6d 62 65    The.page numbe
9800: 72 20 73 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f  r should be zero
9810: 2e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73 74  ..<li>A freelist
9820: 20 70 61 67 65 2e 20 20 54 68 65 20 70 61 67 65   page.  The page
9830: 20 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62   number should b
9840: 65 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e 54 68 65 20  e.zero..<li>The 
9850: 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 61 0a  first page of a.
9860: 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65  cell payload ove
9870: 72 66 6c 6f 77 20 63 68 61 69 6e 2e 20 20 54 68  rflow chain.  Th
9880: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73  e page number is
9890: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
98a0: 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 74   that.contains t
98b0: 68 65 20 63 65 6c 6c 20 77 68 6f 73 65 20 63 6f  he cell whose co
98c0: 6e 74 65 6e 74 20 68 61 73 20 6f 76 65 72 66 6c  ntent has overfl
98d0: 6f 77 65 64 2e 0a 3c 6c 69 3e 41 20 70 61 67 65  owed..<li>A page
98e0: 20 69 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20   in an overflow 
98f0: 63 68 61 69 6e 0a 6f 74 68 65 72 20 74 68 61 6e  chain.other than
9900: 20 74 68 65 20 66 69 72 73 74 20 70 61 67 65 2e   the first page.
9910: 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65    The page numbe
9920: 72 20 69 73 20 74 68 65 20 70 72 69 6f 72 20 70  r is the prior p
9930: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
9940: 6c 6f 77 20 63 68 61 69 6e 2e 0a 3c 6c 69 3e 41  low chain..<li>A
9950: 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65   non-root b-tree
9960: 20 70 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65   page.  The.page
9970: 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20 70   number is the p
9980: 61 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67  arent b-tree pag
9990: 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e  e..</ol>..<p>^In
99a0: 20 61 6e 79 20 64 61 74 61 62 61 73 65 20 66 69   any database fi
99b0: 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
99c0: 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61   ptrmap pages, a
99d0: 6c 6c 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70  ll b-tree root p
99e0: 61 67 65 73 20 0a 6d 75 73 74 20 63 6f 6d 65 20  ages .must come 
99f0: 62 65 66 6f 72 65 20 61 6e 79 20 6e 6f 6e 2d 72  before any non-r
9a00: 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65 2c  oot b-tree page,
9a10: 20 63 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76   cell payload ov
9a20: 65 72 66 6c 6f 77 20 70 61 67 65 2c 20 6f 72 0a  erflow page, or.
9a30: 66 72 65 65 6c 69 73 74 20 70 61 67 65 2e 20 20  freelist page.  
9a40: 54 68 69 73 20 72 65 73 74 72 69 63 74 69 6f 6e  This restriction
9a50: 20 65 6e 73 75 72 65 73 20 74 68 61 74 20 61 20   ensures that a 
9a60: 72 6f 6f 74 20 70 61 67 65 20 77 69 6c 6c 20 6e  root page will n
9a70: 65 76 65 72 0a 62 65 20 6d 6f 76 65 64 20 64 75  ever.be moved du
9a80: 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61 63  ring an auto-vac
9a90: 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e 74  uum or increment
9aa0: 61 6c 2d 76 61 63 75 75 6d 2e 20 20 54 68 65 20  al-vacuum.  The 
9ab0: 61 75 74 6f 2d 76 61 63 75 75 6d 0a 6c 6f 67 69  auto-vacuum.logi
9ac0: 63 20 64 6f 65 73 20 6e 6f 74 20 6b 6e 6f 77 20  c does not know 
9ad0: 68 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74 68  how to update th
9ae0: 65 20 72 6f 6f 74 5f 70 61 67 65 20 66 69 65 6c  e root_page fiel
9af0: 64 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f  d of the sqlite_
9b00: 6d 61 73 74 65 72 0a 74 61 62 6c 65 20 61 6e 64  master.table and
9b10: 20 73 6f 20 69 74 20 69 73 20 6e 65 63 65 73 73   so it is necess
9b20: 61 72 79 20 74 6f 20 70 72 65 76 65 6e 74 20 72  ary to prevent r
9b30: 6f 6f 74 20 70 61 67 65 73 20 66 72 6f 6d 20 62  oot pages from b
9b40: 65 69 6e 67 20 6d 6f 76 65 64 0a 64 75 72 69 6e  eing moved.durin
9b50: 67 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  g an auto-vacuum
9b60: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 72 65   in order to pre
9b70: 73 65 72 76 65 20 74 68 65 20 69 6e 74 65 67 72  serve the integr
9b80: 69 74 79 20 6f 66 20 74 68 65 0a 73 71 6c 69 74  ity of the.sqlit
9b90: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 2e 20  e_master table. 
9ba0: 20 5e 52 6f 6f 74 20 70 61 67 65 73 20 61 72 65   ^Root pages are
9bb0: 20 6d 6f 76 65 64 20 74 6f 20 74 68 65 20 62 65   moved to the be
9bc0: 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 0a 64  ginning of the.d
9bd0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 79 20  atabase file by 
9be0: 74 68 65 20 43 52 45 41 54 45 20 54 41 42 4c 45  the CREATE TABLE
9bf0: 2c 20 43 52 45 41 54 45 20 49 4e 44 45 58 2c 20  , CREATE INDEX, 
9c00: 44 52 4f 50 20 54 41 42 4c 45 2c 20 61 6e 64 0a  DROP TABLE, and.
9c10: 44 52 4f 50 20 49 4e 44 45 58 20 6f 70 65 72 61  DROP INDEX opera
9c20: 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e  tions.</p>..<h2>
9c30: 32 2e 30 20 53 63 68 65 6d 61 20 4c 61 79 65 72  2.0 Schema Layer
9c40: 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h2>..<p>The fo
9c50: 72 65 67 6f 69 6e 67 20 74 65 78 74 20 64 65 73  regoing text des
9c60: 63 72 69 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c  cribes low-level
9c70: 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20   aspects of the 
9c80: 53 51 4c 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d  SQLite file.form
9c90: 61 74 2e 20 20 54 68 65 20 62 2d 74 72 65 65 20  at.  The b-tree 
9ca0: 6d 65 63 68 61 6e 69 73 6d 20 70 72 6f 76 69 64  mechanism provid
9cb0: 65 73 20 61 20 70 6f 77 65 72 66 75 6c 20 61 6e  es a powerful an
9cc0: 64 20 65 66 66 69 63 69 65 6e 74 20 6d 65 61 6e  d efficient mean
9cd0: 73 20 6f 66 0a 61 63 63 65 73 73 69 6e 67 20 61  s of.accessing a
9ce0: 20 6c 61 72 67 65 20 64 61 74 61 20 73 65 74 2e   large data set.
9cf0: 20 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 77    This section w
9d00: 69 6c 6c 20 64 65 73 63 72 69 62 65 20 68 6f 77  ill describe how
9d10: 20 74 68 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62   the.low-level b
9d20: 2d 74 72 65 65 20 6c 61 79 65 72 20 69 73 20 75  -tree layer is u
9d30: 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
9d40: 20 68 69 67 68 65 72 2d 6c 65 76 65 6c 20 53 51   higher-level SQ
9d50: 4c 0a 63 61 70 61 62 69 6c 69 74 69 65 73 2e 3c  L.capabilities.<
9d60: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
9d70: 67 6d 65 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72  gment record_for
9d80: 6d 61 74 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d  mat {record form
9d90: 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32 2e  at}</tcl>.<h3>2.
9da0: 31 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c  1 Record Format<
9db0: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6e  /h3>..<p>The con
9dc0: 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
9dd0: 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65  b-tree leaf page
9de0: 20 61 6e 64 20 74 68 65 20 6b 65 79 0a 6f 66 20   and the key.of 
9df0: 61 6e 79 20 69 6e 64 65 78 20 62 2d 74 72 65 65  any index b-tree
9e00: 20 70 61 67 65 20 77 61 73 20 63 68 61 72 61 63   page was charac
9e10: 74 65 72 69 7a 65 64 20 61 62 6f 76 65 0a 61 73  terized above.as
9e20: 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73 65   an arbitrary se
9e30: 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2e  quence of bytes.
9e40: 0a 54 68 65 20 70 72 69 6f 72 20 64 69 73 63 75  .The prior discu
9e50: 73 73 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20  ssion mentioned 
9e60: 6f 6e 65 20 6b 65 79 20 62 65 69 6e 67 20 6c 65  one key being le
9e70: 73 73 20 74 68 61 6e 20 61 6e 6f 74 68 65 72 2c  ss than another,
9e80: 20 62 75 74 0a 64 69 64 20 6e 6f 74 20 64 65 66   but.did not def
9e90: 69 6e 65 20 77 68 61 74 20 22 6c 65 73 73 20 74  ine what "less t
9ea0: 68 61 6e 22 20 6d 65 61 6e 74 2e 20 20 54 68 65  han" meant.  The
9eb0: 20 63 75 72 72 65 6e 74 20 73 65 63 74 69 6f 6e   current section
9ec0: 20 77 69 6c 6c 20 61 64 64 72 65 73 73 0a 74 68   will address.th
9ed0: 65 73 65 20 6f 6d 69 73 73 69 6f 6e 73 2e 3c 2f  ese omissions.</
9ee0: 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f 61 64 2c 20  p>..<p>Payload, 
9ef0: 65 69 74 68 65 72 20 74 61 62 6c 65 20 63 6f 6e  either table con
9f00: 74 65 6e 74 20 6f 72 20 69 6e 64 65 78 20 6b 65  tent or index ke
9f10: 79 73 2c 20 69 73 20 61 6c 77 61 79 73 20 69 6e  ys, is always in
9f20: 20 74 68 65 20 22 72 65 63 6f 72 64 0a 66 6f 72   the "record.for
9f30: 6d 61 74 22 2e 20 20 54 68 65 20 72 65 63 6f 72  mat".  The recor
9f40: 64 20 66 6f 72 6d 61 74 20 64 65 66 69 6e 65 73  d format defines
9f50: 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 76   a sequence of v
9f60: 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f 6e 64  alues correspond
9f70: 69 6e 67 0a 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  ing.to columns i
9f80: 6e 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  n a table or ind
9f90: 65 78 2e 20 20 54 68 65 20 72 65 63 6f 72 64 20  ex.  The record 
9fa0: 66 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65 73  format specifies
9fb0: 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 63   the number.of c
9fc0: 6f 6c 75 6d 6e 73 2c 20 74 68 65 20 64 61 74 61  olumns, the data
9fd0: 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  type of each col
9fe0: 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e  umn, and the con
9ff0: 74 65 6e 74 20 6f 66 20 65 61 63 68 20 63 6f 6c  tent of each col
a000: 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  umn.</p>..<p>The
a010: 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6d   record format m
a020: 61 6b 65 73 20 65 78 74 65 6e 73 69 76 65 20 75  akes extensive u
a030: 73 65 20 6f 66 20 74 68 65 20 0a 5b 76 61 72 69  se of the .[vari
a040: 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
a050: 67 65 72 5d 20 6f 72 20 5b 76 61 72 69 6e 74 5d  ger] or [varint]
a060: 0a 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20  .representation 
a070: 6f 66 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  of 64-bit signed
a080: 20 69 6e 74 65 67 65 72 73 20 64 65 66 69 6e 65   integers define
a090: 64 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74  d above.</p>..<t
a0a0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
a0b0: 65 72 69 61 6c 74 79 70 65 20 7b 73 65 72 69 61  erialtype {seria
a0c0: 6c 20 74 79 70 65 7d 20 7b 73 65 72 69 61 6c 20  l type} {serial 
a0d0: 74 79 70 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e  types}</tcl>.<p>
a0e0: 41 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  A record contain
a0f0: 73 20 61 20 68 65 61 64 65 72 20 61 6e 64 20 61  s a header and a
a100: 20 62 6f 64 79 2c 20 69 6e 20 74 68 61 74 20 6f   body, in that o
a110: 72 64 65 72 2e 20 20 0a 5e 28 54 68 65 20 68 65  rder.  .^(The he
a120: 61 64 65 72 20 62 65 67 69 6e 73 20 77 69 74 68  ader begins with
a130: 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74   a single varint
a140: 20 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65   which determine
a150: 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
a160: 65 72 0a 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er.of bytes in t
a170: 68 65 20 68 65 61 64 65 72 2e 20 20 54 68 65 20  he header.  The 
a180: 76 61 72 69 6e 74 20 76 61 6c 75 65 20 69 73 20  varint value is 
a190: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
a1a0: 68 65 61 64 65 72 20 69 6e 0a 62 79 74 65 73 20  header in.bytes 
a1b0: 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69  including the si
a1c0: 7a 65 20 76 61 72 69 6e 74 20 69 74 73 65 6c 66  ze varint itself
a1d0: 2e 29 5e 20 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20  .)^  ^Following 
a1e0: 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20  the size varint 
a1f0: 61 72 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  are.one or more 
a200: 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e  additional varin
a210: 74 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75  ts, one per colu
a220: 6d 6e 2e 20 20 54 68 65 73 65 20 61 64 64 69 74  mn.  These addit
a230: 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 0a 61 72  ional varints.ar
a240: 65 20 63 61 6c 6c 65 64 20 22 73 65 72 69 61 6c  e called "serial
a250: 20 74 79 70 65 22 20 6e 75 6d 62 65 72 73 20 61   type" numbers a
a260: 6e 64 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65  nd.determine the
a270: 20 64 61 74 61 74 79 70 65 20 6f 66 20 65 61 63   datatype of eac
a280: 68 20 63 6f 6c 75 6d 6e 2c 20 61 63 63 6f 72 64  h column, accord
a290: 69 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ing to the follo
a2a0: 77 69 6e 67 20 63 68 61 72 74 3a 3c 2f 70 3e 0a  wing chart:</p>.
a2b0: 0a 3c 63 65 6e 74 65 72 3e 0a 5e 28 3c 69 3e 53  .<center>.^(<i>S
a2c0: 65 72 69 61 6c 20 54 79 70 65 20 43 6f 64 65 73  erial Type Codes
a2d0: 20 4f 66 20 54 68 65 20 52 65 63 6f 72 64 20 46   Of The Record F
a2e0: 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
a2f0: 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22  able width="80%"
a300: 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c   border=1>.<tr><
a310: 74 68 3e 53 65 72 69 61 6c 20 54 79 70 65 3c 74  th>Serial Type<t
a320: 68 3e 43 6f 6e 74 65 6e 74 20 53 69 7a 65 3c 74  h>Content Size<t
a330: 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74  h>Meaning.<tr><t
a340: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a350: 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76  gn=center>0<td v
a360: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a370: 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67  center>0<td alig
a380: 6e 3d 6c 65 66 74 3e 0a 4e 55 4c 4c 0a 3c 74 72  n=left>.NULL.<tr
a390: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
a3a0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74  align=center>1<t
a3b0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a3c0: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
a3d0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 38 2d 62 69 74  lign=left>.8-bit
a3e0: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
a3f0: 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64   integer.<tr><td
a400: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
a410: 6e 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 76 61  n=center>2<td va
a420: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a430: 65 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e  enter>2<td align
a440: 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61  =left>.Big-endia
a450: 6e 20 31 36 2d 62 69 74 20 74 77 6f 73 2d 63 6f  n 16-bit twos-co
a460: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
a470: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
a480: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a490: 3e 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >3<td valign=top
a4a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c   align=center>3<
a4b0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42  td align=left>.B
a4c0: 69 67 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69 74  ig-endian 24-bit
a4d0: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
a4e0: 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64   integer.<tr><td
a4f0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
a500: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61  n=center>4<td va
a510: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a520: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
a530: 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61  =left>.Big-endia
a540: 6e 20 33 32 2d 62 69 74 20 74 77 6f 73 2d 63 6f  n 32-bit twos-co
a550: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
a560: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
a570: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a580: 3e 35 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >5<td valign=top
a590: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c   align=center>6<
a5a0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42  td align=left>.B
a5b0: 69 67 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69 74  ig-endian 48-bit
a5c0: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
a5d0: 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64   integer.<tr><td
a5e0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
a5f0: 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 76 61  n=center>6<td va
a600: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a610: 65 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e  enter>8<td align
a620: 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61  =left>.Big-endia
a630: 6e 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f  n 64-bit twos-co
a640: 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72  mplement integer
a650: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
a660: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a670: 3e 37 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >7<td valign=top
a680: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c   align=center>8<
a690: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42  td align=left>.B
a6a0: 69 67 2d 65 6e 64 69 61 6e 20 49 45 45 45 20 37  ig-endian IEEE 7
a6b0: 35 34 2d 32 30 30 38 20 36 34 2d 62 69 74 20 66  54-2008 64-bit f
a6c0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75  loating point nu
a6d0: 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  mber.<tr><td val
a6e0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a6f0: 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e  nter>8<td valign
a700: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a710: 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>0<td align=lef
a720: 74 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73 74  t>.Integer const
a730: 61 6e 74 20 30 2e 20 20 4f 6e 6c 79 20 61 76 61  ant 0.  Only ava
a740: 69 6c 61 62 6c 65 20 66 6f 72 20 73 63 68 65 6d  ilable for schem
a750: 61 20 66 6f 72 6d 61 74 20 34 20 61 6e 64 20 68  a format 4 and h
a760: 69 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76  igher..<tr><td v
a770: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
a780: 63 65 6e 74 65 72 3e 39 3c 74 64 20 76 61 6c 69  center>9<td vali
a790: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
a7a0: 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>0<td align=l
a7b0: 65 66 74 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e  eft>.Integer con
a7c0: 73 74 61 6e 74 20 31 2e 20 20 4f 6e 6c 79 20 61  stant 1.  Only a
a7d0: 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 63 68  vailable for sch
a7e0: 65 6d 61 20 66 6f 72 6d 61 74 20 34 20 61 6e 64  ema format 4 and
a7f0: 20 68 69 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64   higher..<tr><td
a800: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
a810: 6e 3d 63 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20  n=center>10,11. 
a820: 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
a830: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 26  p align=center>&
a840: 6e 62 73 70 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c  nbsp;<td align=l
a850: 65 66 74 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65 64  eft>.<i>Not used
a860: 2e 20 20 52 65 73 65 72 76 65 64 20 66 6f 72 20  .  Reserved for 
a870: 65 78 70 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c  expansion.</i>.<
a880: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
a890: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e  p align=center>N
a8a0: 26 23 78 32 32 36 35 3b 31 32 20 61 6e 64 20 65  &#x2265;12 and e
a8b0: 76 65 6e 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  ven.    <td vali
a8c0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
a8d0: 74 65 72 3e 28 4e 2d 31 32 29 2f 32 3c 74 64 20  ter>(N-12)/2<td 
a8e0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 42 4c  align=left>.A BL
a8f0: 4f 42 20 74 68 61 74 20 69 73 20 28 4e 2d 31 32  OB that is (N-12
a900: 29 2f 32 20 62 79 74 65 73 20 69 6e 20 6c 65 6e  )/2 bytes in len
a910: 67 74 68 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  gth.<tr><td vali
a920: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
a930: 74 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 33 20  ter>N&#x2265;13 
a940: 61 6e 64 20 6f 64 64 0a 20 20 20 20 3c 74 64 20  and odd.    <td 
a950: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
a960: 3d 63 65 6e 74 65 72 3e 28 4e 2d 31 33 29 2f 32  =center>(N-13)/2
a970: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
a980: 41 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20  A string in the 
a990: 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e  database encodin
a9a0: 67 20 61 6e 64 20 28 4e 2d 31 33 29 2f 32 20 62  g and (N-13)/2 b
a9b0: 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a  ytes in length..
a9c0: 54 68 65 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  The nul terminat
a9d0: 6f 72 20 69 73 20 6f 6d 69 74 74 65 64 2e 0a 3c  or is omitted..<
a9e0: 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e  /table></center>
a9f0: 29 5e 0a 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74  )^..<p>Note that
aa00: 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20   because of the 
aa10: 77 61 79 20 76 61 72 69 6e 74 73 20 61 72 65 20  way varints are 
aa20: 64 65 66 69 6e 65 64 2c 20 74 68 65 20 68 65 61  defined, the hea
aa30: 64 65 72 20 73 69 7a 65 20 76 61 72 69 6e 74 0a  der size varint.
aa40: 61 6e 64 20 73 65 72 69 61 6c 20 74 79 70 65 20  and serial type 
aa50: 76 61 72 69 6e 74 73 20 77 69 6c 6c 20 75 73 75  varints will usu
aa60: 61 6c 6c 79 20 63 6f 6e 73 69 73 74 20 6f 66 20  ally consist of 
aa70: 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20  a single byte.  
aa80: 54 68 65 0a 73 65 72 69 61 6c 20 74 79 70 65 20  The.serial type 
aa90: 76 61 72 69 6e 74 73 20 66 6f 72 20 6c 61 72 67  varints for larg
aaa0: 65 20 73 74 72 69 6e 67 73 20 61 6e 64 20 42 4c  e strings and BL
aab0: 4f 42 73 20 6d 69 67 68 74 20 65 78 74 65 6e 64  OBs might extend
aac0: 20 74 6f 20 74 77 6f 20 6f 72 20 74 68 72 65 65   to two or three
aad0: 0a 62 79 74 65 20 76 61 72 69 6e 74 73 2c 20 62  .byte varints, b
aae0: 75 74 20 74 68 61 74 20 69 73 20 74 68 65 20 65  ut that is the e
aaf0: 78 63 65 70 74 69 6f 6e 20 72 61 74 68 65 72 20  xception rather 
ab00: 74 68 61 6e 20 74 68 65 20 72 75 6c 65 2e 20 0a  than the rule. .
ab10: 54 68 65 20 76 61 72 69 6e 74 20 66 6f 72 6d 61  The varint forma
ab20: 74 20 69 73 20 76 65 72 79 20 65 66 66 69 63 69  t is very effici
ab30: 65 6e 74 20 61 74 20 63 6f 64 69 6e 67 20 74 68  ent at coding th
ab40: 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e  e record header.
ab50: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c  </p>..<p>The val
ab60: 75 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  ues for each col
ab70: 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72  umn in the recor
ab80: 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  d immediately fo
ab90: 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e  llow the header.
aba0: 0a 5e 28 4e 6f 74 65 20 74 68 61 74 20 66 6f 72  .^(Note that for
abb0: 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 30 2c   serial types 0,
abc0: 20 38 2c 20 39 2c 20 31 32 2c 20 61 6e 64 20 31   8, 9, 12, and 1
abd0: 33 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  3, the value is 
abe0: 7a 65 72 6f 20 62 79 74 65 73 20 69 6e 0a 6c 65  zero bytes in.le
abf0: 6e 67 74 68 2e 20 20 49 66 20 61 6c 6c 20 63 6f  ngth.  If all co
ac00: 6c 75 6d 6e 73 20 61 72 65 20 6f 66 20 74 68 65  lumns are of the
ac10: 73 65 20 74 79 70 65 73 20 74 68 65 6e 20 74 68  se types then th
ac20: 65 20 62 6f 64 79 20 73 65 63 74 69 6f 6e 20 6f  e body section o
ac30: 66 20 74 68 65 0a 72 65 63 6f 72 64 20 69 73 20  f the.record is 
ac40: 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68  empty.)^</p>..<h
ac50: 33 3e 32 2e 32 20 52 65 63 6f 72 64 20 53 6f 72  3>2.2 Record Sor
ac60: 74 20 4f 72 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70  t Order</h3>..<p
ac70: 3e 54 68 65 20 6f 72 64 65 72 20 6f 66 20 6b 65  >The order of ke
ac80: 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 62  ys in an index b
ac90: 2d 74 72 65 65 20 69 73 20 64 65 74 65 72 6d 69  -tree is determi
aca0: 6e 65 64 20 62 79 20 74 68 65 20 73 6f 72 74 20  ned by the sort 
acb0: 6f 72 64 65 72 20 6f 66 0a 74 68 65 20 72 65 63  order of.the rec
acc0: 6f 72 64 73 20 74 68 61 74 20 74 68 65 20 6b 65  ords that the ke
acd0: 79 73 20 72 65 70 72 65 73 65 6e 74 2e 20 20 52  ys represent.  R
ace0: 65 63 6f 72 64 20 63 6f 6d 70 61 72 69 73 6f 6e  ecord comparison
acf0: 20 70 72 6f 67 72 65 73 73 65 73 20 63 6f 6c 75   progresses colu
ad00: 6d 6e 0a 62 79 20 63 6f 6c 75 6d 6e 2e 20 20 43  mn.by column.  C
ad10: 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 72 65 63 6f  olumns of a reco
ad20: 72 64 20 61 72 65 20 65 78 61 6d 69 6e 65 64 20  rd are examined 
ad30: 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
ad40: 68 74 2e 20 20 54 68 65 0a 66 69 72 73 74 20 70  ht.  The.first p
ad50: 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  air of columns t
ad60: 68 61 74 20 61 72 65 20 6e 6f 74 20 65 71 75 61  hat are not equa
ad70: 6c 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  l determines the
ad80: 20 72 65 6c 61 74 69 76 65 20 6f 72 64 65 72 0a   relative order.
ad90: 6f 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72  of the two recor
ada0: 64 73 2e 20 20 54 68 65 20 73 6f 72 74 20 6f 72  ds.  The sort or
adb0: 64 65 72 20 6f 66 20 69 6e 64 69 76 69 64 75 61  der of individua
adc0: 6c 20 63 6f 6c 75 6d 6e 73 20 69 73 20 61 73 0a  l columns is as.
add0: 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f  follows:</p>..<o
ade0: 6c 3e 0a 3c 6c 69 3e 5e 28 4e 55 4c 4c 20 76 61  l>.<li>^(NULL va
adf0: 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74 79 70  lues (serial typ
ae00: 65 20 30 29 20 73 6f 72 74 20 66 69 72 73 74 2e  e 0) sort first.
ae10: 29 5e 0a 3c 6c 69 3e 5e 28 4e 75 6d 65 72 69 63  )^.<li>^(Numeric
ae20: 20 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20   values (serial 
ae30: 74 79 70 65 73 20 31 20 74 68 72 6f 75 67 68 20  types 1 through 
ae40: 39 29 20 73 6f 72 74 20 61 66 74 65 72 20 4e 55  9) sort after NU
ae50: 4c 4c 73 0a 20 20 20 20 20 20 61 6e 64 20 69 6e  LLs.      and in
ae60: 20 6e 75 6d 65 72 69 63 20 6f 72 64 65 72 2e 29   numeric order.)
ae70: 5e 0a 3c 6c 69 3e 5e 28 54 65 78 74 20 76 61 6c  ^.<li>^(Text val
ae80: 75 65 73 20 28 6f 64 64 20 73 65 72 69 61 6c 20  ues (odd serial 
ae90: 74 79 70 65 73 20 31 33 20 61 6e 64 20 6c 61 72  types 13 and lar
aea0: 67 65 72 29 20 73 6f 72 74 20 61 66 74 65 72 20  ger) sort after 
aeb0: 6e 75 6d 65 72 69 63 0a 20 20 20 20 76 61 6c 75  numeric.    valu
aec0: 65 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  es in the order 
aed0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
aee0: 65 20 63 6f 6c 75 6d 6e 73 20 5b 63 6f 6c 6c 61  e columns [colla
aef0: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d 2e 29  ting function].)
af00: 5e 0a 3c 6c 69 3e 5e 28 42 4c 4f 42 20 76 61 6c  ^.<li>^(BLOB val
af10: 75 65 73 20 28 65 76 65 6e 20 73 65 72 69 61 6c  ues (even serial
af20: 20 74 79 70 65 73 20 31 32 20 61 6e 64 20 6c 61   types 12 and la
af30: 72 67 65 72 29 20 73 6f 72 74 20 6c 61 73 74 20  rger) sort last 
af40: 61 6e 64 20 69 6e 20 74 68 65 20 6f 72 64 65 72  and in the order
af50: 20 0a 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64   .    determined
af60: 20 62 79 20 6d 65 6d 63 6d 70 28 29 2e 29 5e 0a   by memcmp().)^.
af70: 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20 5b 63 6f 6c  </ol>..<p>A [col
af80: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 5d  lating function]
af90: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
afa0: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 69 6e   is necessary in
afb0: 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 75 74   order to comput
afc0: 65 0a 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  e.the order of t
afd0: 65 78 74 20 66 69 65 6c 64 73 2e 0a 5e 28 53 51  ext fields..^(SQ
afe0: 4c 69 74 65 20 64 65 66 69 6e 65 73 20 74 68 72  Lite defines thr
aff0: 65 65 20 62 75 69 6c 74 2d 69 6e 20 63 6f 6c 6c  ee built-in coll
b000: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 3a  ating functions:
b010: 29 5e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  )^.</p>..<blockq
b020: 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62 6f 72 64  uote><table bord
b030: 65 72 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e 67  er=0 cellspacing
b040: 3d 31 30 3e 0a 3c 74 72 3e 5e 3c 74 64 20 76 61  =10>.<tr>^<td va
b050: 6c 69 67 6e 3d 74 6f 70 3e 42 49 4e 41 52 59 0a  lign=top>BINARY.
b060: 20 20 20 20 3c 74 64 3e 53 74 72 69 6e 67 73 20      <td>Strings 
b070: 61 72 65 20 63 6f 6d 70 61 72 65 64 20 62 79 74  are compared byt
b080: 65 20 62 79 20 62 79 74 65 20 75 73 69 6e 67 20  e by byte using 
b090: 74 68 65 20 6d 65 6d 63 6d 70 28 29 20 66 75 6e  the memcmp() fun
b0a0: 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 66 72  ction.        fr
b0b0: 6f 6d 20 74 68 65 20 73 74 61 6e 64 61 72 64 20  om the standard 
b0c0: 43 20 6c 69 62 72 61 72 79 2e 0a 3c 74 72 3e 5e  C library..<tr>^
b0d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 4e  <td valign=top>N
b0e0: 4f 43 41 53 45 0a 20 20 20 20 3c 74 64 3e 4c 69  OCASE.    <td>Li
b0f0: 6b 65 20 42 49 4e 41 52 59 20 65 78 63 65 70 74  ke BINARY except
b100: 20 74 68 61 74 20 75 70 70 65 72 63 61 73 65 20   that uppercase 
b110: 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
b120: 20 28 27 41 27 20 74 68 72 6f 75 67 68 20 27 5a   ('A' through 'Z
b130: 27 29 0a 20 20 20 20 20 20 20 20 61 72 65 20 66  ').        are f
b140: 6f 6c 64 65 64 20 69 6e 74 6f 20 74 68 65 69 72  olded into their
b150: 20 6c 6f 77 65 72 63 61 73 65 20 65 71 75 69 76   lowercase equiv
b160: 61 6c 65 6e 74 73 20 70 72 69 6f 72 20 74 6f 20  alents prior to 
b170: 72 75 6e 6e 69 6e 67 20 74 68 65 0a 20 20 20 20  running the.    
b180: 20 20 20 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20      comparison. 
b190: 20 4e 6f 74 65 20 74 68 61 74 20 6f 6e 6c 79 20   Note that only 
b1a0: 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
b1b0: 20 61 72 65 20 63 61 73 65 2d 66 6f 6c 64 65 64   are case-folded
b1c0: 2e 20 20 5e 4e 4f 43 41 53 45 0a 20 20 20 20 20  .  ^NOCASE.     
b1d0: 20 20 20 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c     does not impl
b1e0: 65 6d 65 6e 74 20 61 20 67 65 6e 65 72 61 6c 20  ement a general 
b1f0: 70 75 72 70 6f 73 65 20 75 6e 69 63 6f 64 65 20  purpose unicode 
b200: 63 61 73 65 6c 65 73 73 20 63 6f 6d 70 61 72 69  caseless compari
b210: 73 6f 6e 2e 0a 3c 74 72 3e 5e 3c 74 64 20 76 61  son..<tr>^<td va
b220: 6c 69 67 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a 20  lign=top>RTRIM. 
b230: 20 20 20 3c 74 64 3e 4c 69 6b 65 20 42 49 4e 41     <td>Like BINA
b240: 52 59 20 65 78 63 65 70 74 20 74 68 61 74 20 73  RY except that s
b250: 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e 64  paces at the end
b260: 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 61   of the string a
b270: 72 65 20 65 6c 69 64 65 64 0a 20 20 20 20 20 20  re elided.      
b280: 20 20 70 72 69 6f 72 20 74 6f 20 63 6f 6d 70 61    prior to compa
b290: 72 69 73 6f 6e 2e 0a 3c 2f 74 61 62 6c 65 3e 3c  rison..</table><
b2a0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
b2b0: 3e 5e 41 64 64 69 74 69 6f 6e 61 6c 20 61 70 70  >^Additional app
b2c0: 6c 69 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69  lication-specifi
b2d0: 63 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  c collating func
b2e0: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 61 64 64  tions can be add
b2f0: 65 64 20 74 6f 0a 53 51 4c 69 74 65 20 75 73 69  ed to.SQLite usi
b300: 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
b310: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
b320: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  ()] interface.</
b330: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 64 65 66 61  p>..<p>^The defa
b340: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ult collating fu
b350: 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73  nction for all s
b360: 74 72 69 6e 67 73 20 69 73 20 42 49 4e 41 52 59  trings is BINARY
b370: 2e 0a 5e 41 6c 74 65 72 6e 61 74 69 76 65 20 63  ..^Alternative c
b380: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
b390: 6e 73 20 66 6f 72 20 74 61 62 6c 65 20 63 6f 6c  ns for table col
b3a0: 75 6d 6e 73 20 63 61 6e 20 62 65 20 73 70 65 63  umns can be spec
b3b0: 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43 52  ified in the.[CR
b3c0: 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
b3d0: 65 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 20  ement using the 
b3e0: 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f  COLLATE clause o
b3f0: 6e 20 74 68 65 20 5b 63 6f 6c 75 6d 6e 20 64 65  n the [column de
b400: 66 69 6e 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65 6e  finition]..^When
b410: 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 69 6e 64   a column is ind
b420: 65 78 65 64 2c 20 74 68 65 20 73 61 6d 65 20 63  exed, the same c
b430: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
b440: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  n specified in t
b450: 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he.[CREATE TABLE
b460: 5d 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  ] statement is u
b470: 73 65 64 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  sed for the colu
b480: 6d 6e 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2c  mn in the index,
b490: 20 62 79 20 64 65 66 61 75 6c 74 2c 0a 74 68 6f   by default,.tho
b4a0: 75 67 68 20 74 68 69 73 20 63 61 6e 20 62 65 20  ugh this can be 
b4b0: 6f 76 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67  overridden using
b4c0: 20 61 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73   a COLLATE claus
b4d0: 65 20 69 6e 20 74 68 65 20 0a 5b 43 52 45 41 54  e in the .[CREAT
b4e0: 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65  E INDEX] stateme
b4f0: 6e 74 2e 0a 0a 3c 68 33 3e 32 2e 33 20 52 65 70  nt...<h3>2.3 Rep
b500: 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53  resentation Of S
b510: 51 4c 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a  QL Tables</h3>..
b520: 3c 70 3e 45 61 63 68 20 6f 72 64 69 6e 61 72 79  <p>Each ordinary
b530: 20 53 51 4c 20 74 61 62 6c 65 20 69 6e 20 74 68   SQL table in th
b540: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
b550: 61 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  a is represented
b560: 20 6f 6e 20 64 69 73 6b 0a 62 79 20 61 20 74 61   on disk.by a ta
b570: 62 6c 65 20 62 2d 74 72 65 65 2e 20 20 45 61 63  ble b-tree.  Eac
b580: 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74  h entry in the t
b590: 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 72 72  able b-tree corr
b5a0: 65 73 70 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77  esponds to a row
b5b0: 0a 6f 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c  .of the SQL tabl
b5c0: 65 2e 20 20 54 68 65 20 5b 72 6f 77 69 64 5d 20  e.  The [rowid] 
b5d0: 6f 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65  of the SQL table
b5e0: 20 69 73 20 74 68 65 20 36 34 2d 62 69 74 20 73   is the 64-bit s
b5f0: 69 67 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b 65  igned.integer ke
b600: 79 20 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79  y for each entry
b610: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   in the table b-
b620: 74 72 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  tree.</p>..<p>Th
b630: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63  e content of eac
b640: 68 20 53 51 4c 20 74 61 62 6c 65 20 72 6f 77 20  h SQL table row 
b650: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
b660: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
b670: 79 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e 69 6e  y.first combinin
b680: 67 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  g the values in 
b690: 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6c 75  the various colu
b6a0: 6d 6e 73 20 69 6e 74 6f 20 61 20 62 79 74 65 20  mns into a byte 
b6b0: 61 72 72 61 79 0a 69 6e 20 74 68 65 20 72 65 63  array.in the rec
b6c0: 6f 72 64 20 66 6f 72 6d 61 74 2c 20 74 68 65 6e  ord format, then
b6d0: 20 73 74 6f 72 69 6e 67 20 74 68 61 74 20 62 79   storing that by
b6e0: 74 65 20 61 72 72 61 79 20 61 73 20 74 68 65 20  te array as the 
b6f0: 70 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65 6e  payload in.an en
b700: 74 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65  try in the table
b710: 20 62 2d 74 72 65 65 2e 20 20 5e 54 68 65 20 6f   b-tree.  ^The o
b720: 72 64 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69  rder of values i
b730: 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 73 0a  n the record is.
b740: 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20  the same as the 
b750: 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  order of columns
b760: 20 69 6e 20 74 68 65 20 53 51 4c 20 74 61 62 6c   in the SQL tabl
b770: 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57  e definition..^W
b780: 68 65 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65  hen an SQL table
b790: 20 74 68 61 74 20 69 6e 63 6c 75 64 65 73 20 61   that includes a
b7a0: 6e 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  n.[INTEGER PRIMA
b7b0: 52 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 20 28  RY KEY] column (
b7c0: 77 68 69 63 68 20 61 6c 69 61 73 65 73 20 74 68  which aliases th
b7d0: 65 20 5b 72 6f 77 69 64 5d 29 20 74 68 65 6e 20  e [rowid]) then 
b7e0: 74 68 61 74 0a 63 6f 6c 75 6d 6e 20 61 70 70 65  that.column appe
b7f0: 61 72 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ars in the recor
b800: 64 20 61 73 20 61 20 4e 55 4c 4c 20 76 61 6c 75  d as a NULL valu
b810: 65 2e 20 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c  e.  ^SQLite will
b820: 20 61 6c 77 61 79 73 20 75 73 65 0a 74 68 65 20   always use.the 
b830: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6b 65 79  table b-tree key
b840: 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68 65   rather than the
b850: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 77 68 65 6e   NULL value when
b860: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
b870: 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  .[INTEGER PRIMAR
b880: 59 20 4b 45 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f  Y KEY] column.</
b890: 70 3e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 5b  p>..<p>^If the [
b8a0: 61 66 66 69 6e 69 74 79 5d 20 6f 66 20 61 20 63  affinity] of a c
b8b0: 6f 6c 75 6d 6e 20 69 73 20 52 45 41 4c 20 61 6e  olumn is REAL an
b8c0: 64 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f  d that column co
b8d0: 6e 74 61 69 6e 73 20 61 0a 76 61 6c 75 65 20 74  ntains a.value t
b8e0: 68 61 74 20 63 61 6e 20 62 65 20 63 6f 6e 76 65  hat can be conve
b8f0: 72 74 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67  rted to an integ
b900: 65 72 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  er without loss 
b910: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28  of information.(
b920: 69 66 20 74 68 65 20 76 61 6c 75 65 20 63 6f 6e  if the value con
b930: 74 61 69 6e 73 20 6e 6f 20 66 72 61 63 74 69 6f  tains no fractio
b940: 6e 61 6c 20 70 61 72 74 20 61 6e 64 20 69 73 20  nal part and is 
b950: 6e 6f 74 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f  not too large to
b960: 20 62 65 0a 72 65 70 72 65 73 65 6e 74 65 64 20   be.represented 
b970: 61 73 20 61 6e 20 69 6e 74 65 67 65 72 29 20 74  as an integer) t
b980: 68 65 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  hen the column m
b990: 61 79 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ay be stored in 
b9a0: 74 68 65 20 72 65 63 6f 72 64 0a 61 73 20 61 6e  the record.as an
b9b0: 20 69 6e 74 65 67 65 72 2e 20 20 5e 53 51 4c 69   integer.  ^SQLi
b9c0: 74 65 20 77 69 6c 6c 20 63 6f 6e 76 65 72 74 20  te will convert 
b9d0: 74 68 65 20 76 61 6c 75 65 20 62 61 63 6b 20 74  the value back t
b9e0: 6f 20 66 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e 74  o floating.point
b9f0: 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67   when extracting
ba00: 20 69 74 20 66 72 6f 6d 20 74 68 65 20 72 65 63   it from the rec
ba10: 6f 72 64 2e 3c 2f 70 3e 0a 0a 0a 3c 68 33 3e 32  ord.</p>...<h3>2
ba20: 2e 34 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f  .4 Representatio
ba30: 6e 20 4f 66 20 53 51 4c 20 49 6e 64 69 63 65 73  n Of SQL Indices
ba40: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20  </h3>..<p>^Each 
ba50: 53 51 4c 20 69 6e 64 65 78 2c 20 77 68 65 74 68  SQL index, wheth
ba60: 65 72 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65  er explicitly de
ba70: 63 6c 61 72 65 64 20 76 69 61 20 61 20 5b 43 52  clared via a [CR
ba80: 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74  EATE INDEX] stat
ba90: 65 6d 65 6e 74 0a 6f 72 20 69 6d 70 6c 69 65 64  ement.or implied
baa0: 20 62 79 20 61 20 55 4e 49 51 55 45 20 63 6f 6e   by a UNIQUE con
bab0: 73 74 72 61 69 6e 74 2c 20 63 6f 72 72 65 73 70  straint, corresp
bac0: 6f 6e 64 73 20 74 6f 20 61 6e 20 69 6e 64 65 78  onds to an index
bad0: 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65 0a 64   b-tree in the.d
bae0: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 5e 54  atabase file..^T
baf0: 68 65 72 65 20 69 73 20 6f 6e 65 20 65 6e 74 72  here is one entr
bb00: 79 20 69 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  y in index b-tre
bb10: 65 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69  e for each row i
bb20: 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
bb30: 69 6e 67 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20  ing table..^The 
bb40: 6b 65 79 20 74 6f 20 61 6e 20 69 6e 64 65 78 20  key to an index 
bb50: 62 2d 74 72 65 65 20 69 73 0a 61 20 72 65 63 6f  b-tree is.a reco
bb60: 72 64 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74  rd composed of t
bb70: 68 65 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  he columns that 
bb80: 61 72 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  are being indexe
bb90: 64 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68  d followed by th
bba0: 65 0a 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65  e.[rowid] of the
bbb0: 20 74 61 62 6c 65 20 72 6f 77 2e 20 20 42 65 63   table row.  Bec
bbc0: 61 75 73 65 20 65 76 65 72 79 20 72 6f 77 20 69  ause every row i
bbd0: 6e 20 61 20 74 61 62 6c 65 20 68 61 73 20 61 20  n a table has a 
bbe0: 75 6e 69 71 75 65 0a 72 6f 77 69 64 20 61 6e 64  unique.rowid and
bbf0: 20 61 6c 6c 20 6b 65 79 73 20 69 6e 20 61 6e 20   all keys in an 
bc00: 69 6e 64 65 78 20 63 6f 6e 74 61 69 6e 20 74 68  index contain th
bc10: 65 20 72 6f 77 69 64 2c 20 61 6c 6c 20 6b 65 79  e rowid, all key
bc20: 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 0a 61 72  s in an index.ar
bc30: 65 20 75 6e 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c  e unique.</p>..<
bc40: 70 3e 5e 54 68 65 72 65 20 69 73 20 61 20 6f 6e  p>^There is a on
bc50: 65 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67  e-to-one mapping
bc60: 20 62 65 74 77 65 65 6e 20 72 6f 77 73 20 69 6e   between rows in
bc70: 20 61 20 74 61 62 6c 65 20 61 6e 64 0a 65 6e 74   a table and.ent
bc80: 72 69 65 73 20 69 6e 20 65 61 63 68 20 69 6e 64  ries in each ind
bc90: 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
bca0: 74 68 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e  th that table..^
bcb0: 43 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f  Corresponding ro
bcc0: 77 73 20 69 6e 74 20 74 68 65 20 69 6e 64 65 78  ws int the index
bcd0: 20 61 6e 64 20 74 61 62 6c 65 20 62 2d 74 72 65   and table b-tre
bce0: 65 73 20 73 68 61 72 65 20 74 68 65 20 73 61 6d  es share the sam
bcf0: 65 20 72 6f 77 69 64 0a 76 61 6c 75 65 2c 20 61  e rowid.value, a
bd00: 6e 64 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73  nd contain the s
bd10: 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 61 6c  ame value for al
bd20: 6c 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  l indexed column
bd30: 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  s.</p>..<tcl>hd_
bd40: 66 72 61 67 6d 65 6e 74 20 73 71 6c 69 74 65 5f  fragment sqlite_
bd50: 6d 61 73 74 65 72 20 7b 73 71 6c 69 74 65 5f 6d  master {sqlite_m
bd60: 61 73 74 65 72 7d 20 7b 73 71 6c 69 74 65 5f 6d  aster} {sqlite_m
bd70: 61 73 74 65 72 20 74 61 62 6c 65 7d 3c 2f 74 63  aster table}</tc
bd80: 6c 3e 0a 3c 68 33 3e 32 2e 35 20 53 74 6f 72 61  l>.<h3>2.5 Stora
bd90: 67 65 20 4f 66 20 54 68 65 20 53 51 4c 20 44 61  ge Of The SQL Da
bda0: 74 61 62 61 73 65 20 53 63 68 65 6d 61 3c 2f 68  tabase Schema</h
bdb0: 33 3e 0a 0a 3c 70 3e 5e 50 61 67 65 20 31 20 6f  3>..<p>^Page 1 o
bdc0: 66 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  f a database fil
bdd0: 65 20 69 73 20 74 68 65 20 72 6f 6f 74 20 70 61  e is the root pa
bde0: 67 65 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d  ge of a table b-
bdf0: 74 72 65 65 20 74 68 61 74 0a 68 6f 6c 64 73 20  tree that.holds 
be00: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
be10: 6e 61 6d 65 64 20 22 73 71 6c 69 74 65 5f 6d 61  named "sqlite_ma
be20: 73 74 65 72 22 20 28 6f 72 20 22 73 71 6c 69 74  ster" (or "sqlit
be30: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 20 69  e_temp_master" i
be40: 6e 0a 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n.the case of a 
be50: 54 45 4d 50 20 64 61 74 61 62 61 73 65 29 20 77  TEMP database) w
be60: 68 69 63 68 20 73 74 6f 72 65 73 20 74 68 65 20  hich stores the 
be70: 63 6f 6d 70 6c 65 74 65 0a 64 61 74 61 62 61 73  complete.databas
be80: 65 20 73 63 68 65 6d 61 2e 20 20 5e 28 54 68 65  e schema.  ^(The
be90: 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
bea0: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
beb0: 74 61 62 6c 65 20 69 73 20 61 73 0a 69 66 20 69  table is as.if i
bec0: 74 20 68 61 64 20 62 65 65 6e 20 63 72 65 61 74  t had been creat
bed0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 66 6f 6c  ed using the fol
bee0: 6c 6f 77 69 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a  lowing SQL:</p>.
bef0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
bf00: 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
bf10: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 0a 20  sqlite_master(. 
bf20: 20 74 79 70 65 20 74 65 78 74 2c 0a 20 20 6e 61   type text,.  na
bf30: 6d 65 20 74 65 78 74 2c 0a 20 20 74 62 6c 5f 6e  me text,.  tbl_n
bf40: 61 6d 65 20 74 65 78 74 2c 0a 20 20 72 6f 6f 74  ame text,.  root
bf50: 70 61 67 65 20 69 6e 74 65 67 65 72 2c 0a 20 20  page integer,.  
bf60: 73 71 6c 20 74 65 78 74 0a 29 3b 0a 3c 2f 70 72  sql text.);.</pr
bf70: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29  e></blockquote>)
bf80: 5e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69 74  ^..<p>^The sqlit
bf90: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 63  e_master table c
bfa0: 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 72 6f 77 20  ontains one row 
bfb0: 66 6f 72 20 65 61 63 68 20 74 61 62 6c 65 2c 20  for each table, 
bfc0: 69 6e 64 65 78 2c 20 76 69 65 77 2c 0a 61 6e 64  index, view,.and
bfd0: 20 74 72 69 67 67 65 72 20 28 63 6f 6c 6c 65 63   trigger (collec
bfe0: 74 69 76 65 6c 79 20 22 6f 62 6a 65 63 74 73 22  tively "objects"
bff0: 29 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  ) in the databas
c000: 65 20 73 63 68 65 6d 61 2c 20 65 78 63 65 70 74  e schema, except
c010: 20 74 68 65 72 65 0a 69 73 20 6e 6f 20 65 6e 74   there.is no ent
c020: 72 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  ry for the sqlit
c030: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69  e_master table i
c040: 74 73 65 6c 66 2e 20 20 5e 54 68 65 20 73 71 6c  tself.  ^The sql
c050: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
c060: 0a 63 6f 6e 74 61 69 6e 73 20 65 6e 74 72 69 65  .contains entrie
c070: 73 20 66 6f 72 20 5b 69 6e 74 65 72 6e 61 6c 20  s for [internal 
c080: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 5d 20  schema objects] 
c090: 69 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 61  in addition to a
c0a0: 70 70 6c 69 63 61 74 69 6f 6e 2d 0a 61 6e 64 20  pplication-.and 
c0b0: 70 72 6f 67 72 61 6d 6d 65 72 2d 64 65 66 69 6e  programmer-defin
c0c0: 65 64 20 6f 62 6a 65 63 74 73 2e 0a 0a 0a 3c 70  ed objects....<p
c0d0: 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  >^(The sqlite_ma
c0e0: 73 74 65 72 2e 74 79 70 65 20 63 6f 6c 75 6d 6e  ster.type column
c0f0: 20 77 69 6c 6c 20 62 65 20 6f 6e 65 0a 6f 66 20   will be one.of 
c100: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65  the following te
c110: 78 74 20 73 74 72 69 6e 67 73 3a 20 20 27 74 61  xt strings:  'ta
c120: 62 6c 65 27 2c 20 27 69 6e 64 65 78 27 2c 20 27  ble', 'index', '
c130: 76 69 65 77 27 2c 20 6f 72 20 27 74 72 69 67 67  view', or 'trigg
c140: 65 72 27 0a 61 63 63 6f 72 64 69 6e 67 20 74 6f  er'.according to
c150: 20 74 68 65 20 74 79 70 65 20 6f 66 20 6f 62 6a   the type of obj
c160: 65 63 74 20 64 65 66 69 6e 65 64 2e 20 20 54 68  ect defined.  Th
c170: 65 20 27 74 61 62 6c 65 27 20 73 74 72 69 6e 67  e 'table' string
c180: 20 69 73 20 75 73 65 64 0a 66 6f 72 20 62 6f 74   is used.for bot
c190: 68 20 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 5b  h ordinary and [
c1a0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e  virtual tables].
c1b0: 29 5e 3c 2f 70 3e 0a 0a 3c 2f 70 3e 5e 28 54 68  )^</p>..</p>^(Th
c1c0: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
c1d0: 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c  name column will
c1e0: 20 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 20 6f   hold the name o
c1f0: 66 20 74 68 65 20 6f 62 6a 65 63 74 2e 29 5e 0a  f the object.)^.
c200: 5e 28 5b 55 4e 49 51 55 45 5d 20 61 6e 64 20 5b  ^([UNIQUE] and [
c210: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e  PRIMARY KEY] con
c220: 73 74 72 61 69 6e 74 73 20 6f 6e 20 74 61 62 6c  straints on tabl
c230: 65 73 20 63 61 75 73 65 20 53 51 4c 69 74 65 20  es cause SQLite 
c240: 74 6f 20 63 72 65 61 74 65 0a 5b 69 6e 74 65 72  to create.[inter
c250: 6e 61 6c 20 69 6e 64 69 63 65 73 5d 20 77 69 74  nal indices] wit
c260: 68 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66  h names of the f
c270: 6f 72 6d 20 22 73 71 6c 69 74 65 5f 61 75 74 6f  orm "sqlite_auto
c280: 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 0a 77  index_TABLE_N".w
c290: 68 65 72 65 20 54 41 42 4c 45 20 69 73 20 72 65  here TABLE is re
c2a0: 70 6c 61 63 65 64 20 62 79 20 74 68 65 20 6e 61  placed by the na
c2b0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
c2c0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
c2d0: 65 0a 63 6f 6e 73 74 72 61 69 6e 74 20 61 6e 64  e.constraint and
c2e0: 20 4e 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   N is an integer
c2f0: 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
c300: 31 20 61 6e 64 20 69 6e 63 72 65 61 73 69 6e 67  1 and increasing
c310: 20 62 79 20 6f 6e 65 0a 77 69 74 68 20 65 61 63   by one.with eac
c320: 68 20 63 6f 6e 73 74 72 61 69 6e 74 20 73 65 65  h constraint see
c330: 6e 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 64  n in the table d
c340: 65 66 69 6e 69 74 69 6f 6e 2e 29 5e 3c 2f 70 3e  efinition.)^</p>
c350: 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f  ..<p>The sqlite_
c360: 6d 61 73 74 65 72 2e 74 62 6c 5f 6e 61 6d 65 20  master.tbl_name 
c370: 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65  column holds the
c380: 20 6e 61 6d 65 20 6f 66 20 61 20 74 61 62 6c 65   name of a table
c390: 20 6f 72 20 76 69 65 77 0a 74 68 61 74 20 74 68   or view.that th
c3a0: 65 20 6f 62 6a 65 63 74 20 69 73 20 61 73 73 6f  e object is asso
c3b0: 63 69 61 74 65 64 20 77 69 74 68 2e 20 20 5e 46  ciated with.  ^F
c3c0: 6f 72 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69  or a table or vi
c3d0: 65 77 2c 20 74 68 65 0a 74 62 6c 5f 6e 61 6d 65  ew, the.tbl_name
c3e0: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 70   column is a cop
c3f0: 79 20 6f 66 20 74 68 65 20 6e 61 6d 65 20 63 6f  y of the name co
c400: 6c 75 6d 6e 2e 20 20 5e 46 6f 72 20 61 6e 20 69  lumn.  ^For an i
c410: 6e 64 65 78 2c 20 74 68 65 20 74 62 6c 5f 6e 61  ndex, the tbl_na
c420: 6d 65 0a 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  me.is the name o
c430: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
c440: 20 69 73 20 69 6e 64 65 78 65 64 2e 20 20 5e 46   is indexed.  ^F
c450: 6f 72 20 61 20 74 72 69 67 67 65 72 2c 20 74 68  or a trigger, th
c460: 65 20 74 62 6c 5f 6e 61 6d 65 0a 63 6f 6c 75 6d  e tbl_name.colum
c470: 6e 20 73 74 6f 72 65 73 20 74 68 65 20 6e 61 6d  n stores the nam
c480: 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
c490: 72 20 76 69 65 77 20 74 68 61 74 20 63 61 75 73  r view that caus
c4a0: 65 73 20 74 68 65 20 74 72 69 67 67 65 72 20 0a  es the trigger .
c4b0: 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70  to fire.</p>..<p
c4c0: 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  >^(The sqlite_ma
c4d0: 73 74 65 72 2e 72 6f 6f 74 70 61 67 65 20 63 6f  ster.rootpage co
c4e0: 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74 68 65 20  lumn stores the 
c4f0: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
c500: 68 65 20 72 6f 6f 74 0a 62 2d 74 72 65 65 20 70  he root.b-tree p
c510: 61 67 65 20 66 6f 72 20 74 61 62 6c 65 73 20 61  age for tables a
c520: 6e 64 20 69 6e 64 69 63 65 73 2e 29 5e 20 20 5e  nd indices.)^  ^
c530: 46 6f 72 20 72 6f 77 73 20 74 68 61 74 20 64 65  For rows that de
c540: 66 69 6e 65 20 76 69 65 77 73 2c 20 74 72 69 67  fine views, trig
c550: 67 65 72 73 2c 0a 61 6e 64 20 76 69 72 74 75 61  gers,.and virtua
c560: 6c 20 74 61 62 6c 65 73 2c 20 74 68 65 20 72 6f  l tables, the ro
c570: 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20 69 73  otpage column is
c580: 20 30 20 6f 72 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a   0 or NULL.</p>.
c590: 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  .<p>^(The sqlite
c5a0: 5f 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f 6c 75  _master.sql colu
c5b0: 6d 6e 20 73 74 6f 72 65 73 20 53 51 4c 20 74 65  mn stores SQL te
c5c0: 78 74 20 74 68 61 74 20 64 65 73 63 72 69 62 65  xt that describe
c5d0: 73 20 74 68 65 0a 6f 62 6a 65 63 74 2e 20 20 54  s the.object.  T
c5e0: 68 69 73 20 53 51 4c 20 74 65 78 74 20 69 73 20  his SQL text is 
c5f0: 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  a [CREATE TABLE]
c600: 2c 20 5b 43 52 45 41 54 45 20 56 49 52 54 55 41  , [CREATE VIRTUA
c610: 4c 20 54 41 42 4c 45 5d 2c 0a 5b 43 52 45 41 54  L TABLE],.[CREAT
c620: 45 20 49 4e 44 45 58 5d 2c 0a 5b 43 52 45 41 54  E INDEX],.[CREAT
c630: 45 20 56 49 45 57 5d 2c 20 6f 72 20 5b 43 52 45  E VIEW], or [CRE
c640: 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74 61  ATE TRIGGER] sta
c650: 74 65 6d 65 6e 74 20 74 68 61 74 20 69 66 20 65  tement that if e
c660: 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73 74  valuated against
c670: 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69  .the database fi
c680: 6c 65 20 77 68 65 6e 20 69 74 20 69 73 20 74 68  le when it is th
c690: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
c6a0: 6f 66 20 61 20 5b 64 61 74 61 62 61 73 65 20 63  of a [database c
c6b0: 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 77 6f 75 6c 64  onnection].would
c6c0: 20 72 65 63 72 65 61 74 65 64 20 74 68 65 20 6f   recreated the o
c6d0: 62 6a 65 63 74 2e 29 5e 20 20 54 68 65 20 74 65  bject.)^  The te
c6e0: 78 74 20 69 73 20 75 73 75 61 6c 6c 79 20 61 20  xt is usually a 
c6f0: 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69 67  copy of the orig
c700: 69 6e 61 6c 0a 73 74 61 74 65 6d 65 6e 74 20 75  inal.statement u
c710: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
c720: 65 20 6f 62 6a 65 63 74 20 62 75 74 20 77 69 74  e object but wit
c730: 68 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 73  h normalizations
c740: 20 61 70 70 6c 69 65 64 20 73 6f 0a 74 68 61 74   applied so.that
c750: 20 74 68 65 20 74 65 78 74 20 63 6f 6e 66 6f 72   the text confor
c760: 6d 73 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ms to the follow
c770: 69 6e 67 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e  ing rules:..<ul>
c780: 0a 3c 6c 69 3e 5e 54 68 65 20 43 52 45 41 54 45  .<li>^The CREATE
c790: 2c 20 54 41 42 4c 45 2c 20 56 49 45 57 2c 20 54  , TABLE, VIEW, T
c7a0: 52 49 47 47 45 52 2c 20 61 6e 64 20 49 4e 44 45  RIGGER, and INDE
c7b0: 58 20 6b 65 79 77 6f 72 64 73 20 61 74 20 74 68  X keywords at th
c7c0: 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74  e beginning.of t
c7d0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65  he statement are
c7e0: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c   converted to al
c7f0: 6c 20 75 70 70 65 72 20 63 61 73 65 20 6c 65 74  l upper case let
c800: 74 65 72 73 2e 0a 3c 6c 69 3e 5e 54 68 65 20 54  ters..<li>^The T
c810: 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59  EMP or TEMPORARY
c820: 20 6b 65 79 77 6f 72 64 20 69 73 20 72 65 6d 6f   keyword is remo
c830: 76 65 64 20 69 66 20 69 74 20 6f 63 63 75 72 73  ved if it occurs
c840: 20 61 66 74 65 72 20 74 68 65 20 0a 69 6e 69 74   after the .init
c850: 69 61 6c 20 43 52 45 41 54 45 20 6b 65 79 77 6f  ial CREATE keywo
c860: 72 64 2e 0a 3c 6c 69 3e 5e 41 6e 79 20 64 61 74  rd..<li>^Any dat
c870: 61 62 61 73 65 20 6e 61 6d 65 20 71 75 61 6c 69  abase name quali
c880: 66 69 65 72 20 74 68 61 74 20 6f 63 63 75 72 73  fier that occurs
c890: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 6e 61   prior to the na
c8a0: 6d 65 20 6f 66 20 74 68 65 0a 6f 62 6a 65 63 74  me of the.object
c8b0: 20 62 65 69 6e 67 20 63 72 65 61 74 65 64 20 69   being created i
c8c0: 73 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e  s removed..<li>^
c8d0: 4c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20 61  Leading spaces a
c8e0: 72 65 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e  re removed..<li>
c8f0: 5e 41 6c 6c 20 73 70 61 63 65 73 20 66 6f 6c 6c  ^All spaces foll
c900: 6f 77 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  owing the first 
c910: 74 77 6f 20 6b 65 79 77 6f 72 64 73 20 61 72 65  two keywords are
c920: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
c930: 61 20 73 69 6e 67 6c 65 0a 73 70 61 63 65 2e 0a  a single.space..
c940: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20  </ul>..<p>^(The 
c950: 74 65 78 74 20 69 6e 20 74 68 65 20 73 71 6c 69  text in the sqli
c960: 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f  te_master.sql co
c970: 6c 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f  lumn is a copy o
c980: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 43  f the original.C
c990: 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  REATE statement 
c9a0: 74 65 78 74 20 74 68 61 74 20 63 72 65 61 74 65  text that create
c9b0: 64 20 74 68 65 20 6f 62 6a 65 63 74 2c 20 65 78  d the object, ex
c9c0: 63 65 70 74 20 6e 6f 72 6d 61 6c 69 7a 65 64 20  cept normalized 
c9d0: 61 73 0a 64 65 73 63 72 69 62 65 64 20 61 62 6f  as.described abo
c9e0: 76 65 20 61 6e 64 20 61 73 20 6d 6f 64 69 66 69  ve and as modifi
c9f0: 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
ca00: 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 73   [ALTER TABLE] s
ca10: 74 61 74 65 6d 65 6e 74 73 2e 29 5e 0a 5e 28 54  tatements.)^.^(T
ca20: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
ca30: 2e 73 71 6c 20 69 73 20 4e 55 4c 4c 20 66 6f 72  .sql is NULL for
ca40: 20 74 68 65 20 5b 69 6e 74 65 72 6e 61 6c 20 69   the [internal i
ca50: 6e 64 69 63 65 73 5d 20 74 68 61 74 20 61 72 65  ndices] that are
ca60: 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63  .automatically c
ca70: 72 65 61 74 65 64 20 62 79 20 5b 55 4e 49 51 55  reated by [UNIQU
ca80: 45 5d 20 6f 72 20 5b 50 52 49 4d 41 52 59 20 4b  E] or [PRIMARY K
ca90: 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  EY] constraints.
caa0: 29 5e 3c 2f 70 3e 0a 0a 0a 3c 74 63 6c 3e 68 64  )^</p>...<tcl>hd
cab0: 5f 66 72 61 67 6d 65 6e 74 20 69 6e 74 73 63 68  _fragment intsch
cac0: 65 6d 61 20 7b 69 6e 74 65 72 6e 61 6c 20 73 63  ema {internal sc
cad0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 7d 20 5c 0a  hema objects} \.
cae0: 7b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61  {internal schema
caf0: 20 6f 62 6a 65 63 74 7d 20 7b 69 6e 74 65 72 6e   object} {intern
cb00: 61 6c 20 69 6e 64 65 78 7d 20 7b 69 6e 74 65 72  al index} {inter
cb10: 6e 61 6c 20 69 6e 64 69 63 65 73 7d 20 5c 0a 7b  nal indices} \.{
cb20: 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 7d 20  internal table} 
cb30: 7b 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 73  {internal tables
cb40: 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e 35 2e  }</tcl>.<h4>2.5.
cb50: 31 20 49 6e 74 65 72 6e 61 6c 20 53 63 68 65 6d  1 Internal Schem
cb60: 61 20 4f 62 6a 65 63 74 73 3c 2f 68 34 3e 0a 0a  a Objects</h4>..
cb70: 3c 70 3e 5e 49 6e 20 61 64 64 69 74 69 6f 6e 20  <p>^In addition 
cb80: 74 6f 20 74 68 65 20 74 61 62 6c 65 73 2c 20 69  to the tables, i
cb90: 6e 64 69 63 65 73 2c 20 76 69 65 77 73 2c 20 61  ndices, views, a
cba0: 6e 64 20 74 72 69 67 67 65 72 73 20 63 72 65 61  nd triggers crea
cbb0: 74 65 64 20 62 79 0a 74 68 65 20 61 70 70 6c 69  ted by.the appli
cbc0: 63 61 74 69 6f 6e 20 61 6e 64 2f 6f 72 20 74 68  cation and/or th
cbd0: 65 20 64 65 76 65 6c 6f 70 65 72 20 75 73 69 6e  e developer usin
cbe0: 67 20 43 52 45 41 54 45 20 73 74 61 74 65 6d 65  g CREATE stateme
cbf0: 6e 74 73 20 53 51 4c 2c 20 74 68 65 0a 73 71 6c  nts SQL, the.sql
cc00: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
cc10: 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 7a 65 72   may contain zer
cc20: 6f 20 6f 72 20 6d 6f 72 65 20 65 6e 74 72 69 65  o or more entrie
cc30: 73 20 66 6f 72 20 0a 3c 69 3e 69 6e 74 65 72 6e  s for .<i>intern
cc40: 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  al schema object
cc50: 73 3c 2f 69 3e 20 74 68 61 74 20 61 72 65 20 63  s</i> that are c
cc60: 72 65 61 74 65 64 20 62 79 20 53 51 4c 69 74 65  reated by SQLite
cc70: 20 66 6f 72 20 69 74 73 20 0a 6f 77 6e 20 69 6e   for its .own in
cc80: 74 65 72 6e 61 6c 20 75 73 65 2e 20 20 5e 54 68  ternal use.  ^Th
cc90: 65 20 6e 61 6d 65 73 20 6f 66 20 69 6e 74 65 72  e names of inter
cca0: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
ccb0: 74 73 0a 61 6c 77 61 79 73 20 62 65 67 69 6e 20  ts.always begin 
ccc0: 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 20 61  with "sqlite_" a
ccd0: 6e 64 20 61 6e 79 20 74 61 62 6c 65 2c 20 69 6e  nd any table, in
cce0: 64 65 78 2c 20 76 69 65 77 2c 20 6f 72 20 74 72  dex, view, or tr
ccf0: 69 67 67 65 72 0a 77 68 6f 73 65 20 6e 61 6d 65  igger.whose name
cd00: 20 62 65 67 69 6e 73 20 77 69 74 68 20 22 73 71   begins with "sq
cd10: 6c 69 74 65 5f 22 20 69 73 20 61 6e 20 69 6e 74  lite_" is an int
cd20: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
cd30: 65 63 74 2e 0a 5e 53 51 4c 69 74 65 20 70 72 6f  ect..^SQLite pro
cd40: 68 69 62 69 74 73 20 61 70 70 6c 69 63 61 74 69  hibits applicati
cd50: 6f 6e 73 20 66 72 6f 6d 20 63 72 65 61 74 69 6e  ons from creatin
cd60: 67 20 6f 62 6a 65 63 74 73 20 77 68 6f 73 65 20  g objects whose 
cd70: 6e 61 6d 65 73 20 62 65 67 69 6e 0a 77 69 74 68  names begin.with
cd80: 20 22 73 71 6c 69 74 65 5f 22 2e 20 20 0a 0a 3c   "sqlite_".  ..<
cd90: 70 3e 49 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d  p>Internal schem
cda0: 61 20 6f 62 6a 65 63 74 73 20 75 73 65 64 20 62  a objects used b
cdb0: 79 20 53 51 4c 69 74 65 20 6d 61 79 20 69 6e 63  y SQLite may inc
cdc0: 6c 75 64 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69  lude the followi
cdd0: 6e 67 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70  ng:..<ul>.<li><p
cde0: 3e 49 6e 64 69 63 65 73 20 77 69 74 68 20 6e 61  >Indices with na
cdf0: 6d 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  mes of the form 
ce00: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
ce10: 78 5f 54 41 42 4c 45 5f 4e 22 20 74 68 61 74 0a  x_TABLE_N" that.
ce20: 20 20 20 20 20 20 20 61 72 65 20 75 73 65 64 20         are used 
ce30: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 5b 55 4e  to implement [UN
ce40: 49 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41  IQUE] and [PRIMA
ce50: 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69  RY KEY] constrai
ce60: 6e 74 73 20 6f 6e 0a 20 20 20 20 20 20 20 6f 72  nts on.       or
ce70: 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2e 0a 0a  dinary tables...
ce80: 3c 6c 69 3e 3c 70 3e 41 20 74 61 62 6c 65 20 77  <li><p>A table w
ce90: 69 74 68 20 74 68 65 20 6e 61 6d 65 20 22 73 71  ith the name "sq
cea0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 22 20 74  lite_sequence" t
ceb0: 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 6b  hat is used to k
cec0: 65 65 70 20 74 72 61 63 6b 0a 20 20 20 20 20 20  eep track.      
ced0: 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   of the maximum 
cee0: 68 69 73 74 6f 72 69 63 61 6c 20 5b 49 4e 54 45  historical [INTE
cef0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
cf00: 20 66 6f 72 20 61 20 74 61 62 6c 65 20 74 68 61   for a table tha
cf10: 74 0a 20 20 20 20 20 20 20 75 73 69 6e 67 20 5b  t.       using [
cf20: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 0a  AUTOINCREMENT]..
cf30: 0a 3c 6c 69 3e 3c 70 3e 54 61 62 6c 65 73 20 77  .<li><p>Tables w
cf40: 69 74 68 20 6e 61 6d 65 73 20 6f 66 20 74 68 65  ith names of the
cf50: 20 66 6f 72 6d 20 22 73 71 6c 69 74 65 5f 73 74   form "sqlite_st
cf60: 61 74 4e 22 20 77 68 65 72 65 20 4e 20 69 73 20  atN" where N is 
cf70: 61 6e 20 69 6e 74 65 67 65 72 2e 0a 20 20 20 20  an integer..    
cf80: 20 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 73     Such tables s
cf90: 74 6f 72 65 20 64 61 74 61 62 61 73 65 20 73 74  tore database st
cfa0: 61 74 69 73 74 69 63 73 20 67 61 74 68 65 72 65  atistics gathere
cfb0: 64 20 62 79 20 74 68 65 20 5b 41 4e 41 4c 59 5a  d by the [ANALYZ
cfc0: 45 5d 0a 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e  E].       comman
cfd0: 64 20 61 6e 64 20 75 73 65 64 20 62 79 20 74 68  d and used by th
cfe0: 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
cff0: 74 6f 20 68 65 6c 70 20 64 65 74 65 72 6d 69 6e  to help determin
d000: 65 20 74 68 65 20 62 65 73 74 0a 20 20 20 20 20  e the best.     
d010: 20 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75    algorithm to u
d020: 73 65 20 66 6f 72 20 65 61 63 68 20 71 75 65 72  se for each quer
d030: 79 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 41 64 64  y..</ul>..<p>Add
d040: 69 74 69 6f 6e 61 6c 20 69 6e 74 65 72 6e 61 6c  itional internal
d050: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   schema objects 
d060: 6e 61 6d 65 73 2c 20 61 6c 77 61 79 73 20 62 65  names, always be
d070: 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 22 73 71  ginning with "sq
d080: 6c 69 74 65 5f 22 2c 0a 6d 61 79 20 62 65 20 61  lite_",.may be a
d090: 64 64 65 64 20 74 6f 20 74 68 65 20 53 51 4c 69  dded to the SQLi
d0a0: 74 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 69  te file format i
d0b0: 6e 20 66 75 74 75 72 65 20 72 65 6c 65 61 73 65  n future release
d0c0: 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  s...<tcl>hd_frag
d0d0: 6d 65 6e 74 20 73 65 71 74 61 62 20 7b 73 71 6c  ment seqtab {sql
d0e0: 69 74 65 5f 73 65 71 75 65 6e 63 65 7d 3c 2f 74  ite_sequence}</t
d0f0: 63 6c 3e 0a 3c 68 34 3e 32 2e 35 2e 32 20 54 68  cl>.<h4>2.5.2 Th
d100: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
d110: 65 20 74 61 62 6c 65 3c 2f 68 34 3e 0a 0a 3c 70  e table</h4>..<p
d120: 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71  >^The sqlite_seq
d130: 75 65 6e 63 65 20 74 61 62 6c 65 20 69 73 20 61  uence table is a
d140: 6e 20 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65  n internal table
d150: 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
d160: 70 6c 65 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e 43  plement.[AUTOINC
d170: 52 45 4d 45 4e 54 5d 2e 20 20 5e 54 68 65 20 73  REMENT].  ^The s
d180: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
d190: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20  able is created 
d1a0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 77 68  automatically.wh
d1b0: 65 6e 65 76 65 72 20 61 6e 79 20 6f 72 64 69 6e  enever any ordin
d1c0: 61 72 79 20 74 61 62 6c 65 20 77 69 74 68 20 61  ary table with a
d1d0: 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
d1e0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 0a  integer primary.
d1f0: 6b 65 79 20 69 73 20 63 72 65 61 74 65 64 2e 20  key is created. 
d200: 20 5e 4f 6e 63 65 20 63 72 65 61 74 65 64 2c 20   ^Once created, 
d210: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
d220: 6e 63 65 20 74 61 62 6c 65 20 65 78 69 73 74 73  nce table exists
d230: 20 69 6e 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d   in the.sqlite_m
d240: 61 73 74 65 72 20 74 61 62 6c 65 20 66 6f 72 65  aster table fore
d250: 76 65 72 3b 20 69 74 20 63 61 6e 6e 6f 74 20 62  ver; it cannot b
d260: 65 20 64 72 6f 70 70 65 64 2e 0a 54 68 65 20 73  e dropped..The s
d270: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 73 71  chema for the sq
d280: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
d290: 62 6c 65 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  ble is:..<blockq
d2a0: 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
d2b0: 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73  E TABLE sqlite_s
d2c0: 65 71 75 65 6e 63 65 28 6e 61 6d 65 2c 73 65 71  equence(name,seq
d2d0: 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
d2e0: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 54 68 65 72  quote>..<p>^Ther
d2f0: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 72 6f  e is a single ro
d300: 77 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  w in the sqlite_
d310: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 66  sequence table f
d320: 6f 72 20 65 61 63 68 20 6f 72 64 69 6e 61 72 79  or each ordinary
d330: 0a 74 61 62 6c 65 20 74 68 61 74 20 75 73 65 73  .table that uses
d340: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2e 20   AUTOINCREMENT. 
d350: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
d360: 20 74 61 62 6c 65 20 28 61 73 20 69 74 20 61 70   table (as it ap
d370: 70 65 61 72 73 20 69 6e 0a 73 71 6c 69 74 65 5f  pears in.sqlite_
d380: 6d 61 73 74 65 72 2e 6e 61 6d 65 29 20 69 73 20  master.name) is 
d390: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  in the sqlite_se
d3a0: 71 75 65 6e 63 65 2e 6d 61 69 6e 20 66 69 65 6c  quence.main fiel
d3b0: 64 20 61 6e 64 20 74 68 65 20 6c 61 72 67 65 73  d and the larges
d3c0: 74 0a 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41  t.[INTEGER PRIMA
d3d0: 52 59 20 4b 45 59 5d 20 65 76 65 72 20 75 73 65  RY KEY] ever use
d3e0: 64 20 62 79 20 74 68 61 74 20 74 61 62 6c 65 20  d by that table 
d3f0: 69 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  is in the sqlite
d400: 5f 73 65 71 75 65 6e 63 65 2e 73 65 71 0a 66 69  _sequence.seq.fi
d410: 65 6c 64 2e 20 20 5e 4e 65 77 20 61 75 74 6f 6d  eld.  ^New autom
d420: 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74  atically generat
d430: 65 64 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  ed integer prima
d440: 72 79 20 6b 65 79 73 20 66 6f 72 20 41 55 54 4f  ry keys for AUTO
d450: 49 4e 43 52 45 4d 45 4e 54 0a 74 61 62 6c 65 73  INCREMENT.tables
d460: 20 61 72 65 20 67 75 61 72 61 6e 74 65 65 64 20   are guaranteed 
d470: 74 6f 20 62 65 20 6c 61 72 67 65 72 20 74 68 61  to be larger tha
d480: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  n the sqlite_seq
d490: 75 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20  uence.seq field 
d4a0: 66 6f 72 0a 74 68 61 74 20 74 61 62 6c 65 2e 0a  for.that table..
d4b0: 5e 28 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f  ^(If the sqlite_
d4c0: 73 65 71 75 65 6e 63 65 2e 73 65 71 20 66 69 65  sequence.seq fie
d4d0: 6c 64 20 6f 66 20 61 6e 20 41 55 54 4f 49 4e 43  ld of an AUTOINC
d4e0: 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20  REMENT table is 
d4f0: 61 6c 72 65 61 64 79 20 61 74 0a 74 68 65 20 6c  already at.the l
d500: 61 72 67 65 73 74 20 69 6e 74 65 67 65 72 20 76  argest integer v
d510: 61 6c 75 65 20 28 39 32 32 33 33 37 32 30 33 36  alue (9223372036
d520: 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
d530: 61 74 74 65 6d 70 74 73 20 74 6f 20 61 64 64 20  attempts to add 
d540: 6e 65 77 0a 72 6f 77 73 20 74 6f 20 74 68 61 74  new.rows to that
d550: 20 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 61   table with an a
d560: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e  utomatically gen
d570: 65 72 61 74 65 64 20 69 6e 74 65 67 65 72 20 70  erated integer p
d580: 72 69 6d 61 72 79 20 77 69 6c 6c 20 66 61 69 6c  rimary will fail
d590: 0a 77 69 74 68 20 61 6e 20 5b 53 51 4c 49 54 45  .with an [SQLITE
d5a0: 5f 46 55 4c 4c 5d 20 65 72 72 6f 72 2e 29 5e 0a  _FULL] error.)^.
d5b0: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75  ^The sqlite_sequ
d5c0: 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20 69  ence.seq field i
d5d0: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
d5e0: 75 70 64 61 74 65 64 20 69 66 20 72 65 71 75 69  updated if requi
d5f0: 72 65 64 20 77 68 65 6e 0a 6e 65 77 20 65 6e 74  red when.new ent
d600: 72 69 65 73 20 61 72 65 20 61 64 64 65 64 20 74  ries are added t
d610: 6f 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  o an AUTOINCREME
d620: 4e 54 20 74 61 62 6c 65 2e 20 20 0a 5e 54 68 65  NT table.  .^The
d630: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
d640: 20 72 6f 77 20 66 6f 72 20 61 6e 20 41 55 54 4f   row for an AUTO
d650: 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20  INCREMENT table 
d660: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
d670: 20 64 65 6c 65 74 65 64 0a 77 68 65 6e 20 74 68   deleted.when th
d680: 65 20 74 61 62 6c 65 20 69 73 20 64 72 6f 70 70  e table is dropp
d690: 65 64 2e 0a 5e 49 66 20 74 68 65 20 73 71 6c 69  ed..^If the sqli
d6a0: 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20  te_sequence row 
d6b0: 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45  for an AUTOINCRE
d6c0: 4d 45 4e 54 20 74 61 62 6c 65 20 64 6f 65 73 20  MENT table does 
d6d0: 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 74  not exist when.t
d6e0: 68 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  he AUTOINCREMENT
d6f0: 20 74 61 62 6c 65 20 69 73 20 75 70 64 61 74 65   table is update
d700: 64 2c 20 74 68 65 6e 20 61 20 6e 65 77 20 73 71  d, then a new sq
d710: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f  lite_sequence ro
d720: 77 20 69 73 20 63 72 65 61 74 65 64 2e 0a 5e 28  w is created..^(
d730: 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  If the sqlite_se
d740: 71 75 65 6e 63 65 2e 73 65 71 20 76 61 6c 75 65  quence.seq value
d750: 20 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43 52   for an AUTOINCR
d760: 45 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20 6d  EMENT table is m
d770: 61 6e 75 61 6c 6c 79 20 0a 73 65 74 20 74 6f 20  anually .set to 
d780: 73 6f 6d 65 74 68 69 6e 67 20 6f 74 68 65 72 20  something other 
d790: 74 68 61 6e 20 61 6e 20 69 6e 74 65 67 65 72 20  than an integer 
d7a0: 61 6e 64 20 74 68 65 72 65 20 69 73 20 61 20 73  and there is a s
d7b0: 75 62 73 65 71 75 65 6e 74 20 61 74 74 65 6d 70  ubsequent attemp
d7c0: 74 20 74 6f 0a 69 6e 73 65 72 74 20 74 68 65 20  t to.insert the 
d7d0: 6f 72 20 75 70 64 61 74 65 20 74 68 65 20 41 55  or update the AU
d7e0: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
d7f0: 65 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61  e, then the beha
d800: 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65  vior is undefine
d810: 64 2e 29 5e 0a 0a 3c 70 3e 5e 41 70 70 6c 69 63  d.)^..<p>^Applic
d820: 61 74 69 6f 6e 20 63 6f 64 65 20 69 73 20 61 6c  ation code is al
d830: 6c 6f 77 65 64 20 74 6f 20 6d 6f 64 69 66 79 20  lowed to modify 
d840: 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65  the sqlite_seque
d850: 6e 63 65 20 74 61 62 6c 65 2c 20 74 6f 20 61 64  nce table, to ad
d860: 64 0a 6e 65 77 20 72 6f 77 73 2c 20 74 6f 20 64  d.new rows, to d
d870: 65 6c 65 74 65 20 72 6f 77 73 2c 20 6f 72 20 74  elete rows, or t
d880: 6f 20 6d 6f 64 69 66 79 20 65 78 69 73 74 69 6e  o modify existin
d890: 67 20 72 6f 77 73 2e 20 20 5e 48 6f 77 65 76 65  g rows.  ^Howeve
d8a0: 72 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63  r, application.c
d8b0: 6f 64 65 20 63 61 6e 6e 6f 74 20 63 72 65 61 74  ode cannot creat
d8c0: 65 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  e the sqlite_seq
d8d0: 75 65 6e 63 65 20 74 61 62 6c 65 20 69 66 20 69  uence table if i
d8e0: 74 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61  t does not alrea
d8f0: 64 79 20 65 78 69 73 74 2e 0a 5e 41 70 70 6c 69  dy exist..^Appli
d900: 63 61 74 69 6f 6e 20 63 6f 64 65 20 63 61 6e 20  cation code can 
d910: 64 65 6c 65 74 65 20 61 6c 6c 20 65 6e 74 72 69  delete all entri
d920: 65 73 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69  es from the sqli
d930: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
d940: 65 2c 0a 62 75 74 20 61 70 70 6c 69 63 61 74 69  e,.but applicati
d950: 6f 6e 20 63 6f 64 65 20 63 61 6e 6e 6f 74 20 64  on code cannot d
d960: 72 6f 70 20 74 68 65 20 73 71 6c 69 74 65 5f 73  rop the sqlite_s
d970: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 2e 0a 0a  equence table...
d980: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
d990: 20 73 74 61 74 31 74 61 62 20 7b 73 71 6c 69 74   stat1tab {sqlit
d9a0: 65 5f 73 74 61 74 31 7d 20 53 51 4c 49 54 45 5f  e_stat1} SQLITE_
d9b0: 53 54 41 54 31 20 3c 2f 74 63 6c 3e 0a 3c 68 34  STAT1 </tcl>.<h4
d9c0: 3e 32 2e 35 2e 33 20 54 68 65 20 73 71 6c 69 74  >2.5.3 The sqlit
d9d0: 65 5f 73 74 61 74 31 20 74 61 62 6c 65 3c 2f 68  e_stat1 table</h
d9e0: 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73 71 6c 69  4>..<p>^The sqli
d9f0: 74 65 5f 73 74 61 74 31 20 69 73 20 61 6e 20 69  te_stat1 is an i
da00: 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 63 72  nternal table cr
da10: 65 61 74 65 64 20 62 79 20 74 68 65 20 5b 41 4e  eated by the [AN
da20: 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 0a 61  ALYZE] command.a
da30: 6e 64 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  nd used to hold 
da40: 73 75 70 70 6c 65 6d 65 6e 74 61 6c 20 69 6e 66  supplemental inf
da50: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
da60: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
da70: 73 20 74 68 61 74 20 74 68 65 0a 71 75 65 72 79  s that the.query
da80: 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65   planner can use
da90: 20 74 6f 20 68 65 6c 70 20 69 74 20 66 69 6e 64   to help it find
daa0: 20 62 65 74 74 65 72 20 77 61 79 73 20 6f 66 20   better ways of 
dab0: 70 65 72 66 6f 72 6d 69 6e 67 20 71 75 65 72 69  performing queri
dac0: 65 73 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e  es..^Application
dad0: 73 20 63 61 6e 20 75 70 64 61 74 65 2c 20 64 65  s can update, de
dae0: 6c 65 74 65 20 66 72 6f 6d 2c 20 69 6e 73 65 72  lete from, inser
daf0: 74 20 69 6e 74 6f 20 6f 72 20 64 72 6f 70 20 74  t into or drop t
db00: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 0a  he sqlite_stat1.
db10: 74 61 62 6c 65 2c 20 62 75 74 20 6d 61 79 20 6e  table, but may n
db20: 6f 74 20 63 72 65 61 74 65 20 6f 72 20 61 6c 74  ot create or alt
db30: 65 72 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  er the sqlite_st
db40: 61 74 31 20 74 61 62 6c 65 2e 0a 5e 54 68 65 20  at1 table..^The 
db50: 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71  schema of the sq
db60: 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
db70: 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a   is as follows:.
db80: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
db90: 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
dba0: 73 71 6c 69 74 65 5f 73 74 61 74 31 28 74 62 6c  sqlite_stat1(tbl
dbb0: 2c 69 64 78 2c 73 74 61 74 29 3b 0a 3c 2f 70 72  ,idx,stat);.</pr
dbc0: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
dbd0: 0a 3c 70 3e 54 68 65 72 65 20 69 73 20 6e 6f 72  .<p>There is nor
dbe0: 6d 61 6c 6c 79 20 6f 6e 65 20 72 6f 77 20 70 65  mally one row pe
dbf0: 72 20 69 6e 64 65 78 2c 20 77 69 74 68 20 74 68  r index, with th
dc00: 65 20 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69  e index identifi
dc10: 65 64 20 62 79 20 74 68 65 0a 6e 61 6d 65 20 69  ed by the.name i
dc20: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
dc30: 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 2e 20 20  t1.idx column.  
dc40: 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  The sqlite_stat1
dc50: 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 73 0a 74  .tbl column is.t
dc60: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
dc70: 61 62 6c 65 20 74 6f 20 77 68 69 63 68 20 74 68  able to which th
dc80: 65 20 69 6e 64 65 78 20 62 65 6c 6f 6e 67 73 2e  e index belongs.
dc90: 20 20 49 6e 20 65 61 63 68 20 73 75 63 68 20 72    In each such r
dca0: 6f 77 2c 20 0a 74 68 65 20 73 71 6c 69 74 65 5f  ow, .the sqlite_
dcb0: 73 74 61 74 2e 73 74 61 74 20 63 6f 6c 75 6d 6e  stat.stat column
dcc0: 20 77 69 6c 6c 20 62 65 0a 61 20 73 74 72 69 6e   will be.a strin
dcd0: 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20  g consisting of 
dce0: 61 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67 65  a list of intege
dcf0: 72 73 2e 20 20 54 68 65 20 66 69 72 73 74 20 69  rs.  The first i
dd00: 6e 74 65 67 65 72 20 69 6e 20 74 68 69 73 0a 6c  nteger in this.l
dd10: 69 73 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65  ist is the numbe
dd20: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
dd30: 20 69 6e 64 65 78 20 61 6e 64 20 69 6e 20 74 68   index and in th
dd40: 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 73 65  e table.  The se
dd50: 63 6f 6e 64 0a 69 6e 74 65 67 65 72 20 69 73 20  cond.integer is 
dd60: 74 68 65 20 61 76 65 72 61 67 65 20 6e 75 6d 62  the average numb
dd70: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
dd80: 65 20 69 6e 64 65 78 20 74 68 61 74 20 68 61 76  e index that hav
dd90: 65 20 74 68 65 20 73 61 6d 65 0a 76 61 6c 75 65  e the same.value
dda0: 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 63 6f   in the first co
ddb0: 6c 75 6d 6e 20 6f 66 20 74 68 65 20 69 6e 64 65  lumn of the inde
ddc0: 78 2e 20 20 54 68 65 20 74 68 69 72 64 20 69 6e  x.  The third in
ddd0: 74 65 67 65 72 20 69 73 20 74 68 65 20 61 76 65  teger is the ave
dde0: 72 61 67 65 0a 6e 75 6d 62 65 72 20 6f 66 20 72  rage.number of r
ddf0: 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ows in the index
de00: 20 74 68 61 74 20 68 61 76 65 20 74 68 65 20 73   that have the s
de10: 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
de20: 65 20 66 69 72 73 74 20 74 77 6f 0a 63 6f 6c 75  e first two.colu
de30: 6d 6e 73 2e 20 20 54 68 65 20 4e 2d 74 68 20 69  mns.  The N-th i
de40: 6e 74 65 67 65 72 20 28 66 6f 72 20 4e 3e 31 29  nteger (for N>1)
de50: 20 69 73 20 74 68 65 20 61 76 65 72 61 67 65 20   is the average 
de60: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
de70: 6e 20 0a 74 68 65 20 69 6e 64 65 78 20 77 68 69  n .the index whi
de80: 63 68 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ch have the same
de90: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 66   value for the f
dea0: 69 72 73 74 20 4e 2d 31 20 63 6f 6c 75 6d 6e 73  irst N-1 columns
deb0: 2e 20 20 46 6f 72 0a 61 20 4b 2d 63 6f 6c 75 6d  .  For.a K-colum
dec0: 6e 20 69 6e 64 65 78 2c 20 74 68 65 72 65 20 77  n index, there w
ded0: 69 6c 6c 20 62 65 20 4b 2b 31 20 69 6e 74 65 67  ill be K+1 integ
dee0: 65 72 73 20 69 6e 20 74 68 65 20 73 74 61 74 20  ers in the stat 
def0: 63 6f 6c 75 6d 6e 2e 20 20 49 66 0a 74 68 65 20  column.  If.the 
df00: 69 6e 64 65 78 20 69 73 20 75 6e 69 71 75 65 2c  index is unique,
df10: 20 74 68 65 6e 20 74 68 65 20 6c 61 73 74 20 69   then the last i
df20: 6e 74 65 67 65 72 20 77 69 6c 6c 20 62 65 20 31  nteger will be 1
df30: 2e 0a 0a 3c 70 3e 54 68 65 20 6c 69 73 74 20 6f  ...<p>The list o
df40: 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68  f integers in th
df50: 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 63 61  e stat column ca
df60: 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20  n optionally be 
df70: 66 6f 6c 6c 6f 77 65 64 0a 62 79 20 74 68 65 20  followed.by the 
df80: 6b 65 79 77 6f 72 64 20 22 75 6e 6f 72 64 65 72  keyword "unorder
df90: 65 64 22 2e 20 20 54 68 65 20 22 75 6e 6f 72 64  ed".  The "unord
dfa0: 65 72 65 64 22 20 6b 65 79 77 6f 72 64 2c 20 69  ered" keyword, i
dfb0: 66 20 69 74 20 69 73 20 70 72 65 73 65 6e 74 2c  f it is present,
dfc0: 0a 6d 75 73 74 20 62 65 20 73 65 70 61 72 61 74  .must be separat
dfd0: 65 64 20 66 72 6f 6d 20 74 68 65 20 6c 61 73 74  ed from the last
dfe0: 20 69 6e 74 65 67 65 72 20 62 79 20 61 20 73 69   integer by a si
dff0: 6e 67 6c 65 20 73 70 61 63 65 2e 20 20 49 66 20  ngle space.  If 
e000: 74 68 65 0a 22 75 6e 6f 72 64 65 72 65 64 22 20  the."unordered" 
e010: 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65  keyword is prese
e020: 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 71 75 65  nt, then the que
e030: 72 79 20 70 6c 61 6e 6e 65 72 20 61 73 73 75 6d  ry planner assum
e040: 65 73 20 74 68 61 74 0a 74 68 65 20 69 6e 64 65  es that.the inde
e050: 78 20 69 73 20 75 6e 6f 72 64 65 72 65 64 20 61  x is unordered a
e060: 6e 64 20 77 69 6c 6c 20 6e 6f 74 20 75 73 65 20  nd will not use 
e070: 74 68 65 20 69 6e 64 65 78 20 66 6f 72 20 61 20  the index for a 
e080: 72 61 6e 67 65 20 71 75 65 72 79 2e 0a 0a 3c 70  range query...<p
e090: 3e 49 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73  >If the sqlite_s
e0a0: 74 61 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 20  tat1.idx column 
e0b0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  is NULL, then th
e0c0: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 73  e sqlite_stat1.s
e0d0: 74 61 74 0a 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  tat.column conta
e0e0: 69 6e 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 74  ins a single int
e0f0: 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
e100: 65 20 28 65 73 74 69 6d 61 74 65 64 29 20 6e 75  e (estimated) nu
e110: 6d 62 65 72 20 6f 66 0a 72 6f 77 73 20 69 6e 20  mber of.rows in 
e120: 74 68 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69  the table identi
e130: 66 69 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73  fied by sqlite_s
e140: 74 61 74 31 2e 74 62 6c 2e 0a 0a 3c 74 63 6c 3e  tat1.tbl...<tcl>
e150: 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74  hd_fragment stat
e160: 32 74 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61  2tab {sqlite_sta
e170: 74 32 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 32 2e  t2}</tcl>.<h4>2.
e180: 35 2e 34 20 54 68 65 20 73 71 6c 69 74 65 5f 73  5.4 The sqlite_s
e190: 74 61 74 32 20 74 61 62 6c 65 3c 2f 68 34 3e 0a  tat2 table</h4>.
e1a0: 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73  .<p>The sqlite_s
e1b0: 74 61 74 32 20 69 73 20 6f 6e 6c 79 20 63 72 65  tat2 is only cre
e1c0: 61 74 65 64 20 61 6e 64 20 69 73 20 6f 6e 6c 79  ated and is only
e1d0: 20 75 73 65 64 20 69 66 20 53 51 4c 69 74 65 20   used if SQLite 
e1e0: 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74 68  is compiled.with
e1f0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
e200: 54 41 54 32 20 61 6e 64 20 69 66 20 74 68 65 20  TAT2 and if the 
e210: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e  SQLite version n
e220: 75 6d 62 65 72 20 69 73 20 62 65 74 77 65 65 6e  umber is between
e230: 0a 33 2e 36 2e 31 38 20 61 6e 64 20 33 2e 37 2e  .3.6.18 and 3.7.
e240: 38 2e 20 20 54 68 65 20 73 71 6c 69 74 65 5f 73  8.  The sqlite_s
e250: 74 61 74 32 20 74 61 62 6c 65 20 69 73 20 6e 65  tat2 table is ne
e260: 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20 77  ither read nor w
e270: 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76 65  ritten by any.ve
e280: 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20  rsion of SQLite 
e290: 62 65 66 6f 72 65 20 33 2e 36 2e 31 38 20 6e 6f  before 3.6.18 no
e2a0: 72 20 61 66 74 65 72 20 33 2e 37 2e 38 2e 0a 54  r after 3.7.8..T
e2b0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he sqlite_stat2 
e2c0: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61  table contains a
e2d0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e2e0: 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20  ation.about the 
e2f0: 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20  distribution of 
e300: 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69  keys within an i
e310: 6e 64 65 78 2e 0a 54 68 65 20 73 63 68 65 6d 61  ndex..The schema
e320: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
e330: 74 61 74 32 20 74 61 62 6c 65 20 69 73 20 61 73  tat2 table is as
e340: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63   follows:..<bloc
e350: 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
e360: 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ATE TABLE sqlite
e370: 5f 73 74 61 74 32 28 74 62 6c 2c 69 64 78 2c 73  _stat2(tbl,idx,s
e380: 61 6d 70 6c 65 6e 6f 2c 73 61 6d 70 6c 65 29 3b  ampleno,sample);
e390: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
e3a0: 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  ote>..<p>The sql
e3b0: 69 74 65 5f 73 74 61 74 32 2e 69 64 78 20 63 6f  ite_stat2.idx co
e3c0: 6c 75 6d 6e 20 61 6e 64 20 74 68 65 20 73 71 6c  lumn and the sql
e3d0: 69 74 65 5f 73 74 61 74 32 2e 74 62 6c 20 63 6f  ite_stat2.tbl co
e3e0: 6c 75 6d 6e 20 69 6e 20 65 61 63 68 20 0a 72 6f  lumn in each .ro
e3f0: 77 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f  w of the sqlite_
e400: 73 74 61 74 32 20 74 61 62 6c 65 20 69 64 65 6e  stat2 table iden
e410: 74 69 66 79 20 61 6e 20 69 6e 64 65 78 20 64 65  tify an index de
e420: 73 63 72 69 62 65 64 20 62 79 20 74 68 61 74 20  scribed by that 
e430: 72 6f 77 2e 0a 54 68 65 72 65 20 61 72 65 20 75  row..There are u
e440: 73 75 61 6c 6c 79 20 31 30 20 72 6f 77 73 20 69  sually 10 rows i
e450: 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
e460: 74 32 0a 74 61 62 6c 65 20 66 6f 72 20 65 61 63  t2.table for eac
e470: 68 20 69 6e 64 65 78 2e 0a 0a 3c 70 3e 54 68 65  h index...<p>The
e480: 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 65 6e   sqlite_stat2 en
e490: 74 72 69 65 73 20 66 6f 72 20 61 6e 20 69 6e 64  tries for an ind
e4a0: 65 78 20 74 68 61 74 20 68 61 76 65 20 73 71 6c  ex that have sql
e4b0: 69 74 65 5f 73 74 61 74 32 2e 73 61 6d 70 6c 65  ite_stat2.sample
e4c0: 6e 6f 0a 62 65 74 77 65 65 6e 20 30 20 61 6e 64  no.between 0 and
e4d0: 20 39 20 69 6e 63 6c 75 73 69 76 65 20 61 72 65   9 inclusive are
e4e0: 20 73 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20   samples of the 
e4f0: 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 76 61  left-most key va
e500: 6c 75 65 20 69 6e 20 74 68 65 0a 69 6e 64 65 78  lue in the.index
e510: 20 74 61 6b 65 6e 20 61 74 20 65 76 65 6e 6c 79   taken at evenly
e520: 20 73 70 61 63 65 64 20 70 6f 69 6e 74 73 20 61   spaced points a
e530: 6c 6f 6e 67 20 74 68 65 20 69 6e 64 65 78 2e 0a  long the index..
e540: 4c 65 74 20 43 20 62 65 20 74 68 65 20 6e 75 6d  Let C be the num
e550: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
e560: 68 65 20 69 6e 64 65 78 2e 0a 54 68 65 6e 20 74  he index..Then t
e570: 68 65 20 73 61 6d 70 6c 65 64 20 72 6f 77 73 20  he sampled rows 
e580: 61 72 65 20 67 69 76 65 6e 20 62 79 0a 0a 3c 62  are given by..<b
e590: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20 20 20 20 20  lockquote>.     
e5a0: 72 6f 77 6e 75 6d 62 65 72 20 3d 20 28 69 2a 43  rownumber = (i*C
e5b0: 2a 32 20 2b 20 43 29 2f 32 30 0a 3c 2f 62 6c 6f  *2 + C)/20.</blo
e5c0: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
e5d0: 20 76 61 72 69 61 62 6c 65 20 69 20 69 6e 20 74   variable i in t
e5e0: 68 65 20 70 72 65 76 69 6f 75 73 20 65 78 70 72  he previous expr
e5f0: 65 73 73 69 6f 6e 20 76 61 72 69 65 73 20 62 65  ession varies be
e600: 74 77 65 65 6e 20 30 20 61 6e 64 20 39 2e 0a 43  tween 0 and 9..C
e610: 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68 65  onceptually, the
e620: 20 69 6e 64 65 78 20 73 70 61 63 65 20 69 73 20   index space is 
e630: 64 69 76 69 64 65 64 20 69 6e 74 6f 0a 31 30 20  divided into.10 
e640: 75 6e 69 66 6f 72 6d 20 62 75 63 6b 65 74 73 20  uniform buckets 
e650: 61 6e 64 20 74 68 65 20 73 61 6d 70 6c 65 73 20  and the samples 
e660: 61 72 65 20 74 68 65 20 6d 69 64 64 6c 65 20 72  are the middle r
e670: 6f 77 20 66 72 6f 6d 20 65 61 63 68 20 62 75 63  ow from each buc
e680: 6b 65 74 2e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72  ket...<p>The for
e690: 6d 61 74 20 66 6f 72 20 73 71 6c 69 74 65 5f 73  mat for sqlite_s
e6a0: 74 61 74 32 20 69 73 20 72 65 63 6f 72 64 65 64  tat2 is recorded
e6b0: 20 68 65 72 65 20 66 6f 72 20 6c 65 67 61 63 79   here for legacy
e6c0: 20 72 65 66 65 72 65 6e 63 65 2e 20 20 0a 52 65   reference.  .Re
e6d0: 63 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66  cent versions of
e6e0: 20 53 51 4c 69 74 65 20 6e 6f 20 6c 6f 6e 67 65   SQLite no longe
e6f0: 72 20 73 75 70 70 6f 72 74 20 73 71 6c 69 74 65  r support sqlite
e700: 5f 73 74 61 74 32 20 61 6e 64 20 74 68 65 0a 73  _stat2 and the.s
e710: 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c  qlite_stat2 tabl
e720: 65 2c 20 69 74 20 69 73 20 65 78 69 73 74 73 2c  e, it is exists,
e730: 20 69 73 20 73 69 6d 70 6c 79 20 69 67 6e 6f 72   is simply ignor
e740: 65 64 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  ed...<tcl>hd_fra
e750: 67 6d 65 6e 74 20 73 74 61 74 33 74 61 62 20 7b  gment stat3tab {
e760: 73 71 6c 69 74 65 5f 73 74 61 74 33 7d 20 53 51  sqlite_stat3} SQ
e770: 4c 49 54 45 5f 53 54 41 54 33 3c 2f 74 63 6c 3e  LITE_STAT3</tcl>
e780: 0a 3c 68 34 3e 32 2e 35 2e 35 20 54 68 65 20 73  .<h4>2.5.5 The s
e790: 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c  qlite_stat3 tabl
e7a0: 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 73  e</h4>..<p>The s
e7b0: 71 6c 69 74 65 5f 73 74 61 74 33 20 69 73 20 6f  qlite_stat3 is o
e7c0: 6e 6c 79 20 63 72 65 61 74 65 64 20 61 6e 64 20  nly created and 
e7d0: 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  is only used if 
e7e0: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
e7f0: 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54 45 5f  ed.with [SQLITE_
e800: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 61 6e  ENABLE_STAT3] an
e810: 64 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  d if the SQLite 
e820: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69  version number i
e830: 73 0a 33 2e 37 2e 39 20 6f 72 20 67 72 65 61 74  s.3.7.9 or great
e840: 65 72 2e 20 20 54 68 65 20 73 71 6c 69 74 65 5f  er.  The sqlite_
e850: 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 6e  stat3 table is n
e860: 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f 72 20  either read nor 
e870: 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79 0a 76  written by any.v
e880: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
e890: 20 62 65 66 6f 72 65 20 33 2e 36 2e 39 2e 0a 54   before 3.6.9..T
e8a0: 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
e8b0: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61  table contains a
e8c0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
e8d0: 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20  ation.about the 
e8e0: 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20  distribution of 
e8f0: 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69  keys within an i
e900: 6e 64 65 78 2c 20 69 6e 66 6f 72 6d 61 74 69 6f  ndex, informatio
e910: 6e 20 74 68 61 74 20 74 68 65 0a 71 75 65 72 79  n that the.query
e920: 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65   planner can use
e930: 20 74 6f 20 64 65 76 69 73 65 20 62 65 74 74 65   to devise bette
e940: 72 20 61 6e 64 20 66 61 73 74 65 72 20 71 75 65  r and faster que
e950: 72 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 54  ry algorithms..T
e960: 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65  he schema of the
e970: 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
e980: 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ble is as follow
e990: 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
e9a0: 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
e9b0: 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 33 28  LE sqlite_stat3(
e9c0: 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c  tbl,idx,nEq,nLt,
e9d0: 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f  nDLt,sample);.</
e9e0: 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  pre></blockquote
e9f0: 3e 0a 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20  >..<p>There are 
ea00: 75 73 75 61 6c 6c 79 20 6d 75 6c 74 69 70 6c 65  usually multiple
ea10: 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
ea20: 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
ea30: 6c 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65  le for each inde
ea40: 78 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74  x..The sqlite_st
ea50: 61 74 33 2e 73 61 6d 70 6c 65 20 63 6f 6c 75 6d  at3.sample colum
ea60: 6e 20 68 6f 6c 64 73 20 74 68 65 20 76 61 6c 75  n holds the valu
ea70: 65 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  e of the left-mo
ea80: 73 74 20 66 69 65 6c 64 20 6f 66 20 61 6e 0a 69  st field of an.i
ea90: 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65 64 20  ndex identified 
eaa0: 62 79 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  by the sqlite_st
eab0: 61 74 33 2e 69 64 78 20 61 6e 64 20 74 68 65 20  at3.idx and the 
eac0: 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 74 62 6c  sqlite_stat3.tbl
ead0: 20 63 6f 6c 75 6d 6e 73 2e 0a 49 66 20 74 68 65   columns..If the
eae0: 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e 69 64   sqlite_stat3.id
eaf0: 78 20 61 6e 64 20 73 71 6c 69 74 65 5f 73 74 61  x and sqlite_sta
eb00: 74 33 2e 74 62 6c 0a 63 6f 6c 75 6d 6e 73 20 68  t3.tbl.columns h
eb10: 6f 6c 64 20 74 68 65 20 73 61 6d 65 20 76 61 6c  old the same val
eb20: 75 65 2c 20 74 68 65 6e 20 74 68 61 74 20 72 6f  ue, then that ro
eb30: 77 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 61 6d  w contains a sam
eb40: 70 6c 65 20 66 72 6f 6d 0a 74 68 65 20 5b 49 4e  ple from.the [IN
eb50: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
eb60: 59 5d 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e  Y] of the table.
eb70: 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .The sqlite_stat
eb80: 33 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c  3.nEq column hol
eb90: 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  ds the approxima
eba0: 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  te.number of ent
ebb0: 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65  ries in the inde
ebc0: 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73  x whose left-mos
ebd0: 74 20 63 6f 6c 75 6d 6e 20 65 78 61 63 74 6c 79  t column exactly
ebe0: 20 6d 61 74 63 68 65 73 0a 74 68 65 20 73 61 6d   matches.the sam
ebf0: 70 6c 65 2e 20 20 0a 54 68 65 20 73 71 6c 69 74  ple.  .The sqlit
ec00: 65 5f 73 74 61 74 33 2e 6e 4c 74 20 68 6f 6c 64  e_stat3.nLt hold
ec10: 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  s the approximat
ec20: 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
ec30: 69 65 73 20 69 6e 20 74 68 65 0a 69 6e 64 65 78  ies in the.index
ec40: 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74   whose left-most
ec50: 20 63 6f 6c 75 6d 6e 20 69 73 20 6c 65 73 73 20   column is less 
ec60: 74 68 61 6e 20 74 68 65 20 73 61 6d 70 6c 65 2e  than the sample.
ec70: 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .The sqlite_stat
ec80: 33 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f  3.nDLt column ho
ec90: 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d  lds the approxim
eca0: 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 69  ate.number of di
ecb0: 73 74 69 6e 63 74 20 6c 65 66 74 2d 6d 6f 73 74  stinct left-most
ecc0: 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
ecd0: 69 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 6c  index that are l
ece0: 65 73 73 20 74 68 61 6e 0a 74 68 65 20 73 61 6d  ess than.the sam
ecf0: 70 6c 65 2e 0a 0a 3c 70 3e 46 75 74 75 72 65 20  ple...<p>Future 
ed00: 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69  versions of SQLi
ed10: 74 65 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  te might change 
ed20: 74 6f 20 73 74 6f 72 65 20 61 20 73 74 72 69 6e  to store a strin
ed30: 67 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 6d 75 6c  g containing.mul
ed40: 74 69 70 6c 65 20 69 6e 74 65 67 65 72 73 20 76  tiple integers v
ed50: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 73 71 6c  alues in the sql
ed60: 69 74 65 5f 73 74 61 74 33 2e 6e 44 4c 74 20 63  ite_stat3.nDLt c
ed70: 6f 6c 75 6d 6e 2c 20 61 20 73 74 72 69 6e 67 20  olumn, a string 
ed80: 69 6e 20 77 68 69 63 68 0a 74 68 65 20 66 69 72  in which.the fir
ed90: 73 74 20 69 6e 74 65 67 65 72 20 77 69 6c 6c 20  st integer will 
eda0: 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  be the number of
edb0: 20 70 72 69 6f 72 20 69 6e 64 65 78 20 65 6e 74   prior index ent
edc0: 72 69 65 73 20 74 68 61 74 20 61 72 65 0a 64 69  ries that are.di
edd0: 73 74 69 6e 63 74 20 69 6e 20 74 68 65 20 6c 65  stinct in the le
ede0: 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 2c 20  ft-most column, 
edf0: 74 68 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67  the second integ
ee00: 65 72 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  er is the number
ee10: 20 6f 66 0a 70 72 69 6f 72 20 69 6e 64 65 78 20   of.prior index 
ee20: 65 6e 74 72 69 65 73 20 74 68 61 74 20 61 72 65  entries that are
ee30: 20 64 69 73 74 69 6e 63 74 20 69 6e 20 74 68 65   distinct in the
ee40: 20 66 69 72 73 74 20 74 77 6f 20 63 6f 6c 75 6d   first two colum
ee50: 6e 73 2c 20 74 68 65 0a 74 68 69 72 64 20 69 6e  ns, the.third in
ee60: 74 65 67 65 72 20 69 73 20 74 68 65 20 6e 75 6d  teger is the num
ee70: 62 65 72 20 6f 66 20 70 72 69 6f 72 20 69 6e 64  ber of prior ind
ee80: 65 78 20 65 6e 74 72 69 65 73 20 74 68 61 74 20  ex entries that 
ee90: 61 72 65 20 64 69 73 74 69 6e 63 74 0a 69 6e 20  are distinct.in 
eea0: 74 68 65 20 66 69 72 73 74 20 74 68 72 65 65 20  the first three 
eeb0: 63 6f 6c 75 6d 6e 73 2c 20 61 6e 64 20 73 6f 20  columns, and so 
eec0: 66 6f 72 74 68 20 20 57 69 74 68 20 73 75 63 68  forth  With such
eed0: 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 2c 20 74   an extension, t
eee0: 68 65 0a 6e 44 4c 74 20 66 69 65 6c 64 20 77 69  he.nDLt field wi
eef0: 6c 6c 20 62 65 63 6f 6d 65 20 73 69 6d 69 6c 61  ll become simila
ef00: 72 20 69 6e 20 66 75 6e 63 74 69 6f 6e 20 74 6f  r in function to
ef10: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
ef20: 31 2e 73 74 61 74 20 66 69 65 6c 64 2e 0a 0a 3c  1.stat field...<
ef30: 70 3e 54 68 65 72 65 20 63 61 6e 20 62 65 20 61  p>There can be a
ef40: 6e 20 61 72 62 69 74 72 61 72 79 20 6e 75 6d 62  n arbitrary numb
ef50: 65 72 20 6f 66 20 73 71 6c 69 74 65 5f 73 74 61  er of sqlite_sta
ef60: 74 33 20 65 6e 74 72 69 65 73 20 70 65 72 20 69  t3 entries per i
ef70: 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41 4c 59  ndex..The [ANALY
ef80: 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c  ZE] command will
ef90: 20 74 79 70 69 63 61 6c 6c 79 20 67 65 6e 65 72   typically gener
efa0: 61 74 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  ate sqlite_stat3
efb0: 20 74 61 62 6c 65 73 0a 74 68 61 74 20 63 6f 6e   tables.that con
efc0: 74 61 69 6e 20 62 65 74 77 65 65 6e 20 31 30 20  tain between 10 
efd0: 61 6e 64 20 34 30 20 73 61 6d 70 6c 65 73 20 74  and 40 samples t
efe0: 68 61 74 20 61 72 65 20 64 69 73 74 72 69 62 75  hat are distribu
eff0: 74 65 64 20 61 63 72 6f 73 73 0a 74 68 65 20 6b  ted across.the k
f000: 65 79 20 73 70 61 63 65 20 61 6e 64 20 77 69 74  ey space and wit
f010: 68 20 6c 61 72 67 65 20 6e 45 71 20 76 61 6c 75  h large nEq valu
f020: 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  es...<tcl>hd_fra
f030: 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b 6a 6f  gment rollbackjo
f040: 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63 6b 20  urnal {rollback 
f050: 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61 74 7d 3c  journal format}<
f060: 2f 74 63 6c 3e 0a 3c 68 32 3e 33 2e 30 20 54 68  /tcl>.<h2>3.0 Th
f070: 65 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e  e Rollback Journ
f080: 61 6c 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20  al</h2>..<p>The 
f090: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
f0a0: 20 69 73 20 61 20 66 69 6c 65 20 61 73 73 6f 63   is a file assoc
f0b0: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
f0c0: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 0a  SQLite database.
f0d0: 66 69 6c 65 20 74 68 61 74 20 68 6f 6c 64 20 69  file that hold i
f0e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
f0f0: 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65 20 64  to restore the d
f100: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
f110: 69 74 73 20 69 6e 69 74 69 61 6c 0a 73 74 61 74  its initial.stat
f120: 65 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 75  e during the cou
f130: 72 73 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63  rse of a transac
f140: 74 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f 6c 6c 62  tion..^The rollb
f150: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
f160: 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61 74   is always locat
f170: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 0a  ed in the same .
f180: 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68 65  directory as the
f190: 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61   database.file a
f1a0: 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65 20  nd has the same 
f1b0: 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61 74 61  name as the data
f1c0: 62 61 73 65 20 66 69 6c 65 20 62 75 74 20 77 69  base file but wi
f1d0: 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c  th the string."<
f1e0: 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e  tt>-journal</tt>
f1f0: 22 20 61 70 70 65 6e 64 65 64 2e 20 20 54 68 65  " appended.  The
f200: 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 61  re can only be a
f210: 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b   single rollback
f220: 20 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f 63 69 61   journal.associa
f230: 74 65 64 20 77 69 74 68 20 61 20 67 69 76 65 20  ted with a give 
f240: 64 61 74 61 62 61 73 65 20 61 6e 64 20 68 65 6e  database and hen
f250: 63 65 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c  ce there can onl
f260: 79 20 62 65 20 6f 6e 65 20 77 72 69 74 65 0a 74  y be one write.t
f270: 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70 65 6e 20  ransaction open 
f280: 61 67 61 69 6e 73 74 20 61 20 73 69 6e 67 6c 65  against a single
f290: 20 64 61 74 61 62 61 73 65 20 61 74 20 6f 6e 65   database at one
f2a0: 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49   time.</p>..<p>I
f2b0: 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  f a transaction 
f2c0: 69 73 20 61 62 6f 72 74 65 64 20 64 75 65 20 74  is aborted due t
f2d0: 6f 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  o an application
f2e0: 20 63 72 61 73 68 2c 20 61 6e 20 6f 70 65 72 61   crash, an opera
f2f0: 74 69 6e 67 0a 73 79 73 74 65 6d 20 63 72 61 73  ting.system cras
f300: 68 2c 20 6f 72 20 61 20 68 61 72 64 77 61 72 65  h, or a hardware
f310: 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f   power failure o
f320: 72 20 63 72 61 73 68 2c 20 74 68 65 6e 20 74 68  r crash, then th
f330: 65 20 64 61 74 61 62 61 73 65 20 6d 61 79 0a 62  e database may.b
f340: 65 20 6c 65 66 74 20 69 6e 20 61 6e 20 69 6e 63  e left in an inc
f350: 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e  onsistent state.
f360: 20 20 5e 54 68 65 20 6e 65 78 74 20 74 69 6d 65    ^The next time
f370: 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73   SQLite attempts
f380: 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20 64 61 74   to open.the dat
f390: 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20  abase file, the 
f3a0: 70 72 65 73 65 6e 63 65 20 6f 66 20 74 68 65 20  presence of the 
f3b0: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
f3c0: 20 66 69 6c 65 20 77 69 6c 6c 20 62 65 20 0a 64   file will be .d
f3d0: 65 74 65 63 74 65 64 20 61 6e 64 20 74 68 65 20  etected and the 
f3e0: 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c 20 62 65 20  journal will be 
f3f0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 6c  automatically pl
f400: 61 79 65 64 20 62 61 63 6b 20 74 6f 20 72 65 73  ayed back to res
f410: 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62 61 73  tore the.databas
f420: 65 20 74 6f 20 69 74 73 20 73 74 61 74 65 20 61  e to its state a
f430: 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  t the start of t
f440: 68 65 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72  he incomplete tr
f450: 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  ansaction.</p>..
f460: 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a  <p>^A rollback j
f470: 6f 75 72 6e 61 6c 20 69 73 20 6f 6e 6c 79 20 63  ournal is only c
f480: 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
f490: 76 61 6c 69 64 20 69 66 20 69 74 20 65 78 69 73  valid if it exis
f4a0: 74 73 20 61 6e 64 0a 63 6f 6e 74 61 69 6e 73 20  ts and.contains 
f4b0: 61 20 76 61 6c 69 64 20 68 65 61 64 65 72 2e 20  a valid header. 
f4c0: 20 48 65 6e 63 65 20 61 20 74 72 61 6e 73 61 63   Hence a transac
f4d0: 74 69 6f 6e 20 63 61 6e 20 62 65 20 63 6f 6d 6d  tion can be comm
f4e0: 69 74 74 65 64 20 69 6e 20 6f 6e 65 0a 6f 66 20  itted in one.of 
f4f0: 74 68 72 65 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e  three ways:.<ol>
f500: 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c 62  .<li>^(The rollb
f510: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
f520: 20 63 61 6e 20 62 65 20 64 65 6c 65 74 65 64 29   can be deleted)
f530: 5e 2c 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c  ^,.<li>^(The rol
f540: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
f550: 6c 65 20 63 61 6e 20 62 65 20 74 72 75 6e 63 61  le can be trunca
f560: 74 65 64 20 74 6f 20 7a 65 72 6f 20 6c 65 6e 67  ted to zero leng
f570: 74 68 29 5e 2c 20 6f 72 0a 3c 6c 69 3e 5e 28 54  th)^, or.<li>^(T
f580: 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
f590: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
f5a0: 6c 20 63 61 6e 20 62 65 20 6f 76 65 72 77 72 69  l can be overwri
f5b0: 74 74 65 6e 20 77 69 74 68 0a 69 6e 76 61 6c 69  tten with.invali
f5c0: 64 20 68 65 61 64 65 72 20 74 65 78 74 20 28 66  d header text (f
f5d0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c 20  or example, all 
f5e0: 7a 65 72 6f 73 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a  zeros).)^.</ol>.
f5f0: 5e 54 68 65 73 65 20 74 68 72 65 65 20 77 61 79  ^These three way
f600: 73 20 6f 66 20 63 6f 6d 6d 69 74 74 69 6e 67 20  s of committing 
f610: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  a transaction co
f620: 72 72 65 73 70 6f 6e 64 20 74 6f 20 74 68 65 20  rrespond to the 
f630: 44 45 4c 45 54 45 2c 0a 54 52 55 4e 43 41 54 45  DELETE,.TRUNCATE
f640: 2c 20 61 6e 64 20 50 45 52 53 49 53 54 20 73 65  , and PERSIST se
f650: 74 74 69 6e 67 73 2c 20 72 65 73 70 65 63 74 69  ttings, respecti
f660: 76 65 6c 79 2c 20 6f 66 20 74 68 65 20 5b 6a 6f  vely, of the [jo
f670: 75 72 6e 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d  urnal_mode pragm
f680: 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20  a]..</p>...<p>A 
f690: 76 61 6c 69 64 20 72 6f 6c 6c 62 61 63 6b 20 6a  valid rollback j
f6a0: 6f 75 72 6e 61 6c 20 62 65 67 69 6e 73 20 77 69  ournal begins wi
f6b0: 74 68 20 61 20 68 65 61 64 65 72 20 69 6e 20 74  th a header in t
f6c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72  he following for
f6d0: 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65  mat:</p>..<cente
f6e0: 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a  r>.<i>Rollback J
f6f0: 6f 75 72 6e 61 6c 20 48 65 61 64 65 72 20 46 6f  ournal Header Fo
f700: 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
f710: 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
f720: 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
f730: 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
f740: 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
f750: 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e  <tr>^(<td valign
f760: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
f770: 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  r>0.    <td vali
f780: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
f790: 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 3e 48 65  ter>8.    <td>He
f7a0: 61 64 65 72 20 73 74 72 69 6e 67 3a 20 20 30 78  ader string:  0x
f7b0: 64 39 2c 20 30 78 64 35 2c 20 30 78 30 35 2c 20  d9, 0xd5, 0x05, 
f7c0: 30 78 66 39 2c 20 30 78 32 30 2c 20 30 78 61 31  0xf9, 0x20, 0xa1
f7d0: 2c 20 30 78 36 33 2c 20 30 78 64 37 29 5e 0a 3c  , 0x63, 0xd7)^.<
f7e0: 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d  tr>^(<td valign=
f7f0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
f800: 3e 38 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  >8.    <td valig
f810: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
f820: 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65  er>4.    <td>The
f830: 20 22 50 61 67 65 20 43 6f 75 6e 74 22 20 2d 20   "Page Count" - 
f840: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  The number of pa
f850: 67 65 73 20 69 6e 20 74 68 65 20 6e 65 78 74 20  ges in the next 
f860: 73 65 67 6d 65 6e 74 20 6f 66 20 74 68 65 20 0a  segment of the .
f870: 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2c          journal,
f880: 20 6f 72 20 2d 31 20 74 6f 0a 20 20 20 20 20 20   or -1 to.      
f890: 20 20 6d 65 61 6e 20 61 6c 6c 20 63 6f 6e 74 65    mean all conte
f8a0: 6e 74 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  nt to the end of
f8b0: 20 74 68 65 20 66 69 6c 65 29 5e 0a 3c 74 72 3e   the file)^.<tr>
f8c0: 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  ^(<td valign=top
f8d0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32   align=center>12
f8e0: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
f8f0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
f900: 3e 34 0a 20 20 20 20 3c 74 64 3e 41 20 72 61 6e  >4.    <td>A ran
f910: 64 6f 6d 20 6e 6f 6e 63 65 20 66 6f 72 20 74 68  dom nonce for th
f920: 65 20 63 68 65 63 6b 73 75 6d 29 5e 0a 3c 74 72  e checksum)^.<tr
f930: 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >^(<td valign=to
f940: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
f950: 36 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  6.    <td valign
f960: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
f970: 72 3e 34 0a 20 20 20 20 3c 74 64 3e 49 6e 69 74  r>4.    <td>Init
f980: 69 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20  ial size of the 
f990: 64 61 74 61 62 61 73 65 20 69 6e 20 70 61 67 65  database in page
f9a0: 73 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61  s)^.<tr>^(<td va
f9b0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
f9c0: 65 6e 74 65 72 3e 32 30 0a 20 20 20 20 3c 74 64  enter>20.    <td
f9d0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
f9e0: 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
f9f0: 74 64 3e 53 69 7a 65 20 6f 66 20 61 20 64 69 73  td>Size of a dis
fa00: 6b 20 73 65 63 74 6f 72 20 61 73 73 75 6d 65 64  k sector assumed
fa10: 20 62 79 20 74 68 65 20 70 72 6f 63 65 73 73 20   by the process 
fa20: 74 68 61 74 20 77 72 6f 74 65 20 74 68 69 73 0a  that wrote this.
fa30: 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2e          journal.
fa40: 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c  )^.<tr>^(<td val
fa50: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
fa60: 6e 74 65 72 3e 32 34 0a 20 20 20 20 3c 74 64 20  nter>24.    <td 
fa70: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
fa80: 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
fa90: 64 3e 53 69 7a 65 20 6f 66 20 70 61 67 65 73 20  d>Size of pages 
faa0: 69 6e 20 74 68 69 73 20 6a 6f 75 72 6e 61 6c 2e  in this journal.
fab0: 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  )^.</table>.</ce
fac0: 6e 74 65 72 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c  nter>..<p>^A rol
fad0: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 68 65  lback journal he
fae0: 61 64 65 72 20 69 73 20 70 61 64 64 65 64 20 77  ader is padded w
faf0: 69 74 68 20 7a 65 72 6f 73 20 6f 75 74 20 74 6f  ith zeros out to
fb00: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20 0a   the size of a .
fb10: 73 69 6e 67 6c 65 20 73 65 63 74 6f 72 20 28 61  single sector (a
fb20: 73 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 65  s defined by the
fb30: 20 73 65 63 74 6f 72 20 73 69 7a 65 20 69 6e 74   sector size int
fb40: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32  eger at offset 2
fb50: 30 29 2e 0a 54 68 65 20 68 65 61 64 65 72 20 69  0)..The header i
fb60: 73 20 69 6e 20 61 20 73 65 63 74 6f 72 20 62 79  s in a sector by
fb70: 20 69 74 73 65 6c 66 20 73 6f 20 74 68 61 74 20   itself so that 
fb80: 69 66 20 61 20 70 6f 77 65 72 20 6c 6f 73 73 20  if a power loss 
fb90: 6f 63 63 75 72 73 20 77 68 69 6c 65 0a 77 72 69  occurs while.wri
fba0: 74 69 6e 67 20 74 68 65 20 73 65 63 74 6f 72 2c  ting the sector,
fbb0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
fbc0: 74 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 68 65  t follows the he
fbd0: 61 64 65 72 20 77 69 6c 6c 20 62 65 0a 28 68 6f  ader will be.(ho
fbe0: 70 65 66 75 6c 6c 79 29 20 75 6e 64 61 6d 61 67  pefully) undamag
fbf0: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74  ed.</p>..<p>^Aft
fc00: 65 72 20 74 68 65 20 68 65 61 64 65 72 20 61 6e  er the header an
fc10: 64 20 7a 65 72 6f 20 70 61 64 64 69 6e 67 20 61  d zero padding a
fc20: 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  re zero or more 
fc30: 70 61 67 65 20 72 65 63 6f 72 64 73 2e 20 20 5e  page records.  ^
fc40: 45 61 63 68 0a 70 61 67 65 20 72 65 63 6f 72 64  Each.page record
fc50: 20 73 74 6f 72 65 73 20 61 20 63 6f 70 79 20 6f   stores a copy o
fc60: 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
fc70: 20 61 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65   a page from the
fc80: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 62   database file.b
fc90: 65 66 6f 72 65 20 69 74 20 77 61 73 20 63 68 61  efore it was cha
fca0: 6e 67 65 64 2e 20 20 5e 54 68 65 20 73 61 6d 65  nged.  ^The same
fcb0: 20 70 61 67 65 20 6d 61 79 20 6e 6f 74 20 61 70   page may not ap
fcc0: 70 65 61 72 20 6d 6f 72 65 20 74 68 61 6e 20 6f  pear more than o
fcd0: 6e 63 65 0a 77 69 74 68 69 6e 20 61 20 73 69 6e  nce.within a sin
fce0: 67 6c 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  gle rollback jou
fcf0: 72 6e 61 6c 2e 0a 54 6f 20 72 6f 6c 6c 62 61 63  rnal..To rollbac
fd00: 6b 20 61 6e 20 69 6e 63 6f 6d 70 6c 65 74 65 20  k an incomplete 
fd10: 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61 20 70  transaction, a p
fd20: 72 6f 63 65 73 73 0a 68 61 73 20 6d 65 72 65 6c  rocess.has merel
fd30: 79 20 74 6f 20 72 65 61 64 20 74 68 65 20 72 6f  y to read the ro
fd40: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
fd50: 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
fd60: 20 65 6e 64 20 61 6e 64 0a 77 72 69 74 65 20 70   end and.write p
fd70: 61 67 65 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  ages found in th
fd80: 65 20 6a 6f 75 72 6e 61 6c 20 62 61 63 6b 20 69  e journal back i
fd90: 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
fda0: 20 66 69 6c 65 20 61 74 20 74 68 65 0a 61 70 70   file at the.app
fdb0: 72 6f 70 72 69 61 74 65 20 6c 6f 63 61 74 69 6f  ropriate locatio
fdc0: 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74  n.</p>..<p>Let t
fdd0: 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
fde0: 20 73 69 7a 65 20 28 74 68 65 20 76 61 6c 75 65   size (the value
fdf0: 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   of the integer 
fe00: 61 74 20 6f 66 66 73 65 74 20 32 34 20 0a 69 6e  at offset 24 .in
fe10: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61   the journal hea
fe20: 64 65 72 29 20 62 65 20 4e 2e 0a 54 68 65 6e 20  der) be N..Then 
fe30: 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20  the format of a 
fe40: 70 61 67 65 20 72 65 63 6f 72 64 20 69 73 20 61  page record is a
fe50: 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a  s follows:</p>..
fe60: 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c  <center>.<i>Roll
fe70: 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 50 61 67  back Journal Pag
fe80: 65 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c  e Record Format<
fe90: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
fea0: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
feb0: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
fec0: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
fed0: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 5e  escription.<tr>^
fee0: 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  (<td valign=top 
fef0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20  align=center>0. 
ff00: 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
ff10: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
ff20: 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 70 61 67  .    <td>The pag
ff30: 65 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  e number in the 
ff40: 64 61 74 61 62 61 73 65 20 66 69 6c 65 29 5e 0a  database file)^.
ff50: 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69 67 6e  <tr>^(<td valign
ff60: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
ff70: 72 3e 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  r>4.    <td vali
ff80: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
ff90: 74 65 72 3e 4e 0a 20 20 20 20 3c 74 64 3e 4f 72  ter>N.    <td>Or
ffa0: 69 67 69 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f  iginal content o
ffb0: 66 20 74 68 65 20 70 61 67 65 20 70 72 69 6f 72  f the page prior
ffc0: 20 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66   to the start of
ffd0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
ffe0: 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c  )^.<tr>^(<td val
fff0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
10000 6e 74 65 72 3e 4e 2b 34 0a 20 20 20 20 3c 74 64  nter>N+4.    <td
10010 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
10020 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
10030 74 64 3e 43 68 65 63 6b 73 75 6d 29 5e 0a 3c 2f  td>Checksum)^.</
10040 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e  table>.</center>
10050 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 63 68 65 63  ...<p>^(The chec
10060 6b 73 75 6d 20 69 73 20 61 6e 20 75 6e 73 69 67  ksum is an unsig
10070 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74 65 67  ned 32-bit integ
10080 65 72 20 63 6f 6d 70 75 74 65 64 20 61 73 20 66  er computed as f
10090 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c  ollows:</p>..<ol
100a0 3e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65  >.<li>Initialize
100b0 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 74 6f   the checksum to
100c0 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 6e 6f   the checksum no
100d0 6e 63 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20  nce value found 
100e0 69 6e 20 74 68 65 0a 6a 6f 75 72 6e 61 6c 20 68  in the.journal h
100f0 65 61 64 65 72 20 61 74 20 6f 66 66 73 65 74 20  eader at offset 
10100 31 32 2e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69  12..<li>Initiali
10110 7a 65 20 69 6e 64 65 78 20 58 20 74 6f 20 62 65  ze index X to be
10120 20 4e 2d 32 30 30 20 28 77 68 65 72 65 20 4e 20   N-200 (where N 
10130 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61  is the size of a
10140 20 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 69   database page.i
10150 6e 20 62 79 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74  n bytes..<li>Int
10160 65 72 70 72 65 74 20 74 68 65 20 66 6f 75 72 20  erpret the four 
10170 62 79 74 65 73 20 61 74 20 6f 66 66 73 65 74 20  bytes at offset 
10180 58 20 69 6e 74 6f 20 74 68 65 20 70 61 67 65 20  X into the page 
10190 61 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  as a 4-byte big-
101a0 65 6e 64 69 61 6e 0a 75 6e 73 69 67 6e 65 64 20  endian.unsigned 
101b0 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 74 68  integer.  Add th
101c0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20  e value of that 
101d0 69 6e 74 65 67 65 72 20 74 6f 20 74 68 65 20 63  integer to the c
101e0 68 65 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62  hecksum..<li>Sub
101f0 74 72 61 63 65 20 32 30 30 20 66 72 6f 6d 20 58  trace 200 from X
10200 2e 0a 3c 6c 69 3e 49 66 20 58 20 69 73 20 67 72  ..<li>If X is gr
10210 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
10220 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 67 6f 20  ual to zero, go 
10230 62 61 63 6b 20 74 6f 20 73 74 65 70 20 33 2e 0a  back to step 3..
10240 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54 68 65 20  </ol>)^..<p>The 
10250 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 20 69  checksum value i
10260 73 20 75 73 65 64 20 74 6f 20 67 75 61 72 64 20  s used to guard 
10270 61 67 61 69 6e 73 74 20 69 6e 63 6f 6d 70 6c 65  against incomple
10280 74 65 20 77 72 69 74 65 73 20 6f 66 0a 61 20 6a  te writes of.a j
10290 6f 75 72 6e 61 6c 20 70 61 67 65 20 72 65 63 6f  ournal page reco
102a0 72 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 70  rd following a p
102b0 6f 77 65 72 20 66 61 69 6c 75 72 65 2e 20 20 41  ower failure.  A
102c0 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f   different rando
102d0 6d 20 6e 6f 6e 63 65 0a 69 73 20 75 73 65 64 20  m nonce.is used 
102e0 65 61 63 68 20 74 69 6d 65 20 61 20 74 72 61 6e  each time a tran
102f0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
10300 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d  ed in order to m
10310 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 69 73 6b  inimize the risk
10320 0a 74 68 61 74 20 75 6e 77 72 69 74 74 65 6e 20  .that unwritten 
10330 73 65 63 74 6f 72 73 20 6d 69 67 68 74 20 62 79  sectors might by
10340 20 63 68 61 6e 63 65 20 63 6f 6e 74 61 69 6e 20   chance contain 
10350 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 73 61  data from the sa
10360 6d 65 20 70 61 67 65 0a 74 68 61 74 20 77 61 73  me page.that was
10370 20 61 20 70 61 72 74 20 6f 66 20 70 72 69 6f 72   a part of prior
10380 20 6a 6f 75 72 6e 61 6c 73 2e 20 20 42 79 20 63   journals.  By c
10390 68 61 6e 67 69 6e 67 20 74 68 65 20 6e 6f 6e 63  hanging the nonc
103a0 65 20 66 6f 72 20 65 61 63 68 0a 74 72 61 6e 73  e for each.trans
103b0 61 63 74 69 6f 6e 2c 20 73 74 61 6c 65 20 64 61  action, stale da
103c0 74 61 20 6f 6e 20 64 69 73 6b 20 77 69 6c 6c 20  ta on disk will 
103d0 73 74 69 6c 6c 20 67 65 6e 65 72 61 74 65 20 61  still generate a
103e0 6e 20 69 6e 63 6f 72 72 65 63 74 20 63 68 65 63  n incorrect chec
103f0 6b 73 75 6d 0a 61 6e 64 20 62 65 20 64 65 74 65  ksum.and be dete
10400 63 74 65 64 20 77 69 74 68 20 68 69 67 68 20 70  cted with high p
10410 72 6f 62 61 62 69 6c 69 74 79 2e 20 20 54 68 65  robability.  The
10420 20 63 68 65 63 6b 73 75 6d 20 6f 6e 6c 79 20 75   checksum only u
10430 73 65 73 20 61 20 73 70 61 72 73 65 20 73 61 6d  ses a sparse sam
10440 70 6c 65 0a 6f 66 20 33 32 2d 62 69 74 20 77 6f  ple.of 32-bit wo
10450 72 64 73 20 66 72 6f 6d 20 74 68 65 20 64 61 74  rds from the dat
10460 61 20 72 65 63 6f 72 64 20 66 6f 72 20 70 65 72  a record for per
10470 66 6f 72 6d 61 6e 63 65 20 72 65 61 73 6f 6e 73  formance reasons
10480 20 2d 20 64 65 73 69 67 6e 20 73 74 75 64 69 65   - design studie
10490 73 20 0a 64 75 72 69 6e 67 20 74 68 65 20 70 6c  s .during the pl
104a0 61 6e 6e 69 6e 67 20 70 68 61 73 65 73 20 6f 66  anning phases of
104b0 20 53 51 4c 69 74 65 20 33 2e 30 2e 30 20 73 68   SQLite 3.0.0 sh
104c0 6f 77 65 64 0a 61 20 73 69 67 6e 69 66 69 63 61  owed.a significa
104d0 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 68  nt performance h
104e0 69 74 20 69 6e 20 63 68 65 63 6b 73 75 6d 6d 69  it in checksummi
104f0 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  ng the entire pa
10500 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20  ge.</p>..<p>Let 
10510 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74 20 76  the page count v
10520 61 6c 75 65 20 61 74 20 6f 66 66 73 65 74 20 38  alue at offset 8
10530 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20   in the journal 
10540 68 65 61 64 65 72 20 62 65 20 4d 2e 0a 5e 49 66  header be M..^If
10550 20 4d 20 69 73 20 67 72 65 61 74 65 72 20 74 68   M is greater th
10560 61 6e 20 7a 65 72 6f 20 74 68 65 6e 20 61 66 74  an zero then aft
10570 65 72 20 4d 20 70 61 67 65 20 72 65 63 6f 72 64  er M page record
10580 73 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69  s the journal fi
10590 6c 65 0a 6d 61 79 20 62 65 20 7a 65 72 6f 20 70  le.may be zero p
105a0 61 64 64 65 64 20 6f 75 74 20 74 6f 20 74 68 65  added out to the
105b0 20 6e 65 78 74 20 6d 75 6c 74 69 70 6c 65 20 6f   next multiple o
105c0 66 20 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a  f the sector siz
105d0 65 20 61 6e 64 20 61 6e 6f 74 68 65 72 0a 6a 6f  e and another.jo
105e0 75 72 6e 61 6c 20 68 65 61 64 65 72 20 6d 61 79  urnal header may
105f0 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 20 5e   be inserted.  ^
10600 41 6c 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  All journal head
10610 65 72 73 20 77 69 74 68 69 6e 20 74 68 65 20 73  ers within the s
10620 61 6d 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75 73 74  ame.journal must
10630 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d   contain the sam
10640 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
10650 73 69 7a 65 20 61 6e 64 20 73 65 63 74 6f 72 20  size and sector 
10660 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  size.</p>..<p>^I
10670 66 20 4d 20 69 73 20 2d 31 20 69 6e 20 74 68 65  f M is -1 in the
10680 20 69 6e 69 74 69 61 6c 20 6a 6f 75 72 6e 61 6c   initial journal
10690 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 74 68   header, then th
106a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
106b0 20 72 65 63 6f 72 64 73 0a 74 68 61 74 20 66 6f   records.that fo
106c0 6c 6c 6f 77 20 69 73 20 63 6f 6d 70 75 74 65 64  llow is computed
106d0 20 62 79 20 63 6f 6d 70 75 74 69 6e 67 20 68 6f   by computing ho
106e0 77 20 6d 61 6e 79 20 70 61 67 65 20 72 65 63 6f  w many page reco
106f0 72 64 73 20 77 69 6c 6c 20 66 69 74 20 69 6e 0a  rds will fit in.
10700 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20 73 70  the available sp
10710 61 63 65 20 6f 66 20 74 68 65 20 72 65 6d 61 69  ace of the remai
10720 6e 64 65 72 20 6f 66 20 74 68 65 20 6a 6f 75 72  nder of the jour
10730 6e 61 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  nal file.</p>..<
10740 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
10750 77 61 6c 66 6f 72 6d 61 74 20 7b 57 41 4c 20 66  walformat {WAL f
10760 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32  ormat}</tcl>.<h2
10770 3e 34 2e 30 20 54 68 65 20 57 72 69 74 65 2d 41  >4.0 The Write-A
10780 68 65 61 64 20 4c 6f 67 3c 2f 68 32 3e 0a 0a 3c  head Log</h2>..<
10790 70 3e 42 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  p>Beginning with
107a0 20 5b 76 65 72 73 69 6f 6e 20 33 2e 37 2e 30 5d   [version 3.7.0]
107b0 2c 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  , SQLite support
107c0 73 20 61 20 6e 65 77 20 74 72 61 6e 73 61 63 74  s a new transact
107d0 69 6f 6e 0a 63 6f 6e 74 72 6f 6c 20 6d 65 63 68  ion.control mech
107e0 61 6e 69 73 6d 20 63 61 6c 6c 65 64 20 22 5b 57  anism called "[W
107f0 41 4c 20 7c 20 77 72 69 74 65 2d 61 68 65 61 64  AL | write-ahead
10800 20 6c 6f 67 5d 22 20 6f 72 20 22 5b 57 41 4c 5d   log]" or "[WAL]
10810 22 2e 0a 5e 57 68 65 6e 20 61 20 64 61 74 61 62  "..^When a datab
10820 61 73 65 20 69 73 20 69 6e 20 57 41 4c 20 6d 6f  ase is in WAL mo
10830 64 65 2c 20 61 6c 6c 20 63 6f 6e 6e 65 63 74 69  de, all connecti
10840 6f 6e 73 20 74 6f 20 74 68 61 74 20 64 61 74 61  ons to that data
10850 62 61 73 65 20 6d 75 73 74 0a 75 73 65 20 74 68  base must.use th
10860 65 20 57 41 4c 2e 20 20 5e 41 20 70 61 72 74 69  e WAL.  ^A parti
10870 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 77  cular database w
10880 69 6c 6c 20 75 73 65 20 65 69 74 68 65 72 20 61  ill use either a
10890 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
108a0 6c 0a 6f 72 20 61 20 57 41 4c 2c 20 62 75 74 20  l.or a WAL, but 
108b0 6e 6f 74 20 62 6f 74 68 20 61 74 20 74 68 65 20  not both at the 
108c0 73 61 6d 65 20 74 69 6d 65 2e 0a 5e 54 68 65 20  same time..^The 
108d0 57 41 4c 20 69 73 20 61 6c 77 61 79 73 20 6c 6f  WAL is always lo
108e0 63 61 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  cated in the sam
108f0 65 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74  e directory as t
10900 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65  he database.file
10910 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d   and has the sam
10920 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61  e name as the da
10930 74 61 62 61 73 65 20 66 69 6c 65 20 62 75 74 20  tabase file but 
10940 77 69 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a  with the string.
10950 22 3c 74 74 3e 2d 77 61 6c 3c 2f 74 74 3e 22 20  "<tt>-wal</tt>" 
10960 61 70 70 65 6e 64 65 64 2e 3c 2f 70 3e 0a 0a 3c  appended.</p>..<
10970 68 33 3e 34 2e 31 20 57 41 4c 20 46 69 6c 65 20  h3>4.1 WAL File 
10980 46 6f 72 6d 61 74 3c 2f 68 34 3e 0a 0a 3c 70 3e  Format</h4>..<p>
10990 41 20 57 41 4c 20 66 69 6c 65 20 63 6f 6e 73 69  A WAL file consi
109a0 73 74 73 20 6f 66 20 61 20 68 65 61 64 65 72 20  sts of a header 
109b0 66 6f 6c 6c 6f 77 65 64 20 62 79 20 7a 65 72 6f  followed by zero
109c0 20 6f 72 20 6d 6f 72 65 20 22 66 72 61 6d 65 73   or more "frames
109d0 22 2e 0a 45 61 63 68 20 66 72 61 6d 65 20 72 65  "..Each frame re
109e0 63 6f 72 64 73 20 74 68 65 20 72 65 76 69 73 65  cords the revise
109f0 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 73  d content of a s
10a00 69 6e 67 6c 65 20 70 61 67 65 20 66 72 6f 6d 20  ingle page from 
10a10 74 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c  the.database fil
10a20 65 2e 20 20 41 6c 6c 20 63 68 61 6e 67 65 73 20  e.  All changes 
10a30 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
10a40 61 72 65 20 72 65 63 6f 72 64 65 64 20 62 79 20  are recorded by 
10a50 77 72 69 74 69 6e 67 0a 66 72 61 6d 65 73 20 69  writing.frames i
10a60 6e 74 6f 20 74 68 65 20 57 41 4c 2e 20 20 54 72  nto the WAL.  Tr
10a70 61 6e 73 61 63 74 69 6f 6e 73 20 63 6f 6d 6d 69  ansactions commi
10a80 74 20 77 68 65 6e 20 61 20 66 72 61 6d 65 20 69  t when a frame i
10a90 73 20 77 72 69 74 74 65 6e 20 74 68 61 74 0a 63  s written that.c
10aa0 6f 6e 74 61 69 6e 73 20 61 20 63 6f 6d 6d 69 74  ontains a commit
10ab0 20 6d 61 72 6b 65 72 2e 20 20 5e 41 20 73 69 6e   marker.  ^A sin
10ac0 67 6c 65 20 57 41 4c 20 63 61 6e 20 61 6e 64 20  gle WAL can and 
10ad0 75 73 75 61 6c 6c 79 20 64 6f 65 73 20 72 65 63  usually does rec
10ae0 6f 72 64 20 0a 6d 75 6c 74 69 70 6c 65 20 74 72  ord .multiple tr
10af0 61 6e 73 61 63 74 69 6f 6e 73 2e 20 20 50 65 72  ansactions.  Per
10b00 69 6f 64 69 63 61 6c 6c 79 2c 20 74 68 65 20 63  iodically, the c
10b10 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 57 41  ontent of the WA
10b20 4c 20 69 73 0a 74 72 61 6e 73 66 65 72 72 65 64  L is.transferred
10b30 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 64   back into the d
10b40 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20  atabase file in 
10b50 61 6e 20 6f 70 65 72 61 74 69 6f 6e 20 63 61 6c  an operation cal
10b60 6c 65 64 20 61 0a 22 63 68 65 63 6b 70 6f 69 6e  led a."checkpoin
10b70 74 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 73  t".</p>..<p>^A s
10b80 69 6e 67 6c 65 20 57 41 4c 20 66 69 6c 65 20 63  ingle WAL file c
10b90 61 6e 20 62 65 20 72 65 75 73 65 64 20 6d 75 6c  an be reused mul
10ba0 74 69 70 6c 65 20 74 69 6d 65 73 2e 20 20 5e 49  tiple times.  ^I
10bb0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
10bc0 68 65 0a 57 41 4c 20 63 61 6e 20 66 69 6c 6c 20  he.WAL can fill 
10bd0 75 70 20 77 69 74 68 20 66 72 61 6d 65 73 20 61  up with frames a
10be0 6e 64 20 74 68 65 6e 20 62 65 20 63 68 65 63 6b  nd then be check
10bf0 70 6f 69 6e 74 65 64 20 61 6e 64 20 74 68 65 6e  pointed and then
10c00 20 6e 65 77 0a 66 72 61 6d 65 73 20 63 61 6e 20   new.frames can 
10c10 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 6f 6c  overwrite the ol
10c20 64 20 6f 6e 65 73 2e 20 20 5e 41 20 57 41 4c 20  d ones.  ^A WAL 
10c30 61 6c 77 61 79 73 20 67 72 6f 77 73 20 66 72 6f  always grows fro
10c40 6d 20 62 65 67 69 6e 6e 69 6e 67 0a 74 6f 77 61  m beginning.towa
10c50 72 64 20 74 68 65 20 65 6e 64 2e 20 20 43 68 65  rd the end.  Che
10c60 63 6b 73 75 6d 73 20 61 6e 64 20 63 6f 75 6e 74  cksums and count
10c70 65 72 73 20 61 74 74 61 63 68 65 64 20 74 6f 20  ers attached to 
10c80 65 61 63 68 20 66 72 61 6d 65 20 61 72 65 0a 75  each frame are.u
10c90 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
10ca0 20 77 68 69 63 68 20 66 72 61 6d 65 73 20 77 69   which frames wi
10cb0 74 68 69 6e 20 74 68 65 20 57 41 4c 20 61 72 65  thin the WAL are
10cc0 20 76 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68   valid and which
10cd0 0a 61 72 65 20 6c 65 66 74 6f 76 65 72 73 20 66  .are leftovers f
10ce0 72 6f 6d 20 70 72 69 6f 72 20 63 68 65 63 6b 70  rom prior checkp
10cf0 6f 69 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  oints.</p>..<p>^
10d00 28 54 68 65 20 57 41 4c 20 68 65 61 64 65 72 20  (The WAL header 
10d10 69 73 20 33 32 20 62 79 74 65 73 20 69 6e 20 73  is 32 bytes in s
10d20 69 7a 65 20 61 6e 64 20 63 6f 6e 73 69 73 74 73  ize and consists
10d30 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
10d40 67 20 65 69 67 68 74 0a 62 69 67 2d 65 6e 64 69  g eight.big-endi
10d50 61 6e 20 33 32 2d 62 69 74 20 75 6e 73 69 67 6e  an 32-bit unsign
10d60 65 64 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ed integer value
10d70 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  s:</p>..<center>
10d80 0a 3c 69 3e 57 41 4c 20 48 65 61 64 65 72 20 46  .<i>WAL Header F
10d90 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
10da0 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22  able width="80%"
10db0 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c   border=1>.<tr><
10dc0 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a  th>Offset<th>Siz
10dd0 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e  e<th>Description
10de0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
10df0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
10e00 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >0<td valign=top
10e10 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
10e20 20 20 20 20 3c 74 64 3e 4d 61 67 69 63 20 6e 75      <td>Magic nu
10e30 6d 62 65 72 2e 20 20 30 78 33 37 37 66 30 36 38  mber.  0x377f068
10e40 32 20 6f 72 20 30 78 33 37 37 66 30 36 38 33 0a  2 or 0x377f0683.
10e50 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
10e60 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
10e70 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
10e80 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
10e90 20 20 20 3c 74 64 3e 46 69 6c 65 20 66 6f 72 6d     <td>File form
10ea0 61 74 20 76 65 72 73 69 6f 6e 2e 20 20 43 75 72  at version.  Cur
10eb0 72 65 6e 74 6c 79 20 33 30 30 37 30 30 30 2e 0a  rently 3007000..
10ec0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
10ed0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
10ee0 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
10ef0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
10f00 20 20 20 3c 74 64 3e 44 61 74 61 62 61 73 65 20     <td>Database 
10f10 70 61 67 65 20 73 69 7a 65 2e 20 20 45 78 61 6d  page size.  Exam
10f20 70 6c 65 3a 20 31 30 32 34 0a 3c 74 72 3e 3c 74  ple: 1024.<tr><t
10f30 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
10f40 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20  gn=center>12<td 
10f50 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
10f60 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
10f70 64 3e 43 68 65 63 6b 70 6f 69 6e 74 20 73 65 71  d>Checkpoint seq
10f80 75 65 6e 63 65 20 6e 75 6d 62 65 72 0a 3c 74 72  uence number.<tr
10f90 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
10fa0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c  align=center>16<
10fb0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
10fc0 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
10fd0 20 3c 74 64 3e 53 61 6c 74 2d 31 3a 20 72 61 6e   <td>Salt-1: ran
10fe0 64 6f 6d 20 69 6e 74 65 67 65 72 20 69 6e 63 72  dom integer incr
10ff0 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63  emented with eac
11000 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72  h checkpoint.<tr
11010 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
11020 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c  align=center>20<
11030 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
11040 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
11050 20 3c 74 64 3e 53 61 6c 74 2d 32 3a 20 61 20 64   <td>Salt-2: a d
11060 69 66 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20  ifferent random 
11070 6e 75 6d 62 65 72 20 66 6f 72 20 65 61 63 68 20  number for each 
11080 63 68 65 63 6b 70 6f 69 6e 74 0a 3c 74 72 3e 3c  checkpoint.<tr><
11090 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
110a0 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 3c 74 64  ign=center>24<td
110b0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
110c0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
110d0 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 46  td>Checksum-1: F
110e0 69 72 73 74 20 70 61 72 74 20 6f 66 20 61 20 63  irst part of a c
110f0 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66  hecksum on the f
11100 69 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66  irst 24 bytes of
11110 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64 20   header.<tr><td 
11120 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
11130 3d 63 65 6e 74 65 72 3e 32 38 3c 74 64 20 76 61  =center>28<td va
11140 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
11150 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
11160 43 68 65 63 6b 73 75 6d 2d 32 3a 20 53 65 63 6f  Checksum-2: Seco
11170 6e 64 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  nd part of the c
11180 68 65 63 6b 73 75 6d 20 6f 6e 20 74 68 65 20 66  hecksum on the f
11190 69 72 73 74 20 32 34 20 62 79 74 65 73 20 6f 66  irst 24 bytes of
111a0 20 68 65 61 64 65 72 0a 3c 2f 74 61 62 6c 65 3e   header.</table>
111b0 0a 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 3c 70  .</center>)^..<p
111c0 3e 5e 49 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  >^Immediately fo
111d0 6c 6c 6f 77 69 6e 67 20 74 68 65 20 77 61 6c 2d  llowing the wal-
111e0 68 65 61 64 65 72 20 61 72 65 20 7a 65 72 6f 20  header are zero 
111f0 6f 72 20 6d 6f 72 65 20 66 72 61 6d 65 73 2e 20  or more frames. 
11200 5e 45 61 63 68 0a 66 72 61 6d 65 20 63 6f 6e 73  ^Each.frame cons
11210 69 73 74 73 20 6f 66 20 61 20 32 34 2d 62 79 74  ists of a 24-byt
11220 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20 66  e frame-header f
11230 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 3c 69 3e  ollowed by a <i>
11240 70 61 67 65 2d 73 69 7a 65 3c 2f 69 3e 20 62 79  page-size</i> by
11250 74 65 73 0a 6f 66 20 70 61 67 65 20 64 61 74 61  tes.of page data
11260 2e 20 5e 28 54 68 65 20 66 72 61 6d 65 2d 68 65  . ^(The frame-he
11270 61 64 65 72 20 69 73 20 73 69 78 20 62 69 67 2d  ader is six big-
11280 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 75 6e  endian 32-bit un
11290 73 69 67 6e 65 64 20 0a 69 6e 74 65 67 65 72 20  signed .integer 
112a0 76 61 6c 75 65 73 2c 20 61 73 20 66 6f 6c 6c 6f  values, as follo
112b0 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  ws:..<center>.<i
112c0 3e 57 41 4c 20 46 72 61 6d 65 20 48 65 61 64 65  >WAL Frame Heade
112d0 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e  r Format</i><br>
112e0 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38  .<table width="8
112f0 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  0%" border=1>.<t
11300 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e  r><th>Offset<th>
11310 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74  Size<th>Descript
11320 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ion.<tr><td vali
11330 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
11340 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>0<td valign=
11350 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
11360 3e 34 0a 20 20 20 20 3c 74 64 3e 50 61 67 65 20  >4.    <td>Page 
11370 6e 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76  number.<tr><td v
11380 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
11390 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69  center>4<td vali
113a0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
113b0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 6f  ter>4.    <td>Fo
113c0 72 20 63 6f 6d 6d 69 74 20 72 65 63 6f 72 64 73  r commit records
113d0 2c 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  , the size of th
113e0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
113f0 69 6e 20 70 61 67 65 73 0a 20 20 20 20 20 20 20  in pages.       
11400 20 61 66 74 65 72 20 74 68 65 20 63 6f 6d 6d 69   after the commi
11410 74 2e 20 20 46 6f 72 20 61 6c 6c 20 6f 74 68 65  t.  For all othe
11420 72 20 72 65 63 6f 72 64 73 2c 20 7a 65 72 6f 2e  r records, zero.
11430 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
11440 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
11450 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >8<td valign=top
11460 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
11470 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31 20 63      <td>Salt-1 c
11480 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57  opied from the W
11490 41 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74  AL header.<tr><t
114a0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
114b0 67 6e 3d 63 65 6e 74 65 72 3e 31 32 3c 74 64 20  gn=center>12<td 
114c0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
114d0 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
114e0 64 3e 53 61 6c 74 2d 32 20 63 6f 70 69 65 64 20  d>Salt-2 copied 
114f0 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 68 65 61  from the WAL hea
11500 64 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  der.<tr><td vali
11510 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
11520 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e  ter>16<td valign
11530 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
11540 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
11550 6b 73 75 6d 2d 31 3a 20 20 43 75 6d 75 6c 61 74  ksum-1:  Cumulat
11560 69 76 65 20 63 68 65 63 6b 73 75 6d 20 75 70 20  ive checksum up 
11570 74 68 72 6f 75 67 68 20 61 6e 64 20 69 6e 63 6c  through and incl
11580 75 64 69 6e 67 20 74 68 69 73 20 70 61 67 65 0a  uding this page.
11590 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
115a0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
115b0 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  20<td valign=top
115c0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
115d0 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d      <td>Checksum
115e0 2d 32 3a 20 20 53 65 63 6f 6e 64 20 68 61 6c 66  -2:  Second half
115f0 20 6f 66 20 74 68 65 20 63 75 6d 75 6c 61 74 69   of the cumulati
11600 76 65 20 63 68 65 63 6b 73 75 6d 2e 0a 3c 2f 74  ve checksum..</t
11610 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29  able>.</center>)
11620 5e 0a 0a 5e 28 3c 70 3e 41 20 66 72 61 6d 65 20  ^..^(<p>A frame 
11630 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 76 61  is considered va
11640 6c 69 64 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  lid if and only 
11650 69 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  if the following
11660 20 63 6f 6e 64 69 74 69 6f 6e 73 20 61 72 65 0a   conditions are.
11670 74 72 75 65 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  true:</p>..<ol>.
11680 3c 6c 69 3e 3c 70 3e 54 68 65 20 73 61 6c 74 2d  <li><p>The salt-
11690 31 20 61 6e 64 20 73 61 6c 74 2d 32 20 76 61 6c  1 and salt-2 val
116a0 75 65 73 20 69 6e 20 74 68 65 20 66 72 61 6d 65  ues in the frame
116b0 2d 68 65 61 64 65 72 20 6d 61 74 63 68 0a 20 20  -header match.  
116c0 20 20 20 20 20 73 61 6c 74 20 76 61 6c 75 65 73       salt values
116d0 20 69 6e 20 74 68 65 20 77 61 6c 2d 68 65 61 64   in the wal-head
116e0 65 72 3c 2f 70 3e 3c 2f 6c 69 3e 0a 0a 3c 6c 69  er</p></li>..<li
116f0 3e 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d  ><p>The checksum
11700 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 66   values in the f
11710 69 6e 61 6c 20 38 20 62 79 74 65 73 20 6f 66 20  inal 8 bytes of 
11720 74 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72  the frame-header
11730 0a 20 20 20 20 20 20 20 65 78 61 63 74 6c 79 20  .       exactly 
11740 6d 61 74 63 68 20 74 68 65 20 63 68 65 63 6b 73  match the checks
11750 75 6d 20 63 6f 6d 70 75 74 65 64 20 63 6f 6e 73  um computed cons
11760 65 63 75 74 69 76 65 6c 79 20 6f 6e 20 74 68 65  ecutively on the
11770 0a 20 20 20 20 20 20 20 66 69 72 73 74 20 32 34  .       first 24
11780 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 57 41   bytes of the WA
11790 4c 20 68 65 61 64 65 72 20 61 6e 64 20 74 68 65  L header and the
117a0 20 66 69 72 73 74 20 38 20 62 79 74 65 73 20 61   first 8 bytes a
117b0 6e 64 0a 20 20 20 20 20 20 20 74 68 65 20 63 6f  nd.       the co
117c0 6e 74 65 6e 74 20 6f 66 20 61 6c 6c 20 66 72 61  ntent of all fra
117d0 6d 65 73 0a 20 20 20 20 20 20 20 75 70 20 74 6f  mes.       up to
117e0 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74   and including t
117f0 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
11800 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c 2f 6c 69 3e 0a  .</p></li></li>.
11810 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74 63 6c 3e 68 64  </ol>)^..<tcl>hd
11820 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 63 6b 73  _fragment walcks
11830 6d 20 7b 57 41 4c 20 63 68 65 63 6b 73 75 6d 20  m {WAL checksum 
11840 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e  algorithm}</tcl>
11850 0a 3c 68 33 3e 34 2e 32 20 43 68 65 63 6b 73 75  .<h3>4.2 Checksu
11860 6d 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33 3e  m Algorithm</h3>
11870 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75  ..<p>The checksu
11880 6d 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79  m is computed by
11890 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74 68   interpreting th
118a0 65 20 69 6e 70 75 74 20 61 73 0a 61 6e 20 65 76  e input as.an ev
118b0 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 73  en number of uns
118c0 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74  igned 32-bit int
118d0 65 67 65 72 73 3a 20 78 28 30 29 20 74 68 72 6f  egers: x(0) thro
118e0 75 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65 20 33  ugh x(N)..^The 3
118f0 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73 20 61  2-bit integers a
11900 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 66  re big-endian if
11910 20 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d 62 65   the.magic numbe
11920 72 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 34  r in the first 4
11930 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 57 41   bytes of the WA
11940 4c 20 68 65 61 64 65 72 20 69 73 20 30 78 33 37  L header is 0x37
11950 37 66 30 36 38 33 20 61 6e 64 0a 74 68 65 20 69  7f0683 and.the i
11960 6e 74 65 67 65 72 73 20 61 72 65 20 6c 69 74 74  ntegers are litt
11970 6c 65 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65  le-endian if the
11980 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69 73   magic number is
11990 20 30 78 33 37 37 66 30 36 38 32 2e 0a 5e 54 68   0x377f0682..^Th
119a0 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65  e checksum value
119b0 73 20 61 72 65 20 61 6c 77 61 79 73 20 73 74 6f  s are always sto
119c0 72 65 64 20 69 6e 20 74 68 65 20 66 72 61 6d 65  red in the frame
119d0 20 68 65 61 64 65 72 20 69 6e 20 61 0a 62 69 67   header in a.big
119e0 2d 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74 20 72  -endian format r
119f0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 69  egardless of whi
11a00 63 68 20 62 79 74 65 20 6f 72 64 65 72 20 69 73  ch byte order is
11a10 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 75 74 65   used to compute
11a20 0a 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 3c 2f  .the checksum.</
11a30 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b  p>..<p>The check
11a40 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 6f 6e  sum algorithm on
11a50 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 6f 6e  ly works for con
11a60 74 65 6e 74 20 77 68 69 63 68 20 69 73 20 61 20  tent which is a 
11a70 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20 62 79  multiple of.8 by
11a80 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20  tes in length.  
11a90 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
11aa0 69 66 20 74 68 65 20 69 6e 70 75 74 73 20 61 72  if the inputs ar
11ab0 65 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78  e x(0) through x
11ac0 28 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73 74 20  (N).then N must 
11ad0 62 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20 63 68  be odd..^(The ch
11ae0 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d  ecksum algorithm
11af0 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a   is as follows:.
11b00 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
11b10 65 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20 30 0a  e> .s0 = s1 = 0.
11b20 66 6f 72 20 69 20 66 72 6f 6d 20 30 20 74 6f 20  for i from 0 to 
11b30 6e 2d 31 20 73 74 65 70 20 32 3a 0a 20 20 20 73  n-1 step 2:.   s
11b40 30 20 2b 3d 20 78 28 69 29 20 2b 20 73 31 3b 0a  0 += x(i) + s1;.
11b50 20 20 20 73 31 20 2b 3d 20 78 28 69 2b 31 29 20     s1 += x(i+1) 
11b60 2b 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23 20 72  + s0;.endfor.# r
11b70 65 73 75 6c 74 20 69 6e 20 73 30 20 61 6e 64 20  esult in s0 and 
11b80 73 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  s1.</pre></block
11b90 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68  quote>)^..<p>^Th
11ba0 65 20 6f 75 74 70 75 74 73 20 73 30 20 61 6e 64  e outputs s0 and
11bb0 20 73 31 20 61 72 65 20 62 6f 74 68 20 77 65 69   s1 are both wei
11bc0 67 68 74 65 64 20 63 68 65 63 6b 73 75 6d 73 20  ghted checksums 
11bd0 75 73 69 6e 67 20 46 69 62 6f 6e 61 63 63 69 20  using Fibonacci 
11be0 77 65 69 67 68 74 73 0a 69 6e 20 72 65 76 65 72  weights.in rever
11bf0 73 65 20 6f 72 64 65 72 2e 20 20 28 5e 54 68 65  se order.  (^The
11c00 20 6c 61 72 67 65 73 74 20 46 69 62 6f 6e 61 63   largest Fibonac
11c10 63 69 20 77 65 69 67 68 74 20 6f 63 63 75 72 73  ci weight occurs
11c20 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 65 6c   on the first el
11c30 65 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73 65 71  ement.of the seq
11c40 75 65 6e 63 65 20 62 65 69 6e 67 20 73 75 6d 6d  uence being summ
11c50 65 64 2e 29 20 20 5e 54 68 65 20 73 31 20 76 61  ed.)  ^The s1 va
11c60 6c 75 65 20 73 70 61 6e 73 20 61 6c 6c 20 33 32  lue spans all 32
11c70 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 74 65 72  -bit integer.ter
11c80 6d 73 20 6f 66 20 74 68 65 20 73 65 71 75 65 6e  ms of the sequen
11c90 63 65 20 77 68 65 72 65 61 73 20 73 30 20 6f 6d  ce whereas s0 om
11ca0 69 74 73 20 74 68 65 20 66 69 6e 61 6c 20 74 65  its the final te
11cb0 72 6d 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 33  rm.</p>..<h3>4.3
11cc0 20 43 68 65 63 6b 70 6f 69 6e 74 20 41 6c 67 6f   Checkpoint Algo
11cd0 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e  rithm</h3>..<p>^
11ce0 4f 6e 20 61 20 5b 63 68 65 63 6b 70 6f 69 6e 74  On a [checkpoint
11cf0 5d 2c 20 74 68 65 20 57 41 4c 20 69 73 20 66 69  ], the WAL is fi
11d00 72 73 74 20 66 6c 75 73 68 65 64 20 74 6f 20 70  rst flushed to p
11d10 65 72 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67  ersistent storag
11d20 65 20 75 73 69 6e 67 0a 74 68 65 20 78 53 79 6e  e using.the xSyn
11d30 63 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  c method of the 
11d40 5b 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68  [sqlite3_io_meth
11d50 6f 64 73 20 7c 20 56 46 53 5d 2e 20 0a 5e 54 68  ods | VFS]. .^Th
11d60 65 6e 20 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74  en valid content
11d70 20 6f 66 20 74 68 65 20 57 41 4c 20 69 73 20 74   of the WAL is t
11d80 72 61 6e 73 66 65 72 72 65 64 20 69 6e 74 6f 20  ransferred into 
11d90 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
11da0 65 2e 0a 5e 46 69 6e 61 6c 6c 79 2c 20 74 68 65  e..^Finally, the
11db0 20 64 61 74 61 62 61 73 65 20 69 73 20 66 6c 75   database is flu
11dc0 73 68 65 64 20 74 6f 20 70 65 72 73 69 73 74 65  shed to persiste
11dd0 6e 74 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67  nt storage using
11de0 20 61 6e 6f 74 68 65 72 0a 78 53 79 6e 63 20 6d   another.xSync m
11df0 65 74 68 6f 64 20 63 61 6c 6c 2e 0a 54 68 65 20  ethod call..The 
11e00 78 53 79 6e 63 20 6f 70 65 72 61 74 69 6f 6e 73  xSync operations
11e10 20 73 65 72 76 65 20 61 73 20 77 72 69 74 65 20   serve as write 
11e20 62 61 72 72 69 65 72 73 20 2d 20 61 6c 6c 20 77  barriers - all w
11e30 72 69 74 65 73 20 6c 61 75 6e 63 68 65 64 0a 62  rites launched.b
11e40 65 66 6f 72 65 20 74 68 65 20 78 53 79 6e 63 20  efore the xSync 
11e50 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 62 65  must complete be
11e60 66 6f 72 65 20 61 6e 79 20 77 72 69 74 65 20 74  fore any write t
11e70 68 61 74 20 6c 61 75 6e 63 68 65 73 20 61 66 74  hat launches aft
11e80 65 72 20 74 68 65 0a 78 53 79 6e 63 20 62 65 67  er the.xSync beg
11e90 69 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66  ins.</p>..<p>^Af
11ea0 74 65 72 20 65 61 63 68 20 63 68 65 63 6b 70 6f  ter each checkpo
11eb0 69 6e 74 2c 20 74 68 65 20 57 41 4c 20 68 65 61  int, the WAL hea
11ec0 64 65 72 20 73 61 6c 74 2d 31 20 76 61 6c 75 65  der salt-1 value
11ed0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
11ee0 61 6e 64 20 74 68 65 20 0a 73 61 6c 74 2d 32 20  and the .salt-2 
11ef0 76 61 6c 75 65 20 69 73 20 72 61 6e 64 6f 6d 69  value is randomi
11f00 7a 65 64 2e 20 20 54 68 69 73 20 70 72 65 76 65  zed.  This preve
11f10 6e 74 73 20 6f 6c 64 20 61 6e 64 20 6e 65 77 20  nts old and new 
11f20 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 57 41  frames in the WA
11f30 4c 20 66 72 6f 6d 0a 62 65 69 6e 67 20 63 6f 6e  L from.being con
11f40 73 69 64 65 72 65 64 20 76 61 6c 69 64 20 61 74  sidered valid at
11f50 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 20 61   the same time a
11f60 6e 64 20 62 65 69 6e 67 20 63 68 65 63 6b 70 6f  nd being checkpo
11f70 69 6e 74 69 6e 67 20 74 6f 67 65 74 68 65 72 0a  inting together.
11f80 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 63 72 61 73  following a cras
11f90 68 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f  h.</p>..<tcl>hd_
11fa0 66 72 61 67 6d 65 6e 74 20 77 61 6c 72 65 61 64  fragment walread
11fb0 20 7b 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72   {WAL read algor
11fc0 69 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  ithm}</tcl>.<h3>
11fd0 34 2e 34 20 52 65 61 64 65 72 20 41 6c 67 6f 72  4.4 Reader Algor
11fe0 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 28  ithm</h3>..<p>^(
11ff0 54 6f 20 72 65 61 64 20 61 20 70 61 67 65 20 66  To read a page f
12000 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
12010 20 28 63 61 6c 6c 20 69 74 20 70 61 67 65 20 6e   (call it page n
12020 75 6d 62 65 72 20 50 29 2c 20 61 20 72 65 61 64  umber P), a read
12030 65 72 0a 66 69 72 73 74 20 63 68 65 63 6b 73 20  er.first checks 
12040 74 68 65 20 57 41 4c 20 74 6f 20 73 65 65 20 69  the WAL to see i
12050 66 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 70 61  f it contains pa
12060 67 65 20 50 2e 20 20 49 66 20 73 6f 2c 20 74 68  ge P.  If so, th
12070 65 6e 20 74 68 65 0a 6c 61 73 74 20 76 61 6c 69  en the.last vali
12080 64 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 70 61  d instance of pa
12090 67 65 20 50 20 74 68 61 74 20 69 73 20 66 6f 6c  ge P that is fol
120a0 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 69  lowed by a commi
120b0 74 20 66 72 61 6d 65 0a 6f 72 20 69 73 20 61 20  t frame.or is a 
120c0 63 6f 6d 6d 69 74 20 66 72 61 6d 65 20 69 74 73  commit frame its
120d0 65 6c 66 20 62 65 63 6f 6d 65 73 20 74 68 65 20  elf becomes the 
120e0 76 61 6c 75 65 20 72 65 61 64 2e 29 5e 20 20 5e  value read.)^  ^
120f0 49 66 20 74 68 65 20 57 41 4c 0a 63 6f 6e 74 61  If the WAL.conta
12100 69 6e 73 20 6e 6f 20 63 6f 70 69 65 73 20 6f 66  ins no copies of
12110 20 70 61 67 65 20 50 20 74 68 61 74 20 61 72 65   page P that are
12120 20 76 61 6c 69 64 20 61 6e 64 20 77 68 69 63 68   valid and which
12130 20 61 72 65 20 61 20 63 6f 6d 6d 69 74 0a 66 72   are a commit.fr
12140 61 6d 65 20 6f 72 20 61 72 65 20 66 6f 6c 6c 6f  ame or are follo
12150 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 69 74 20  wed by a commit 
12160 66 72 61 6d 65 2c 20 74 68 65 6e 20 70 61 67 65  frame, then page
12170 20 50 20 69 73 20 72 65 61 64 20 66 72 6f 6d 0a   P is read from.
12180 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
12190 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20 73 74  e.</p>..<p>To st
121a0 61 72 74 20 61 20 72 65 61 64 20 74 72 61 6e 73  art a read trans
121b0 61 63 74 69 6f 6e 2c 20 74 68 65 20 72 65 61 64  action, the read
121c0 65 72 20 72 65 63 6f 72 64 73 20 74 68 65 20 69  er records the i
121d0 6e 64 65 78 20 6f 66 20 74 68 65 20 6c 61 73 74  ndex of the last
121e0 0a 76 61 6c 69 64 20 66 72 61 6d 65 20 69 6e 20  .valid frame in 
121f0 74 68 65 20 57 41 4c 2e 20 20 54 68 65 20 72 65  the WAL.  The re
12200 61 64 65 72 20 75 73 65 73 20 74 68 69 73 20 72  ader uses this r
12210 65 63 6f 72 64 65 64 20 22 6d 78 46 72 61 6d 65  ecorded "mxFrame
12220 22 20 76 61 6c 75 65 0a 66 6f 72 20 61 6c 6c 20  " value.for all 
12230 73 75 62 73 65 71 75 65 6e 74 20 72 65 61 64 20  subsequent read 
12240 6f 70 65 72 61 74 69 6f 6e 73 2e 20 20 4e 65 77  operations.  New
12250 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 63 61   transactions ca
12260 6e 20 62 65 20 61 70 70 65 6e 64 65 64 0a 74 6f  n be appended.to
12270 20 74 68 65 20 57 41 4c 2c 20 62 75 74 20 61 73   the WAL, but as
12280 20 6c 6f 6e 67 20 61 73 20 74 68 65 20 72 65 61   long as the rea
12290 64 65 72 20 75 73 65 73 20 69 74 73 20 6f 72 69  der uses its ori
122a0 67 69 6e 61 6c 20 6d 78 46 72 61 6d 65 20 76 61  ginal mxFrame va
122b0 6c 75 65 0a 61 6e 64 20 69 67 6e 6f 72 65 73 20  lue.and ignores 
122c0 73 75 62 73 65 71 75 65 6e 74 6c 79 20 61 70 70  subsequently app
122d0 65 6e 64 65 64 20 63 6f 6e 74 65 6e 74 2c 20 74  ended content, t
122e0 68 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20 73  he reader will s
122f0 65 65 20 61 20 0a 63 6f 6e 73 69 73 74 65 6e 74  ee a .consistent
12300 20 73 6e 61 70 73 68 6f 74 20 6f 66 20 74 68 65   snapshot of the
12310 20 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 61   database from a
12320 20 73 69 6e 67 6c 65 20 70 6f 69 6e 74 20 69 6e   single point in
12330 20 74 69 6d 65 2e 20 20 0a 5e 54 68 69 73 20 74   time.  .^This t
12340 65 63 68 6e 69 71 75 65 20 61 6c 6c 6f 77 73 20  echnique allows 
12350 6d 75 6c 74 69 70 6c 65 20 63 6f 6e 63 75 72 72  multiple concurr
12360 65 6e 74 20 72 65 61 64 65 72 73 20 74 6f 20 76  ent readers to v
12370 69 65 77 20 64 69 66 66 65 72 65 6e 74 20 0a 76  iew different .v
12380 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 65 20 64  ersions of the d
12390 61 74 61 62 61 73 65 20 63 6f 6e 74 65 6e 74 20  atabase content 
123a0 73 69 6d 75 6c 74 61 6e 65 6f 75 73 6c 79 2e 3c  simultaneously.<
123b0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 61 64  /p>..<p>The read
123c0 65 72 20 61 6c 67 6f 72 69 74 68 6d 20 69 6e 20  er algorithm in 
123d0 74 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72  the previous par
123e0 61 67 72 61 70 68 73 20 77 6f 72 6b 73 20 63 6f  agraphs works co
123f0 72 72 65 63 74 6c 79 2c 20 62 75 74 20 0a 62 65  rrectly, but .be
12400 63 61 75 73 65 20 66 72 61 6d 65 73 20 66 6f 72  cause frames for
12410 20 70 61 67 65 20 50 20 63 61 6e 20 61 70 70 65   page P can appe
12420 61 72 20 61 6e 79 77 68 65 72 65 20 77 69 74 68  ar anywhere with
12430 69 6e 20 74 68 65 20 57 41 4c 2c 20 74 68 65 0a  in the WAL, the.
12440 72 65 61 64 65 72 20 68 61 73 20 74 6f 20 73 63  reader has to sc
12450 61 6e 20 74 68 65 20 65 6e 74 69 72 65 20 57 41  an the entire WA
12460 4c 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 70 61  L looking for pa
12470 67 65 20 50 20 66 72 61 6d 65 73 2e 20 20 49 66  ge P frames.  If
12480 20 74 68 65 0a 57 41 4c 20 69 73 20 6c 61 72 67   the.WAL is larg
12490 65 20 28 6d 75 6c 74 69 70 6c 65 20 6d 65 67 61  e (multiple mega
124a0 62 79 74 65 73 20 69 73 20 74 79 70 69 63 61 6c  bytes is typical
124b0 29 20 74 68 61 74 20 73 63 61 6e 20 63 61 6e 20  ) that scan can 
124c0 62 65 20 73 6c 6f 77 2c 0a 61 6e 64 20 72 65 61  be slow,.and rea
124d0 64 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 73 75  d performance su
124e0 66 66 65 72 73 2e 20 20 5e 54 6f 20 6f 76 65 72  ffers.  ^To over
124f0 63 6f 6d 65 20 74 68 69 73 20 70 72 6f 62 6c 65  come this proble
12500 6d 2c 20 61 20 73 65 70 61 72 61 74 65 0a 64 61  m, a separate.da
12510 74 61 20 73 74 72 75 63 74 75 72 65 20 63 61 6c  ta structure cal
12520 6c 65 64 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  led the wal-inde
12530 78 20 69 73 20 6d 61 69 6e 74 61 69 6e 65 64 20  x is maintained 
12540 74 6f 20 65 78 70 65 64 69 74 65 20 74 68 65 0a  to expedite the.
12550 73 65 61 72 63 68 20 66 6f 72 20 66 72 61 6d 65  search for frame
12560 73 20 6f 66 20 61 20 70 61 72 74 69 63 75 6c 61  s of a particula
12570 72 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63  r page.</p>..<tc
12580 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61  l>hd_fragment wa
12590 6c 69 6e 64 65 78 66 6f 72 6d 61 74 20 7b 77 61  lindexformat {wa
125a0 6c 2d 69 6e 64 65 78 7d 20 7b 57 41 4c 2d 69 6e  l-index} {WAL-in
125b0 64 65 78 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c  dex format}</tcl
125c0 3e 0a 3c 68 33 3e 34 2e 35 20 57 41 4c 2d 49 6e  >.<h3>4.5 WAL-In
125d0 64 65 78 20 46 6f 72 6d 61 74 3c 2f 68 33 3e 0a  dex Format</h3>.
125e0 0a 3c 70 3e 43 6f 6e 63 65 70 74 75 61 6c 6c 79  .<p>Conceptually
125f0 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  , the wal-index 
12600 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  is shared memory
12610 2c 20 74 68 6f 75 67 68 20 74 68 65 20 63 75 72  , though the cur
12620 72 65 6e 74 0a 56 46 53 20 69 6d 70 6c 65 6d 65  rent.VFS impleme
12630 6e 74 61 74 69 6f 6e 73 20 75 73 65 20 61 20 6d  ntations use a m
12640 6d 61 70 70 65 64 20 66 69 6c 65 20 66 6f 72 20  mapped file for 
12650 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 2e 20 20  the wal-index.  
12660 5e 54 68 65 20 6d 6d 61 70 70 65 64 0a 66 69 6c  ^The mmapped.fil
12670 65 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d 65  e is in the same
12680 20 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68   directory as th
12690 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68  e database and h
126a0 61 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  as the same name
126b0 0a 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65  .as the database
126c0 20 77 69 74 68 20 61 20 22 3c 74 74 3e 2d 73 68   with a "<tt>-sh
126d0 6d 3c 2f 74 74 3e 22 20 73 75 66 66 69 78 20 61  m</tt>" suffix a
126e0 70 70 65 6e 64 65 64 2e 20 20 42 65 63 61 75 73  ppended.  Becaus
126f0 65 0a 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20  e.the wal-index 
12700 69 73 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  is shared memory
12710 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f  , SQLite does no
12720 74 20 73 75 70 70 6f 72 74 20 0a 5b 50 52 41 47  t support .[PRAG
12730 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  MA journal_mode 
12740 7c 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57  | journal_mode=W
12750 41 4c 5d 20 0a 6f 6e 20 61 20 6e 65 74 77 6f 72  AL] .on a networ
12760 6b 20 66 69 6c 65 73 79 73 74 65 6d 20 77 68 65  k filesystem whe
12770 6e 20 63 6c 69 65 6e 74 73 20 61 72 65 20 6f 6e  n clients are on
12780 20 64 69 66 66 65 72 65 6e 74 20 6d 61 63 68 69   different machi
12790 6e 65 73 2e 0a 41 6c 6c 20 75 73 65 72 73 20 6f  nes..All users o
127a0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d  f the database m
127b0 75 73 74 20 62 65 20 61 62 6c 65 20 74 6f 20 73  ust be able to s
127c0 68 61 72 65 20 74 68 65 20 73 61 6d 65 20 6d 65  hare the same me
127d0 6d 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  mory.</p>..<p>Th
127e0 65 20 70 75 72 70 6f 73 65 20 6f 66 20 74 68 65  e purpose of the
127f0 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 6f   wal-index is to
12800 20 61 6e 73 77 65 72 20 74 68 69 73 20 71 75 65   answer this que
12810 73 74 69 6f 6e 20 71 75 69 63 6b 6c 79 3a 3c 2f  stion quickly:</
12820 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
12830 3c 69 3e 0a 47 69 76 65 6e 20 61 20 70 61 67 65  <i>.Given a page
12840 20 6e 75 6d 62 65 72 20 50 20 61 6e 64 20 61 20   number P and a 
12850 6d 61 78 69 6d 75 6d 20 57 41 4c 20 66 72 61 6d  maximum WAL fram
12860 65 20 69 6e 64 65 78 20 4d 2c 0a 72 65 74 75 72  e index M,.retur
12870 6e 20 74 68 65 20 6c 61 72 67 65 73 74 20 57 41  n the largest WA
12880 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20 66 6f  L frame index fo
12890 72 20 70 61 67 65 20 50 20 74 68 61 74 20 64 6f  r page P that do
128a0 65 73 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2c  es not exceed M,
128b0 20 0a 6f 72 20 72 65 74 75 72 6e 20 4e 55 4c 4c   .or return NULL
128c0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
128d0 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67 65   frames for page
128e0 20 50 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 65   P that do not e
128f0 78 63 65 65 64 20 4d 2e 0a 3c 2f 69 3e 3c 2f 62  xceed M..</i></b
12900 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54  lockquote>..<p>T
12910 68 65 20 3c 69 3e 4d 3c 2f 69 3e 20 76 61 6c 75  he <i>M</i> valu
12920 65 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75  e in the previou
12930 73 20 70 61 72 61 67 72 61 70 68 20 69 73 20 74  s paragraph is t
12940 68 65 20 22 6d 78 46 72 61 6d 65 22 20 76 61 6c  he "mxFrame" val
12950 75 65 0a 64 65 66 69 6e 65 64 20 69 6e 20 5b 57  ue.defined in [W
12960 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74 68  AL read algorith
12970 6d 20 7c 20 73 65 63 74 69 6f 6e 20 34 2e 34 5d  m | section 4.4]
12980 20 74 68 61 74 20 69 73 20 72 65 61 64 20 61 74   that is read at
12990 20 74 68 65 20 73 74 61 72 74 20 0a 6f 66 20 61   the start .of a
129a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
129b0 20 77 68 69 63 68 20 64 65 66 69 6e 65 73 20 74   which defines t
129c0 68 65 20 6d 61 78 69 6d 75 6d 20 66 72 61 6d 65  he maximum frame
129d0 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 74 68   from the WAL th
129e0 61 74 20 0a 74 68 65 20 72 65 61 64 65 72 20 77  at .the reader w
129f0 69 6c 6c 20 75 73 65 2e 3c 2f 70 3e 0a 0a 3c 70  ill use.</p>..<p
12a00 3e 54 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69  >The wal-index i
12a10 73 20 74 72 61 6e 73 69 65 6e 74 2e 20 20 41 66  s transient.  Af
12a20 74 65 72 20 61 20 63 72 61 73 68 2c 20 74 68 65  ter a crash, the
12a30 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 0a 72 65   wal-index is.re
12a40 63 6f 6e 73 74 72 75 63 74 65 64 20 66 72 6f 6d  constructed from
12a50 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 57 41   the original WA
12a60 4c 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 56 46  L file.  ^The VF
12a70 53 20 69 73 20 72 65 71 75 69 72 65 64 0a 74 6f  S is required.to
12a80 20 65 69 74 68 65 72 20 74 72 75 6e 63 61 74 65   either truncate
12a90 20 6f 72 20 7a 65 72 6f 20 74 68 65 20 68 65 61   or zero the hea
12aa0 64 65 72 20 6f 66 20 74 68 65 20 77 61 6c 2d 69  der of the wal-i
12ab0 6e 64 65 78 20 77 68 65 6e 20 74 68 65 20 6c 61  ndex when the la
12ac0 73 74 0a 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  st.connection to
12ad0 20 69 74 20 63 6c 6f 73 65 73 2e 20 20 42 65 63   it closes.  Bec
12ae0 61 75 73 65 20 74 68 65 20 77 61 6c 2d 69 6e 64  ause the wal-ind
12af0 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e 74 2c  ex is transient,
12b00 20 69 74 20 63 61 6e 0a 75 73 65 20 61 6e 20 61   it can.use an a
12b10 72 63 68 69 74 65 63 74 75 72 65 2d 73 70 65 63  rchitecture-spec
12b20 69 66 69 63 20 66 6f 72 6d 61 74 3b 20 69 74 20  ific format; it 
12b30 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f  does not have to
12b40 20 62 65 20 63 72 6f 73 73 2d 70 6c 61 74 66 6f   be cross-platfo
12b50 72 6d 2e 0a 48 65 6e 63 65 2c 20 75 6e 6c 69 6b  rm..Hence, unlik
12b60 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  e the database a
12b70 6e 64 20 57 41 4c 20 66 69 6c 65 20 66 6f 72 6d  nd WAL file form
12b80 61 74 73 20 77 68 69 63 68 20 73 74 6f 72 65 20  ats which store 
12b90 61 6c 6c 20 76 61 6c 75 65 73 0a 61 73 20 62 69  all values.as bi
12ba0 67 20 65 6e 64 69 61 6e 2c 20 74 68 65 20 77 61  g endian, the wa
12bb0 6c 2d 69 6e 64 65 78 20 73 74 6f 72 65 73 20 6d  l-index stores m
12bc0 75 6c 74 69 2d 62 79 74 65 20 76 61 6c 75 65 73  ulti-byte values
12bd0 20 69 6e 20 74 68 65 20 6e 61 74 69 76 65 0a 62   in the native.b
12be0 79 74 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65  yte order of the
12bf0 20 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 2e 3c   host computer.<
12c00 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  /p>..<p>This doc
12c10 75 6d 65 6e 74 20 69 73 20 63 6f 6e 63 65 72 6e  ument is concern
12c20 65 64 20 77 69 74 68 20 74 68 65 20 70 65 72 73  ed with the pers
12c30 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f 66 20  istent state of 
12c40 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c  the database.fil
12c50 65 2c 20 61 6e 64 20 73 69 6e 63 65 20 74 68 65  e, and since the
12c60 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 61 20   wal-index is a 
12c70 74 72 61 6e 73 69 65 6e 74 20 73 74 72 75 63 74  transient struct
12c80 75 72 65 2c 20 6e 6f 20 66 75 72 74 68 65 72 20  ure, no further 
12c90 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f  .information abo
12ca0 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66  ut the format of
12cb0 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 77   the wal-index w
12cc0 69 6c 6c 20 62 65 20 70 72 6f 76 69 64 65 64 20  ill be provided 
12cd0 68 65 72 65 2e 0a 43 6f 6d 70 6c 65 74 65 20 64  here..Complete d
12ce0 65 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 66 6f  etails on the fo
12cf0 72 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c 2d  rmat of the wal-
12d00 69 6e 64 65 78 20 61 72 65 20 63 6f 6e 74 61 69  index are contai
12d10 6e 65 64 20 77 69 74 68 69 6e 0a 63 6f 6d 6d 65  ned within.comme
12d20 6e 74 73 20 69 6e 20 53 51 4c 69 74 65 20 73 6f  nts in SQLite so
12d30 75 72 63 65 20 63 6f 64 65 2e 3c 2f 70 3e 0a     urce code.</p>.