Documentation Source Text

Hex Artifact Content
Login

Artifact 1235d5d89b20a525e23e0b09d9d886bbd961b613:


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 20 69 6e 66 6f 72 6d  g contain inform
0370: 61 74 69 6f 6e 20 6e 65 63 65 73 73 61 72 79 20  ation necessary 
0380: 66 6f 72 20 72 65 63 6f 76 65 72 69 6e 67 20 0a  for recovering .
0390: 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
03a0: 20 64 61 74 61 62 61 73 65 2c 20 74 68 65 79 20   database, they 
03b0: 61 72 65 20 63 61 6c 6c 65 64 20 61 20 22 68 6f  are called a "ho
03c0: 74 20 6a 6f 75 72 6e 61 6c 22 20 6f 72 20 22 68  t journal" or "h
03d0: 6f 74 20 57 41 4c 20 66 69 6c 65 22 2e 0a 48 6f  ot WAL file"..Ho
03e0: 74 20 6a 6f 75 72 6e 61 6c 73 20 61 6e 64 20 57  t journals and W
03f0: 41 4c 20 66 69 6c 65 73 20 61 72 65 20 6f 6e 6c  AL files are onl
0400: 79 20 61 20 66 61 63 74 6f 72 20 64 75 72 69 6e  y a factor durin
0410: 67 20 65 72 72 6f 72 20 72 65 63 6f 76 65 72 79  g error recovery
0420: 0a 73 63 65 6e 61 72 69 6f 73 20 61 6e 64 20 73  .scenarios and s
0430: 6f 20 61 72 65 20 75 6e 63 6f 6d 6d 6f 6e 2c 20  o are uncommon, 
0440: 62 75 74 20 74 68 65 79 20 61 72 65 20 70 61 72  but they are par
0450: 74 20 6f 66 20 74 68 65 20 73 74 61 74 65 20 6f  t of the state o
0460: 66 20 61 6e 20 53 51 4c 69 74 65 0a 64 61 74 61  f an SQLite.data
0470: 62 61 73 65 20 61 6e 64 20 73 6f 20 63 61 6e 6e  base and so cann
0480: 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 2e 20 20  ot be ignored.  
0490: 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 64 65  This document de
04a0: 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74  fines the format
04b0: 0a 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  .of a rollback j
04c0: 6f 75 72 6e 61 6c 20 61 6e 64 20 74 68 65 20 77  ournal and the w
04d0: 72 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 20 66  rite-ahead log f
04e0: 69 6c 65 2c 20 62 75 74 20 74 68 65 20 66 6f 63  ile, but the foc
04f0: 75 73 20 69 73 0a 6f 6e 20 74 68 65 20 6d 61 69  us is.on the mai
0500: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  n database file.
0510: 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 31 20 50 61  </p>..<h3>1.1 Pa
0520: 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ges</h3>..<p>The
0530: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
0540: 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ile consists of 
0550: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70 61 67 65  one or more page
0560: 73 2e 20 20 5e 54 68 65 20 73 69 7a 65 20 6f 66  s.  ^The size of
0570: 20 61 0a 70 61 67 65 20 69 73 20 61 20 70 6f 77   a.page is a pow
0580: 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65 65  er of two betwee
0590: 6e 20 35 31 32 20 61 6e 64 20 36 35 35 33 36 20  n 512 and 65536 
05a0: 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6c 6c 20  inclusive.  All 
05b0: 70 61 67 65 73 20 77 69 74 68 69 6e 0a 74 68 65  pages within.the
05c0: 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20 61   same database a
05d0: 72 65 20 74 68 65 20 73 61 6d 65 20 73 69 7a 65  re the same size
05e0: 2e 20 20 5e 54 68 65 20 70 61 67 65 20 73 69 7a  .  ^The page siz
05f0: 65 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  e for a database
0600: 20 66 69 6c 65 0a 69 73 20 64 65 74 65 72 6d 69   file.is determi
0610: 6e 65 64 20 62 79 20 74 68 65 20 32 2d 62 79 74  ned by the 2-byt
0620: 65 20 69 6e 74 65 67 65 72 20 6c 6f 63 61 74 65  e integer locate
0630: 64 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f  d at an offset o
0640: 66 0a 31 36 20 62 79 74 65 73 20 66 72 6f 6d 20  f.16 bytes from 
0650: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
0660: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0670: 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 67 65  le.</p>..<p>Page
0680: 73 20 61 72 65 20 6e 75 6d 62 65 72 65 64 20 62  s are numbered b
0690: 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 31 2e  eginning with 1.
06a0: 20 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 70 61    The maximum pa
06b0: 67 65 20 6e 75 6d 62 65 72 20 69 73 0a 32 31 34  ge number is.214
06c0: 37 34 38 33 36 34 36 20 28 32 3c 73 75 70 3e 3c  7483646 (2<sup><
06d0: 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61 6c 6c 3e  small>31</small>
06e0: 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20 20 54 68  </sup> - 2).  Th
06f0: 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a 65 0a 53  e minimum size.S
0700: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 69  QLite database i
0710: 73 20 61 20 73 69 6e 67 6c 65 20 35 31 32 2d 62  s a single 512-b
0720: 79 74 65 20 70 61 67 65 2e 0a 54 68 65 20 6d 61  yte page..The ma
0730: 78 69 6d 75 6d 20 73 69 7a 65 20 64 61 74 61 62  ximum size datab
0740: 61 73 65 20 77 6f 75 6c 64 20 62 65 20 32 31 34  ase would be 214
0750: 37 34 38 33 36 34 36 20 70 61 67 65 73 20 61 74  7483646 pages at
0760: 20 36 35 35 33 36 20 62 79 74 65 73 20 70 65 72   65536 bytes per
0770: 0a 70 61 67 65 20 6f 72 20 31 34 30 2c 37 33 37  .page or 140,737
0780: 2c 34 38 38 2c 32 32 34 2c 32 35 36 20 62 79 74  ,488,224,256 byt
0790: 65 73 20 28 61 62 6f 75 74 20 31 34 30 20 74 65  es (about 140 te
07a0: 72 61 62 79 74 65 73 29 2e 20 20 55 73 75 61 6c  rabytes).  Usual
07b0: 6c 79 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a 68  ly SQLite will.h
07c0: 69 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  it the maximum f
07d0: 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69 74 20 6f  ile size limit o
07e0: 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  f the underlying
07f0: 20 66 69 6c 65 73 79 73 74 65 6d 20 6f 72 20 64   filesystem or d
0800: 69 73 6b 0a 68 61 72 64 77 61 72 65 20 73 69 7a  isk.hardware siz
0810: 65 20 6c 69 6d 69 74 20 6c 6f 6e 67 20 62 65 66  e limit long bef
0820: 6f 72 65 20 69 74 20 68 69 74 73 20 69 74 73 20  ore it hits its 
0830: 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 73 69 7a  own internal siz
0840: 65 20 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c 70  e limit.</p>..<p
0850: 3e 49 6e 20 63 6f 6d 6d 6f 6e 20 75 73 65 2c 20  >In common use, 
0860: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 73  SQLite databases
0870: 20 74 65 6e 64 20 74 6f 20 72 61 6e 67 65 20 69   tend to range i
0880: 6e 20 73 69 7a 65 20 66 72 6f 6d 20 61 20 66 65  n size from a fe
0890: 77 20 6b 69 6c 6f 62 79 74 65 73 0a 74 6f 20 61  w kilobytes.to a
08a0: 20 66 65 77 20 67 69 67 61 62 79 74 65 73 2e 3c   few gigabytes.<
08b0: 2f 70 3e 0a 0a 3c 70 3e 41 74 20 61 6e 79 20 70  /p>..<p>At any p
08c0: 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 65 76  oint in time, ev
08d0: 65 72 79 20 70 61 67 65 20 69 6e 20 74 68 65 20  ery page in the 
08e0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68 61  main database ha
08f0: 73 20 61 20 73 69 6e 67 6c 65 0a 75 73 65 20 77  s a single.use w
0900: 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66 20 74  hich is one of t
0910: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 3c 75  he following:.<u
0920: 6c 3e 0a 3c 6c 69 3e 54 68 65 20 6c 6f 63 6b 2d  l>.<li>The lock-
0930: 62 79 74 65 20 70 61 67 65 0a 3c 6c 69 3e 41 20  byte page.<li>A 
0940: 66 72 65 65 6c 69 73 74 20 70 61 67 65 0a 3c 75  freelist page.<u
0950: 6c 3e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73  l>.<li>A freelis
0960: 74 20 74 72 75 6e 6b 20 70 61 67 65 0a 3c 6c 69  t trunk page.<li
0970: 3e 41 20 66 72 65 65 6c 69 73 74 20 6c 65 61 66  >A freelist leaf
0980: 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e   page.</ul>.<li>
0990: 41 20 62 2d 74 72 65 65 20 70 61 67 65 0a 3c 75  A b-tree page.<u
09a0: 6c 3e 0a 3c 6c 69 3e 41 20 74 61 62 6c 65 20 62  l>.<li>A table b
09b0: 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20 70  -tree interior p
09c0: 61 67 65 0a 3c 6c 69 3e 41 20 74 61 62 6c 65 20  age.<li>A table 
09d0: 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65  b-tree leaf page
09e0: 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20 62 2d  .<li>An index b-
09f0: 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20 70 61  tree interior pa
0a00: 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20  ge.<li>An index 
0a10: 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65  b-tree leaf page
0a20: 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 70 61 79  .</ul>.<li>A pay
0a30: 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70 61  load overflow pa
0a40: 67 65 0a 3c 6c 69 3e 41 20 70 6f 69 6e 74 65 72  ge.<li>A pointer
0a50: 20 6d 61 70 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a   map page.</ul>.
0a60: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6c 6c 20 72 65  </p>..<p>^All re
0a70: 61 64 73 20 66 72 6f 6d 20 61 6e 64 20 77 72 69  ads from and wri
0a80: 74 65 73 20 74 6f 20 74 68 65 20 6d 61 69 6e 20  tes to the main 
0a90: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 65  database file be
0aa0: 67 69 6e 20 61 74 20 61 20 70 61 67 65 0a 62 6f  gin at a page.bo
0ab0: 75 6e 64 61 72 79 20 61 6e 64 20 61 6c 6c 20 77  undary and all w
0ac0: 72 69 74 65 73 20 61 72 65 20 61 6e 20 69 6e 74  rites are an int
0ad0: 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 70  eger number of p
0ae0: 61 67 65 73 20 69 6e 20 73 69 7a 65 2e 20 20 5e  ages in size.  ^
0af0: 52 65 61 64 73 0a 61 72 65 20 61 6c 73 6f 20 75  Reads.are also u
0b00: 73 75 61 6c 6c 79 20 61 6e 20 69 6e 74 65 67 65  sually an intege
0b10: 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  r number of page
0b20: 73 20 69 6e 20 73 69 7a 65 2c 20 77 69 74 68 20  s in size, with 
0b30: 74 68 65 20 6f 6e 65 20 65 78 63 65 70 74 69 6f  the one exceptio
0b40: 6e 0a 74 68 61 74 20 77 68 65 6e 20 74 68 65 20  n.that when the 
0b50: 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72 73  database is firs
0b60: 74 20 6f 70 65 6e 65 64 2c 20 74 68 65 20 66 69  t opened, the fi
0b70: 72 73 74 20 31 30 30 20 62 79 74 65 73 20 6f 66  rst 100 bytes of
0b80: 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66 69   the.database fi
0b90: 6c 65 20 28 74 68 65 20 64 61 74 61 62 61 73 65  le (the database
0ba0: 20 66 69 6c 65 20 68 65 61 64 65 72 29 20 61 72   file header) ar
0bb0: 65 20 72 65 61 64 20 61 73 20 61 20 73 75 62 2d  e read as a sub-
0bc0: 70 61 67 65 20 73 69 7a 65 20 75 6e 69 74 2e 3c  page size unit.<
0bd0: 2f 70 3e 0a 0a 3c 70 3e 5e 42 65 66 6f 72 65 20  /p>..<p>^Before 
0be0: 61 6e 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2d  any information-
0bf0: 62 65 61 72 69 6e 67 20 70 61 67 65 20 6f 66 20  bearing page of 
0c00: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
0c10: 6d 6f 64 69 66 69 65 64 2c 20 0a 74 68 65 20 6f  modified, .the o
0c20: 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66 69  riginal unmodifi
0c30: 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  ed content of th
0c40: 61 74 20 70 61 67 65 20 69 73 20 77 72 69 74 74  at page is writt
0c50: 65 6e 20 69 6e 74 6f 20 74 68 65 20 0a 72 6f 6c  en into the .rol
0c60: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 20  lback journal.  
0c70: 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  If a transaction
0c80: 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 20   is interrupted 
0c90: 61 6e 64 20 6e 65 65 64 73 20 74 6f 20 62 65 20  and needs to be 
0ca0: 0a 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 20 74 68  .rolled back, th
0cb0: 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
0cc0: 61 6c 20 63 61 6e 20 74 68 65 6e 20 62 65 20 75  al can then be u
0cd0: 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20 74  sed to restore t
0ce0: 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20 69  he.database to i
0cf0: 74 73 20 6f 72 69 67 69 6e 61 6c 20 73 74 61 74  ts original stat
0d00: 65 2e 20 20 5e 46 72 65 65 6c 69 73 74 20 6c 65  e.  ^Freelist le
0d10: 61 66 20 70 61 67 65 73 20 62 65 61 72 20 6e 6f  af pages bear no
0d20: 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61  .information tha
0d30: 74 20 77 6f 75 6c 64 20 6e 65 65 64 20 74 6f 20  t would need to 
0d40: 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 20 61  be restored on a
0d50: 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 73 6f   rollback and so
0d60: 20 74 68 65 79 0a 61 72 65 20 6e 6f 74 20 77 72   they.are not wr
0d70: 69 74 74 65 6e 20 74 6f 20 74 68 65 20 6a 6f 75  itten to the jou
0d80: 72 6e 61 6c 20 70 72 69 6f 72 20 74 6f 20 6d 6f  rnal prior to mo
0d90: 64 69 66 69 63 61 74 69 6f 6e 2c 20 69 6e 20 6f  dification, in o
0da0: 72 64 65 72 20 74 6f 0a 72 65 64 75 63 65 20 64  rder to.reduce d
0db0: 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 74  isk I/O.</p>..<t
0dc0: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 64  cl>hd_fragment d
0dd0: 61 74 61 62 61 73 65 5f 68 65 61 64 65 72 20 7b  atabase_header {
0de0: 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 7d  database header}
0df0: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 32 20 54  </tcl>.<h3>1.2 T
0e00: 68 65 20 44 61 74 61 62 61 73 65 20 48 65 61 64  he Database Head
0e10: 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20  er</h3>..<p>The 
0e20: 66 69 72 73 74 20 31 30 30 20 62 79 74 65 73 20  first 100 bytes 
0e30: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
0e40: 66 69 6c 65 20 63 6f 6d 70 72 69 73 65 20 74 68  file comprise th
0e50: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
0e60: 0a 68 65 61 64 65 72 2e 20 20 54 68 65 20 64 61  .header.  The da
0e70: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
0e80: 65 72 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  er is divided in
0e90: 74 6f 20 66 69 65 6c 64 73 20 61 73 20 73 68 6f  to fields as sho
0ea0: 77 6e 20 62 79 0a 74 68 65 20 74 61 62 6c 65 20  wn by.the table 
0eb0: 62 65 6c 6f 77 2e 20 20 41 6c 6c 20 6d 75 6c 74  below.  All mult
0ec0: 69 62 79 74 65 20 66 69 65 6c 64 73 20 69 6e 20  ibyte fields in 
0ed0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
0ee0: 65 20 68 65 61 64 65 72 20 61 72 65 0a 73 74 6f  e header are.sto
0ef0: 72 65 64 20 77 69 74 68 20 74 68 65 20 6d 75 73  red with the mus
0f00: 74 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 79  t significant by
0f10: 74 65 20 66 69 72 73 74 20 28 62 69 67 2d 65 6e  te first (big-en
0f20: 64 69 61 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63 65 6e  dian).</p>..<cen
0f30: 74 65 72 3e 0a 3c 69 3e 44 61 74 61 62 61 73 65  ter>.<i>Database
0f40: 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f   Header Format</
0f50: 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69  i><br>.<table wi
0f60: 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72  dth="80%" border
0f70: 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73  =1>.<tr><th>Offs
0f80: 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65  et<th>Size<th>De
0f90: 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74  scription.<tr><t
0fa0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
0fb0: 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76  gn=center>0<td v
0fc0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
0fd0: 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 61 6c 69  center>16<td ali
0fe0: 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 68 65 61  gn=left>.The hea
0ff0: 64 65 72 20 73 74 72 69 6e 67 3a 20 22 53 51 4c  der string: "SQL
1000: 69 74 65 20 66 6f 72 6d 61 74 20 33 5c 30 30 30  ite format 3\000
1010: 22 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ".<tr><td valign
1020: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1030: 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>16<td valign=t
1040: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1050: 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  2<td align=left>
1060: 0a 54 68 65 20 64 61 74 61 62 61 73 65 20 70 61  .The database pa
1070: 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ge size in bytes
1080: 2e 20 20 4d 75 73 74 20 62 65 20 61 20 70 6f 77  .  Must be a pow
1090: 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65 65  er of two betwee
10a0: 6e 20 35 31 32 0a 61 6e 64 20 33 32 37 36 38 20  n 512.and 32768 
10b0: 69 6e 63 6c 75 73 69 76 65 2c 20 6f 72 20 74 68  inclusive, or th
10c0: 65 20 76 61 6c 75 65 20 31 20 72 65 70 72 65 73  e value 1 repres
10d0: 65 6e 74 69 6e 67 20 61 20 70 61 67 65 20 73 69  enting a page si
10e0: 7a 65 20 6f 66 20 36 35 35 33 36 2e 0a 3c 74 72  ze of 65536..<tr
10f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1100: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 38 3c  align=center>18<
1110: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1120: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
1130: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c 65  align=left>.File
1140: 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76 65   format write ve
1150: 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20 6c 65  rsion.  1 for le
1160: 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57 41 4c  gacy; 2 for [WAL
1170: 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ]..<tr><td valig
1180: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1190: 65 72 3e 31 39 3c 74 64 20 76 61 6c 69 67 6e 3d  er>19<td valign=
11a0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
11b0: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
11c0: 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 72 65  >.File format re
11d0: 61 64 20 76 65 72 73 69 6f 6e 2e 20 20 31 20 66  ad version.  1 f
11e0: 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66 6f 72  or legacy; 2 for
11f0: 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20   [WAL]..<tr><td 
1200: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1210: 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76 61  =center>20<td va
1220: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1230: 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e  enter>1<td align
1240: 3d 6c 65 66 74 3e 0a 42 79 74 65 73 20 6f 66 20  =left>.Bytes of 
1250: 75 6e 75 73 65 64 20 22 72 65 73 65 72 76 65 64  unused "reserved
1260: 22 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65  " space at the e
1270: 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67 65 2e  nd of each page.
1280: 20 20 55 73 75 61 6c 6c 79 20 30 2e 0a 3c 74 72    Usually 0..<tr
1290: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
12a0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 31 3c  align=center>21<
12b0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12c0: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20  ign=center>1<td 
12d0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 61 78 69  align=left>.Maxi
12e0: 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79  mum embedded pay
12f0: 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20 20  load fraction.  
1300: 4d 75 73 74 20 62 65 20 36 34 2e 0a 3c 74 72 3e  Must be 64..<tr>
1310: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1320: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 32 3c 74  lign=center>22<t
1330: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1340: 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61  gn=center>1<td a
1350: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4d 69 6e 69 6d  lign=left>.Minim
1360: 75 6d 20 65 6d 62 65 64 64 65 64 20 70 61 79 6c  um embedded payl
1370: 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20 20 4d  oad fraction.  M
1380: 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72 3e 3c  ust be 32..<tr><
1390: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
13a0: 69 67 6e 3d 63 65 6e 74 65 72 3e 32 33 3c 74 64  ign=center>23<td
13b0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13c0: 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c  n=center>1<td al
13d0: 69 67 6e 3d 6c 65 66 74 3e 0a 4c 65 61 66 20 70  ign=left>.Leaf p
13e0: 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e  ayload fraction.
13f0: 20 20 4d 75 73 74 20 62 65 20 33 32 2e 0a 3c 74    Must be 32..<t
1400: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1410: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34   align=center>24
1420: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1430: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
1440: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c   align=left>.Fil
1450: 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
1460: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
1470: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1480: 72 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>28<td valign=t
1490: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
14a0: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
14b0: 0a 53 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74  .Size of the dat
14c0: 61 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70 61  abase file in pa
14d0: 67 65 73 2e 20 20 54 68 65 20 22 69 6e 2d 68 65  ges.  The "in-he
14e0: 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69  ader database si
14f0: 7a 65 22 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ze"..<tr><td val
1500: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1510: 6e 74 65 72 3e 33 32 3c 74 64 20 76 61 6c 69 67  nter>32<td valig
1520: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1530: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
1540: 66 74 3e 0a 50 61 67 65 20 6e 75 6d 62 65 72 20  ft>.Page number 
1550: 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72 65  of the first fre
1560: 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65  elist trunk page
1570: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
1580: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1590: 72 3e 33 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>36<td valign=t
15a0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
15b0: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
15c0: 0a 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66  .Total number of
15d0: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 73 2e   freelist pages.
15e0: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
15f0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1600: 3e 34 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >40<td valign=to
1610: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
1620: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
1630: 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  The schema cooki
1640: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
1650: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1660: 65 72 3e 34 34 3c 74 64 20 76 61 6c 69 67 6e 3d  er>44<td valign=
1670: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1680: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1690: 3e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  >.The schema for
16a0: 6d 61 74 20 6e 75 6d 62 65 72 2e 20 20 53 75 70  mat number.  Sup
16b0: 70 6f 72 74 65 64 20 73 63 68 65 6d 61 20 66 6f  ported schema fo
16c0: 72 6d 61 74 73 20 61 72 65 20 31 2c 20 32 2c 20  rmats are 1, 2, 
16d0: 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72 3e 3c 74  3, and 4..<tr><t
16e0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
16f0: 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c 74 64 20  gn=center>48<td 
1700: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1710: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
1720: 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61 75 6c 74  gn=left>.Default
1730: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
1740: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
1750: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1760: 72 3e 35 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>52<td valign=t
1770: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1780: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1790: 0a 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72  .The page number
17a0: 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   of the largest 
17b0: 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65  root b-tree page
17c0: 20 77 68 65 6e 20 69 6e 20 61 75 74 6f 2d 76 61   when in auto-va
17d0: 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65 6d 65 6e  cuum or.incremen
17e0: 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64 65 73  tal-vacuum modes
17f0: 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68 65 72 77  , or zero otherw
1800: 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ise..<tr><td val
1810: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1820: 6e 74 65 72 3e 35 36 3c 74 64 20 76 61 6c 69 67  nter>56<td valig
1830: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1840: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
1850: 66 74 3e 0a 54 68 65 20 64 61 74 61 62 61 73 65  ft>.The database
1860: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 2e 20   text encoding. 
1870: 20 41 20 76 61 6c 75 65 20 6f 66 20 31 20 6d 65   A value of 1 me
1880: 61 6e 73 20 55 54 46 2d 38 2e 20 20 41 20 76 61  ans UTF-8.  A va
1890: 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e 73 20 55  lue of 2.means U
18a0: 54 46 2d 31 36 6c 65 2e 20 20 41 20 76 61 6c 75  TF-16le.  A valu
18b0: 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54 46  e of 3 means UTF
18c0: 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74 64 20 76  -16be..<tr><td v
18d0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
18e0: 63 65 6e 74 65 72 3e 36 30 3c 74 64 20 76 61 6c  center>60<td val
18f0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1900: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
1910: 6c 65 66 74 3e 0a 54 68 65 20 22 75 73 65 72 20  left>.The "user 
1920: 76 65 72 73 69 6f 6e 22 20 61 73 20 72 65 61 64  version" as read
1930: 20 61 6e 64 20 73 65 74 20 62 79 20 74 68 65 20   and set by the 
1940: 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 70 72  [user_version pr
1950: 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  agma]..<tr><td v
1960: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1970: 63 65 6e 74 65 72 3e 36 34 3c 74 64 20 76 61 6c  center>64<td val
1980: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1990: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
19a0: 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e 6f 6e 2d  left>.True (non-
19b0: 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63 72 65 6d  zero) for increm
19c0: 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64  ental-vacuum mod
19d0: 65 2e 20 20 46 61 6c 73 65 20 28 7a 65 72 6f 29  e.  False (zero)
19e0: 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72 3e   otherwise..<tr>
19f0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1a00: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 38 3c 74  lign=center>68<t
1a10: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1a20: 67 6e 3d 63 65 6e 74 65 72 3e 32 34 3c 74 64 20  gn=center>24<td 
1a30: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 52 65 73 65  align=left>.Rese
1a40: 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e 73 69  rved for expansi
1a50: 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 7a 65 72  on.  Must be zer
1a60: 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  o..<tr><td valig
1a70: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1a80: 65 72 3e 39 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>92<td valign=
1a90: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1aa0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1ab0: 3e 0a 54 68 65 20 5b 76 65 72 73 69 6f 6e 2d 76  >.The [version-v
1ac0: 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 5d  alid-for number]
1ad0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
1ae0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1af0: 72 3e 39 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>96<td valign=t
1b00: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1b10: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1b20: 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  .[SQLITE_VERSION
1b30: 5f 4e 55 4d 42 45 52 5d 0a 3c 2f 74 61 62 6c 65  _NUMBER].</table
1b40: 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 68 34 3e  ></center>..<h4>
1b50: 31 2e 32 2e 31 20 4d 61 67 69 63 20 48 65 61 64  1.2.1 Magic Head
1b60: 65 72 20 53 74 72 69 6e 67 3c 2f 68 34 3e 0a 0a  er String</h4>..
1b70: 3c 70 3e 5e 45 76 65 72 79 20 76 61 6c 69 64 20  <p>^Every valid 
1b80: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
1b90: 66 69 6c 65 20 62 65 67 69 6e 73 20 77 69 74 68  file begins with
1ba0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 31   the following 1
1bb0: 36 20 62 79 74 65 73 20 0a 28 69 6e 20 68 65 78  6 bytes .(in hex
1bc0: 29 3a 20 35 33 20 35 31 20 34 63 20 36 39 20 37  ): 53 51 4c 69 7
1bd0: 34 20 36 35 20 32 30 20 36 36 20 36 66 20 37 32  4 65 20 66 6f 72
1be0: 20 36 64 20 36 31 20 37 34 20 32 30 20 33 33 20   6d 61 74 20 33 
1bf0: 30 30 2e 20 20 54 68 69 73 20 62 79 74 65 20 73  00.  This byte s
1c00: 65 71 75 65 6e 63 65 0a 63 6f 72 72 65 73 70 6f  equence.correspo
1c10: 6e 64 73 20 74 6f 20 74 68 65 20 55 54 46 2d 38  nds to the UTF-8
1c20: 20 73 74 72 69 6e 67 20 22 53 51 4c 69 74 65 20   string "SQLite 
1c30: 66 6f 72 6d 61 74 20 33 22 20 69 6e 63 6c 75 64  format 3" includ
1c40: 69 6e 67 20 74 68 65 20 6e 75 6c 0a 74 65 72 6d  ing the nul.term
1c50: 69 6e 61 74 6f 72 20 63 68 61 72 61 63 74 65 72  inator character
1c60: 20 61 74 20 74 68 65 20 65 6e 64 2e 3c 2f 70 3e   at the end.</p>
1c70: 0a 0a 3c 68 34 3e 31 2e 32 2e 32 20 50 61 67 65  ..<h4>1.2.2 Page
1c80: 20 53 69 7a 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 54   Size</h4>..<p>T
1c90: 68 65 20 74 77 6f 2d 62 79 74 65 20 76 61 6c 75  he two-byte valu
1ca0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 74 20 6f  e beginning at o
1cb0: 66 66 73 65 74 20 31 36 20 64 65 74 65 72 6d 69  ffset 16 determi
1cc0: 6e 65 73 20 74 68 65 20 70 61 67 65 20 73 69 7a  nes the page siz
1cd0: 65 20 6f 66 20 0a 74 68 65 20 64 61 74 61 62 61  e of .the databa
1ce0: 73 65 2e 20 20 46 6f 72 20 53 51 4c 69 74 65 20  se.  For SQLite 
1cf0: 76 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30 2e 31  versions 3.7.0.1
1d00: 20 61 6e 64 20 65 61 72 6c 69 65 72 2c 20 74 68   and earlier, th
1d10: 69 73 20 76 61 6c 75 65 20 69 73 20 0a 69 6e 74  is value is .int
1d20: 65 72 70 72 65 74 65 64 20 61 73 20 61 20 62 69  erpreted as a bi
1d30: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
1d40: 20 61 6e 64 20 6d 75 73 74 20 62 65 20 61 20 70   and must be a p
1d50: 6f 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77  ower of two betw
1d60: 65 65 6e 0a 35 31 32 20 61 6e 64 20 33 32 37 36  een.512 and 3276
1d70: 38 2c 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 42  8, inclusive.  B
1d80: 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 53 51  eginning with SQ
1d90: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37  Lite version 3.7
1da0: 2e 31 2c 20 61 20 70 61 67 65 0a 73 69 7a 65 20  .1, a page.size 
1db0: 6f 66 20 36 35 35 33 36 20 62 79 74 65 73 20 69  of 65536 bytes i
1dc0: 73 20 73 75 70 70 6f 72 74 65 64 2e 20 20 54 68  s supported.  Th
1dd0: 65 20 76 61 6c 75 65 20 36 35 35 33 36 20 77 69  e value 65536 wi
1de0: 6c 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20 61 0a  ll not fit in a.
1df0: 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72  two-byte integer
1e00: 2c 20 73 6f 20 74 6f 20 73 70 65 63 69 66 79 20  , so to specify 
1e10: 61 20 36 35 35 33 36 2d 62 79 74 65 20 70 61 67  a 65536-byte pag
1e20: 65 20 73 69 7a 65 2c 20 74 68 65 20 76 61 6c 75  e size, the valu
1e30: 65 20 69 73 0a 61 74 20 6f 66 66 73 65 74 20 31  e is.at offset 1
1e40: 36 20 69 73 20 30 78 30 30 20 30 78 30 31 2e 0a  6 is 0x00 0x01..
1e50: 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e 20 62  This value can b
1e60: 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  e interpreted as
1e70: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a 31 20   a big-endian.1 
1e80: 61 6e 64 20 74 68 6f 75 67 68 74 20 6f 66 20 69  and thought of i
1e90: 73 20 61 73 20 61 20 6d 61 67 69 63 20 6e 75 6d  s as a magic num
1ea0: 62 65 72 20 74 6f 20 72 65 70 72 65 73 65 6e 74  ber to represent
1eb0: 20 74 68 65 20 36 35 35 33 36 20 70 61 67 65 20   the 65536 page 
1ec0: 73 69 7a 65 2e 0a 4f 72 20 6f 6e 65 20 63 61 6e  size..Or one can
1ed0: 20 76 69 65 77 20 74 68 65 20 74 77 6f 2d 62 79   view the two-by
1ee0: 74 65 20 66 69 65 6c 64 20 61 73 20 61 20 6c 69  te field as a li
1ef0: 74 74 6c 65 20 65 6e 64 69 61 6e 20 6e 75 6d 62  ttle endian numb
1f00: 65 72 20 61 6e 64 20 73 61 79 0a 74 68 61 74 20  er and say.that 
1f10: 69 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  it represents th
1f20: 65 20 70 61 67 65 20 73 69 7a 65 20 64 69 76 69  e page size divi
1f30: 64 65 64 20 62 79 20 32 35 36 2e 20 20 54 68 65  ded by 256.  The
1f40: 73 65 20 74 77 6f 20 0a 69 6e 74 65 72 70 72 65  se two .interpre
1f50: 74 61 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 70  tations of the p
1f60: 61 67 65 2d 73 69 7a 65 20 66 69 65 6c 64 20 61  age-size field a
1f70: 72 65 20 65 71 75 69 76 61 6c 65 6e 74 2e 3c 2f  re equivalent.</
1f80: 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 33 20 46 69  p>..<h4>1.2.3 Fi
1f90: 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  le format versio
1fa0: 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 34 3e 0a 0a  n numbers</h4>..
1fb0: 3c 70 3e 54 68 65 20 66 69 6c 65 20 66 6f 72 6d  <p>The file form
1fc0: 61 74 20 77 72 69 74 65 20 76 65 72 73 69 6f 6e  at write version
1fd0: 20 61 6e 64 20 66 69 6c 65 20 66 6f 72 6d 61 74   and file format
1fe0: 20 72 65 61 64 20 76 65 72 73 69 6f 6e 20 61 74   read version at
1ff0: 20 6f 66 66 73 65 74 73 0a 31 38 20 61 6e 64 20   offsets.18 and 
2000: 31 39 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20  19 are intended 
2010: 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 65 6e 68  to allow for enh
2020: 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20 74 68 65  ancements of the
2030: 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 69 6e 20   file format.in 
2040: 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e 73 20  future versions 
2050: 6f 66 20 53 51 4c 69 74 65 2e 20 20 49 6e 20 63  of SQLite.  In c
2060: 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  urrent versions 
2070: 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f 74 68 20  of SQLite, both 
2080: 6f 66 0a 74 68 65 73 65 20 76 61 6c 75 65 73 20  of.these values 
2090: 61 72 65 20 31 20 66 6f 72 20 72 6f 6c 6c 62 61  are 1 for rollba
20a0: 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e 67 20 6d  ck journalling m
20b0: 6f 64 65 73 20 61 6e 64 20 32 20 66 6f 72 20 5b  odes and 2 for [
20c0: 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c 69 6e 67  WAL].journalling
20d0: 20 6d 6f 64 65 2e 20 20 49 66 20 61 20 76 65 72   mode.  If a ver
20e0: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 63  sion of SQLite c
20f0: 6f 64 65 64 20 74 6f 20 74 68 65 20 63 75 72 72  oded to the curr
2100: 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d 61 74 20  ent.file format 
2110: 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20 65 6e  specification en
2120: 63 6f 75 6e 74 65 72 73 20 61 20 64 61 74 61 62  counters a datab
2130: 61 73 65 20 66 69 6c 65 20 77 68 65 72 65 20 74  ase file where t
2140: 68 65 20 72 65 61 64 0a 76 65 72 73 69 6f 6e 20  he read.version 
2150: 69 73 20 31 20 6f 72 20 32 20 62 75 74 20 74 68  is 1 or 2 but th
2160: 65 20 77 72 69 74 65 20 76 65 72 73 69 6f 6e 20  e write version 
2170: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2180: 32 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  2, then the data
2190: 62 61 73 65 0a 66 69 6c 65 20 6d 75 73 74 20 62  base.file must b
21a0: 65 20 74 72 65 61 74 65 64 20 61 73 20 72 65 61  e treated as rea
21b0: 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61 20 64 61  d-only.  If a da
21c0: 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 74 68  tabase file with
21d0: 20 61 20 72 65 61 64 20 76 65 72 73 69 6f 6e 0a   a read version.
21e0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 32 20 69  greater than 2 i
21f0: 73 20 65 6e 63 6f 75 6e 74 65 72 2c 20 74 68 65  s encounter, the
2200: 6e 20 74 68 61 74 20 64 61 74 61 62 61 73 65 20  n that database 
2210: 63 61 6e 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  cannot be read o
2220: 72 20 77 72 69 74 74 65 6e 2e 3c 2f 70 3e 0a 0a  r written.</p>..
2230: 3c 68 34 3e 31 2e 32 2e 34 20 52 65 73 65 72 76  <h4>1.2.4 Reserv
2240: 65 64 20 62 79 74 65 73 20 70 65 72 20 70 61 67  ed bytes per pag
2250: 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 53 51 4c 69 74  e</h4>..<p>SQLit
2260: 65 20 68 61 73 20 74 68 65 20 61 62 69 6c 69 74  e has the abilit
2270: 79 20 74 6f 20 73 65 74 20 61 73 69 64 65 20 61  y to set aside a
2280: 20 73 6d 61 6c 6c 20 6e 75 6d 62 65 72 20 6f 66   small number of
2290: 20 65 78 74 72 61 20 62 79 74 65 73 20 61 74 0a   extra bytes at.
22a0: 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65 72 79  the end of every
22b0: 20 70 61 67 65 20 66 6f 72 20 75 73 65 20 62 79   page for use by
22c0: 20 65 78 74 65 6e 73 69 6f 6e 73 2e 20 20 54 68   extensions.  Th
22d0: 65 73 65 20 65 78 74 72 61 20 62 79 74 65 73 20  ese extra bytes 
22e0: 61 72 65 0a 75 73 65 64 2c 20 66 6f 72 20 65 78  are.used, for ex
22f0: 61 6d 70 6c 65 2c 20 62 79 20 74 68 65 20 53 51  ample, by the SQ
2300: 4c 69 74 65 20 45 6e 63 72 79 70 74 69 6f 6e 20  Lite Encryption 
2310: 45 78 74 65 6e 73 69 6f 6e 20 74 6f 20 73 74 6f  Extension to sto
2320: 72 65 20 61 20 6e 6f 6e 63 65 0a 61 6e 64 2f 6f  re a nonce.and/o
2330: 72 20 63 72 79 70 74 6f 67 72 61 70 68 69 63 20  r cryptographic 
2340: 63 68 65 63 6b 73 75 6d 20 61 73 73 6f 63 69 61  checksum associa
2350: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 70 61  ted with each pa
2360: 67 65 2e 20 20 5e 54 68 65 20 0a 22 72 65 73 65  ge.  ^The ."rese
2370: 72 76 65 64 20 73 70 61 63 65 22 20 73 69 7a 65  rved space" size
2380: 20 69 6e 20 74 68 65 20 31 2d 62 79 74 65 20 69   in the 1-byte i
2390: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
23a0: 20 32 30 20 69 73 20 74 68 65 20 6e 75 6d 62 65   20 is the numbe
23b0: 72 0a 6f 66 20 62 79 74 65 73 20 6f 66 20 73 70  r.of bytes of sp
23c0: 61 63 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ace at the end o
23d0: 66 20 65 61 63 68 20 70 61 67 65 20 74 6f 20 72  f each page to r
23e0: 65 73 65 72 76 65 20 66 6f 72 20 65 78 74 65 6e  eserve for exten
23f0: 73 69 6f 6e 73 2e 0a 54 68 69 73 20 76 61 6c 75  sions..This valu
2400: 65 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20  e is usually 0. 
2410: 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e 20 62   The value can b
2420: 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  e odd.</p>..<tcl
2430: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 73 61  >hd_fragment usa
2440: 62 6c 65 5f 73 69 7a 65 20 7b 75 73 61 62 6c 65  ble_size {usable
2450: 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e   size}</tcl>.<p>
2460: 54 68 65 20 22 75 73 61 62 6c 65 20 73 69 7a 65  The "usable size
2470: 22 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20  " of a database 
2480: 70 61 67 65 20 69 73 20 74 68 65 20 70 61 67 65  page is the page
2490: 20 73 69 7a 65 20 73 70 65 63 69 66 79 20 62 79   size specify by
24a0: 20 74 68 65 0a 32 2d 62 79 74 65 20 69 6e 74 65   the.2-byte inte
24b0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 31 36  ger at offset 16
24c0: 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 6c   in the header l
24d0: 65 73 73 20 74 68 65 20 22 72 65 73 65 72 76 65  ess the "reserve
24e0: 64 22 20 73 70 61 63 65 20 73 69 7a 65 0a 72 65  d" space size.re
24f0: 63 6f 72 64 65 64 20 69 6e 20 74 68 65 20 31 2d  corded in the 1-
2500: 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20  byte integer at 
2510: 6f 66 66 73 65 74 20 32 30 20 69 6e 20 74 68 65  offset 20 in the
2520: 20 68 65 61 64 65 72 2e 20 20 54 68 65 20 75 73   header.  The us
2530: 61 62 6c 65 0a 73 69 7a 65 20 6f 66 20 61 20 70  able.size of a p
2540: 61 67 65 20 6d 69 67 68 74 20 62 65 20 61 6e 20  age might be an 
2550: 6f 64 64 20 6e 75 6d 62 65 72 2e 20 20 5e 28 48  odd number.  ^(H
2560: 6f 77 65 76 65 72 2c 20 74 68 65 20 75 73 61 62  owever, the usab
2570: 6c 65 20 73 69 7a 65 20 69 73 20 6e 6f 74 0a 61  le size is not.a
2580: 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73  llowed to be les
2590: 73 20 74 68 61 6e 20 34 38 30 2e 20 20 49 6e 20  s than 480.  In 
25a0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20  other words, if 
25b0: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 69 73  the page size is
25c0: 20 35 31 32 2c 0a 74 68 65 6e 20 74 68 65 20 72   512,.then the r
25d0: 65 73 65 72 76 65 64 20 73 70 61 63 65 20 73 69  eserved space si
25e0: 7a 65 20 63 61 6e 6e 6f 74 20 65 78 63 65 65 64  ze cannot exceed
25f0: 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 34 3e   32.)^</p>..<h4>
2600: 31 2e 32 2e 35 20 50 61 79 6c 6f 61 64 20 66 72  1.2.5 Payload fr
2610: 61 63 74 69 6f 6e 73 3c 2f 68 34 3e 0a 0a 3c 70  actions</h4>..<p
2620: 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d 20 61 6e  >^The maximum an
2630: 64 20 6d 69 6e 69 6d 75 6d 20 65 6d 62 65 64 64  d minimum embedd
2640: 65 64 20 70 61 79 6c 6f 61 64 20 66 72 61 63 74  ed payload fract
2650: 69 6f 6e 73 20 61 6e 64 20 74 68 65 20 6c 65 61  ions and the lea
2660: 66 0a 70 61 79 6c 6f 61 64 20 66 72 61 63 74 69  f.payload fracti
2670: 6f 6e 20 76 61 6c 75 65 73 20 6d 75 73 74 20 62  on values must b
2680: 65 20 36 34 2c 20 33 32 2c 20 61 6e 64 20 33 32  e 64, 32, and 32
2690: 2e 20 20 54 68 65 73 65 20 76 61 6c 75 65 73 20  .  These values 
26a0: 77 65 72 65 0a 6f 72 69 67 69 6e 61 6c 6c 79 20  were.originally 
26b0: 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 73 20 74  intended to as t
26c0: 75 6e 61 62 6c 65 20 70 61 72 61 6d 65 74 65 72  unable parameter
26d0: 73 20 74 68 61 74 20 63 6f 75 6c 64 20 62 65 20  s that could be 
26e0: 75 73 65 64 20 74 6f 0a 6d 6f 64 69 66 79 20 74  used to.modify t
26f0: 68 65 20 73 74 6f 72 61 67 65 20 66 6f 72 6d 61  he storage forma
2700: 74 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20  t of the b-tree 
2710: 61 6c 67 6f 72 69 74 68 6d 2e 20 20 48 6f 77 65  algorithm.  Howe
2720: 76 65 72 2c 20 74 68 61 74 0a 66 75 6e 63 74 69  ver, that.functi
2730: 6f 6e 61 6c 69 74 79 20 69 73 20 6e 6f 74 20 73  onality is not s
2740: 75 70 70 6f 72 74 65 64 20 61 6e 64 20 74 68 65  upported and the
2750: 72 65 20 61 72 65 20 6e 6f 20 63 75 72 72 65 6e  re are no curren
2760: 74 20 70 6c 61 6e 73 20 74 6f 20 61 64 64 0a 73  t plans to add.s
2770: 75 70 70 6f 72 74 20 69 6e 20 74 68 65 20 66 75  upport in the fu
2780: 74 75 72 65 2e 20 20 48 65 6e 63 65 2c 20 74 68  ture.  Hence, th
2790: 65 73 65 20 74 68 72 65 65 20 62 79 74 65 73 20  ese three bytes 
27a0: 61 72 65 20 66 69 78 65 64 20 61 74 20 74 68 65  are fixed at the
27b0: 0a 76 61 6c 75 65 73 20 73 70 65 63 69 66 69 65  .values specifie
27c0: 64 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  d.</p>..<h4>1.2.
27d0: 36 20 46 69 6c 65 20 63 68 61 6e 67 65 20 63 6f  6 File change co
27e0: 75 6e 74 65 72 3c 2f 68 34 3e 0a 0a 3c 74 63 6c  unter</h4>..<tcl
27f0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 63 68 6e  >hd_fragment chn
2800: 67 63 74 72 20 7b 63 68 61 6e 67 65 20 63 6f 75  gctr {change cou
2810: 6e 74 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  nter}</tcl>.<p>^
2820: 54 68 65 20 66 69 6c 65 20 63 68 61 6e 67 65 20  The file change 
2830: 63 6f 75 6e 74 65 72 20 69 73 20 61 20 34 2d 62  counter is a 4-b
2840: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
2850: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 0a  nteger which is.
2860: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
2870: 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
2880: 65 20 66 69 6c 65 20 69 73 20 75 6e 6c 6f 63 6b  e file is unlock
2890: 65 64 20 61 66 74 65 72 20 68 61 76 69 6e 67 0a  ed after having.
28a0: 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2e 0a 57  been modified..W
28b0: 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  hen two or more 
28c0: 70 72 6f 63 65 73 73 65 73 20 61 72 65 20 72 65  processes are re
28d0: 61 64 69 6e 67 20 74 68 65 20 73 61 6d 65 20 64  ading the same d
28e0: 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 65 61  atabase file, ea
28f0: 63 68 20 0a 70 72 6f 63 65 73 73 20 63 61 6e 20  ch .process can 
2900: 64 65 74 65 63 74 20 64 61 74 61 62 61 73 65 20  detect database 
2910: 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f 74 68  changes from oth
2920: 65 72 20 70 72 6f 63 65 73 73 65 73 20 62 79 20  er processes by 
2930: 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68 65 20  monitoring .the 
2940: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 2e 0a  change counter..
2950: 41 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 20 6e  A process will n
2960: 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74 6f 20  ormally want to 
2970: 66 6c 75 73 68 20 69 74 73 20 64 61 74 61 62 61  flush its databa
2980: 73 65 20 70 61 67 65 20 63 61 63 68 65 20 77 68  se page cache wh
2990: 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f 63 65  en.another proce
29a0: 73 73 20 6d 6f 64 69 66 69 65 64 20 74 68 65 20  ss modified the 
29b0: 64 61 74 61 62 61 73 65 2c 20 73 69 6e 63 65 20  database, since 
29c0: 74 68 65 20 63 61 63 68 65 20 68 61 73 20 62 65  the cache has be
29d0: 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68 65 20  come stale..The 
29e0: 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e  file change coun
29f0: 74 65 72 20 66 61 63 69 6c 69 74 61 74 65 73 20  ter facilitates 
2a00: 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  this.</p>..<p>In
2a10: 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61 6e 67   WAL mode, chang
2a20: 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  es to the databa
2a30: 73 65 20 61 72 65 20 64 65 74 65 63 74 65 64 20  se are detected 
2a40: 75 73 69 6e 67 20 74 68 65 20 77 61 6c 2d 69 6e  using the wal-in
2a50: 64 65 78 0a 61 6e 64 20 73 6f 20 74 68 65 20 63  dex.and so the c
2a60: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2a70: 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20 48 65   not needed.  He
2a80: 6e 63 65 2c 20 74 68 65 20 63 68 61 6e 67 65 20  nce, the change 
2a90: 63 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a 6e 6f  counter might.no
2aa0: 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64  t be incremented
2ab0: 20 6f 6e 20 65 61 63 68 20 74 72 61 6e 73 61 63   on each transac
2ac0: 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f 64 65  tion in WAL mode
2ad0: 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 37  .</p>..<h4>1.2.7
2ae0: 20 49 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   In-header datab
2af0: 61 73 65 20 73 69 7a 65 3c 2f 68 34 3e 0a 0a 3c  ase size</h4>..<
2b00: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
2b10: 66 69 6c 65 73 69 7a 65 20 7b 69 6e 2d 68 65 61  filesize {in-hea
2b20: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2b30: 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  e}</tcl>.<p>^The
2b40: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
2b50: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
2b60: 66 73 65 74 20 32 38 20 69 6e 74 6f 20 74 68 65  fset 28 into the
2b70: 20 68 65 61 64 65 72 20 0a 73 74 6f 72 65 73 20   header .stores 
2b80: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
2b90: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e  database file in
2ba0: 20 70 61 67 65 73 2e 20 20 5e 49 66 20 74 68 69   pages.  ^If thi
2bb0: 73 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61  s in-header.data
2bc0: 73 69 7a 65 20 73 69 7a 65 20 69 73 20 6e 6f 74  size size is not
2bd0: 20 76 61 6c 69 64 20 28 73 65 65 20 74 68 65 20   valid (see the 
2be0: 6e 65 78 74 20 70 61 72 61 67 72 61 70 68 29 2c  next paragraph),
2bf0: 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
2c00: 73 65 20 0a 73 69 7a 65 20 69 73 20 63 6f 6d 70  se .size is comp
2c10: 75 74 65 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 0a  uted by looking.
2c20: 61 74 20 74 68 65 20 61 63 74 75 61 6c 20 73 69  at the actual si
2c30: 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
2c40: 73 65 20 66 69 6c 65 2e 20 4f 6c 64 65 72 20 76  se file. Older v
2c50: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
2c60: 65 0a 69 67 6e 6f 72 65 64 20 74 68 65 20 69 6e  e.ignored the in
2c70: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
2c80: 20 73 69 7a 65 20 61 6e 64 20 75 73 65 64 20 74   size and used t
2c90: 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20 73  he actual file s
2ca0: 69 7a 65 0a 65 78 63 6c 75 73 69 76 65 6c 79 2e  ize.exclusively.
2cb0: 20 20 5e 4e 65 77 65 72 20 76 65 72 73 69 6f 6e    ^Newer version
2cc0: 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 20  s of SQLite use 
2cd0: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  the in-header da
2ce0: 74 61 62 61 73 65 0a 73 69 7a 65 20 69 66 20 69  tabase.size if i
2cf0: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 62  t is available b
2d00: 75 74 20 66 61 6c 6c 20 62 61 63 6b 20 74 6f 20  ut fall back to 
2d10: 74 68 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20  the actual file 
2d20: 73 69 7a 65 20 69 66 0a 74 68 65 20 69 6e 2d 68  size if.the in-h
2d30: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
2d40: 69 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c 69 64  ize is not valid
2d50: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 69  .</p>..<p>^The i
2d60: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2d70: 65 20 73 69 7a 65 20 69 73 20 6f 6e 6c 79 20 63  e size is only c
2d80: 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
2d90: 76 61 6c 69 64 20 69 66 0a 69 74 20 69 73 20 6e  valid if.it is n
2da0: 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 69 66 20 74  on-zero and if t
2db0: 68 65 20 34 2d 62 79 74 65 20 5b 63 68 61 6e 67  he 4-byte [chang
2dc0: 65 20 63 6f 75 6e 74 65 72 5d 20 61 74 20 6f 66  e counter] at of
2dd0: 66 73 65 74 20 32 34 0a 65 78 61 63 74 6c 79 20  fset 24.exactly 
2de0: 6d 61 74 63 68 65 73 20 74 68 65 20 34 2d 62 79  matches the 4-by
2df0: 74 65 20 5b 76 65 72 73 69 6f 6e 2d 76 61 6c 69  te [version-vali
2e00: 64 2d 66 6f 72 20 6e 75 6d 62 65 72 5d 20 61 74  d-for number] at
2e10: 20 6f 66 66 73 65 74 20 39 32 2e 0a 5e 28 54 68   offset 92..^(Th
2e20: 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61  e in-header data
2e30: 62 61 73 65 20 73 69 7a 65 20 69 73 20 61 6c 77  base size is alw
2e40: 61 79 73 20 76 61 6c 69 64 20 0a 77 68 65 6e 20  ays valid .when 
2e50: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
2e60: 6f 6e 6c 79 20 6d 6f 64 69 66 69 65 64 20 75 73  only modified us
2e70: 69 6e 67 20 72 65 63 65 6e 74 20 76 65 72 73 69  ing recent versi
2e80: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 28 76  ons of SQLite.(v
2e90: 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30 20 61 6e  ersions 3.7.0 an
2ea0: 64 20 6c 61 74 65 72 29 2e 29 5e 0a 49 66 20 61  d later).)^.If a
2eb0: 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e 20   legacy version 
2ec0: 6f 66 20 53 51 4c 69 74 65 20 77 72 69 74 65 73  of SQLite writes
2ed0: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
2ee0: 2c 20 69 74 20 77 69 6c 6c 20 6e 6f 74 0a 6b 6e  , it will not.kn
2ef0: 6f 77 20 74 6f 20 75 70 64 61 74 65 20 74 68 65  ow to update the
2f00: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2f10: 61 73 65 20 73 69 7a 65 20 61 6e 64 20 73 6f 20  ase size and so 
2f20: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 0a 64 61  the in-header.da
2f30: 74 61 62 61 73 65 20 73 69 7a 65 20 63 6f 75 6c  tabase size coul
2f40: 64 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20  d be incorrect. 
2f50: 20 42 75 74 20 6c 65 67 61 63 79 20 76 65 72 73   But legacy vers
2f60: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 77  ions of SQLite.w
2f70: 69 6c 6c 20 61 6c 73 6f 20 6c 65 61 76 65 20 74  ill also leave t
2f80: 68 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  he version-valid
2f90: 2d 66 6f 72 20 6e 75 6d 62 65 72 20 61 74 20 6f  -for number at o
2fa0: 66 66 73 65 74 20 39 32 20 75 6e 63 68 61 6e 67  ffset 92 unchang
2fb0: 65 64 0a 73 6f 20 69 74 20 77 69 6c 6c 20 6e 6f  ed.so it will no
2fc0: 74 20 6d 61 74 63 68 20 74 68 65 20 63 68 61 6e  t match the chan
2fd0: 67 65 2d 63 6f 75 6e 74 65 72 2e 20 20 48 65 6e  ge-counter.  Hen
2fe0: 63 65 2c 20 69 6e 76 61 6c 69 64 20 69 6e 2d 68  ce, invalid in-h
2ff0: 65 61 64 65 72 0a 64 61 74 61 62 61 73 65 20 73  eader.database s
3000: 69 7a 65 73 20 63 61 6e 20 62 65 20 64 65 74 65  izes can be dete
3010: 63 74 65 64 20 28 61 6e 64 20 69 67 6e 6f 72 65  cted (and ignore
3020: 64 29 20 62 79 20 6f 62 73 65 72 76 69 6e 67 20  d) by observing 
3030: 77 68 65 6e 0a 74 68 65 20 63 68 61 6e 67 65 2d  when.the change-
3040: 63 6f 75 6e 74 65 72 20 64 6f 65 73 20 6e 6f 74  counter does not
3050: 20 6d 61 74 63 68 20 74 68 65 20 76 65 72 73 69   match the versi
3060: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
3070: 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e  ber.</p>..<h4>1.
3080: 32 2e 38 20 46 72 65 65 20 70 61 67 65 20 6c 69  2.8 Free page li
3090: 73 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 55 6e 75 73  st</h4>..<p>Unus
30a0: 65 64 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ed pages in the 
30b0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 72  database file ar
30c0: 65 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 66 72  e stored on a fr
30d0: 65 65 6c 69 73 74 2e 20 20 5e 54 68 65 0a 34 2d  eelist.  ^The.4-
30e0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
30f0: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3100: 74 20 33 32 20 73 74 6f 72 65 73 20 74 68 65 20  t 32 stores the 
3110: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 0a 74  page number of.t
3120: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66  he first page of
3130: 20 74 68 65 20 66 72 65 65 6c 69 73 74 2c 20 6f   the freelist, o
3140: 72 20 7a 65 72 6f 20 69 66 20 74 68 65 20 66 72  r zero if the fr
3150: 65 65 6c 69 73 74 20 69 73 20 65 6d 70 74 79 2e  eelist is empty.
3160: 0a 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  .^The 4-byte big
3170: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3180: 61 74 20 6f 66 66 73 65 74 20 33 36 20 73 74 6f  at offset 36 sto
3190: 72 65 73 20 73 74 6f 72 65 73 20 74 68 65 20 74  res stores the t
31a0: 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20 6f 66 20  otal .number of 
31b0: 70 61 67 65 73 20 6f 6e 20 74 68 65 20 66 72 65  pages on the fre
31c0: 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e  elist.</p>..<h4>
31d0: 31 2e 32 2e 39 20 53 63 68 65 6d 61 20 63 6f 6f  1.2.9 Schema coo
31e0: 6b 69 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68  kie</h4>..<p>^Th
31f0: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
3200: 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  is a 4-byte big-
3210: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
3220: 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68 61 74  t offset 40.that
3230: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
3240: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
3250: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
3260: 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70 61 72  nges.  A .prepar
3270: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
3280: 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74  compiled against
3290: 20 61 20 73 70 65 63 69 66 69 63 20 76 65 72 73   a specific vers
32a0: 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74 61 62  ion of the.datab
32b0: 61 73 65 20 73 63 68 65 6d 61 2e 20 20 5e 57 68  ase schema.  ^Wh
32c0: 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
32d0: 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
32e0: 65 73 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  es, the statemen
32f0: 74 0a 6d 75 73 74 20 62 65 20 72 65 70 72 65 70  t.must be reprep
3300: 61 72 65 64 2e 20 20 5e 57 68 65 6e 65 76 65 72  ared.  ^Whenever
3310: 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61 74   a prepared stat
3320: 65 6d 65 6e 74 20 72 75 6e 73 2c 20 69 74 20 66  ement runs, it f
3330: 69 72 73 74 20 63 68 65 63 6b 73 0a 74 68 65 20  irst checks.the 
3340: 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 74 6f  schema cookie to
3350: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 76   make sure the v
3360: 61 6c 75 65 20 69 73 20 74 68 65 20 73 61 6d 65  alue is the same
3370: 20 61 73 20 77 68 65 6e 20 74 68 65 20 73 74 61   as when the sta
3380: 74 65 6d 65 6e 74 0a 77 61 73 20 70 72 65 70 61  tement.was prepa
3390: 72 65 64 20 61 6e 64 20 69 66 20 74 68 65 20 73  red and if the s
33a0: 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 68 61 73  chema cookie has
33b0: 20 63 68 61 6e 67 65 64 2c 20 74 68 65 20 73 74   changed, the st
33c0: 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 0a 69  atement aborts.i
33d0: 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72 63 65  n order to force
33e0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
33f0: 6f 20 62 65 20 72 65 70 72 65 70 61 72 65 64 2e  o be reprepared.
3400: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
3410: 61 67 6d 65 6e 74 20 7b 73 63 68 65 6d 61 66 6f  agment {schemafo
3420: 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61 20 66 6f  rmat} {schema fo
3430: 72 6d 61 74 20 6e 75 6d 62 65 72 7d 3c 2f 74 63  rmat number}</tc
3440: 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31 30 20 53 63  l>.<h4>1.2.10 Sc
3450: 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62  hema format numb
3460: 65 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20  er</h4>..<p>The 
3470: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
3480: 6d 62 65 72 20 69 73 20 61 20 34 2d 62 79 74 65  mber is a 4-byte
3490: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
34a0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 34 34  ger at offset 44
34b0: 2e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  ..The schema for
34c0: 6d 61 74 20 6e 75 6d 62 65 72 20 69 73 20 73 69  mat number is si
34d0: 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 66 69 6c  milar to the fil
34e0: 65 20 66 6f 72 6d 61 74 20 72 65 61 64 20 61 6e  e format read an
34f0: 64 20 77 72 69 74 65 0a 76 65 72 73 69 6f 6e 20  d write.version 
3500: 6e 75 6d 62 65 72 73 20 61 74 20 6f 66 66 73 65  numbers at offse
3510: 74 73 20 31 38 20 61 6e 64 20 31 39 20 65 78 63  ts 18 and 19 exc
3520: 65 70 74 20 74 68 61 74 20 74 68 65 20 73 63 68  ept that the sch
3530: 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65  ema format numbe
3540: 72 0a 72 65 66 65 72 73 20 74 6f 20 74 68 65 20  r.refers to the 
3550: 68 69 67 68 2d 6c 65 76 65 6c 20 53 51 4c 20 66  high-level SQL f
3560: 6f 72 6d 61 74 74 69 6e 67 20 72 61 74 68 65 72  ormatting rather
3570: 20 74 68 61 6e 20 74 68 65 20 6c 6f 77 2d 6c 65   than the low-le
3580: 76 65 6c 20 62 2d 74 72 65 65 0a 66 6f 72 6d 61  vel b-tree.forma
3590: 74 74 69 6e 67 2e 20 20 46 6f 75 72 20 73 63 68  tting.  Four sch
35a0: 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65  ema format numbe
35b0: 72 73 20 61 72 65 20 63 75 72 72 65 6e 74 6c 79  rs are currently
35c0: 20 64 65 66 69 6e 65 64 3a 3c 2f 70 3e 0a 0a 3c   defined:</p>..<
35d0: 6f 6c 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 31 3e  ol>.<li value=1>
35e0: 46 6f 72 6d 61 74 20 31 20 69 73 20 75 6e 64 65  Format 1 is unde
35f0: 72 73 74 6f 6f 64 20 62 79 20 61 6c 6c 20 76 65  rstood by all ve
3600: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
3610: 20 62 61 63 6b 20 74 6f 0a 76 65 72 73 69 6f 6e   back to.version
3620: 20 33 2e 30 2e 30 2e 3c 2f 6c 69 3e 0a 3c 6c 69   3.0.0.</li>.<li
3630: 20 76 61 6c 75 65 3d 32 3e 46 6f 72 6d 61 74 20   value=2>Format 
3640: 32 20 61 64 64 73 20 74 68 65 20 61 62 69 6c 69  2 adds the abili
3650: 74 79 20 6f 66 20 72 6f 77 73 20 77 69 74 68 69  ty of rows withi
3660: 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  n the same table
3670: 0a 74 6f 20 68 61 76 65 20 61 20 76 61 72 79 69  .to have a varyi
3680: 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  ng number of col
3690: 75 6d 6e 73 2c 20 69 6e 20 6f 72 64 65 72 20 74  umns, in order t
36a0: 6f 20 73 75 70 70 6f 72 74 20 74 68 65 0a 5b 41  o support the.[A
36b0: 4c 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54  LTER TABLE | ALT
36c0: 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44  ER TABLE ... ADD
36d0: 20 43 4f 4c 55 4d 4e 5d 20 66 75 6e 63 74 69 6f   COLUMN] functio
36e0: 6e 61 6c 69 74 79 2e 20 20 53 75 70 70 6f 72 74  nality.  Support
36f0: 20 66 6f 72 0a 72 65 61 64 69 6e 67 20 61 6e 64   for.reading and
3700: 20 77 72 69 74 69 6e 67 20 66 6f 72 6d 61 74 20   writing format 
3710: 32 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53  2 was added in S
3720: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
3730: 31 2e 33 20 0a 6f 6e 20 32 30 30 35 2d 30 32 2d  1.3 .on 2005-02-
3740: 31 39 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c  19.</li>.<li val
3750: 75 65 3d 33 3e 46 6f 72 6d 61 74 20 33 20 61 64  ue=3>Format 3 ad
3760: 64 73 20 74 68 65 20 61 62 69 6c 69 74 79 20 6f  ds the ability o
3770: 66 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20  f extra columns 
3780: 61 64 64 65 64 20 62 79 0a 5b 41 4c 54 45 52 20  added by.[ALTER 
3790: 54 41 42 4c 45 20 7c 20 41 4c 54 45 52 20 54 41  TABLE | ALTER TA
37a0: 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43 4f 4c 55  BLE ... ADD COLU
37b0: 4d 4e 5d 20 74 6f 20 68 61 76 65 20 6e 6f 6e 2d  MN] to have non-
37c0: 4e 55 4c 4c 20 64 65 66 61 75 6c 74 0a 76 61 6c  NULL default.val
37d0: 75 65 73 2e 20 20 54 68 69 73 20 63 61 70 61 62  ues.  This capab
37e0: 69 6c 69 74 79 20 77 61 73 20 61 64 64 65 64 20  ility was added 
37f0: 69 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  in SQLite versio
3800: 6e 20 33 2e 31 2e 34 20 0a 6f 6e 20 32 30 30 35  n 3.1.4 .on 2005
3810: 2d 30 33 2d 31 31 2e 3c 2f 6c 69 3e 0a 3c 6c 69  -03-11.</li>.<li
3820: 20 76 61 6c 75 65 3d 34 3e 5e 46 6f 72 6d 61 74   value=4>^Format
3830: 20 34 20 63 61 75 73 65 73 20 53 51 4c 69 74 65   4 causes SQLite
3840: 20 74 6f 20 72 65 73 70 65 63 74 20 74 68 65 0a   to respect the.
3850: 5b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64 69  [descending indi
3860: 63 65 73 20 7c 20 44 45 53 43 20 6b 65 79 77 6f  ces | DESC keywo
3870: 72 64 5d 20 6f 6e 0a 69 6e 64 65 78 20 64 65 63  rd] on.index dec
3880: 6c 61 72 61 74 69 6f 6e 73 2e 20 20 28 5e 54 68  larations.  (^Th
3890: 65 20 44 45 53 43 20 6b 65 79 77 6f 72 64 20 69  e DESC keyword i
38a0: 73 20 69 67 6e 6f 72 65 64 20 69 6e 20 69 6e 64  s ignored in ind
38b0: 69 63 65 73 20 66 6f 72 20 0a 66 6f 72 6d 61 74  ices for .format
38c0: 73 20 31 2c 20 32 2c 20 61 6e 64 20 33 2e 29 0a  s 1, 2, and 3.).
38d0: 5e 46 6f 72 6d 61 74 20 34 20 61 6c 73 6f 20 61  ^Format 4 also a
38e0: 64 64 73 20 74 77 6f 20 6e 65 77 20 62 6f 6f 6c  dds two new bool
38f0: 65 61 6e 20 72 65 63 6f 72 64 20 74 79 70 65 20  ean record type 
3900: 76 61 6c 75 65 73 20 28 5b 73 65 72 69 61 6c 20  values ([serial 
3910: 74 79 70 65 73 5d 0a 38 20 61 6e 64 20 39 2e 29  types].8 and 9.)
3920: 20 20 53 75 70 70 6f 72 74 20 66 6f 72 20 66 6f    Support for fo
3930: 72 6d 61 74 20 34 20 77 61 73 20 61 64 64 65 64  rmat 4 was added
3940: 20 69 6e 20 53 51 4c 69 74 65 20 33 2e 33 2e 30   in SQLite 3.3.0
3950: 20 6f 6e 0a 32 30 30 36 2d 30 31 2d 31 30 2e 3c   on.2006-01-10.<
3960: 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e  /li>.</ol>..<p>^
3970: 4e 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c  New database fil
3980: 65 73 20 63 72 65 61 74 65 64 20 62 79 20 53 51  es created by SQ
3990: 4c 69 74 65 20 75 73 65 20 66 6f 72 6d 61 74 20  Lite use format 
39a0: 34 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 5e 54  4 by default..^T
39b0: 68 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f  he [legacy_file_
39c0: 66 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20 63  format pragma] c
39d0: 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 61  an be used to ca
39e0: 75 73 65 20 53 51 4c 69 74 65 0a 74 6f 20 63 72  use SQLite.to cr
39f0: 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73  eate new databas
3a00: 65 20 66 69 6c 65 73 20 75 73 69 6e 67 20 66 6f  e files using fo
3a10: 72 6d 61 74 20 31 2e 0a 54 68 65 20 66 6f 72 6d  rmat 1..The form
3a20: 61 74 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  at version numbe
3a30: 72 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74 6f  r can be made to
3a40: 20 64 65 66 61 75 6c 74 20 74 6f 20 31 20 69 6e   default to 1 in
3a50: 73 74 65 61 64 20 6f 66 20 34 20 62 79 0a 73 65  stead of 4 by.se
3a60: 74 74 69 6e 67 20 5b 53 51 4c 49 54 45 5f 44 45  tting [SQLITE_DE
3a70: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
3a80: 54 5d 3d 31 20 61 74 20 63 6f 6d 70 69 6c 65 2d  T]=1 at compile-
3a90: 74 69 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 34 3e  time..</p>..<h4>
3aa0: 31 2e 32 2e 31 31 20 53 75 67 67 65 73 74 65 64  1.2.11 Suggested
3ab0: 20 63 61 63 68 65 20 73 69 7a 65 3c 2f 68 34 3e   cache size</h4>
3ac0: 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79 74 65 20  ..<p>The 4-byte 
3ad0: 62 69 67 2d 65 6e 64 69 61 6e 20 73 69 67 6e 65  big-endian signe
3ae0: 64 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  d integer at off
3af0: 73 65 74 20 34 38 20 69 73 20 74 68 65 20 73 75  set 48 is the su
3b00: 67 67 65 73 74 65 64 0a 63 61 63 68 65 20 73 69  ggested.cache si
3b10: 7a 65 20 69 6e 20 70 61 67 65 73 20 66 6f 72 20  ze in pages for 
3b20: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3b30: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  e.  The value is
3b40: 20 61 20 73 75 67 67 65 73 74 69 6f 6e 0a 6f 6e   a suggestion.on
3b50: 6c 79 20 61 6e 64 20 53 51 4c 69 74 65 20 69 73  ly and SQLite is
3b60: 20 75 6e 64 65 72 20 6e 6f 20 6f 62 6c 69 67 61   under no obliga
3b70: 74 69 6f 6e 20 74 6f 20 68 6f 6e 6f 72 20 69 74  tion to honor it
3b80: 2e 20 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20  .  The absolute 
3b90: 76 61 6c 75 65 0a 6f 66 20 74 68 65 20 69 6e 74  value.of the int
3ba0: 65 67 65 72 20 69 73 20 75 73 65 64 20 61 73 20  eger is used as 
3bb0: 74 68 65 20 73 75 67 67 65 73 74 65 64 20 73 69  the suggested si
3bc0: 7a 65 2e 20 20 54 68 65 20 73 75 67 67 65 73 74  ze.  The suggest
3bd0: 65 64 20 63 61 63 68 65 20 73 69 7a 65 0a 63 61  ed cache size.ca
3be0: 6e 20 62 65 20 73 65 74 20 75 73 69 6e 67 20 74  n be set using t
3bf0: 68 65 20 5b 64 65 66 61 75 6c 74 5f 63 61 63 68  he [default_cach
3c00: 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 5d 2e 3c  e_size pragma].<
3c10: 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 32 20  /p>..<h4>1.2.12 
3c20: 49 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  Incremental vacu
3c30: 75 6d 20 73 65 74 74 69 6e 67 73 3c 2f 68 34 3e  um settings</h4>
3c40: 0a 0a 3c 70 3e 54 68 65 20 74 77 6f 20 34 2d 62  ..<p>The two 4-b
3c50: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
3c60: 6e 74 65 67 65 72 73 20 61 74 20 6f 66 66 73 65  ntegers at offse
3c70: 74 73 20 35 32 20 61 6e 64 20 36 34 20 61 72 65  ts 52 and 64 are
3c80: 20 75 73 65 64 0a 74 6f 20 6d 61 6e 61 67 65 20   used.to manage 
3c90: 74 68 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d  the [auto_vacuum
3ca0: 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e 74  ] and [increment
3cb0: 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 73  al_vacuum] modes
3cc0: 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e 74 65 67  .  ^If.the integ
3cd0: 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 32 20  er at offset 52 
3ce0: 69 73 20 7a 65 72 6f 20 74 68 65 6e 20 70 6f 69  is zero then poi
3cf0: 6e 74 65 72 2d 6d 61 70 20 28 70 74 72 6d 61 70  nter-map (ptrmap
3d00: 29 20 70 61 67 65 73 20 61 72 65 0a 6f 6d 69 74  ) pages are.omit
3d10: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ted from the dat
3d20: 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 6e  abase file and n
3d30: 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61 63 75  either auto_vacu
3d40: 75 6d 20 6e 6f 72 0a 69 6e 63 72 65 6d 65 6e 74  um nor.increment
3d50: 61 6c 5f 76 61 63 75 75 6d 20 61 72 65 20 73 75  al_vacuum are su
3d60: 70 70 6f 72 74 65 64 2e 20 20 5e 49 66 20 74 68  pported.  ^If th
3d70: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
3d80: 73 65 74 20 35 32 20 69 73 0a 6e 6f 6e 2d 7a 65  set 52 is.non-ze
3d90: 72 6f 20 74 68 65 6e 20 69 74 20 69 73 20 74 68  ro then it is th
3da0: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  e page number of
3db0: 20 74 68 65 20 6c 61 72 67 65 73 74 20 72 6f 6f   the largest roo
3dc0: 74 20 70 61 67 65 20 69 6e 20 74 68 65 0a 64 61  t page in the.da
3dd0: 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65  tabase file, the
3de0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
3df0: 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 70 74 72 6d  ill contain ptrm
3e00: 61 70 20 70 61 67 65 73 2c 20 61 6e 64 20 74 68  ap pages, and th
3e10: 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62 65 20 65  e.mode must be e
3e20: 69 74 68 65 72 20 61 75 74 6f 5f 76 61 63 75 75  ither auto_vacuu
3e30: 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c  m or incremental
3e40: 5f 76 61 63 75 75 6d 2e 20 20 5e 49 6e 20 74 68  _vacuum.  ^In th
3e50: 69 73 20 6c 61 74 74 65 72 0a 63 61 73 65 2c 20  is latter.case, 
3e60: 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  the integer at o
3e70: 66 66 73 65 74 20 36 34 20 69 73 20 74 72 75 65  ffset 64 is true
3e80: 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c   for incremental
3e90: 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66 61 6c 73  _vacuum and.fals
3ea0: 65 20 66 6f 72 20 61 75 74 6f 5f 76 61 63 75 75  e for auto_vacuu
3eb0: 6d 2e 20 20 5e 49 66 20 74 68 65 20 69 6e 74 65  m.  ^If the inte
3ec0: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35 32  ger at offset 52
3ed0: 20 69 73 20 7a 65 72 6f 20 74 68 65 6e 0a 74 68   is zero then.th
3ee0: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
3ef0: 73 65 74 20 36 34 20 6d 75 73 74 20 61 6c 73 6f  set 64 must also
3f00: 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c   be zero.</p>..<
3f10: 68 34 3e 31 2e 32 2e 31 33 20 54 65 78 74 20 65  h4>1.2.13 Text e
3f20: 6e 63 6f 64 69 6e 67 3c 2f 68 34 3e 0a 0a 3c 70  ncoding</h4>..<p
3f30: 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  >^The 4-byte big
3f40: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3f50: 61 74 20 6f 66 66 73 65 74 20 35 36 20 64 65 74  at offset 56 det
3f60: 65 72 6d 69 6e 65 73 20 74 68 65 20 65 6e 63 6f  ermines the enco
3f70: 64 69 6e 67 0a 75 73 65 64 20 66 6f 72 20 61 6c  ding.used for al
3f80: 6c 20 74 65 78 74 20 73 74 72 69 6e 67 73 20 73  l text strings s
3f90: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
3fa0: 61 62 61 73 65 2e 20 20 5e 41 20 76 61 6c 75 65  abase.  ^A value
3fb0: 20 6f 66 20 31 20 6d 65 61 6e 73 0a 55 54 46 2d   of 1 means.UTF-
3fc0: 38 2e 20 20 5e 41 20 76 61 6c 75 65 20 6f 66 20  8.  ^A value of 
3fd0: 32 20 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c 65  2 means UTF-16le
3fe0: 2e 20 20 5e 41 20 76 61 6c 75 65 20 6f 66 20 33  .  ^A value of 3
3ff0: 20 6d 65 61 6e 73 20 55 54 46 2d 31 36 62 65 2e   means UTF-16be.
4000: 0a 4e 6f 20 6f 74 68 65 72 20 76 61 6c 75 65 73  .No other values
4010: 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e 3c 2f 70   are allowed.</p
4020: 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 31 34 20 55 73  >..<h4>1.2.14 Us
4030: 65 72 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  er version numbe
4040: 72 3c 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r</h4>..<p>^The 
4050: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
4060: 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  n integer at off
4070: 73 65 74 20 36 30 20 69 73 20 74 68 65 20 75 73  set 60 is the us
4080: 65 72 20 76 65 72 73 69 6f 6e 20 77 68 69 63 68  er version which
4090: 0a 69 73 20 73 65 74 20 61 6e 64 20 71 75 65 72  .is set and quer
40a0: 69 65 64 20 62 79 20 74 68 65 20 5b 75 73 65 72  ied by the [user
40b0: 5f 76 65 72 73 69 6f 6e 20 70 72 61 67 6d 61 5d  _version pragma]
40c0: 2e 20 20 54 68 65 20 75 73 65 72 20 76 65 72 73  .  The user vers
40d0: 69 6f 6e 20 69 73 0a 6e 6f 74 20 75 73 65 64 20  ion is.not used 
40e0: 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a  by SQLite.</p>..
40f0: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
4100: 20 76 61 6c 69 64 66 6f 72 20 7b 76 65 72 73 69   validfor {versi
4110: 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d  on-valid-for num
4120: 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 31  ber}</tcl>.<h4>1
4130: 2e 32 2e 31 35 20 57 72 69 74 65 20 6c 69 62 72  .2.15 Write libr
4140: 61 72 79 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ary version numb
4150: 65 72 20 61 6e 64 20 76 65 72 73 69 6f 6e 2d 76  er and version-v
4160: 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 3c  alid-for number<
4170: 2f 68 34 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d  /h4>..<p>^The 4-
4180: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
4190: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
41a0: 74 20 39 36 20 73 74 6f 72 65 73 20 74 68 65 20  t 96 stores the 
41b0: 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  .[SQLITE_VERSION
41c0: 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75 65 20 66  _NUMBER] value f
41d0: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
41e0: 62 72 61 72 79 20 74 68 61 74 20 6d 6f 73 74 0a  brary that most.
41f0: 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69 66 69 65  recently modifie
4200: 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  d the database f
4210: 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d 62 79 74  ile.  ^The 4-byt
4220: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
4230: 65 67 65 72 20 61 74 0a 6f 66 66 73 65 74 20 39  eger at.offset 9
4240: 32 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f  2 is the value o
4250: 66 20 74 68 65 20 5b 63 68 61 6e 67 65 20 63 6f  f the [change co
4260: 75 6e 74 65 72 5d 20 77 68 65 6e 20 74 68 65 20  unter] when the 
4270: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 0a 77  version number.w
4280: 61 73 20 73 74 6f 72 65 64 2e 20 20 54 68 65 20  as stored.  The 
4290: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
42a0: 74 20 39 32 20 69 6e 64 69 63 61 74 65 73 20 77  t 92 indicates w
42b0: 68 69 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e  hich transaction
42c0: 0a 74 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d  .the version num
42d0: 62 65 72 20 69 73 20 76 61 6c 69 64 20 66 6f 72  ber is valid for
42e0: 20 61 6e 64 20 69 73 20 73 6f 6d 65 74 69 6d 65   and is sometime
42f0: 73 20 63 61 6c 6c 65 64 20 74 68 65 0a 22 76 65  s called the."ve
4300: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
4310: 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 34 3e 31 2e  number"...<h4>1.
4320: 32 2e 31 36 20 48 65 61 64 65 72 20 73 70 61 63  2.16 Header spac
4330: 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 20 65  e reserved for e
4340: 78 70 61 6e 73 69 6f 6e 3c 2f 68 34 3e 0a 0a 3c  xpansion</h4>..<
4350: 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62 79 74 65  p>All other byte
4360: 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
4370: 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 61 72  e file header ar
4380: 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 0a 66  e reserved for.f
4390: 75 74 75 72 65 20 65 78 70 61 6e 73 69 6f 6e 20  uture expansion 
43a0: 61 6e 64 20 6d 75 73 74 20 62 65 20 73 65 74 20  and must be set 
43b0: 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 68  to zero.</p>..<h
43c0: 33 3e 31 2e 33 20 54 68 65 20 4c 6f 63 6b 2d 42  3>1.3 The Lock-B
43d0: 79 74 65 20 50 61 67 65 3c 2f 68 33 3e 0a 0a 3c  yte Page</h3>..<
43e0: 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20  p>The lock-byte 
43f0: 70 61 67 65 20 69 73 20 74 68 65 20 73 69 6e 67  page is the sing
4400: 6c 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 64  le page of the d
4410: 61 74 61 62 61 73 65 20 66 69 6c 65 0a 74 68 61  atabase file.tha
4420: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62  t contains the b
4430: 79 74 65 73 20 61 74 20 6f 66 66 73 65 74 73 20  ytes at offsets 
4440: 62 65 74 77 65 65 6e 20 31 30 37 33 37 34 31 38  between 10737418
4450: 32 34 20 61 6e 64 20 31 30 37 33 37 34 32 33 33  24 and 107374233
4460: 35 2c 0a 69 6e 63 6c 75 73 69 76 65 2e 20 20 41  5,.inclusive.  A
4470: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
4480: 68 61 74 20 69 73 20 6c 65 73 73 20 74 68 61 6e  hat is less than
4490: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 31 30 37   or equal to 107
44a0: 33 37 34 31 38 32 34 20 62 79 74 65 73 20 0a 69  3741824 bytes .i
44b0: 6e 20 73 69 7a 65 20 63 6f 6e 74 61 69 6e 73 20  n size contains 
44c0: 6e 6f 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  no lock-byte pag
44d0: 65 2e 20 20 41 20 64 61 74 61 62 61 73 65 20 66  e.  A database f
44e0: 69 6c 65 20 6c 61 72 67 65 72 20 74 68 61 6e 0a  ile larger than.
44f0: 31 30 37 33 37 34 31 38 32 34 20 63 6f 6e 74 61  1073741824 conta
4500: 69 6e 73 20 65 78 61 63 74 6c 79 20 6f 6e 65 20  ins exactly one 
4510: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 2e 0a  lock-byte page..
4520: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63  </p>..<p>The loc
4530: 6b 2d 62 79 74 65 20 70 61 67 65 20 69 73 20 73  k-byte page is s
4540: 65 74 20 61 73 69 64 65 20 66 6f 72 20 75 73 65  et aside for use
4550: 20 62 79 20 74 68 65 20 6f 70 65 72 61 74 69 6e   by the operatin
4560: 67 2d 73 79 73 74 65 6d 20 73 70 65 63 69 66 69  g-system specifi
4570: 63 0a 5b 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e  c.[VFS] implemen
4580: 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70 6c 65 6d  tation in implem
4590: 65 6e 74 69 6e 67 20 74 68 65 20 64 61 74 61 62  enting the datab
45a0: 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b 69 6e 67  ase file locking
45b0: 20 70 72 69 6d 69 74 69 76 65 73 2e 0a 5e 53 51   primitives..^SQ
45c0: 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 75 73  Lite does not us
45d0: 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20  e the lock-byte 
45e0: 70 61 67 65 2e 20 20 5e 54 68 65 20 53 51 4c 69  page.  ^The SQLi
45f0: 74 65 20 63 6f 72 65 20 0a 77 69 6c 6c 20 6e 65  te core .will ne
4600: 76 65 72 20 72 65 61 64 20 6f 72 20 77 72 69 74  ver read or writ
4610: 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20  e the lock-byte 
4620: 70 61 67 65 2c 0a 74 68 6f 75 67 68 20 6f 70 65  page,.though ope
4630: 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70  rating-system sp
4640: 65 63 69 66 69 63 20 5b 56 46 53 5d 20 0a 69 6d  ecific [VFS] .im
4650: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 61  plementations ma
4660: 79 20 63 68 6f 6f 73 65 20 74 6f 20 72 65 61 64  y choose to read
4670: 20 6f 72 20 77 72 69 74 65 20 62 79 74 65 73 20   or write bytes 
4680: 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65  on the lock-byte
4690: 20 0a 70 61 67 65 20 61 63 63 6f 72 64 69 6e 67   .page according
46a0: 20 74 6f 20 74 68 65 20 0a 6e 65 65 64 73 20 61   to the .needs a
46b0: 6e 64 20 70 72 6f 63 6c 69 76 69 74 69 65 73 20  nd proclivities 
46c0: 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  of the underlyin
46d0: 67 20 73 79 73 74 65 6d 2e 20 20 54 68 65 20 75  g system.  The u
46e0: 6e 69 78 20 61 6e 64 20 77 69 6e 33 32 0a 5b 56  nix and win32.[V
46f0: 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  FS] implementati
4700: 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65 20 62 75  ons that come bu
4710: 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69 74 65 20  ilt into SQLite 
4720: 64 6f 20 6e 6f 74 20 77 72 69 74 65 20 74 6f 20  do not write to 
4730: 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65 20 70 61  the.lock-byte pa
4740: 67 65 2c 20 62 75 74 20 74 68 69 72 64 2d 70 61  ge, but third-pa
4750: 72 74 79 20 56 46 53 20 69 6d 70 6c 65 6d 65 6e  rty VFS implemen
4760: 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f 74 68 65  tations for.othe
4770: 72 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  r operating syst
4780: 65 6d 73 20 6d 69 67 68 74 2e 3c 2f 70 3e 0a 0a  ems might.</p>..
4790: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
47a0: 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65   {freelist} {fre
47b0: 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d 70 61 67  elist} {free-pag
47c0: 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  e list}</tcl>.<h
47d0: 33 3e 31 2e 34 20 54 68 65 20 46 72 65 65 6c 69  3>1.4 The Freeli
47e0: 73 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 20 64 61  st</h3>..<p>A da
47f0: 74 61 62 61 73 65 20 66 69 6c 65 20 6d 69 67 68  tabase file migh
4800: 74 20 63 6f 6e 74 61 69 6e 20 6f 6e 65 20 6f 72  t contain one or
4810: 20 6d 6f 72 65 20 70 61 67 65 73 20 74 68 61 74   more pages that
4820: 20 61 72 65 20 6e 6f 74 20 69 6e 0a 61 63 74 69   are not in.acti
4830: 76 65 20 75 73 65 2e 20 20 55 6e 75 73 65 64 20  ve use.  Unused 
4840: 70 61 67 65 73 20 63 61 6e 20 63 6f 6d 65 20 61  pages can come a
4850: 62 6f 75 74 2c 20 66 6f 72 20 65 78 61 6d 70 6c  bout, for exampl
4860: 65 2c 20 77 68 65 6e 20 69 6e 66 6f 72 6d 61 74  e, when informat
4870: 69 6f 6e 0a 69 73 20 64 65 6c 65 74 65 64 20 66  ion.is deleted f
4880: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
4890: 2e 20 20 55 6e 75 73 65 64 20 70 61 67 65 73 20  .  Unused pages 
48a0: 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68  are stored on th
48b0: 65 20 66 72 65 65 6c 69 73 74 0a 61 6e 64 20 61  e freelist.and a
48c0: 72 65 20 72 65 75 73 65 64 20 77 68 65 6e 20 61  re reused when a
48d0: 64 64 69 74 69 6f 6e 61 6c 20 70 61 67 65 73 20  dditional pages 
48e0: 61 72 65 20 72 65 71 75 69 72 65 64 2e 3c 2f 70  are required.</p
48f0: 3e 0a 0a 3c 70 3e 54 68 65 20 66 72 65 65 6c 69  >..<p>The freeli
4900: 73 74 20 69 73 20 6f 72 67 61 6e 69 7a 65 64 20  st is organized 
4910: 61 73 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  as a linked list
4920: 20 6f 66 20 66 72 65 65 6c 69 73 74 20 74 72 75   of freelist tru
4930: 6e 6b 20 70 61 67 65 73 0a 77 69 74 68 20 65 61  nk pages.with ea
4940: 63 68 20 74 72 75 6e 6b 20 70 61 67 65 73 20 63  ch trunk pages c
4950: 6f 6e 74 61 69 6e 69 6e 67 20 70 61 67 65 20 6e  ontaining page n
4960: 75 6d 62 65 72 73 20 66 6f 72 20 7a 65 72 6f 20  umbers for zero 
4970: 6f 72 20 6d 6f 72 65 20 66 72 65 65 6c 69 73 74  or more freelist
4980: 0a 6c 65 61 66 20 70 61 67 65 73 2e 3c 2f 70 3e  .leaf pages.</p>
4990: 0a 0a 3c 70 3e 41 20 66 72 65 65 6c 69 73 74 20  ..<p>A freelist 
49a0: 74 72 75 6e 6b 20 70 61 67 65 20 63 6f 6e 73 69  trunk page consi
49b0: 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61 79 20  sts of an array 
49c0: 6f 66 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  of 4-byte big-en
49d0: 64 69 61 6e 20 69 6e 74 65 67 65 72 73 2e 0a 54  dian integers..T
49e0: 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 61  he size of the a
49f0: 72 72 61 79 20 69 73 20 61 73 20 6d 61 6e 79 20  rray is as many 
4a00: 69 6e 74 65 67 65 72 73 20 61 73 20 77 69 6c 6c  integers as will
4a10: 20 66 69 74 20 69 6e 20 74 68 65 20 75 73 61 62   fit in the usab
4a20: 6c 65 20 73 70 61 63 65 0a 6f 66 20 61 20 70 61  le space.of a pa
4a30: 67 65 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d  ge.  The minimum
4a40: 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 69 73   usable space is
4a50: 20 34 38 30 20 62 79 74 65 73 20 73 6f 20 74 68   480 bytes so th
4a60: 65 20 61 72 72 61 79 20 77 69 6c 6c 20 61 6c 77  e array will alw
4a70: 61 79 73 0a 62 65 20 61 74 20 6c 65 61 73 74 20  ays.be at least 
4a80: 31 32 30 20 65 6e 74 72 69 65 73 20 69 6e 20 6c  120 entries in l
4a90: 65 6e 67 74 68 2e 20 20 5e 54 68 65 20 66 69 72  ength.  ^The fir
4aa0: 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68  st integer in th
4ab0: 65 20 61 72 72 61 79 20 0a 69 73 20 74 68 65 20  e array .is the 
4ac0: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
4ad0: 68 65 20 6e 65 78 74 20 66 72 65 65 6c 69 73 74  he next freelist
4ae0: 20 74 72 75 6e 6b 20 70 61 67 65 20 69 6e 20 74   trunk page in t
4af0: 68 65 20 6c 69 73 74 20 6f 72 20 7a 65 72 6f 20  he list or zero 
4b00: 0a 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20  .if this is the 
4b10: 6c 61 73 74 20 66 72 65 65 6c 69 73 74 20 74 72  last freelist tr
4b20: 75 6e 6b 20 70 61 67 65 2e 20 20 5e 54 68 65 20  unk page.  ^The 
4b30: 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 69  second integer i
4b40: 6e 20 74 68 65 20 61 72 72 61 79 0a 69 73 20 74  n the array.is t
4b50: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 65 61  he number of lea
4b60: 66 20 70 61 67 65 20 70 6f 69 6e 74 65 72 73 20  f page pointers 
4b70: 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20 43 61 6c 6c  to follow.  Call
4b80: 20 74 68 65 20 73 65 63 6f 6e 64 20 69 6e 74 65   the second inte
4b90: 67 65 72 20 4c 2e 0a 5e 49 66 20 4c 20 69 73 20  ger L..^If L is 
4ba0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
4bb0: 6f 20 74 68 65 6e 20 69 6e 74 65 67 65 72 73 20  o then integers 
4bc0: 77 69 74 68 20 61 72 72 61 79 20 69 6e 64 65 78  with array index
4bd0: 65 73 20 62 65 74 77 65 65 6e 20 32 20 61 6e 64  es between 2 and
4be0: 0a 4c 2b 31 20 69 6e 63 6c 75 73 69 76 65 20 63  .L+1 inclusive c
4bf0: 6f 6e 74 61 69 6e 20 70 61 67 65 20 6e 75 6d 62  ontain page numb
4c00: 65 72 73 20 66 6f 72 20 66 72 65 65 6c 69 73 74  ers for freelist
4c10: 20 6c 65 61 66 20 70 61 67 65 73 2e 3c 2f 70 3e   leaf pages.</p>
4c20: 0a 0a 3c 70 3e 46 72 65 65 6c 69 73 74 20 6c 65  ..<p>Freelist le
4c30: 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e  af pages contain
4c40: 20 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e   no information.
4c50: 20 20 5e 53 51 4c 69 74 65 20 61 76 6f 69 64 73    ^SQLite avoids
4c60: 20 72 65 61 64 69 6e 67 20 6f 72 0a 77 72 69 74   reading or.writ
4c70: 69 6e 67 20 66 72 65 65 6c 69 73 74 20 6c 65 61  ing freelist lea
4c80: 66 20 70 61 67 65 73 20 69 6e 20 6f 72 64 65 72  f pages in order
4c90: 20 74 6f 20 72 65 64 75 63 65 20 64 69 73 6b 20   to reduce disk 
4ca0: 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62  I/O.</p>..<p>A b
4cb0: 75 67 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72  ug in SQLite ver
4cc0: 73 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f 20 33  sions prior to 3
4cd0: 2e 36 2e 30 20 63 61 75 73 65 64 20 74 68 65 20  .6.0 caused the 
4ce0: 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a 72  database to be.r
4cf0: 65 70 6f 72 74 65 64 20 61 73 20 63 6f 72 72 75  eported as corru
4d00: 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  pt if any of the
4d10: 20 6c 61 73 74 20 36 20 65 6e 74 72 69 65 73 20   last 6 entries 
4d20: 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74 20  in the freelist 
4d30: 74 72 75 6e 6b 20 70 61 67 65 20 0a 61 72 72 61  trunk page .arra
4d40: 79 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e 2d  y contained non-
4d50: 7a 65 72 6f 20 76 61 6c 75 65 73 2e 20 20 4e 65  zero values.  Ne
4d60: 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  wer versions of 
4d70: 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 68 61  SQLite do not ha
4d80: 76 65 0a 74 68 69 73 20 70 72 6f 62 6c 65 6d 2e  ve.this problem.
4d90: 20 20 5e 48 6f 77 65 76 65 72 2c 20 6e 65 77 65    ^However, newe
4da0: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
4db0: 4c 69 74 65 20 73 74 69 6c 6c 20 61 76 6f 69 64  Lite still avoid
4dc0: 20 75 73 69 6e 67 20 74 68 65 20 0a 6c 61 73 74   using the .last
4dd0: 20 73 69 78 20 65 6e 74 72 69 65 73 20 69 6e 20   six entries in 
4de0: 74 68 65 20 66 72 65 65 6c 69 73 74 20 74 72 75  the freelist tru
4df0: 6e 6b 20 70 61 67 65 20 61 72 72 61 79 20 69 6e  nk page array in
4e00: 20 6f 72 64 65 72 20 74 68 61 74 20 64 61 74 61   order that data
4e10: 62 61 73 65 0a 66 69 6c 65 73 20 63 72 65 61 74  base.files creat
4e20: 65 64 20 62 79 20 6e 65 77 65 72 20 76 65 72 73  ed by newer vers
4e30: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 63  ions of SQLite c
4e40: 61 6e 20 62 65 20 72 65 61 64 20 62 79 20 6f 6c  an be read by ol
4e50: 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f 66 20  der versions.of 
4e60: 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  SQLite.</p>..<p>
4e70: 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66  ^The number of f
4e80: 72 65 65 6c 69 73 74 20 70 61 67 65 73 20 69 73  reelist pages is
4e90: 20 73 74 6f 72 65 64 20 61 73 20 61 20 34 2d 62   stored as a 4-b
4ea0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
4eb0: 6e 74 65 67 65 72 0a 69 6e 20 74 68 65 20 64 61  nteger.in the da
4ec0: 74 61 62 61 73 65 20 68 65 61 64 65 72 20 61 74  tabase header at
4ed0: 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33 36   an offset of 36
4ee0: 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
4ef0: 69 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65 2e  ing of the file.
4f00: 0a 5e 54 68 65 20 64 61 74 61 62 61 73 65 20 68  .^The database h
4f10: 65 61 64 65 72 20 61 6c 73 6f 20 73 74 6f 72 65  eader also store
4f20: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
4f30: 72 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 66  r of the first f
4f40: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70 61  reelist trunk.pa
4f50: 67 65 20 61 73 20 61 20 34 2d 62 79 74 65 20 62  ge as a 4-byte b
4f60: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
4f70: 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f  r at an offset o
4f80: 66 20 33 32 20 66 72 6f 6d 20 74 68 65 20 62 65  f 32 from the be
4f90: 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20 66  ginning.of the f
4fa0: 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e  ile.</p>..<h3>1.
4fb0: 35 20 42 2d 74 72 65 65 20 50 61 67 65 73 3c 2f  5 B-tree Pages</
4fc0: 68 33 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65  h3>..<p>A b-tree
4fd0: 20 70 61 67 65 20 69 73 20 65 69 74 68 65 72 20   page is either 
4fe0: 61 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65  an interior page
4ff0: 20 6f 72 20 61 20 6c 65 61 66 20 70 61 67 65 2e   or a leaf page.
5000: 0a 41 20 6c 65 61 66 20 70 61 67 65 20 63 6f 6e  .A leaf page con
5010: 74 61 69 6e 73 20 6b 65 79 73 20 61 6e 64 20 69  tains keys and i
5020: 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n the case of a 
5030: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 65 61 63  table b-tree eac
5040: 68 0a 6b 65 79 20 68 61 73 20 61 73 73 6f 63 69  h.key has associ
5050: 61 74 65 64 20 63 6f 6e 74 65 6e 74 2e 20 20 41  ated content.  A
5060: 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65 20  n interior page 
5070: 63 6f 6e 74 61 69 6e 73 0a 4b 20 6b 65 79 73 20  contains.K keys 
5080: 77 69 74 68 6f 75 74 20 63 6f 6e 74 65 6e 74 20  without content 
5090: 62 75 74 20 77 69 74 68 20 4b 2b 31 20 70 6f 69  but with K+1 poi
50a0: 6e 74 65 72 73 20 74 6f 20 63 68 69 6c 64 20 62  nters to child b
50b0: 2d 74 72 65 65 20 70 61 67 65 73 2e 0a 41 20 22  -tree pages..A "
50c0: 70 6f 69 6e 74 65 72 22 20 69 6e 20 61 6e 20 69  pointer" in an i
50d0: 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70  nterior b-tree p
50e0: 61 67 65 20 69 73 20 6a 75 73 74 20 74 68 65 20  age is just the 
50f0: 33 31 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 70  31-bit integer.p
5100: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
5110: 65 20 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f 70  e child page.</p
5120: 3e 0a 0a 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68  >...<p>Define th
5130: 65 20 64 65 70 74 68 0a 6f 66 20 61 20 6c 65 61  e depth.of a lea
5140: 66 20 62 2d 74 72 65 65 20 74 6f 20 62 65 20 31  f b-tree to be 1
5150: 20 61 6e 64 20 74 68 65 20 64 65 70 74 68 20 6f   and the depth o
5160: 66 20 61 6e 79 20 69 6e 74 65 72 69 6f 72 20 62  f any interior b
5170: 2d 74 72 65 65 20 74 6f 20 62 65 20 6f 6e 65 0a  -tree to be one.
5180: 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6d 61  more than the ma
5190: 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 61  ximum depth of a
51a0: 6e 79 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72  ny of its childr
51b0: 65 6e 2e 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d  en.  ^In a well-
51c0: 66 6f 72 6d 65 64 0a 64 61 74 61 62 61 73 65 2c  formed.database,
51d0: 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 6f 66   all children of
51e0: 20 61 6e 79 20 6f 6e 65 20 69 6e 74 65 72 69 6f   any one interio
51f0: 72 20 62 2d 74 72 65 65 20 68 61 76 65 20 74 68  r b-tree have th
5200: 65 20 73 61 6d 65 20 64 65 70 74 68 2e 3c 2f 70  e same depth.</p
5210: 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 20 69 6e 74 65  >..<p>In an inte
5220: 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65  rior b-tree page
5230: 2c 20 74 68 65 20 70 6f 69 6e 74 65 72 73 20 61  , the pointers a
5240: 6e 64 20 6b 65 79 73 20 6c 6f 67 69 63 61 6c 6c  nd keys logicall
5250: 79 20 61 6c 74 65 72 6e 61 74 65 20 0a 77 69 74  y alternate .wit
5260: 68 20 61 20 70 6f 69 6e 74 65 72 20 6f 6e 20 62  h a pointer on b
5270: 6f 74 68 20 65 6e 64 73 2e 20 28 54 68 65 20 70  oth ends. (The p
5280: 72 65 76 69 6f 75 73 20 73 65 6e 74 65 6e 63 65  revious sentence
5290: 20 69 73 20 74 6f 20 62 65 20 75 6e 64 65 72 73   is to be unders
52a0: 74 6f 6f 64 0a 63 6f 6e 63 65 70 74 75 61 6c 6c  tood.conceptuall
52b0: 79 20 2d 20 74 68 65 20 61 63 74 75 61 6c 20 6c  y - the actual l
52c0: 61 79 6f 75 74 20 6f 66 20 74 68 65 20 6b 65 79  ayout of the key
52d0: 73 20 61 6e 64 0a 70 6f 69 6e 74 65 72 73 20 77  s and.pointers w
52e0: 69 74 68 69 6e 20 74 68 65 20 70 61 67 65 20 69  ithin the page i
52f0: 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74  s more complicat
5300: 65 64 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 64  ed and will be d
5310: 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68 65 20  escribed in.the 
5320: 73 65 71 75 65 6c 2e 29 20 20 41 6c 6c 20 6b 65  sequel.)  All ke
5330: 79 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ys within the sa
5340: 6d 65 20 70 61 67 65 20 61 72 65 20 75 6e 69 71  me page are uniq
5350: 75 65 20 61 6e 64 20 61 72 65 20 6c 6f 67 69 63  ue and are logic
5360: 61 6c 6c 79 0a 6f 72 67 61 6e 69 7a 65 64 20 69  ally.organized i
5370: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
5380: 72 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  r from left to r
5390: 69 67 68 74 2e 20 20 28 41 67 61 69 6e 2c 20 74  ight.  (Again, t
53a0: 68 69 73 20 6f 72 64 65 72 69 6e 67 0a 69 73 20  his ordering.is 
53b0: 6c 6f 67 69 63 61 6c 2c 20 6e 6f 74 20 70 68 79  logical, not phy
53c0: 73 69 63 61 6c 2e 20 20 54 68 65 20 61 63 74 75  sical.  The actu
53d0: 61 6c 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 6b  al location of k
53e0: 65 79 73 20 77 69 74 68 69 6e 20 74 68 65 20 70  eys within the p
53f0: 61 67 65 0a 69 73 20 61 72 62 69 74 72 61 72 79  age.is arbitrary
5400: 2e 29 20 5e 46 6f 72 20 61 6e 79 20 6b 65 79 20  .) ^For any key 
5410: 58 2c 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  X, pointers to t
5420: 68 65 20 6c 65 66 74 0a 6f 66 20 61 20 58 20 72  he left.of a X r
5430: 65 66 65 72 20 74 6f 20 62 2d 74 72 65 65 20 70  efer to b-tree p
5440: 61 67 65 73 20 6f 6e 20 77 68 69 63 68 20 61 6c  ages on which al
5450: 6c 20 6b 65 79 73 20 61 72 65 20 6c 65 73 73 20  l keys are less 
5460: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
5470: 20 58 2e 0a 5e 50 6f 69 6e 74 65 72 73 20 74 6f   X..^Pointers to
5480: 20 74 68 65 20 72 69 67 68 74 20 6f 66 20 58 20   the right of X 
5490: 72 65 66 65 72 20 74 6f 20 70 61 67 65 73 20 77  refer to pages w
54a0: 68 65 72 65 20 61 6c 6c 20 6b 65 79 73 20 61 72  here all keys ar
54b0: 65 20 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20  e .greater than 
54c0: 58 2e 3c 2f 70 3e 0a 0a 3c 70 3e 57 69 74 68 69  X.</p>..<p>Withi
54d0: 6e 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  n an interior b-
54e0: 74 72 65 65 20 70 61 67 65 2c 20 65 61 63 68 20  tree page, each 
54f0: 6b 65 79 20 61 6e 64 20 74 68 65 20 70 6f 69 6e  key and the poin
5500: 74 65 72 20 74 6f 20 69 74 73 0a 69 6d 6d 65 64  ter to its.immed
5510: 69 61 74 65 20 6c 65 66 74 20 61 72 65 20 63 6f  iate left are co
5520: 6d 62 69 6e 65 64 20 69 6e 74 6f 20 61 20 73 74  mbined into a st
5530: 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20 61  ructure called a
5540: 20 22 63 65 6c 6c 22 2e 20 20 54 68 65 0a 72 69   "cell".  The.ri
5550: 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72  ght-most pointer
5560: 20 69 73 20 68 65 6c 64 20 73 65 70 61 72 61 74   is held separat
5570: 65 6c 79 2e 20 20 41 20 6c 65 61 66 20 62 2d 74  ely.  A leaf b-t
5580: 72 65 65 20 70 61 67 65 20 68 61 73 20 6e 6f 0a  ree page has no.
5590: 70 6f 69 6e 74 65 72 73 2c 20 62 75 74 20 69 74  pointers, but it
55a0: 20 73 74 69 6c 6c 20 75 73 65 73 20 74 68 65 20   still uses the 
55b0: 63 65 6c 6c 20 73 74 72 75 63 74 75 72 65 20 74  cell structure t
55c0: 6f 20 68 6f 6c 64 20 6b 65 79 73 20 66 6f 72 0a  o hold keys for.
55d0: 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20 6f 72  index b-trees or
55e0: 20 6b 65 79 73 20 61 6e 64 20 63 6f 6e 74 65 6e   keys and conten
55f0: 74 20 66 6f 72 20 74 61 62 6c 65 20 62 2d 74 72  t for table b-tr
5600: 65 65 73 2e 3c 2f 70 3e 0a 3c 2f 70 3e 0a 0a 3c  ees.</p>.</p>..<
5610: 70 3e 45 76 65 72 79 20 62 2d 74 72 65 65 20 70  p>Every b-tree p
5620: 61 67 65 20 68 61 73 20 61 74 20 6d 6f 73 74 20  age has at most 
5630: 6f 6e 65 20 70 61 72 65 6e 74 20 62 2d 74 72 65  one parent b-tre
5640: 65 20 70 61 67 65 2e 0a 41 20 62 2d 74 72 65 65  e page..A b-tree
5650: 20 70 61 67 65 20 77 69 74 68 6f 75 74 20 61 20   page without a 
5660: 70 61 72 65 6e 74 20 69 73 20 63 61 6c 6c 65 64  parent is called
5670: 20 61 20 72 6f 6f 74 20 70 61 67 65 2e 20 20 41   a root page.  A
5680: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
5690: 65 0a 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  e.together with 
56a0: 74 68 65 20 63 6c 6f 73 75 72 65 20 6f 66 20 69  the closure of i
56b0: 74 73 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 6d  ts children form
56c0: 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72   a complete b-tr
56d0: 65 65 2e 0a 49 74 20 69 73 20 70 6f 73 73 69 62  ee..It is possib
56e0: 6c 65 20 28 61 6e 64 20 69 6e 20 66 61 63 74 20  le (and in fact 
56f0: 72 61 74 68 65 72 20 63 6f 6d 6d 6f 6e 29 20 74  rather common) t
5700: 6f 20 68 61 76 65 20 61 20 63 6f 6d 70 6c 65 74  o have a complet
5710: 65 20 62 2d 74 72 65 65 0a 74 68 61 74 20 63 6f  e b-tree.that co
5720: 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69 6e 67  nsists of a sing
5730: 6c 65 20 70 61 67 65 20 74 68 61 74 20 69 73 20  le page that is 
5740: 62 6f 74 68 20 61 20 6c 65 61 66 20 61 6e 64 20  both a leaf and 
5750: 74 68 65 20 72 6f 6f 74 2e 0a 42 65 63 61 75 73  the root..Becaus
5760: 65 20 74 68 65 72 65 20 61 72 65 20 70 6f 69 6e  e there are poin
5770: 74 65 72 73 20 66 72 6f 6d 20 70 61 72 65 6e 74  ters from parent
5780: 73 20 74 6f 20 63 68 69 6c 64 72 65 6e 2c 20 65  s to children, e
5790: 76 65 72 79 20 70 61 67 65 20 6f 66 20 61 0a 63  very page of a.c
57a0: 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 20 63  omplete b-tree c
57b0: 61 6e 20 62 65 20 6c 6f 63 61 74 65 64 20 69 66  an be located if
57c0: 20 6f 6e 6c 79 20 74 68 65 20 72 6f 6f 74 20 70   only the root p
57d0: 61 67 65 20 69 73 20 6b 6e 6f 77 6e 2e 20 20 48  age is known.  H
57e0: 65 6e 63 65 2c 0a 62 2d 74 72 65 65 73 20 61 72  ence,.b-trees ar
57f0: 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
5800: 74 68 65 69 72 20 72 6f 6f 74 20 70 61 67 65 20  their root page 
5810: 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e  number.</p>..<p>
5820: 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73  A b-tree page is
5830: 20 65 69 74 68 65 72 20 61 20 74 61 62 6c 65 20   either a table 
5840: 62 2d 74 72 65 65 20 70 61 67 65 20 6f 72 20 61  b-tree page or a
5850: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70  n index b-tree p
5860: 61 67 65 2e 0a 41 6c 6c 20 70 61 67 65 73 20 77  age..All pages w
5870: 69 74 68 69 6e 20 65 61 63 68 20 63 6f 6d 70 6c  ithin each compl
5880: 65 74 65 20 62 2d 74 72 65 65 20 61 72 65 20 6f  ete b-tree are o
5890: 66 20 74 68 65 20 73 61 6d 65 20 74 79 70 65 3a  f the same type:
58a0: 20 65 69 74 68 65 72 20 74 61 62 6c 65 0a 6f 72   either table.or
58b0: 20 69 6e 64 65 78 2e 20 20 54 68 65 72 65 20 69   index.  There i
58c0: 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d  s a one-to-one m
58d0: 61 70 70 69 6e 67 20 66 72 6f 6d 20 74 61 62 6c  apping from tabl
58e0: 65 20 62 2d 74 72 65 65 73 20 69 6e 20 74 68 65  e b-trees in the
58f0: 20 64 61 74 61 62 61 73 65 20 0a 66 69 6c 65 20   database .file 
5900: 74 6f 20 28 6e 6f 6e 2d 76 69 72 74 75 61 6c 29  to (non-virtual)
5910: 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
5920: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
5930: 69 6e 63 6c 75 64 69 6e 67 20 73 79 73 74 65 6d  including system
5940: 20 74 61 62 6c 65 73 0a 73 75 63 68 20 61 73 20   tables.such as 
5950: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20 20  sqlite_master.  
5960: 54 68 65 72 65 20 69 73 20 6f 6e 65 2d 74 6f 2d  There is one-to-
5970: 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65 74 77  one mapping betw
5980: 65 65 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65  een index b-tree
5990: 73 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s.in the databas
59a0: 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 69 63  e file and indic
59b0: 65 73 20 69 6e 20 74 68 65 20 73 63 68 65 6d 61  es in the schema
59c0: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 69 6d 70 6c  , including impl
59d0: 69 65 64 20 69 6e 64 69 63 65 73 0a 63 72 65 61  ied indices.crea
59e0: 74 65 64 20 62 79 20 75 6e 69 71 75 65 6e 65 73  ted by uniquenes
59f0: 73 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 20 20  s constraints.  
5a00: 54 68 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65  The b-tree corre
5a10: 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 0a  sponding to the.
5a20: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
5a30: 62 6c 65 20 61 6c 77 61 79 73 20 68 61 73 20 69  ble always has i
5a40: 74 73 20 72 6f 6f 74 20 70 61 67 65 20 6f 6e 20  ts root page on 
5a50: 61 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  a page number of
5a60: 20 31 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 6d   1..The sqlite_m
5a70: 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74  aster table cont
5a80: 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 20 70 61  ains the root pa
5a90: 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 65 76  ge number for ev
5aa0: 65 72 79 20 6f 74 68 65 72 20 0a 74 61 62 6c 65  ery other .table
5ab0: 20 61 6e 64 20 69 6e 64 65 78 20 69 6e 20 74 68   and index in th
5ac0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
5ad0: 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65 6e  </p>..<p>Each en
5ae0: 74 72 79 20 69 6e 20 61 20 74 61 62 6c 65 20 62  try in a table b
5af0: 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20 6f  -tree consists o
5b00: 66 20 61 20 36 34 2d 62 69 74 20 73 69 67 6e 65  f a 64-bit signe
5b10: 64 20 69 6e 74 65 67 65 72 20 6b 65 79 0a 61 6e  d integer key.an
5b20: 64 20 75 70 20 74 6f 20 32 31 34 37 34 38 33 36  d up to 21474836
5b30: 34 37 20 62 79 74 65 73 20 6f 66 20 61 72 62 69  47 bytes of arbi
5b40: 74 72 61 72 79 20 64 61 74 61 2e 20 20 49 6e 74  trary data.  Int
5b50: 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72  erior table b-tr
5b60: 65 65 73 0a 68 6f 6c 64 20 6f 6e 6c 79 20 6b 65  ees.hold only ke
5b70: 79 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20  ys and pointers 
5b80: 74 6f 20 63 68 69 6c 64 72 65 6e 2e 20 20 41 6c  to children.  Al
5b90: 6c 20 64 61 74 61 20 69 73 20 63 6f 6e 74 61 69  l data is contai
5ba0: 6e 65 64 20 69 6e 20 74 68 65 0a 74 61 62 6c 65  ned in the.table
5bb0: 20 62 2d 74 72 65 65 20 6c 65 61 76 65 73 2e 3c   b-tree leaves.<
5bc0: 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 65 6e 74  /p>..<p>Each ent
5bd0: 72 79 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 62  ry in an index b
5be0: 2d 74 72 65 65 20 63 6f 6e 73 69 73 74 73 20 6f  -tree consists o
5bf0: 66 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b  f an arbitrary k
5c00: 65 79 20 6f 66 20 75 70 0a 74 6f 20 32 31 34 37  ey of up.to 2147
5c10: 34 38 33 36 34 37 20 62 79 74 65 73 20 69 6e 20  483647 bytes in 
5c20: 6c 65 6e 67 74 68 20 61 6e 64 20 6e 6f 20 64 61  length and no da
5c30: 74 61 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ta.</p>..<tcl>hd
5c40: 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c 5f 70  _fragment cell_p
5c50: 61 79 6c 6f 61 64 20 7b 63 65 6c 6c 20 70 61 79  ayload {cell pay
5c60: 6c 6f 61 64 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 44  load}</tcl>.<p>D
5c70: 65 66 69 6e 65 20 74 68 65 20 22 70 61 79 6c 6f  efine the "paylo
5c80: 61 64 22 20 6f 66 20 61 20 63 65 6c 6c 20 74 6f  ad" of a cell to
5c90: 20 62 65 20 74 68 65 20 61 72 62 69 74 72 61 72   be the arbitrar
5ca0: 79 20 6c 65 6e 67 74 68 20 73 65 63 74 69 6f 6e  y length section
5cb0: 0a 6f 66 20 74 68 65 20 63 65 6c 6c 2e 20 20 46  .of the cell.  F
5cc0: 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  or an index b-tr
5cd0: 65 65 2c 20 74 68 65 20 6b 65 79 20 69 73 20 61  ee, the key is a
5ce0: 6c 77 61 79 73 20 61 72 62 69 74 72 61 72 79 20  lways arbitrary 
5cf0: 69 6e 20 6c 65 6e 67 74 68 0a 61 6e 64 20 68 65  in length.and he
5d00: 6e 63 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20  nce the payload 
5d10: 69 73 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65  is the key.  The
5d20: 72 65 20 61 72 65 20 6e 6f 20 61 72 62 69 74 72  re are no arbitr
5d30: 61 72 79 20 6c 65 6e 67 74 68 20 65 6c 65 6d 65  ary length eleme
5d40: 6e 74 73 0a 69 6e 20 74 68 65 20 63 65 6c 6c 73  nts.in the cells
5d50: 20 6f 66 20 69 6e 74 65 72 69 6f 72 20 74 61 62   of interior tab
5d60: 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 73 20  le b-tree pages 
5d70: 61 6e 64 20 73 6f 20 74 68 6f 73 65 20 63 65 6c  and so those cel
5d80: 6c 73 20 68 61 76 65 20 6e 6f 0a 70 61 79 6c 6f  ls have no.paylo
5d90: 61 64 2e 20 20 54 61 62 6c 65 20 62 2d 74 72 65  ad.  Table b-tre
5da0: 65 20 6c 65 61 66 20 70 61 67 65 73 20 63 6f 6e  e leaf pages con
5db0: 74 61 69 6e 20 61 72 62 69 74 72 61 72 79 20 6c  tain arbitrary l
5dc0: 65 6e 67 74 68 20 63 6f 6e 74 65 6e 74 20 61 6e  ength content an
5dd0: 64 0a 73 6f 20 66 6f 72 20 63 65 6c 6c 73 20 6f  d.so for cells o
5de0: 6e 20 74 68 6f 73 65 20 70 61 67 65 73 20 74 68  n those pages th
5df0: 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65  e payload is the
5e00: 20 63 6f 6e 74 65 6e 74 2e 0a 3c 70 3e 57 68 65   content..<p>Whe
5e10: 6e 20 74 68 65 20 73 69 7a 65 20 6f 66 20 70 61  n the size of pa
5e20: 79 6c 6f 61 64 20 66 6f 72 20 61 20 63 65 6c 6c  yload for a cell
5e30: 20 65 78 63 65 65 64 73 20 61 20 63 65 72 74 61   exceeds a certa
5e40: 69 6e 20 74 68 72 65 73 68 6f 6c 64 20 28 74 6f  in threshold (to
5e50: 0a 62 65 20 64 65 66 69 6e 65 64 20 6c 61 74 65  .be defined late
5e60: 72 29 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65  r) then only the
5e70: 20 66 69 72 73 74 20 66 65 77 20 62 79 74 65 73   first few bytes
5e80: 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 0a   of the payload.
5e90: 61 72 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68  are stored on th
5ea0: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 61 6e  e b-tree page an
5eb0: 64 20 74 68 65 20 62 61 6c 61 6e 63 65 20 69 73  d the balance is
5ec0: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
5ed0: 6b 65 64 20 6c 69 73 74 0a 6f 66 20 63 6f 6e 74  ked list.of cont
5ee0: 65 6e 74 20 6f 76 65 72 66 6c 6f 77 20 70 61 67  ent overflow pag
5ef0: 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d  es.</p>..<p>A b-
5f00: 74 72 65 65 20 70 61 67 65 20 69 73 20 64 69 76  tree page is div
5f10: 69 64 65 64 20 69 6e 74 6f 20 72 65 67 69 6f 6e  ided into region
5f20: 73 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  s in the followi
5f30: 6e 67 20 6f 72 64 65 72 3a 0a 0a 3c 6f 6c 3e 0a  ng order:..<ol>.
5f40: 3c 6c 69 3e 54 68 65 20 31 30 30 2d 62 79 74 65  <li>The 100-byte
5f50: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
5f60: 65 61 64 65 72 20 28 66 6f 75 6e 64 20 6f 6e 20  eader (found on 
5f70: 70 61 67 65 20 31 20 6f 6e 6c 79 29 0a 3c 6c 69  page 1 only).<li
5f80: 3e 54 68 65 20 38 20 6f 72 20 31 32 20 62 79 74  >The 8 or 12 byt
5f90: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65  e b-tree page he
5fa0: 61 64 65 72 0a 3c 6c 69 3e 54 68 65 20 63 65 6c  ader.<li>The cel
5fb0: 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 0a  l pointer array.
5fc0: 3c 6c 69 3e 55 6e 61 6c 6c 6f 63 61 74 65 64 20  <li>Unallocated 
5fd0: 73 70 61 63 65 0a 3c 6c 69 3e 54 68 65 20 63 65  space.<li>The ce
5fe0: 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 0a  ll content area.
5ff0: 3c 6c 69 3e 54 68 65 20 72 65 73 65 72 76 65 64  <li>The reserved
6000: 20 72 65 67 69 6f 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c   region..</ol>.<
6010: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 31 30 30 2d  /p>..<p>The 100-
6020: 62 79 74 65 20 64 61 74 61 62 61 73 65 20 66 69  byte database fi
6030: 6c 65 20 68 65 61 64 65 72 20 69 73 20 66 6f 75  le header is fou
6040: 6e 64 20 6f 6e 6c 79 20 6f 6e 20 70 61 67 65 20  nd only on page 
6050: 31 2c 20 77 68 69 63 68 20 69 73 0a 61 6c 77 61  1, which is.alwa
6060: 79 73 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65  ys a table b-tre
6070: 65 20 70 61 67 65 2e 20 20 41 6c 6c 20 6f 74 68  e page.  All oth
6080: 65 72 20 62 2d 74 72 65 65 20 70 61 67 65 73 20  er b-tree pages 
6090: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
60a0: 66 69 6c 65 0a 6f 6d 69 74 20 74 68 69 73 20 31  file.omit this 1
60b0: 30 30 2d 62 79 74 65 20 68 65 61 64 65 72 2e 3c  00-byte header.<
60c0: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 73 65  /p>..<p>The rese
60d0: 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 61  rved region is a
60e0: 6e 20 61 72 65 61 20 6f 66 20 75 6e 75 73 65 64  n area of unused
60f0: 20 73 70 61 63 65 20 61 74 20 74 68 65 20 65 6e   space at the en
6100: 64 20 6f 66 20 65 76 65 72 79 0a 70 61 67 65 20  d of every.page 
6110: 28 65 78 63 65 70 74 20 74 68 65 20 6c 6f 63 6b  (except the lock
6120: 69 6e 67 20 70 61 67 65 29 20 74 68 61 74 20 65  ing page) that e
6130: 78 74 65 6e 73 69 6f 6e 73 20 63 61 6e 20 75 73  xtensions can us
6140: 65 20 74 6f 20 68 6f 6c 64 20 70 65 72 2d 70 61  e to hold per-pa
6150: 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  ge.information. 
6160: 20 5e 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68   ^The size of th
6170: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
6180: 6e 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  n is determined 
6190: 62 79 20 74 68 65 20 6f 6e 65 2d 62 79 74 65 0a  by the one-byte.
61a0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
61b0: 20 66 6f 75 6e 64 20 61 74 20 61 6e 20 6f 66 66   found at an off
61c0: 73 65 74 20 6f 66 20 32 30 20 69 6e 74 6f 20 74  set of 20 into t
61d0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
61e0: 20 68 65 61 64 65 72 2e 0a 54 68 65 20 73 69 7a   header..The siz
61f0: 65 20 6f 66 20 74 68 65 20 72 65 73 65 72 76 65  e of the reserve
6200: 64 20 72 65 67 69 6f 6e 20 69 73 20 75 73 75 61  d region is usua
6210: 6c 6c 79 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c  lly zero.</p>..<
6220: 70 3e 54 68 65 20 62 2d 74 72 65 65 20 70 61 67  p>The b-tree pag
6230: 65 20 68 65 61 64 65 72 20 69 73 20 38 20 62 79  e header is 8 by
6240: 74 65 73 20 69 6e 20 73 69 7a 65 20 66 6f 72 20  tes in size for 
6250: 6c 65 61 66 20 70 61 67 65 73 20 61 6e 64 20 31  leaf pages and 1
6260: 32 0a 62 79 74 65 73 20 66 6f 72 20 69 6e 74 65  2.bytes for inte
6270: 72 69 6f 72 20 70 61 67 65 73 2e 20 20 41 6c 6c  rior pages.  All
6280: 20 6d 75 6c 74 69 62 79 74 65 20 76 61 6c 75 65   multibyte value
6290: 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 68 65  s in the page he
62a0: 61 64 65 72 0a 61 72 65 20 62 69 67 2d 65 6e 64  ader.are big-end
62b0: 69 61 6e 2e 0a 54 68 65 20 62 2d 74 72 65 65 20  ian..The b-tree 
62c0: 70 61 67 65 20 68 65 61 64 65 72 20 69 73 20 63  page header is c
62d0: 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65 20 66  omposed of the f
62e0: 6f 6c 6c 6f 77 69 6e 67 20 66 69 65 6c 64 73 3a  ollowing fields:
62f0: 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c  </p>..<center>.<
6300: 69 3e 42 2d 74 72 65 65 20 50 61 67 65 20 48 65  i>B-tree Page He
6310: 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  ader Format</i><
6320: 62 72 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  br>.<table borde
6330: 72 3d 31 20 77 69 64 74 68 3d 22 38 30 25 22 3e  r=1 width="80%">
6340: 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
6350: 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
6360: 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 61  iption.<tr><td a
6370: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6380: 67 6e 3d 74 6f 70 3e 30 3c 74 64 20 61 6c 69 67  gn=top>0<td alig
6390: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
63a0: 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>1<td align=l
63b0: 65 66 74 3e 0a 41 20 66 6c 61 67 20 69 6e 64 69  eft>.A flag indi
63c0: 63 61 74 69 6e 67 20 74 68 65 20 62 2d 74 72 65  cating the b-tre
63d0: 65 20 70 61 67 65 20 74 79 70 65 0a 5e 41 20 76  e page type.^A v
63e0: 61 6c 75 65 20 6f 66 20 32 20 6d 65 61 6e 73 20  alue of 2 means 
63f0: 74 68 65 20 70 61 67 65 20 69 73 20 61 6e 20 69  the page is an i
6400: 6e 74 65 72 69 6f 72 20 69 6e 64 65 78 20 62 2d  nterior index b-
6410: 74 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61  tree page..^A va
6420: 6c 75 65 20 6f 66 20 35 20 6d 65 61 6e 73 20 74  lue of 5 means t
6430: 68 65 20 70 61 67 65 20 69 73 20 61 6e 20 69 6e  he page is an in
6440: 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74  terior table b-t
6450: 72 65 65 20 70 61 67 65 2e 0a 5e 41 20 76 61 6c  ree page..^A val
6460: 75 65 20 6f 66 20 31 30 20 6d 65 61 6e 73 20 74  ue of 10 means t
6470: 68 65 20 70 61 67 65 20 69 73 20 61 20 6c 65 61  he page is a lea
6480: 66 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70  f index b-tree p
6490: 61 67 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66  age..^A value of
64a0: 20 31 33 20 6d 65 61 6e 73 20 74 68 65 20 70 61   13 means the pa
64b0: 67 65 20 69 73 20 61 20 6c 65 61 66 20 74 61 62  ge is a leaf tab
64c0: 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  le b-tree page..
64d0: 5e 41 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65  ^Any other value
64e0: 20 66 6f 72 20 74 68 65 20 62 2d 74 72 65 65 20   for the b-tree 
64f0: 70 61 67 65 20 74 79 70 65 20 69 73 20 61 6e 20  page type is an 
6500: 65 72 72 6f 72 2e 0a 3c 74 72 3e 3c 74 64 20 61  error..<tr><td a
6510: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
6520: 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67  gn=top>1<td alig
6530: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
6540: 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>2<td align=l
6550: 65 66 74 3e 0a 42 79 74 65 20 6f 66 66 73 65 74  eft>.Byte offset
6560: 20 69 6e 74 6f 20 74 68 65 20 70 61 67 65 20 6f   into the page o
6570: 66 20 74 68 65 20 66 69 72 73 74 20 66 72 65 65  f the first free
6580: 62 6c 6f 63 6b 0a 3c 74 72 3e 3c 74 64 20 61 6c  block.<tr><td al
6590: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
65a0: 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c 69 67 6e  n=top>3<td align
65b0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
65c0: 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  op>2<td align=le
65d0: 66 74 3e 0a 4e 75 6d 62 65 72 20 6f 66 20 63 65  ft>.Number of ce
65e0: 6c 6c 73 20 6f 6e 20 74 68 69 73 20 70 61 67 65  lls on this page
65f0: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
6600: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
6610: 3e 35 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >5<td align=cent
6620: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c  er valign=top>2<
6630: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4f  td align=left>.O
6640: 66 66 73 65 74 20 74 6f 20 74 68 65 20 66 69 72  ffset to the fir
6650: 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 63  st byte of the c
6660: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
6670: 2e 20 20 41 20 7a 65 72 6f 20 76 61 6c 75 65 20  .  A zero value 
6680: 69 73 20 75 73 65 64 20 74 6f 20 72 65 70 72 65  is used to repre
6690: 73 65 6e 74 20 61 6e 20 6f 66 66 73 65 74 20 6f  sent an offset o
66a0: 66 20 36 35 35 33 36 2c 20 77 68 69 63 68 20 6f  f 65536, which o
66b0: 63 63 75 72 73 20 6f 6e 20 61 6e 20 65 6d 70 74  ccurs on an empt
66c0: 79 20 72 6f 6f 74 20 70 61 67 65 20 77 68 65 6e  y root page when
66d0: 20 75 73 69 6e 67 20 61 20 36 35 35 33 36 2d 62   using a 65536-b
66e0: 79 74 65 20 70 61 67 65 20 73 69 7a 65 2e 0a 3c  yte page size..<
66f0: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
6700: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 37  ter valign=top>7
6710: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6720: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64   valign=top>1<td
6730: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e 75 6d   align=left>.Num
6740: 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e 74 65  ber of fragmente
6750: 64 20 66 72 65 65 20 62 79 74 65 73 20 77 69 74  d free bytes wit
6760: 68 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e  hin the cell con
6770: 74 65 6e 74 20 61 72 65 61 0a 3c 74 72 3e 3c 74  tent area.<tr><t
6780: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6790: 61 6c 69 67 6e 3d 74 6f 70 3e 38 3c 74 64 20 61  align=top>8<td a
67a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
67b0: 67 6e 3d 74 6f 70 3e 34 3c 74 64 20 61 6c 69 67  gn=top>4<td alig
67c0: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 72 69 67 68  n=left>.The righ
67d0: 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65 72 20 28  t-most pointer (
67e0: 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20  interior b-tree 
67f0: 70 61 67 65 73 20 6f 6e 6c 79 29 0a 3c 2f 74 61  pages only).</ta
6800: 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ble></blockquote
6810: 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e  ></center>..<p>^
6820: 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72  The cell pointer
6830: 20 61 72 72 61 79 20 6f 66 20 61 20 62 2d 74 72   array of a b-tr
6840: 65 65 20 70 61 67 65 20 69 6d 6d 65 64 69 61 74  ee page immediat
6850: 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  ely follows the 
6860: 62 2d 74 72 65 65 0a 70 61 67 65 20 68 65 61 64  b-tree.page head
6870: 65 72 2e 20 20 4c 65 74 20 4b 20 62 65 20 74 68  er.  Let K be th
6880: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c  e number of cell
6890: 73 20 6f 6e 20 74 68 65 20 62 74 72 65 65 2e 20  s on the btree. 
68a0: 20 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74   ^The cell point
68b0: 65 72 0a 61 72 72 61 79 20 63 6f 6e 73 69 73 74  er.array consist
68c0: 73 20 6f 66 20 4b 20 32 2d 62 79 74 65 20 69 6e  s of K 2-byte in
68d0: 74 65 67 65 72 20 6f 66 66 73 65 74 73 20 74 6f  teger offsets to
68e0: 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e   the cell conten
68f0: 74 73 2e 20 20 5e 54 68 65 0a 63 65 6c 6c 20 70  ts.  ^The.cell p
6900: 6f 69 6e 74 65 72 73 20 61 72 65 20 61 72 72 61  ointers are arra
6910: 6e 67 65 64 20 69 6e 20 6b 65 79 20 6f 72 64 65  nged in key orde
6920: 72 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73 74  r with left-most
6930: 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20   cell (the cell 
6940: 77 69 74 68 20 74 68 65 0a 73 6d 61 6c 6c 65 73  with the.smalles
6950: 74 20 6b 65 79 29 20 66 69 72 73 74 20 61 6e 64  t key) first and
6960: 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20   the right-most 
6970: 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20 77  cell (the cell w
6980: 69 74 68 20 74 68 65 20 6c 61 72 67 65 73 74 0a  ith the largest.
6990: 6b 65 79 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a 0a  key) last.</p>..
69a0: 3c 70 3e 43 65 6c 6c 20 63 6f 6e 74 65 6e 74 20  <p>Cell content 
69b0: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
69c0: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 72 65   cell content re
69d0: 67 69 6f 6e 20 6f 66 20 74 68 65 20 62 2d 74 72  gion of the b-tr
69e0: 65 65 20 70 61 67 65 2e 0a 53 51 4c 69 74 65 20  ee page..SQLite 
69f0: 73 74 72 69 76 65 73 20 74 6f 20 70 6c 61 63 65  strives to place
6a00: 20 63 65 6c 6c 73 20 61 73 20 66 61 72 20 74 6f   cells as far to
6a10: 77 61 72 64 20 74 68 65 20 65 6e 64 20 6f 66 20  ward the end of 
6a20: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
6a30: 61 73 0a 69 74 20 63 61 6e 2c 20 69 6e 20 6f 72  as.it can, in or
6a40: 64 65 72 20 74 6f 20 6c 65 61 76 65 20 73 70 61  der to leave spa
6a50: 63 65 20 66 6f 72 20 66 75 74 75 72 65 20 67 72  ce for future gr
6a60: 6f 77 74 68 20 6f 66 20 74 68 65 20 63 65 6c 6c  owth of the cell
6a70: 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 2e 0a   pointer array..
6a80: 54 68 65 20 61 72 65 61 20 69 6e 20 62 65 74 77  The area in betw
6a90: 65 65 6e 20 74 68 65 20 6c 61 73 74 20 63 65 6c  een the last cel
6aa0: 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 20  l pointer array 
6ab0: 65 6e 74 72 79 20 61 6e 64 20 74 68 65 20 62 65  entry and the be
6ac0: 67 69 6e 6e 69 6e 67 20 6f 66 0a 74 68 65 20 66  ginning of.the f
6ad0: 69 72 73 74 20 63 65 6c 6c 20 69 73 20 74 68 65  irst cell is the
6ae0: 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65 67   unallocated reg
6af0: 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49  ion..</p>..<p>^I
6b00: 66 20 61 20 70 61 67 65 20 63 6f 6e 74 61 69 6e  f a page contain
6b10: 73 20 6e 6f 20 63 65 6c 6c 73 20 28 77 68 69 63  s no cells (whic
6b20: 68 20 69 73 20 6f 6e 6c 79 20 70 6f 73 73 69 62  h is only possib
6b30: 6c 65 20 66 6f 72 20 61 20 72 6f 6f 74 20 70 61  le for a root pa
6b40: 67 65 0a 6f 66 20 61 20 74 61 62 6c 65 20 74 68  ge.of a table th
6b50: 61 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 72  at contains no r
6b60: 6f 77 73 29 20 74 68 65 6e 20 74 68 65 20 6f 66  ows) then the of
6b70: 66 73 65 74 20 74 6f 20 74 68 65 20 63 65 6c 6c  fset to the cell
6b80: 20 63 6f 6e 74 65 6e 74 0a 61 72 65 61 20 77 69   content.area wi
6b90: 6c 6c 20 65 71 75 61 6c 20 74 68 65 20 70 61 67  ll equal the pag
6ba0: 65 20 73 69 7a 65 20 6d 69 6e 75 73 20 74 68 65  e size minus the
6bb0: 20 62 79 74 65 73 20 6f 66 20 72 65 73 65 72 76   bytes of reserv
6bc0: 65 64 20 73 70 61 63 65 2e 20 20 5e 28 49 66 0a  ed space.  ^(If.
6bd0: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
6be0: 73 20 61 20 36 35 35 33 36 2d 62 79 74 65 20 70  s a 65536-byte p
6bf0: 61 67 65 20 73 69 7a 65 20 61 6e 64 20 74 68 65  age size and the
6c00: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20   reserved space 
6c10: 69 73 20 7a 65 72 6f 0a 28 74 68 65 20 75 73 75  is zero.(the usu
6c20: 61 6c 20 76 61 6c 75 65 20 66 6f 72 20 72 65 73  al value for res
6c30: 65 72 76 65 64 20 73 70 61 63 65 29 20 74 68 65  erved space) the
6c40: 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  n the cell conte
6c50: 6e 74 20 6f 66 66 73 65 74 20 6f 66 20 61 6e 0a  nt offset of an.
6c60: 65 6d 70 74 79 20 70 61 67 65 20 77 61 6e 74 73  empty page wants
6c70: 20 74 6f 20 62 65 20 36 35 35 33 36 2e 20 20 0a   to be 65536.  .
6c80: 48 6f 77 65 76 65 72 2c 20 74 68 61 74 20 69 6e  However, that in
6c90: 74 65 67 65 72 20 69 73 20 74 6f 6f 20 6c 61 72  teger is too lar
6ca0: 67 65 20 74 6f 20 62 65 20 73 74 6f 72 65 64 20  ge to be stored 
6cb0: 69 6e 20 61 0a 32 2d 62 79 74 65 20 75 6e 73 69  in a.2-byte unsi
6cc0: 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 73 6f  gned integer, so
6cd0: 20 61 20 76 61 6c 75 65 20 6f 66 20 30 20 69 73   a value of 0 is
6ce0: 20 75 73 65 64 20 69 6e 20 69 74 73 20 70 6c 61   used in its pla
6cf0: 63 65 2e 29 5e 0a 0a 3c 70 3e 41 20 66 72 65 65  ce.)^..<p>A free
6d00: 62 6c 6f 63 6b 20 69 73 20 61 20 73 74 72 75 63  block is a struc
6d10: 74 75 72 65 20 75 73 65 64 20 74 6f 20 69 64 65  ture used to ide
6d20: 6e 74 69 66 79 20 75 6e 61 6c 6c 6f 63 61 74 65  ntify unallocate
6d30: 64 20 73 70 61 63 65 20 77 69 74 68 69 6e 0a 61  d space within.a
6d40: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 46   b-tree page.  F
6d50: 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 6f 72  reeblocks are or
6d60: 67 61 6e 69 7a 65 64 20 61 73 20 61 20 63 68 61  ganized as a cha
6d70: 69 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  in.  ^The first 
6d80: 32 20 62 79 74 65 73 20 6f 66 0a 61 20 66 72 65  2 bytes of.a fre
6d90: 65 62 6c 6f 63 6b 20 61 72 65 20 61 20 62 69 67  eblock are a big
6da0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
6db0: 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
6dc0: 73 65 74 20 69 6e 20 74 68 65 20 62 2d 74 72 65  set in the b-tre
6dd0: 65 20 70 61 67 65 0a 6f 66 20 74 68 65 20 6e 65  e page.of the ne
6de0: 78 74 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20  xt freeblock in 
6df0: 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65  the chain, or ze
6e00: 72 6f 20 69 66 20 74 68 65 20 66 72 65 65 62 6c  ro if the freebl
6e10: 6f 63 6b 20 69 73 20 74 68 65 20 6c 61 73 74 20  ock is the last 
6e20: 6f 6e 0a 74 68 65 20 63 68 61 69 6e 2e 20 20 5e  on.the chain.  ^
6e30: 54 68 65 20 74 68 69 72 64 20 61 6e 64 20 66 6f  The third and fo
6e40: 75 72 74 68 20 62 79 74 65 73 20 6f 66 20 65 61  urth bytes of ea
6e50: 63 68 20 66 72 65 65 62 6c 6f 63 6b 20 66 6f 72  ch freeblock for
6e60: 6d 0a 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  m.a big-endian i
6e70: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
6e80: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
6e90: 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20 62 79 74  freeblock in byt
6ea0: 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 74 68  es, including.th
6eb0: 65 20 34 2d 62 79 74 65 20 68 65 61 64 65 72 2e  e 4-byte header.
6ec0: 20 20 5e 46 72 65 65 62 6c 6f 63 6b 73 20 61 72    ^Freeblocks ar
6ed0: 65 20 61 6c 77 61 79 73 20 63 6f 6e 6e 65 63 74  e always connect
6ee0: 65 64 20 69 6e 20 6f 72 64 65 72 20 0a 6f 66 20  ed in order .of 
6ef0: 69 6e 63 72 65 61 73 69 6e 67 20 6f 66 66 73 65  increasing offse
6f00: 74 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20  t.  ^The second 
6f10: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74  field of the b-t
6f20: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 20  ree page header 
6f30: 69 73 20 74 68 65 0a 6f 66 66 73 65 74 20 6f 66  is the.offset of
6f40: 20 74 68 65 20 66 69 72 73 74 20 66 72 65 65 62   the first freeb
6f50: 6c 6f 63 6b 2c 20 6f 72 20 7a 65 72 6f 20 69 66  lock, or zero if
6f60: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72   there are no fr
6f70: 65 65 62 6c 6f 63 6b 73 20 6f 6e 20 74 68 65 0a  eeblocks on the.
6f80: 70 61 67 65 2e 20 20 5e 49 6e 20 61 20 77 65 6c  page.  ^In a wel
6f90: 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65 65 20  l-formed b-tree 
6fa0: 70 61 67 65 2c 20 74 68 65 72 65 20 77 69 6c 6c  page, there will
6fb0: 20 61 6c 77 61 79 73 20 62 65 20 61 74 20 6c 65   always be at le
6fc0: 61 73 74 20 6f 6e 65 20 63 65 6c 6c 0a 62 65 66  ast one cell.bef
6fd0: 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 66 72  ore the first fr
6fe0: 65 65 62 6c 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70  eeblock.</p>..<p
6ff0: 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 72 65 71  >A freeblock req
7000: 75 69 72 65 73 20 61 74 20 6c 65 61 73 74 20 34  uires at least 4
7010: 20 62 79 74 65 73 20 6f 66 20 73 70 61 63 65 2e   bytes of space.
7020: 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e    If there is an
7030: 20 69 73 6f 6c 61 74 65 64 0a 67 72 6f 75 70 20   isolated.group 
7040: 6f 66 20 31 2c 20 32 2c 20 6f 72 20 33 20 75 6e  of 1, 2, or 3 un
7050: 75 73 65 64 20 62 79 74 65 73 20 77 69 74 68 69  used bytes withi
7060: 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  n the cell conte
7070: 6e 74 20 61 72 65 61 2c 20 74 68 6f 73 65 20 62  nt area, those b
7080: 79 74 65 73 0a 63 6f 6d 70 72 69 73 65 20 61 20  ytes.comprise a 
7090: 66 72 61 67 6d 65 6e 74 2e 20 20 5e 54 68 65 20  fragment.  ^The 
70a0: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
70b0: 62 79 74 65 73 20 69 6e 20 61 6c 6c 20 66 72 61  bytes in all fra
70c0: 67 6d 65 6e 74 73 20 69 73 20 73 74 6f 72 65 64  gments is stored
70d0: 0a 69 6e 20 74 68 65 20 66 69 66 74 68 20 66 69  .in the fifth fi
70e0: 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65  eld of the b-tre
70f0: 65 20 70 61 67 65 20 68 65 61 64 65 72 2e 20 20  e page header.  
7100: 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  ^In a well-forme
7110: 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74  d b-tree page,.t
7120: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
7130: 6f 66 20 62 79 74 65 73 20 69 6e 20 66 72 61 67  of bytes in frag
7140: 6d 65 6e 74 73 20 6d 61 79 20 6e 6f 74 20 65 78  ments may not ex
7150: 63 65 65 64 20 36 30 2e 3c 2f 70 3e 0a 0a 3c 70  ceed 60.</p>..<p
7160: 3e 54 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e  >The total amoun
7170: 74 20 6f 66 20 66 72 65 65 20 73 70 61 63 65 20  t of free space 
7180: 6f 6e 20 61 20 62 2d 74 72 65 65 20 70 61 67 65  on a b-tree page
7190: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
71a0: 20 73 69 7a 65 0a 6f 66 20 74 68 65 20 75 6e 61   size.of the una
71b0: 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 20  llocated region 
71c0: 70 6c 75 73 20 74 68 65 20 74 6f 74 61 6c 20 73  plus the total s
71d0: 69 7a 65 20 6f 66 20 61 6c 6c 20 66 72 65 65 62  ize of all freeb
71e0: 6c 6f 63 6b 73 20 70 6c 75 73 20 74 68 65 0a 6e  locks plus the.n
71f0: 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e  umber of fragmen
7200: 74 65 64 20 66 72 65 65 20 62 79 74 65 73 2e 20  ted free bytes. 
7210: 20 5e 53 51 4c 69 74 65 20 6d 61 79 20 66 72 6f   ^SQLite may fro
7220: 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 72  m time to time r
7230: 65 6f 72 67 61 6e 69 7a 65 0a 61 20 62 2d 74 72  eorganize.a b-tr
7240: 65 65 20 70 61 67 65 20 73 6f 20 74 68 61 74 20  ee page so that 
7250: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65  there are no fre
7260: 65 62 6c 6f 63 6b 73 20 6f 72 20 66 72 61 67 6d  eblocks or fragm
7270: 65 6e 74 20 62 79 74 65 73 2c 20 61 6c 6c 0a 75  ent bytes, all.u
7280: 6e 75 73 65 64 20 62 79 74 65 73 20 61 72 65 20  nused bytes are 
7290: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
72a0: 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61   unallocated spa
72b0: 63 65 20 72 65 67 69 6f 6e 2c 20 61 6e 64 20 61  ce region, and a
72c0: 6c 6c 0a 63 65 6c 6c 73 20 61 72 65 20 70 61 63  ll.cells are pac
72d0: 6b 65 64 20 74 69 67 68 74 6c 79 20 61 74 20 74  ked tightly at t
72e0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61  he end of the pa
72f0: 67 65 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  ge.  This is cal
7300: 6c 65 64 20 0a 22 64 65 66 72 61 67 6d 65 6e 74  led ."defragment
7310: 69 6e 67 22 20 74 68 65 20 62 2d 74 72 65 65 20  ing" the b-tree 
7320: 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  page.</p>..<tcl>
7330: 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 69  hd_fragment vari
7340: 6e 74 20 7b 76 61 72 69 61 62 6c 65 2d 6c 65 6e  nt {variable-len
7350: 67 74 68 20 69 6e 74 65 67 65 72 7d 20 7b 76 61  gth integer} {va
7360: 72 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  rint}</tcl>..<p>
7370: 41 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  A variable-lengt
7380: 68 20 69 6e 74 65 67 65 72 20 6f 72 20 22 76 61  h integer or "va
7390: 72 69 6e 74 22 20 69 73 20 61 20 73 74 61 74 69  rint" is a stati
73a0: 63 20 48 75 66 66 6d 61 6e 20 65 6e 63 6f 64 69  c Huffman encodi
73b0: 6e 67 0a 6f 66 20 36 34 2d 62 69 74 20 74 77 6f  ng.of 64-bit two
73c0: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
73d0: 65 67 65 72 73 20 74 68 61 74 20 75 73 65 73 20  egers that uses 
73e0: 6c 65 73 73 20 73 70 61 63 65 20 66 6f 72 20 73  less space for s
73f0: 6d 61 6c 6c 20 70 6f 73 69 74 69 76 65 20 0a 76  mall positive .v
7400: 61 6c 75 65 73 2e 20 0a 41 20 76 61 72 69 6e 74  alues. .A varint
7410: 20 69 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e   is between 1 an
7420: 64 20 39 20 62 79 74 65 73 20 69 6e 20 6c 65 6e  d 9 bytes in len
7430: 67 74 68 2e 20 20 54 68 65 20 76 61 72 69 6e 74  gth.  The varint
7440: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 65 69 74   consists of eit
7450: 68 65 72 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  her.zero or more
7460: 20 62 79 74 65 20 77 68 69 63 68 20 68 61 76 65   byte which have
7470: 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
7480: 62 69 74 20 73 65 74 20 66 6f 6c 6c 6f 77 65 64  bit set followed
7490: 20 62 79 20 61 20 73 69 6e 67 6c 65 20 62 79 74   by a single byt
74a0: 65 0a 77 69 74 68 20 74 68 65 20 68 69 67 68 2d  e.with the high-
74b0: 6f 72 64 65 72 20 62 69 74 20 63 6c 65 61 72 2c  order bit clear,
74c0: 20 6f 72 20 6e 69 6e 65 20 62 79 74 65 73 2c 20   or nine bytes, 
74d0: 77 68 69 63 68 65 76 65 72 20 69 73 20 73 68 6f  whichever is sho
74e0: 72 74 65 72 2e 0a 54 68 65 20 6c 6f 77 65 72 20  rter..The lower 
74f0: 73 65 76 65 6e 20 62 69 74 73 20 6f 66 20 65 61  seven bits of ea
7500: 63 68 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  ch of the first 
7510: 65 69 67 68 74 20 62 79 74 65 73 20 61 6e 64 20  eight bytes and 
7520: 61 6c 6c 20 38 20 62 69 74 73 20 6f 66 0a 74 68  all 8 bits of.th
7530: 65 20 6e 69 6e 74 68 20 62 79 74 65 20 61 72 65  e ninth byte are
7540: 20 75 73 65 64 20 74 6f 20 72 65 63 6f 6e 73 74   used to reconst
7550: 72 75 63 74 20 74 68 65 20 36 34 2d 62 69 74 20  ruct the 64-bit 
7560: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
7570: 69 6e 74 65 67 65 72 2e 0a 56 61 72 69 6e 74 73  integer..Varints
7580: 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 3a   are big-endian:
7590: 20 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d   bits taken from
75a0: 20 74 68 65 20 65 61 72 6c 69 65 72 20 62 79 74   the earlier byt
75b0: 65 20 6f 66 20 74 68 65 20 76 61 72 69 6e 74 0a  e of the varint.
75c0: 61 72 65 20 74 68 65 20 6d 6f 72 65 20 73 69 67  are the more sig
75d0: 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 62 69 74  nificant and bit
75e0: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74 68 65  s taken from the
75f0: 20 6c 61 74 65 72 20 62 79 74 65 73 2e 20 3c 2f   later bytes. </
7600: 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 6d 61  p>..<p>The forma
7610: 74 20 6f 66 20 61 20 63 65 6c 6c 20 64 65 70 65  t of a cell depe
7620: 6e 64 73 20 6f 6e 20 77 68 69 63 68 20 6b 69 6e  nds on which kin
7630: 64 20 6f 66 20 62 2d 74 72 65 65 20 70 61 67 65  d of b-tree page
7640: 20 74 68 65 20 63 65 6c 6c 0a 61 70 70 65 61 72   the cell.appear
7650: 73 20 6f 6e 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  s on.  The follo
7660: 77 69 6e 67 20 74 61 62 6c 65 20 73 68 6f 77 73  wing table shows
7670: 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 6f 66   the elements of
7680: 20 61 20 63 65 6c 6c 2c 20 69 6e 0a 6f 72 64 65   a cell, in.orde
7690: 72 20 6f 66 20 61 70 70 65 61 72 61 6e 63 65 2c  r of appearance,
76a0: 20 66 6f 72 20 74 68 65 20 76 61 72 69 6f 75 73   for the various
76b0: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70   b-tree page typ
76c0: 65 73 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  es.</p>..<blockq
76d0: 75 6f 74 65 3e 3c 64 6c 3e 0a 3c 64 74 3e 3c 70  uote><dl>.<dt><p
76e0: 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 4c 65  >Table B-Tree Le
76f0: 61 66 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74  af Cell:</p></dt
7700: 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c  >.<dd><p><ul>.<l
7710: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
7720: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
7730: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
7740: 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64   payload, includ
7750: 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77  ing any.overflow
7760: 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68  .<li>A varint wh
7770: 69 63 68 20 69 73 20 74 68 65 20 69 6e 74 65 67  ich is the integ
7780: 65 72 20 6b 65 79 2c 20 61 2e 6b 2e 61 2e 20 22  er key, a.k.a. "
7790: 72 6f 77 69 64 22 0a 3c 6c 69 3e 54 68 65 20 69  rowid".<li>The i
77a0: 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f  nitial portion o
77b0: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68  f the payload th
77c0: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c  at does not spil
77d0: 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61  l to overflow.pa
77e0: 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  ges..<li>A 4-byt
77f0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
7800: 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72  eger page number
7810: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70   for the first p
7820: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
7830: 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20  low page list - 
7840: 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70  omitted if all p
7850: 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74  ayload fits on t
7860: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
7870: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a  </ul></p></dd>..
7880: 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54  <dt><p>Table B-T
7890: 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c  ree Interior Cel
78a0: 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  l:</p></dt>.<dd>
78b0: 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d  <p><ul>.<li>A 4-
78c0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
78d0: 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63  page number whic
78e0: 68 20 69 73 20 74 68 65 20 6c 65 66 74 20 63 68  h is the left ch
78f0: 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69  ild pointer..<li
7900: 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20  >A varint which 
7910: 69 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b  is the integer k
7920: 65 79 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64  ey.</ul></p></dd
7930: 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20  >..<dt><p>Index 
7940: 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c  B-Tree Leaf Cell
7950: 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c  :</p></dt>.<dd><
7960: 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72  p><ul>.<li>A var
7970: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
7980: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
7990: 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20 70 61   bytes of key pa
79a0: 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67  yload, including
79b0: 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c   any.overflow.<l
79c0: 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f  i>The initial po
79d0: 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79  rtion of the pay
79e0: 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e  load that does n
79f0: 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72  ot spill to over
7a00: 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e  flow.pages..<li>
7a10: 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  A 4-byte big-end
7a20: 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65  ian integer page
7a30: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
7a40: 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74 68  first page of th
7a50: 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  e.overflow page 
7a60: 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69  list - omitted i
7a70: 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69  f all payload fi
7a80: 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ts on the b-tree
7a90: 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e   page..</ul></p>
7aa0: 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e  </dd>..<dt><p>In
7ab0: 64 65 78 20 42 2d 54 72 65 65 20 49 6e 74 65 72  dex B-Tree Inter
7ac0: 69 6f 72 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64  ior Cell:</p></d
7ad0: 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c  t>.<dd><p><ul>.<
7ae0: 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d  li>A 4-byte big-
7af0: 65 6e 64 69 61 6e 70 61 67 65 20 6e 75 6d 62 65  endianpage numbe
7b00: 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c  r which is the l
7b10: 65 66 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 65  eft child pointe
7b20: 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20  r..<li>A varint 
7b30: 77 68 69 63 68 20 69 73 20 74 68 65 20 74 6f 74  which is the tot
7b40: 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
7b50: 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61  es of key payloa
7b60: 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79  d, including any
7b70: 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68  .overflow.<li>Th
7b80: 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f  e initial portio
7b90: 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64  n of the payload
7ba0: 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73   that does not s
7bb0: 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77  pill to overflow
7bc0: 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d  .pages..<li>A 4-
7bd0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
7be0: 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d  integer page num
7bf0: 62 65 72 20 66 6f 72 20 74 68 65 20 66 69 72 73  ber for the firs
7c00: 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76  t page of the.ov
7c10: 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74  erflow page list
7c20: 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c   - omitted if al
7c30: 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f  l payload fits o
7c40: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
7c50: 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64  e..</ul></p></dd
7c60: 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75  >.</dl></blockqu
7c70: 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 66  ote>..<p>The inf
7c80: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20 63  ormation above c
7c90: 61 6e 20 62 65 20 72 65 63 61 73 74 20 69 6e 74  an be recast int
7ca0: 6f 20 61 20 74 61 62 6c 65 20 66 6f 72 6d 61 74  o a table format
7cb0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
7cc0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
7cd0: 6e 74 20 63 65 6c 6c 66 6f 72 6d 61 74 20 7b 63  nt cellformat {c
7ce0: 65 6c 6c 20 66 6f 72 6d 61 74 20 73 75 6d 6d 61  ell format summa
7cf0: 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74 65  ry}</tcl>.<cente
7d00: 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 43 65 6c  r>.<i>B-tree Cel
7d10: 6c 20 46 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74 61  l Format</i>.<ta
7d20: 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64  ble border=1 wid
7d30: 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74  th="80%">.<tr><t
7d40: 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 61 74 61  h rowspan=2>Data
7d50: 74 79 70 65 0a 20 20 20 20 3c 74 68 20 63 6f 6c  type.    <th col
7d60: 73 70 61 6e 3d 34 3e 41 70 70 65 61 72 73 20 69  span=4>Appears i
7d70: 6e 2e 2e 2e 0a 20 20 20 20 3c 74 68 20 72 6f 77  n....    <th row
7d80: 73 70 61 6e 3d 32 3e 44 65 73 63 72 69 70 74 69  span=2>Descripti
7d90: 6f 6e 0a 3c 74 72 3e 3c 74 68 3e 54 61 62 6c 65  on.<tr><th>Table
7da0: 20 4c 65 61 66 0a 20 20 20 20 3c 74 68 3e 54 61   Leaf.    <th>Ta
7db0: 62 6c 65 20 49 6e 74 65 72 69 6f 72 0a 20 20 20  ble Interior.   
7dc0: 20 3c 74 68 3e 49 6e 64 65 78 20 4c 65 61 66 0a   <th>Index Leaf.
7dd0: 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 49 6e      <th>Index In
7de0: 74 65 72 69 6f 72 0a 3c 74 72 3e 3c 74 64 20 61  terior.<tr><td a
7df0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7e00: 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69 6e  gn=top>4-byte in
7e10: 74 65 67 65 72 0a 20 20 20 20 3c 74 64 20 61 6c  teger.    <td al
7e20: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
7e30: 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20  n=top>&nbsp;.   
7e40: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
7e50: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
7e60: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
7e70: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
7e80: 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20  n=top>&nbsp;.   
7e90: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
7ea0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
7eb0: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
7ec0: 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75  ign=left>Page nu
7ed0: 6d 62 65 72 20 6f 66 20 6c 65 66 74 20 63 68 69  mber of left chi
7ee0: 6c 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  ld.<tr><td align
7ef0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
7f00: 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c 74  op>varint.    <t
7f10: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
7f20: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
7f30: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
7f40: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
7f50: 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74  op>&nbsp;.    <t
7f60: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
7f70: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
7f80: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
7f90: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
7fa0: 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20  op>&#x2714;.    
7fb0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 4e  <td align=left>N
7fc0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
7fd0: 66 20 70 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74  f payload.<tr><t
7fe0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
7ff0: 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e 74  align=top>varint
8000: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8010: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8020: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8030: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8040: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
8050: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
8060: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8070: 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74  op>&nbsp;.    <t
8080: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8090: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
80a0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c  .    <td align=l
80b0: 65 66 74 3e 52 6f 77 69 64 0a 3c 74 72 3e 3c 74  eft>Rowid.<tr><t
80c0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
80d0: 61 6c 69 67 6e 3d 74 6f 70 3e 62 79 74 65 20 61  align=top>byte a
80e0: 72 72 61 79 0a 20 20 20 20 3c 74 64 20 61 6c 69  rray.    <td ali
80f0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8100: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8110: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8120: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
8130: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
8140: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
8150: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
8160: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
8170: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
8180: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
8190: 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 79 6c 6f 61  lign=left>Payloa
81a0: 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  d.<tr><td align=
81b0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
81c0: 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  p>4-byte integer
81d0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
81e0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
81f0: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8200: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8210: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
8220: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8230: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8240: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8250: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8260: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
8270: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
8280: 3d 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d 62 65  =left>Page numbe
8290: 72 20 6f 66 20 66 69 72 73 74 20 6f 76 65 72 66  r of first overf
82a0: 6c 6f 77 20 70 61 67 65 0a 3c 2f 74 61 62 6c 65  low page.</table
82b0: 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 0a 3c 74  ></center>....<t
82c0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
82d0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 0a 0a  er valign=top>..
82e0: 3c 70 3e 54 68 65 20 61 6d 6f 75 6e 74 20 6f 66  <p>The amount of
82f0: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 73 70   payload that sp
8300: 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76 65 72 66 6c  ills onto overfl
8310: 6f 77 20 70 61 67 65 73 20 61 6c 73 6f 20 64 65  ow pages also de
8320: 70 65 6e 64 73 20 6f 6e 0a 74 68 65 20 70 61 67  pends on.the pag
8330: 65 20 74 79 70 65 2e 20 20 46 6f 72 20 74 68 65  e type.  For the
8340: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 75   following compu
8350: 74 61 74 69 6f 6e 73 2c 20 6c 65 74 20 55 20 62  tations, let U b
8360: 65 20 74 68 65 20 75 73 61 62 6c 65 20 73 69 7a  e the usable siz
8370: 65 0a 6f 66 20 61 20 64 61 74 61 62 61 73 65 20  e.of a database 
8380: 70 61 67 65 2c 20 74 68 65 20 74 6f 74 61 6c 20  page, the total 
8390: 70 61 67 65 20 73 69 7a 65 20 6c 65 73 73 20 74  page size less t
83a0: 68 65 20 72 65 73 65 72 76 65 64 20 73 70 61 63  he reserved spac
83b0: 65 20 61 74 20 74 68 65 0a 65 6e 64 20 6f 66 20  e at the.end of 
83c0: 65 61 63 68 20 70 61 67 65 2e 20 20 41 6e 64 20  each page.  And 
83d0: 6c 65 74 20 50 20 62 65 20 74 68 65 20 70 61 79  let P be the pay
83e0: 6c 6f 61 64 20 73 69 7a 65 2e 3c 2f 70 3e 0a 0a  load size.</p>..
83f0: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c 3e  <blockquote><dl>
8400: 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54 72 65  .<dt>Table B-Tre
8410: 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 64 74  e Leaf Cell:</dt
8420: 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 49 66 20 74 68  >.<dd><p>.^If th
8430: 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50  e payload size P
8440: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
8450: 20 65 71 75 61 6c 20 74 6f 20 55 2d 33 35 20 74   equal to U-35 t
8460: 68 65 6e 0a 74 68 65 20 65 6e 74 69 72 65 20 70  hen.the entire p
8470: 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64  ayload is stored
8480: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 6c   on the b-tree l
8490: 65 61 66 20 70 61 67 65 2e 20 20 0a 5e 28 4c 65  eaf page.  .^(Le
84a0: 74 20 4d 20 62 65 20 28 28 55 2d 31 32 29 2a 33  t M be ((U-12)*3
84b0: 32 2f 32 35 35 29 2d 32 33 2e 20 20 49 66 20 50  2/255)-23.  If P
84c0: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
84d0: 20 55 2d 33 35 0a 74 68 65 6e 20 74 68 65 20 6e   U-35.then the n
84e0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 20 73 74  umber of byte st
84f0: 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72  ored on the b-tr
8500: 65 65 20 6c 65 61 66 20 70 61 67 65 20 69 73 20  ee leaf page is 
8510: 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f 66 0a 4d  the smaller of.M
8520: 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 20 61  +((P-M)%(U-4)) a
8530: 6e 64 20 55 2d 33 35 2e 29 5e 0a 5e 28 4e 6f 74  nd U-35.)^.^(Not
8540: 65 20 74 68 61 74 20 6e 75 6d 62 65 72 20 6f 66  e that number of
8550: 20 62 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e   bytes stored on
8560: 20 74 68 65 20 6c 65 61 66 20 70 61 67 65 20 69   the leaf page i
8570: 73 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68 61  s never less tha
8580: 6e 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e  n M.)^.</p></dd>
8590: 0a 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54 72  ..<dt>Table B-Tr
85a0: 65 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c  ee Interior Cell
85b0: 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 49  :</dt>.<dd><p>.I
85c0: 6e 74 65 72 69 6f 72 20 70 61 67 65 73 20 6f 66  nterior pages of
85d0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68   table b-trees h
85e0: 61 76 65 20 6e 6f 20 70 61 79 6c 6f 61 64 20 61  ave no payload a
85f0: 6e 64 20 73 6f 20 74 68 65 72 65 20 69 73 20 6e  nd so there is n
8600: 65 76 65 72 0a 61 6e 79 20 70 61 79 6c 6f 61 64  ever.any payload
8610: 20 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70 3e 3c   to spill..</p><
8620: 2f 64 64 3e 0a 0a 3c 64 74 3e 49 6e 64 65 78 20  /dd>..<dt>Index 
8630: 42 2d 54 72 65 65 20 4c 65 61 66 20 4f 72 20 49  B-Tree Leaf Or I
8640: 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64  nterior Cell:</d
8650: 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74  t>.<dd><p>.^(Let
8660: 20 58 20 62 65 20 28 28 55 2d 31 32 29 2a 36 34   X be ((U-12)*64
8670: 2f 32 35 35 29 2d 32 33 29 2e 20 20 49 66 20 74  /255)-23).  If t
8680: 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20  he payload size 
8690: 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 6f  P is less than.o
86a0: 72 20 65 71 75 61 6c 20 74 6f 20 58 20 74 68 65  r equal to X the
86b0: 6e 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 79  n the entire pay
86c0: 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20 6f  load is stored o
86d0: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
86e0: 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62 65 20  e.)^.^(Let M be 
86f0: 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d  ((U-12)*32/255)-
8700: 32 33 2e 20 20 49 66 20 50 20 69 73 20 67 72 65  23.  If P is gre
8710: 61 74 65 72 20 74 68 61 6e 20 58 20 74 68 65 6e  ater than X then
8720: 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 62   the number.of b
8730: 79 74 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68  yte stored on th
8740: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73  e b-tree page is
8750: 20 74 68 65 20 73 6d 61 6c 6c 65 72 20 6f 66 0a   the smaller of.
8760: 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29 20  M+((P-M)%(U-4)) 
8770: 61 6e 64 20 58 2e 29 5e 0a 5e 28 4e 6f 74 65 20  and X.)^.^(Note 
8780: 74 68 61 74 20 6e 75 6d 62 65 72 20 6f 66 20 62  that number of b
8790: 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74  ytes stored on t
87a0: 68 65 20 69 6e 64 65 78 20 70 61 67 65 20 69 73  he index page is
87b0: 20 6e 65 76 65 72 20 6c 65 73 73 20 74 68 61 6e   never less than
87c0: 20 4d 2e 29 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a   M.)^.</p></dd>.
87d0: 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  </dl></blockquot
87e0: 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76 65 72 66  e>..<p>The overf
87f0: 6c 6f 77 20 74 68 72 65 73 68 6f 6c 64 73 20 61  low thresholds a
8800: 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 67  re designed to g
8810: 69 76 65 20 61 20 6d 69 6e 69 6d 75 6d 20 66 61  ive a minimum fa
8820: 6e 6f 75 74 20 6f 66 0a 34 20 66 6f 72 20 69 6e  nout of.4 for in
8830: 64 65 78 20 62 2d 74 72 65 65 73 20 61 6e 64 20  dex b-trees and 
8840: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 6e 6f  to make sure eno
8850: 75 67 68 20 6f 66 20 74 68 65 20 70 61 79 6c 6f  ugh of the paylo
8860: 61 64 0a 69 73 20 6f 6e 20 74 68 65 20 62 2d 74  ad.is on the b-t
8870: 72 65 65 20 70 61 67 65 20 74 68 61 74 20 74 68  ree page that th
8880: 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
8890: 63 61 6e 20 75 73 75 61 6c 6c 79 20 62 65 20 61  can usually be a
88a0: 63 63 65 73 73 65 64 0a 77 69 74 68 6f 75 74 20  ccessed.without 
88b0: 63 6f 6e 73 75 6c 74 69 6e 67 20 61 6e 20 6f 76  consulting an ov
88c0: 65 72 66 6c 6f 77 20 70 61 67 65 2e 20 20 49 6e  erflow page.  In
88d0: 20 68 69 6e 64 73 69 67 68 74 2c 20 74 68 65 20   hindsight, the 
88e0: 64 65 73 69 67 6e 65 72 73 20 6f 66 0a 74 68 65  designers of.the
88f0: 20 53 51 4c 69 74 65 20 62 2d 74 72 65 65 20 6c   SQLite b-tree l
8900: 6f 67 69 63 20 72 65 61 6c 69 7a 65 20 74 68 61  ogic realize tha
8910: 74 20 74 68 65 73 65 20 74 68 72 65 73 68 6f 6c  t these threshol
8920: 64 73 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  ds could have be
8930: 65 6e 0a 6d 61 64 65 20 6d 75 63 68 20 73 69 6d  en.made much sim
8940: 70 6c 65 72 2e 20 20 48 6f 77 65 76 65 72 2c 20  pler.  However, 
8950: 74 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  the computations
8960: 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67   cannot be chang
8970: 65 64 0a 77 69 74 68 6f 75 74 20 72 65 73 75 6c  ed.without resul
8980: 74 69 6e 67 20 69 6e 20 61 6e 20 69 6e 63 6f 6d  ting in an incom
8990: 70 61 74 69 62 6c 65 20 66 69 6c 65 20 66 6f 72  patible file for
89a0: 6d 61 74 2e 20 20 41 6e 64 20 74 68 65 20 63 75  mat.  And the cu
89b0: 72 72 65 6e 74 20 63 6f 6d 70 75 74 61 74 69 6f  rrent computatio
89c0: 6e 73 0a 77 6f 72 6b 20 77 65 6c 6c 2c 20 65 76  ns.work well, ev
89d0: 65 6e 20 69 66 20 74 68 65 79 20 61 72 65 20 61  en if they are a
89e0: 20 6c 69 74 74 6c 65 20 63 6f 6d 70 6c 65 78 2e   little complex.
89f0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
8a00: 61 67 6d 65 6e 74 20 6f 76 66 6c 70 67 73 20 7b  agment ovflpgs {
8a10: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 7d 20 7b  overflow page} {
8a20: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 7d 3c  overflow pages}<
8a30: 2f 74 63 6c 3e 0a 3c 68 33 3e 31 2e 36 20 43 65  /tcl>.<h3>1.6 Ce
8a40: 6c 6c 20 50 61 79 6c 6f 61 64 20 4f 76 65 72 66  ll Payload Overf
8a50: 6c 6f 77 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a  low Pages</h3>..
8a60: 3c 70 3e 5e 57 68 65 6e 20 74 68 65 20 70 61 79  <p>^When the pay
8a70: 6c 6f 61 64 20 6f 66 20 61 20 62 2d 74 72 65 65  load of a b-tree
8a80: 20 63 65 6c 6c 20 69 73 20 74 6f 6f 20 6c 61 72   cell is too lar
8a90: 67 65 20 66 6f 72 20 74 68 65 20 62 2d 74 72 65  ge for the b-tre
8aa0: 65 20 70 61 67 65 2c 0a 74 68 65 20 73 75 72 70  e page,.the surp
8ab0: 6c 75 73 20 69 73 20 73 70 69 6c 6c 65 64 20 6f  lus is spilled o
8ac0: 6e 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61 67  nto overflow pag
8ad0: 65 73 2e 20 20 5e 4f 76 65 72 66 6c 6f 77 20 70  es.  ^Overflow p
8ae0: 61 67 65 73 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  ages form a link
8af0: 65 64 0a 6c 69 73 74 2e 20 20 5e 54 68 65 20 66  ed.list.  ^The f
8b00: 69 72 73 74 20 66 6f 75 72 20 62 79 74 65 73 20  irst four bytes 
8b10: 6f 66 20 65 61 63 68 20 6f 76 65 72 66 6c 6f 77  of each overflow
8b20: 20 70 61 67 65 20 61 72 65 20 61 20 62 69 67 2d   page are a big-
8b30: 65 6e 64 69 61 6e 0a 69 6e 74 65 67 65 72 20 77  endian.integer w
8b40: 68 69 63 68 20 69 73 20 74 68 65 20 70 61 67 65  hich is the page
8b50: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
8b60: 65 78 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  ext page in the 
8b70: 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 0a 66  chain, or zero.f
8b80: 6f 72 20 74 68 65 20 66 69 6e 61 6c 20 70 61 67  or the final pag
8b90: 65 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e 20  e in the chain. 
8ba0: 20 5e 54 68 65 20 66 69 66 74 68 20 62 79 74 65   ^The fifth byte
8bb0: 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c 61 73   through the las
8bc0: 74 20 75 73 61 62 6c 65 0a 62 79 74 65 20 61 72  t usable.byte ar
8bd0: 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 6f  e used to hold o
8be0: 76 65 72 66 6c 6f 77 20 63 6f 6e 74 65 6e 74 2e  verflow content.
8bf0: 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 37 20 50 6f  </p>..<h3>1.7 Po
8c00: 69 6e 74 65 72 20 4d 61 70 20 6f 72 20 50 74 72  inter Map or Ptr
8c10: 6d 61 70 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a  map Pages</h3>..
8c20: 3c 70 3e 50 6f 69 6e 74 65 72 20 6d 61 70 20 6f  <p>Pointer map o
8c30: 72 20 70 74 72 6d 61 70 20 70 61 67 65 73 20 61  r ptrmap pages a
8c40: 72 65 20 65 78 74 72 61 20 70 61 67 65 73 20 69  re extra pages i
8c50: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
8c60: 20 64 61 74 61 62 61 73 65 0a 74 6f 20 6d 61 6b   database.to mak
8c70: 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  e the operation 
8c80: 6f 66 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d  of [auto_vacuum]
8c90: 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e 74 61   and [incrementa
8ca0: 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 73 0a  l_vacuum] modes.
8cb0: 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74 2e 20  more efficient. 
8cc0: 20 4f 74 68 65 72 20 70 61 67 65 20 74 79 70 65   Other page type
8cd0: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
8ce0: 65 20 74 79 70 69 63 61 6c 6c 79 20 68 61 76 65  e typically have
8cf0: 20 70 6f 69 6e 74 65 72 73 0a 66 72 6f 6d 20 70   pointers.from p
8d00: 61 72 65 6e 74 20 74 6f 20 63 68 69 6c 64 2e 20  arent to child. 
8d10: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6e   For example, an
8d20: 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65   interior b-tree
8d30: 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 70   page contains p
8d40: 6f 69 6e 74 65 72 73 0a 74 6f 20 69 74 73 20 63  ointers.to its c
8d50: 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61 67 65  hild b-tree page
8d60: 73 20 61 6e 64 20 61 6e 20 6f 76 65 72 66 6c 6f  s and an overflo
8d70: 77 20 63 68 61 69 6e 20 68 61 73 20 61 20 70 6f  w chain has a po
8d80: 69 6e 74 65 72 0a 66 72 6f 6d 20 65 61 72 6c 69  inter.from earli
8d90: 65 72 20 74 6f 20 6c 61 74 65 72 20 6c 69 6e 6b  er to later link
8da0: 73 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e 20  s in the chain. 
8db0: 20 41 20 70 74 72 6d 61 70 20 70 61 67 65 20 63   A ptrmap page c
8dc0: 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b 61 67 65 0a  ontains linkage.
8dd0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6f 69 6e  information goin
8de0: 67 20 69 6e 20 74 68 65 20 6f 70 70 6f 73 69 74  g in the opposit
8df0: 65 20 64 69 72 65 63 74 69 6f 6e 2c 20 66 72 6f  e direction, fro
8e00: 6d 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e  m child to paren
8e10: 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 50 74 72 6d  t.</p>..<p>^Ptrm
8e20: 61 70 20 70 61 67 65 73 20 6d 75 73 74 20 65 78  ap pages must ex
8e30: 69 73 74 20 69 6e 20 61 6e 79 20 64 61 74 61 62  ist in any datab
8e40: 61 73 65 20 66 69 6c 65 20 77 68 69 63 68 20 68  ase file which h
8e50: 61 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a 6c 61  as a non-zero.la
8e60: 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65  rgest root b-tre
8e70: 65 20 70 61 67 65 20 76 61 6c 75 65 20 61 74 20  e page value at 
8e80: 6f 66 66 73 65 74 20 35 32 20 69 6e 20 74 68 65  offset 52 in the
8e90: 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72   database header
8ea0: 2e 0a 5e 49 66 20 74 68 65 20 6c 61 72 67 65 73  ..^If the larges
8eb0: 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61  t root b-tree pa
8ec0: 67 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f  ge value is zero
8ed0: 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62  , then the datab
8ee0: 61 73 65 20 6d 75 73 74 20 6e 6f 74 0a 63 6f 6e  ase must not.con
8ef0: 74 61 69 6e 20 70 74 72 6d 61 70 20 70 61 67 65  tain ptrmap page
8f00: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 61  s.</p>..<p>^In a
8f10: 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20 70   database with p
8f20: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 74 68 65  trmap pages, the
8f30: 20 66 69 72 73 74 20 70 74 72 6d 61 70 20 70 61   first ptrmap pa
8f40: 67 65 20 69 73 20 70 61 67 65 20 32 2e 0a 41 20  ge is page 2..A 
8f50: 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f 6e 73  ptrmap page cons
8f60: 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72 61 79  ists of an array
8f70: 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74 72 69   of 5-byte entri
8f80: 65 73 2e 20 20 4c 65 74 20 4a 20 62 65 20 74 68  es.  Let J be th
8f90: 65 0a 6e 75 6d 62 65 72 20 6f 66 20 35 2d 62 79  e.number of 5-by
8fa0: 74 65 20 65 6e 74 72 69 65 73 20 74 68 61 74 20  te entries that 
8fb0: 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20  will fit in the 
8fc0: 75 73 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20  usable space of 
8fd0: 61 20 70 61 67 65 2e 0a 28 49 6e 20 6f 74 68 65  a page..(In othe
8fe0: 72 20 77 6f 72 64 73 2c 20 4a 3d 55 2f 35 2e 29  r words, J=U/5.)
8ff0: 20 20 5e 54 68 65 20 66 69 72 73 74 20 70 74 72    ^The first ptr
9000: 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20 63 6f  map page will co
9010: 6e 74 61 69 6e 20 62 61 63 6b 20 70 6f 69 6e 74  ntain back point
9020: 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  er.information f
9030: 6f 72 20 70 61 67 65 73 20 33 20 74 68 72 6f 75  or pages 3 throu
9040: 67 68 20 4a 2b 32 2c 20 69 6e 63 6c 75 73 69 76  gh J+2, inclusiv
9050: 65 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20  e.  ^The second 
9060: 70 6f 69 6e 74 65 72 20 6d 61 70 0a 70 61 67 65  pointer map.page
9070: 20 77 69 6c 6c 20 62 65 20 6f 6e 20 70 61 67 65   will be on page
9080: 20 4a 2b 33 20 61 6e 64 20 74 68 61 74 20 70 74   J+3 and that pt
9090: 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20 70  rmap page will p
90a0: 72 6f 76 69 64 65 20 62 61 63 6b 20 70 6f 69 6e  rovide back poin
90b0: 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ter.information 
90c0: 66 6f 72 20 70 61 67 65 73 20 4a 2b 34 20 74 68  for pages J+4 th
90d0: 72 6f 75 67 68 20 32 2a 4a 2b 33 20 69 6e 63 6c  rough 2*J+3 incl
90e0: 75 73 69 76 65 2e 20 20 41 6e 64 20 73 6f 20 66  usive.  And so f
90f0: 6f 72 74 68 20 66 6f 72 0a 74 68 65 20 65 6e 74  orth for.the ent
9100: 69 72 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ire database fil
9110: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20  e.</p>..<p>^(In 
9120: 61 20 64 61 74 61 62 61 73 65 20 74 68 61 74 20  a database that 
9130: 75 73 65 73 20 70 74 72 6d 61 70 20 70 61 67 65  uses ptrmap page
9140: 73 2c 20 61 6c 6c 20 70 61 67 65 73 20 61 74 20  s, all pages at 
9150: 6c 6f 63 61 74 69 6f 6e 73 20 69 64 65 6e 74 69  locations identi
9160: 66 69 65 64 0a 62 79 20 74 68 65 20 63 6f 6d 70  fied.by the comp
9170: 75 74 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 70  utation in the p
9180: 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
9190: 68 20 6d 75 73 74 20 62 65 20 70 74 72 6d 61 70  h must be ptrmap
91a0: 20 70 61 67 65 20 61 6e 64 20 6e 6f 0a 6f 74 68   page and no.oth
91b0: 65 72 20 70 61 67 65 20 6d 61 79 20 62 65 20 61  er page may be a
91c0: 20 70 74 72 6d 61 70 20 70 61 67 65 2e 20 20 45   ptrmap page.  E
91d0: 78 63 65 70 74 2c 20 69 66 20 74 68 65 20 62 79  xcept, if the by
91e0: 74 65 2d 6c 6f 63 6b 20 70 61 67 65 20 68 61 70  te-lock page hap
91f0: 70 65 6e 73 20 74 6f 0a 66 61 6c 6c 20 6f 6e 20  pens to.fall on 
9200: 74 68 65 20 73 61 6d 65 20 70 61 67 65 20 6e 75  the same page nu
9210: 6d 62 65 72 20 61 73 20 61 20 70 74 72 6d 61 70  mber as a ptrmap
9220: 20 70 61 67 65 2c 20 74 68 65 6e 20 74 68 65 20   page, then the 
9230: 70 74 72 6d 61 70 20 69 73 20 6d 6f 76 65 64 0a  ptrmap is moved.
9240: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
9250: 20 70 61 67 65 20 66 6f 72 20 74 68 61 74 20 6f   page for that o
9260: 6e 65 20 63 61 73 65 2e 29 5e 3c 2f 70 3e 0a 0a  ne case.)^</p>..
9270: 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20 65  <p>Each 5-byte e
9280: 6e 74 72 79 20 6f 6e 20 61 20 70 74 72 6d 61 70  ntry on a ptrmap
9290: 20 70 61 67 65 20 70 72 6f 76 69 64 65 73 20 62   page provides b
92a0: 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61  ack-link informa
92b0: 74 69 6f 6e 20 61 62 6f 75 74 20 0a 6f 6e 65 20  tion about .one 
92c0: 6f 66 20 70 61 67 65 73 20 74 68 61 74 20 69 6d  of pages that im
92d0: 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
92e0: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61 70   the pointer map
92f0: 2e 20 20 5e 28 49 66 20 70 61 67 65 20 42 20 69  .  ^(If page B i
9300: 73 20 61 0a 70 74 72 6d 61 70 20 70 61 67 65 20  s a.ptrmap page 
9310: 74 68 65 6e 20 62 61 63 6b 2d 6c 69 6e 6b 20 69  then back-link i
9320: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
9330: 20 70 61 67 65 20 42 2b 31 20 69 73 20 70 72 6f   page B+1 is pro
9340: 76 69 64 65 64 20 62 79 0a 74 68 65 20 66 69 72  vided by.the fir
9350: 73 74 20 65 6e 74 72 79 20 6f 6e 20 74 68 65 20  st entry on the 
9360: 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20 49 6e  pointer map.  In
9370: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
9380: 70 61 67 65 20 42 2b 32 20 69 73 0a 70 72 6f 76  page B+2 is.prov
9390: 69 64 65 64 20 62 79 20 74 68 65 20 73 65 63 6f  ided by the seco
93a0: 6e 64 20 65 6e 74 72 79 2e 20 20 41 6e 64 20 73  nd entry.  And s
93b0: 6f 20 66 6f 72 74 68 2e 29 5e 3c 2f 70 3e 0a 0a  o forth.)^</p>..
93c0: 3c 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20 70  <p>Each 5-byte p
93d0: 74 72 6d 61 70 20 65 6e 74 72 79 20 63 6f 6e 73  trmap entry cons
93e0: 69 73 74 73 20 6f 66 20 6f 6e 65 20 62 79 74 65  ists of one byte
93f0: 20 6f 66 20 22 70 61 67 65 20 74 79 70 65 22 20   of "page type" 
9400: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 66 6f 6c 6c  information.foll
9410: 6f 77 65 64 20 62 79 20 61 20 34 2d 62 79 74 65  owed by a 4-byte
9420: 20 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65   big-endian page
9430: 20 6e 75 6d 62 65 72 2e 20 20 46 69 76 65 20 70   number.  Five p
9440: 61 67 65 20 74 79 70 65 73 20 61 72 65 20 72 65  age types are re
9450: 63 6f 67 6e 69 7a 65 64 3a 0a 3c 2f 70 3e 0a 0a  cognized:.</p>..
9460: 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72 65  <ol>.<li>A b-tre
9470: 65 20 72 6f 6f 74 20 70 61 67 65 2e 20 20 54 68  e root page.  Th
9480: 65 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68  e.page number sh
9490: 6f 75 6c 64 20 62 65 20 7a 65 72 6f 2e 0a 3c 6c  ould be zero..<l
94a0: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 70 61 67  i>A freelist pag
94b0: 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d  e.  The page num
94c0: 62 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 7a 65  ber should be.ze
94d0: 72 6f 2e 0a 3c 6c 69 3e 54 68 65 20 66 69 72 73  ro..<li>The firs
94e0: 74 20 70 61 67 65 20 6f 66 20 61 0a 63 65 6c 6c  t page of a.cell
94f0: 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f   payload overflo
9500: 77 20 63 68 61 69 6e 2e 20 20 54 68 65 20 70 61  w chain.  The pa
9510: 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65  ge number is the
9520: 20 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 61   b-tree page tha
9530: 74 0a 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63  t.contains the c
9540: 65 6c 6c 20 77 68 6f 73 65 20 63 6f 6e 74 65 6e  ell whose conten
9550: 74 20 68 61 73 20 6f 76 65 72 66 6c 6f 77 65 64  t has overflowed
9560: 2e 0a 3c 6c 69 3e 41 20 70 61 67 65 20 69 6e 20  ..<li>A page in 
9570: 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69  an overflow chai
9580: 6e 0a 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65  n.other than the
9590: 20 66 69 72 73 74 20 70 61 67 65 2e 20 20 54 68   first page.  Th
95a0: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73  e page number is
95b0: 20 74 68 65 20 70 72 69 6f 72 20 70 61 67 65 20   the prior page 
95c0: 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20  of the.overflow 
95d0: 63 68 61 69 6e 2e 0a 3c 6c 69 3e 41 20 6e 6f 6e  chain..<li>A non
95e0: 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67  -root b-tree pag
95f0: 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e 75 6d  e.  The.page num
9600: 62 65 72 20 69 73 20 74 68 65 20 70 61 72 65 6e  ber is the paren
9610: 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c  t b-tree page..<
9620: 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 6e 79  /ol>..<p>^In any
9630: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
9640: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 70 74 72  hat contains ptr
9650: 6d 61 70 20 70 61 67 65 73 2c 20 61 6c 6c 20 62  map pages, all b
9660: 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67 65 73  -tree root pages
9670: 20 0a 6d 75 73 74 20 63 6f 6d 65 20 62 65 66 6f   .must come befo
9680: 72 65 20 61 6e 79 20 6e 6f 6e 2d 72 6f 6f 74 20  re any non-root 
9690: 62 2d 74 72 65 65 20 70 61 67 65 2c 20 63 65 6c  b-tree page, cel
96a0: 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c  l payload overfl
96b0: 6f 77 20 70 61 67 65 2c 20 6f 72 0a 66 72 65 65  ow page, or.free
96c0: 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 69 73  list page.  This
96d0: 20 72 65 73 74 72 69 63 74 69 6f 6e 20 65 6e 73   restriction ens
96e0: 75 72 65 73 20 74 68 61 74 20 61 20 72 6f 6f 74  ures that a root
96f0: 20 70 61 67 65 20 77 69 6c 6c 20 6e 65 76 65 72   page will never
9700: 0a 62 65 20 6d 6f 76 65 64 20 64 75 72 69 6e 67  .be moved during
9710: 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   an auto-vacuum 
9720: 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 2d 76  or incremental-v
9730: 61 63 75 75 6d 2e 20 20 54 68 65 20 61 75 74 6f  acuum.  The auto
9740: 2d 76 61 63 75 75 6d 0a 6c 6f 67 69 63 20 64 6f  -vacuum.logic do
9750: 65 73 20 6e 6f 74 20 6b 6e 6f 77 20 68 6f 77 20  es not know how 
9760: 74 6f 20 75 70 64 61 74 65 20 74 68 65 20 72 6f  to update the ro
9770: 6f 74 5f 70 61 67 65 20 66 69 65 6c 64 20 6f 66  ot_page field of
9780: 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
9790: 65 72 0a 74 61 62 6c 65 20 61 6e 64 20 73 6f 20  er.table and so 
97a0: 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20  it is necessary 
97b0: 74 6f 20 70 72 65 76 65 6e 74 20 72 6f 6f 74 20  to prevent root 
97c0: 70 61 67 65 73 20 66 72 6f 6d 20 62 65 69 6e 67  pages from being
97d0: 20 6d 6f 76 65 64 0a 64 75 72 69 6e 67 20 61 6e   moved.during an
97e0: 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 69 6e 20   auto-vacuum in 
97f0: 6f 72 64 65 72 20 74 6f 20 70 72 65 73 65 72 76  order to preserv
9800: 65 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20  e the integrity 
9810: 6f 66 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61  of the.sqlite_ma
9820: 73 74 65 72 20 74 61 62 6c 65 2e 20 20 5e 52 6f  ster table.  ^Ro
9830: 6f 74 20 70 61 67 65 73 20 61 72 65 20 6d 6f 76  ot pages are mov
9840: 65 64 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e  ed to the beginn
9850: 69 6e 67 20 6f 66 20 74 68 65 0a 64 61 74 61 62  ing of the.datab
9860: 61 73 65 20 66 69 6c 65 20 62 79 20 74 68 65 20  ase file by the 
9870: 43 52 45 41 54 45 20 54 41 42 4c 45 2c 20 43 52  CREATE TABLE, CR
9880: 45 41 54 45 20 49 4e 44 45 58 2c 20 44 52 4f 50  EATE INDEX, DROP
9890: 20 54 41 42 4c 45 2c 20 61 6e 64 0a 44 52 4f 50   TABLE, and.DROP
98a0: 20 49 4e 44 45 58 20 6f 70 65 72 61 74 69 6f 6e   INDEX operation
98b0: 73 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 32 2e 30 20  s.</p>..<h2>2.0 
98c0: 53 63 68 65 6d 61 20 4c 61 79 65 72 3c 2f 68 32  Schema Layer</h2
98d0: 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72 65 67 6f  >..<p>The forego
98e0: 69 6e 67 20 74 65 78 74 20 64 65 73 63 72 69 62  ing text describ
98f0: 65 73 20 6c 6f 77 2d 6c 65 76 65 6c 20 61 73 70  es low-level asp
9900: 65 63 74 73 20 6f 66 20 74 68 65 20 53 51 4c 69  ects of the SQLi
9910: 74 65 20 66 69 6c 65 0a 66 6f 72 6d 61 74 2e 20  te file.format. 
9920: 20 54 68 65 20 62 2d 74 72 65 65 20 6d 65 63 68   The b-tree mech
9930: 61 6e 69 73 6d 20 70 72 6f 76 69 64 65 73 20 61  anism provides a
9940: 20 70 6f 77 65 72 66 75 6c 20 61 6e 64 20 65 66   powerful and ef
9950: 66 69 63 69 65 6e 74 20 6d 65 61 6e 73 20 6f 66  ficient means of
9960: 0a 61 63 63 65 73 73 69 6e 67 20 61 20 6c 61 72  .accessing a lar
9970: 67 65 20 64 61 74 61 20 73 65 74 2e 20 20 54 68  ge data set.  Th
9980: 69 73 20 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20  is section will 
9990: 64 65 73 63 72 69 62 65 20 68 6f 77 20 74 68 65  describe how the
99a0: 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62 2d 74 72 65  .low-level b-tre
99b0: 65 20 6c 61 79 65 72 20 69 73 20 75 73 65 64 20  e layer is used 
99c0: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 68 69 67  to implement hig
99d0: 68 65 72 2d 6c 65 76 65 6c 20 53 51 4c 0a 63 61  her-level SQL.ca
99e0: 70 61 62 69 6c 69 74 69 65 73 2e 3c 2f 70 3e 0a  pabilities.</p>.
99f0: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
9a00: 74 20 72 65 63 6f 72 64 5f 66 6f 72 6d 61 74 20  t record_format 
9a10: 7b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 7d 3c  {record format}<
9a20: 2f 74 63 6c 3e 0a 3c 68 33 3e 32 2e 31 20 52 65  /tcl>.<h3>2.1 Re
9a30: 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 68 33 3e  cord Format</h3>
9a40: 0a 0a 3c 70 3e 54 68 65 20 63 6f 6e 74 65 6e 74  ..<p>The content
9a50: 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72   of a table b-tr
9a60: 65 65 20 6c 65 61 66 20 70 61 67 65 20 61 6e 64  ee leaf page and
9a70: 20 74 68 65 20 6b 65 79 0a 6f 66 20 61 6e 79 20   the key.of any 
9a80: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67  index b-tree pag
9a90: 65 20 77 61 73 20 63 68 61 72 61 63 74 65 72 69  e was characteri
9aa0: 7a 65 64 20 61 62 6f 76 65 0a 61 73 20 61 6e 20  zed above.as an 
9ab0: 61 72 62 69 74 72 61 72 79 20 73 65 71 75 65 6e  arbitrary sequen
9ac0: 63 65 20 6f 66 20 62 79 74 65 73 2e 0a 54 68 65  ce of bytes..The
9ad0: 20 70 72 69 6f 72 20 64 69 73 63 75 73 73 69 6f   prior discussio
9ae0: 6e 20 6d 65 6e 74 69 6f 6e 65 64 20 6f 6e 65 20  n mentioned one 
9af0: 6b 65 79 20 62 65 69 6e 67 20 6c 65 73 73 20 74  key being less t
9b00: 68 61 6e 20 61 6e 6f 74 68 65 72 2c 20 62 75 74  han another, but
9b10: 0a 64 69 64 20 6e 6f 74 20 64 65 66 69 6e 65 20  .did not define 
9b20: 77 68 61 74 20 22 6c 65 73 73 20 74 68 61 6e 22  what "less than"
9b30: 20 6d 65 61 6e 74 2e 20 20 54 68 65 20 63 75 72   meant.  The cur
9b40: 72 65 6e 74 20 73 65 63 74 69 6f 6e 20 77 69 6c  rent section wil
9b50: 6c 20 61 64 64 72 65 73 73 0a 74 68 65 73 65 20  l address.these 
9b60: 6f 6d 69 73 73 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a  omissions.</p>..
9b70: 3c 70 3e 50 61 79 6c 6f 61 64 2c 20 65 69 74 68  <p>Payload, eith
9b80: 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74  er table content
9b90: 20 6f 72 20 69 6e 64 65 78 20 6b 65 79 73 2c 20   or index keys, 
9ba0: 69 73 20 61 6c 77 61 79 73 20 69 6e 20 74 68 65  is always in the
9bb0: 20 22 72 65 63 6f 72 64 0a 66 6f 72 6d 61 74 22   "record.format"
9bc0: 2e 20 20 54 68 65 20 72 65 63 6f 72 64 20 66 6f  .  The record fo
9bd0: 72 6d 61 74 20 64 65 66 69 6e 65 73 20 61 20 73  rmat defines a s
9be0: 65 71 75 65 6e 63 65 20 6f 66 20 76 61 6c 75 65  equence of value
9bf0: 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a  s corresponding.
9c00: 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20  to columns in a 
9c10: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
9c20: 20 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   The record form
9c30: 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
9c40: 20 6e 75 6d 62 65 72 0a 6f 66 20 63 6f 6c 75 6d   number.of colum
9c50: 6e 73 2c 20 74 68 65 20 64 61 74 61 74 79 70 65  ns, the datatype
9c60: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c   of each column,
9c70: 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74   and the content
9c80: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e   of each column.
9c90: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 63  </p>..<p>The rec
9ca0: 6f 72 64 20 66 6f 72 6d 61 74 20 6d 61 6b 65 73  ord format makes
9cb0: 20 65 78 74 65 6e 73 69 76 65 20 75 73 65 20 6f   extensive use o
9cc0: 66 20 74 68 65 20 0a 5b 76 61 72 69 61 62 6c 65  f the .[variable
9cd0: 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 5d  -length integer]
9ce0: 20 6f 72 20 5b 76 61 72 69 6e 74 5d 0a 72 65 70   or [varint].rep
9cf0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 36  resentation of 6
9d00: 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  4-bit signed int
9d10: 65 67 65 72 73 20 64 65 66 69 6e 65 64 20 61 62  egers defined ab
9d20: 6f 76 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ove.</p>..<tcl>h
9d30: 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 72 69 61  d_fragment seria
9d40: 6c 74 79 70 65 20 7b 73 65 72 69 61 6c 20 74 79  ltype {serial ty
9d50: 70 65 7d 20 7b 73 65 72 69 61 6c 20 74 79 70 65  pe} {serial type
9d60: 73 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 41 20 72 65  s}</tcl>.<p>A re
9d70: 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 61 20  cord contains a 
9d80: 68 65 61 64 65 72 20 61 6e 64 20 61 20 62 6f 64  header and a bod
9d90: 79 2c 20 69 6e 20 74 68 61 74 20 6f 72 64 65 72  y, in that order
9da0: 2e 20 20 0a 5e 28 54 68 65 20 68 65 61 64 65 72  .  .^(The header
9db0: 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20 73   begins with a s
9dc0: 69 6e 67 6c 65 20 76 61 72 69 6e 74 20 77 68 69  ingle varint whi
9dd0: 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  ch determines th
9de0: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 0a 6f  e total number.o
9df0: 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68  f bytes in the h
9e00: 65 61 64 65 72 2e 20 20 54 68 65 20 76 61 72 69  eader.  The vari
9e10: 6e 74 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  nt value is the 
9e20: 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  size of the head
9e30: 65 72 20 69 6e 0a 62 79 74 65 73 20 69 6e 63 6c  er in.bytes incl
9e40: 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  uding the size v
9e50: 61 72 69 6e 74 20 69 74 73 65 6c 66 2e 29 5e 20  arint itself.)^ 
9e60: 20 5e 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20   ^Following the 
9e70: 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65 0a  size varint are.
9e80: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 64 64 69  one or more addi
9e90: 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20  tional varints, 
9ea0: 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20  one per column. 
9eb0: 20 54 68 65 73 65 20 61 64 64 69 74 69 6f 6e 61   These additiona
9ec0: 6c 20 76 61 72 69 6e 74 73 0a 61 72 65 20 63 61  l varints.are ca
9ed0: 6c 6c 65 64 20 22 73 65 72 69 61 6c 20 74 79 70  lled "serial typ
9ee0: 65 22 20 6e 75 6d 62 65 72 73 20 61 6e 64 0a 64  e" numbers and.d
9ef0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 64 61 74  etermine the dat
9f00: 61 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f  atype of each co
9f10: 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69 6e 67 20  lumn, according 
9f20: 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
9f30: 20 63 68 61 72 74 3a 3c 2f 70 3e 0a 0a 3c 63 65   chart:</p>..<ce
9f40: 6e 74 65 72 3e 0a 5e 28 3c 69 3e 53 65 72 69 61  nter>.^(<i>Seria
9f50: 6c 20 54 79 70 65 20 43 6f 64 65 73 20 4f 66 20  l Type Codes Of 
9f60: 54 68 65 20 52 65 63 6f 72 64 20 46 6f 72 6d 61  The Record Forma
9f70: 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65  t</i><br>.<table
9f80: 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72   width="80%" bor
9f90: 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 53  der=1>.<tr><th>S
9fa0: 65 72 69 61 6c 20 54 79 70 65 3c 74 68 3e 43 6f  erial Type<th>Co
9fb0: 6e 74 65 6e 74 20 53 69 7a 65 3c 74 68 3e 4d 65  ntent Size<th>Me
9fc0: 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74 64 20 76 61  aning.<tr><td va
9fd0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
9fe0: 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67  enter>0<td valig
9ff0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a000: 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>0<td align=le
a010: 66 74 3e 0a 4e 55 4c 4c 0a 3c 74 72 3e 3c 74 64  ft>.NULL.<tr><td
a020: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
a030: 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 76 61  n=center>1<td va
a040: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
a050: 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e  enter>1<td align
a060: 3d 6c 65 66 74 3e 0a 38 2d 62 69 74 20 74 77 6f  =left>.8-bit two
a070: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
a080: 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  eger.<tr><td val
a090: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a0a0: 6e 74 65 72 3e 32 3c 74 64 20 76 61 6c 69 67 6e  nter>2<td valign
a0b0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a0c0: 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>2<td align=lef
a0d0: 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 31 36  t>.Big-endian 16
a0e0: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
a0f0: 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74 72  ment integer.<tr
a100: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
a110: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74  align=center>3<t
a120: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a130: 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20 61  gn=center>3<td a
a140: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65  lign=left>.Big-e
a150: 6e 64 69 61 6e 20 32 34 2d 62 69 74 20 74 77 6f  ndian 24-bit two
a160: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
a170: 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  eger.<tr><td val
a180: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a190: 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e  nter>4<td valign
a1a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a1b0: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
a1c0: 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 33 32  t>.Big-endian 32
a1d0: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
a1e0: 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74 72  ment integer.<tr
a1f0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
a200: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 3c 74  align=center>5<t
a210: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a220: 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 61  gn=center>6<td a
a230: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65  lign=left>.Big-e
a240: 6e 64 69 61 6e 20 34 38 2d 62 69 74 20 74 77 6f  ndian 48-bit two
a250: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
a260: 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  eger.<tr><td val
a270: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a280: 6e 74 65 72 3e 36 3c 74 64 20 76 61 6c 69 67 6e  nter>6<td valign
a290: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
a2a0: 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>8<td align=lef
a2b0: 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 36 34  t>.Big-endian 64
a2c0: 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65  -bit twos-comple
a2d0: 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74 72  ment integer.<tr
a2e0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
a2f0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37 3c 74  align=center>7<t
a300: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
a310: 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 61  gn=center>8<td a
a320: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65  lign=left>.Big-e
a330: 6e 64 69 61 6e 20 49 45 45 45 20 37 35 34 2d 32  ndian IEEE 754-2
a340: 30 30 38 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  008 64-bit float
a350: 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72  ing point number
a360: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
a370: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
a380: 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >8<td valign=top
a390: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c   align=center>0<
a3a0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 49  td align=left>.I
a3b0: 6e 74 65 67 65 72 20 63 6f 6e 73 74 61 6e 74 20  nteger constant 
a3c0: 30 2e 20 20 4f 6e 6c 79 20 61 76 61 69 6c 61 62  0.  Only availab
a3d0: 6c 65 20 66 6f 72 20 73 63 68 65 6d 61 20 66 6f  le for schema fo
a3e0: 72 6d 61 74 20 34 20 61 6e 64 20 68 69 67 68 65  rmat 4 and highe
a3f0: 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  r..<tr><td valig
a400: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
a410: 65 72 3e 39 3c 74 64 20 76 61 6c 69 67 6e 3d 74  er>9<td valign=t
a420: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
a430: 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  0<td align=left>
a440: 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61 6e  .Integer constan
a450: 74 20 31 2e 20 20 4f 6e 6c 79 20 61 76 61 69 6c  t 1.  Only avail
a460: 61 62 6c 65 20 66 6f 72 20 73 63 68 65 6d 61 20  able for schema 
a470: 66 6f 72 6d 61 74 20 34 20 61 6e 64 20 68 69 67  format 4 and hig
a480: 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  her..<tr><td val
a490: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
a4a0: 6e 74 65 72 3e 31 30 2c 31 31 0a 20 20 20 20 3c  nter>10,11.    <
a4b0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a4c0: 69 67 6e 3d 63 65 6e 74 65 72 3e 26 6e 62 73 70  ign=center>&nbsp
a4d0: 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  ;<td align=left>
a4e0: 0a 3c 69 3e 4e 6f 74 20 75 73 65 64 2e 20 20 52  .<i>Not used.  R
a4f0: 65 73 65 72 76 65 64 20 66 6f 72 20 65 78 70 61  eserved for expa
a500: 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72 3e 3c  nsion.</i>.<tr><
a510: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
a520: 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32  ign=center>N&#x2
a530: 32 36 35 3b 31 32 20 61 6e 64 20 65 76 65 6e 0a  265;12 and even.
a540: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
a550: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
a560: 28 4e 2d 31 32 29 2f 32 3c 74 64 20 61 6c 69 67  (N-12)/2<td alig
a570: 6e 3d 6c 65 66 74 3e 0a 41 20 42 4c 4f 42 20 74  n=left>.A BLOB t
a580: 68 61 74 20 69 73 20 28 4e 2d 31 32 29 2f 32 20  hat is (N-12)/2 
a590: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 0a  bytes in length.
a5a0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
a5b0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
a5c0: 4e 26 23 78 32 32 36 35 3b 31 33 20 61 6e 64 20  N&#x2265;13 and 
a5d0: 6f 64 64 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  odd.    <td vali
a5e0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
a5f0: 74 65 72 3e 28 4e 2d 31 33 29 2f 32 3c 74 64 20  ter>(N-13)/2<td 
a600: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 73 74  align=left>.A st
a610: 72 69 6e 67 20 69 6e 20 74 68 65 20 64 61 74 61  ring in the data
a620: 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 61 6e  base encoding an
a630: 64 20 28 4e 2d 31 33 29 2f 32 20 62 79 74 65 73  d (N-13)/2 bytes
a640: 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 54 68 65 20   in length..The 
a650: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20 69  nul terminator i
a660: 73 20 6f 6d 69 74 74 65 64 2e 0a 3c 2f 74 61 62  s omitted..</tab
a670: 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a  le></center>)^..
a680: 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 62 65 63  <p>Note that bec
a690: 61 75 73 65 20 6f 66 20 74 68 65 20 77 61 79 20  ause of the way 
a6a0: 76 61 72 69 6e 74 73 20 61 72 65 20 64 65 66 69  varints are defi
a6b0: 6e 65 64 2c 20 74 68 65 20 68 65 61 64 65 72 20  ned, the header 
a6c0: 73 69 7a 65 20 76 61 72 69 6e 74 0a 61 6e 64 20  size varint.and 
a6d0: 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72 69  serial type vari
a6e0: 6e 74 73 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79  nts will usually
a6f0: 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20 73 69   consist of a si
a700: 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 0a  ngle byte.  The.
a710: 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72 69  serial type vari
a720: 6e 74 73 20 66 6f 72 20 6c 61 72 67 65 20 73 74  nts for large st
a730: 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42 73 20  rings and BLOBs 
a740: 6d 69 67 68 74 20 65 78 74 65 6e 64 20 74 6f 20  might extend to 
a750: 74 77 6f 20 6f 72 20 74 68 72 65 65 0a 62 79 74  two or three.byt
a760: 65 20 76 61 72 69 6e 74 73 2c 20 62 75 74 20 74  e varints, but t
a770: 68 61 74 20 69 73 20 74 68 65 20 65 78 63 65 70  hat is the excep
a780: 74 69 6f 6e 20 72 61 74 68 65 72 20 74 68 61 6e  tion rather than
a790: 20 74 68 65 20 72 75 6c 65 2e 20 0a 54 68 65 20   the rule. .The 
a7a0: 76 61 72 69 6e 74 20 66 6f 72 6d 61 74 20 69 73  varint format is
a7b0: 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74 20   very efficient 
a7c0: 61 74 20 63 6f 64 69 6e 67 20 74 68 65 20 72 65  at coding the re
a7d0: 63 6f 72 64 20 68 65 61 64 65 72 2e 3c 2f 70 3e  cord header.</p>
a7e0: 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65 73 20  ..<p>The values 
a7f0: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
a800: 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  in the record im
a810: 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
a820: 20 74 68 65 20 68 65 61 64 65 72 2e 0a 5e 28 4e   the header..^(N
a830: 6f 74 65 20 74 68 61 74 20 66 6f 72 20 73 65 72  ote that for ser
a840: 69 61 6c 20 74 79 70 65 73 20 30 2c 20 38 2c 20  ial types 0, 8, 
a850: 39 2c 20 31 32 2c 20 61 6e 64 20 31 33 2c 20 74  9, 12, and 13, t
a860: 68 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f  he value is zero
a870: 20 62 79 74 65 73 20 69 6e 0a 6c 65 6e 67 74 68   bytes in.length
a880: 2e 20 20 49 66 20 61 6c 6c 20 63 6f 6c 75 6d 6e  .  If all column
a890: 73 20 61 72 65 20 6f 66 20 74 68 65 73 65 20 74  s are of these t
a8a0: 79 70 65 73 20 74 68 65 6e 20 74 68 65 20 62 6f  ypes then the bo
a8b0: 64 79 20 73 65 63 74 69 6f 6e 20 6f 66 20 74 68  dy section of th
a8c0: 65 0a 72 65 63 6f 72 64 20 69 73 20 65 6d 70 74  e.record is empt
a8d0: 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e  y.)^</p>..<h3>2.
a8e0: 32 20 52 65 63 6f 72 64 20 53 6f 72 74 20 4f 72  2 Record Sort Or
a8f0: 64 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  der</h3>..<p>The
a900: 20 6f 72 64 65 72 20 6f 66 20 6b 65 79 73 20 69   order of keys i
a910: 6e 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  n an index b-tre
a920: 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
a930: 62 79 20 74 68 65 20 73 6f 72 74 20 6f 72 64 65  by the sort orde
a940: 72 20 6f 66 0a 74 68 65 20 72 65 63 6f 72 64 73  r of.the records
a950: 20 74 68 61 74 20 74 68 65 20 6b 65 79 73 20 72   that the keys r
a960: 65 70 72 65 73 65 6e 74 2e 20 20 52 65 63 6f 72  epresent.  Recor
a970: 64 20 63 6f 6d 70 61 72 69 73 6f 6e 20 70 72 6f  d comparison pro
a980: 67 72 65 73 73 65 73 20 63 6f 6c 75 6d 6e 0a 62  gresses column.b
a990: 79 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6c 75 6d  y column.  Colum
a9a0: 6e 73 20 6f 66 20 61 20 72 65 63 6f 72 64 20 61  ns of a record a
a9b0: 72 65 20 65 78 61 6d 69 6e 65 64 20 66 72 6f 6d  re examined from
a9c0: 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20   left to right. 
a9d0: 20 54 68 65 0a 66 69 72 73 74 20 70 61 69 72 20   The.first pair 
a9e0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  of columns that 
a9f0: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 64 65  are not equal de
aa00: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 72 65 6c  termines the rel
aa10: 61 74 69 76 65 20 6f 72 64 65 72 0a 6f 66 20 74  ative order.of t
aa20: 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 2e 20  he two records. 
aa30: 20 54 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20   The sort order 
aa40: 6f 66 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f  of individual co
aa50: 6c 75 6d 6e 73 20 69 73 20 61 73 0a 66 6f 6c 6c  lumns is as.foll
aa60: 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c  ows:</p>..<ol>.<
aa70: 6c 69 3e 5e 4e 55 4c 4c 20 76 61 6c 75 65 73 20  li>^NULL values 
aa80: 28 73 65 72 69 61 6c 20 74 79 70 65 20 30 29 20  (serial type 0) 
aa90: 73 6f 72 74 20 66 69 72 73 74 0a 3c 6c 69 3e 5e  sort first.<li>^
aaa0: 4e 75 6d 65 72 69 63 20 76 61 6c 75 65 73 20 28  Numeric values (
aab0: 73 65 72 69 61 6c 20 74 79 70 65 73 20 31 20 74  serial types 1 t
aac0: 68 72 6f 75 67 68 20 39 29 20 73 6f 72 74 20 6e  hrough 9) sort n
aad0: 65 78 74 20 61 6e 64 20 69 6e 20 6e 75 6d 65 72  ext and in numer
aae0: 69 63 20 6f 72 64 65 72 0a 3c 6c 69 3e 5e 54 65  ic order.<li>^Te
aaf0: 78 74 20 76 61 6c 75 65 73 20 28 6f 64 64 20 73  xt values (odd s
ab00: 65 72 69 61 6c 20 74 79 70 65 73 20 31 33 20 61  erial types 13 a
ab10: 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20  nd larger) sort 
ab20: 6e 65 78 74 20 69 6e 20 74 68 65 20 6f 72 64 65  next in the orde
ab30: 72 0a 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64  r.    determined
ab40: 20 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   by the columns 
ab50: 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74  [collating funct
ab60: 69 6f 6e 5d 0a 3c 6c 69 3e 5e 42 4c 4f 42 20 76  ion].<li>^BLOB v
ab70: 61 6c 75 65 73 20 28 65 76 65 6e 20 73 65 72 69  alues (even seri
ab80: 61 6c 20 74 79 70 65 73 20 31 32 20 61 6e 64 20  al types 12 and 
ab90: 6c 61 72 67 65 72 29 20 73 6f 72 74 20 6c 61 73  larger) sort las
aba0: 74 20 69 6e 20 6f 72 64 65 72 20 0a 20 20 20 20  t in order .    
abb0: 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6d 65  determined by me
abc0: 6d 63 6d 70 28 29 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c  mcmp()..</ol>..<
abd0: 70 3e 41 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 66  p>A [collating f
abe0: 75 6e 63 74 69 6f 6e 5d 20 66 6f 72 20 65 61 63  unction] for eac
abf0: 68 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 65 63 65  h column is nece
ac00: 73 73 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  ssary in order t
ac10: 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65 20 6f 72  o compute.the or
ac20: 64 65 72 20 6f 66 20 74 65 78 74 20 66 69 65 6c  der of text fiel
ac30: 64 73 2e 20 20 5e 53 51 4c 69 74 65 20 64 65 66  ds.  ^SQLite def
ac40: 69 6e 65 73 20 74 68 72 65 65 20 62 75 69 6c 74  ines three built
ac50: 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  -in collating fu
ac60: 6e 63 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c  nctions:.</p>..<
ac70: 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c  blockquote><tabl
ac80: 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 73  e border=0 cells
ac90: 70 61 63 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 5e  pacing=10>.<tr>^
aca0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 42  <td valign=top>B
acb0: 49 4e 41 52 59 0a 20 20 20 20 3c 74 64 3e 53 74  INARY.    <td>St
acc0: 72 69 6e 67 73 20 61 72 65 20 63 6f 6d 70 61 72  rings are compar
acd0: 65 64 20 62 79 74 65 20 62 79 20 62 79 74 65 20  ed byte by byte 
ace0: 75 73 69 6e 67 20 74 68 65 20 6d 65 6d 63 6d 70  using the memcmp
acf0: 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20  () function.    
ad00: 20 20 20 20 66 72 6f 6d 20 74 68 65 20 73 74 61      from the sta
ad10: 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79 2e  ndard C library.
ad20: 0a 3c 74 72 3e 5e 3c 74 64 20 76 61 6c 69 67 6e  .<tr>^<td valign
ad30: 3d 74 6f 70 3e 4e 4f 43 41 53 45 0a 20 20 20 20  =top>NOCASE.    
ad40: 3c 74 64 3e 4c 69 6b 65 20 42 49 4e 41 52 59 20  <td>Like BINARY 
ad50: 65 78 63 65 70 74 20 74 68 61 74 20 75 70 70 65  except that uppe
ad60: 72 63 61 73 65 20 41 53 43 49 49 20 63 68 61 72  rcase ASCII char
ad70: 61 63 74 65 72 73 20 28 27 41 27 20 74 68 72 6f  acters ('A' thro
ad80: 75 67 68 20 27 5a 27 29 0a 20 20 20 20 20 20 20  ugh 'Z').       
ad90: 20 61 72 65 20 66 6f 6c 64 65 64 20 69 6e 74 6f   are folded into
ada0: 20 74 68 65 69 72 20 6c 6f 77 65 72 63 61 73 65   their lowercase
adb0: 20 65 71 75 69 76 61 6c 65 6e 74 73 20 70 72 69   equivalents pri
adc0: 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 74 68  or to running th
add0: 65 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61 72  e.        compar
ade0: 69 73 6f 6e 2e 20 20 4e 6f 74 65 20 74 68 61 74  ison.  Note that
adf0: 20 6f 6e 6c 79 20 41 53 43 49 49 20 63 68 61 72   only ASCII char
ae00: 61 63 74 65 72 73 20 61 72 65 20 63 61 73 65 2d  acters are case-
ae10: 66 6f 6c 64 65 64 2e 20 20 5e 4e 4f 43 41 53 45  folded.  ^NOCASE
ae20: 0a 20 20 20 20 20 20 20 20 64 6f 65 73 20 6e 6f  .        does no
ae30: 74 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 67 65  t implement a ge
ae40: 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 20 75 6e  neral purpose un
ae50: 69 63 6f 64 65 20 63 61 73 65 6c 65 73 73 20 63  icode caseless c
ae60: 6f 6d 70 61 72 69 73 6f 6e 2e 0a 3c 74 72 3e 5e  omparison..<tr>^
ae70: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 52  <td valign=top>R
ae80: 54 52 49 4d 0a 20 20 20 20 3c 74 64 3e 4c 69 6b  TRIM.    <td>Lik
ae90: 65 20 42 49 4e 41 52 59 20 65 78 63 65 70 74 20  e BINARY except 
aea0: 74 68 61 74 20 73 70 61 63 65 73 20 61 74 20 74  that spaces at t
aeb0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74  he end of the st
aec0: 72 69 6e 67 20 61 72 65 20 65 6c 69 64 65 64 0a  ring are elided.
aed0: 20 20 20 20 20 20 20 20 70 72 69 6f 72 20 74 6f          prior to
aee0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 3c 2f 74   comparison..</t
aef0: 61 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  able></blockquot
af00: 65 3e 0a 0a 3c 70 3e 5e 41 64 64 69 74 69 6f 6e  e>..<p>^Addition
af10: 61 6c 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 73  al application-s
af20: 70 65 63 69 66 69 63 20 63 6f 6c 6c 61 74 69 6e  pecific collatin
af30: 67 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20  g functions can 
af40: 62 65 20 61 64 64 65 64 20 74 6f 0a 53 51 4c 69  be added to.SQLi
af50: 74 65 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71  te using the [sq
af60: 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
af70: 6c 61 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  lation()] interf
af80: 61 63 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  ace.</p>..<p>^Th
af90: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
afa0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  ing function for
afb0: 20 61 6c 6c 20 73 74 72 69 6e 67 73 20 69 73 20   all strings is 
afc0: 42 49 4e 41 52 59 2e 0a 5e 41 6c 74 65 72 6e 61  BINARY..^Alterna
afd0: 74 69 76 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  tive collating f
afe0: 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 74 61 62  unctions for tab
aff0: 6c 65 20 63 6f 6c 75 6d 6e 73 20 63 61 6e 20 62  le columns can b
b000: 65 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  e specified in t
b010: 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he.[CREATE TABLE
b020: 5d 20 73 74 61 74 65 6d 65 6e 74 20 75 73 69 6e  ] statement usin
b030: 67 20 74 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c  g the COLLATE cl
b040: 61 75 73 65 20 6f 6e 20 74 68 65 20 5b 63 6f 6c  ause on the [col
b050: 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e 5d 2e  umn definition].
b060: 0a 5e 57 68 65 6e 20 61 20 63 6f 6c 75 6d 6e 20  .^When a column 
b070: 69 73 20 69 6e 64 65 78 65 64 2c 20 74 68 65 20  is indexed, the 
b080: 73 61 6d 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  same collating f
b090: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
b0a0: 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45  d in the.[CREATE
b0b0: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
b0c0: 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  t is used for th
b0d0: 65 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  e column in the 
b0e0: 69 6e 64 65 78 2c 20 62 79 20 64 65 66 61 75 6c  index, by defaul
b0f0: 74 2c 0a 74 68 6f 75 67 68 20 74 68 69 73 20 63  t,.though this c
b100: 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e  an be overridden
b110: 20 75 73 69 6e 67 20 61 20 43 4f 4c 4c 41 54 45   using a COLLATE
b120: 20 63 6c 61 75 73 65 20 69 6e 20 74 68 65 20 0a   clause in the .
b130: 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73  [CREATE INDEX] s
b140: 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c 68 33 3e 32  tatement...<h3>2
b150: 2e 33 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f  .3 Representatio
b160: 6e 20 4f 66 20 53 51 4c 20 54 61 62 6c 65 73 3c  n Of SQL Tables<
b170: 2f 68 33 3e 0a 0a 3c 70 3e 45 61 63 68 20 6f 72  /h3>..<p>Each or
b180: 64 69 6e 61 72 79 20 53 51 4c 20 74 61 62 6c 65  dinary SQL table
b190: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
b1a0: 20 73 63 68 65 6d 61 20 69 73 20 72 65 70 72 65   schema is repre
b1b0: 73 65 6e 74 65 64 20 6f 6e 20 64 69 73 6b 0a 62  sented on disk.b
b1c0: 79 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  y a table b-tree
b1d0: 2e 20 20 45 61 63 68 20 65 6e 74 72 79 20 69 6e  .  Each entry in
b1e0: 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65   the table b-tre
b1f0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  e corresponds to
b200: 20 61 20 72 6f 77 0a 6f 66 20 74 68 65 20 53 51   a row.of the SQ
b210: 4c 20 74 61 62 6c 65 2e 20 20 54 68 65 20 5b 72  L table.  The [r
b220: 6f 77 69 64 5d 20 6f 66 20 74 68 65 20 53 51 4c  owid] of the SQL
b230: 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 36 34   table is the 64
b240: 2d 62 69 74 20 73 69 67 6e 65 64 0a 69 6e 74 65  -bit signed.inte
b250: 67 65 72 20 6b 65 79 20 66 6f 72 20 65 61 63 68  ger key for each
b260: 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61   entry in the ta
b270: 62 6c 65 20 62 2d 74 72 65 65 2e 3c 2f 70 3e 0a  ble b-tree.</p>.
b280: 0a 3c 70 3e 54 68 65 20 63 6f 6e 74 65 6e 74 20  .<p>The content 
b290: 6f 66 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c  of each SQL tabl
b2a0: 65 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20  e row is stored 
b2b0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
b2c0: 66 69 6c 65 20 62 79 0a 66 69 72 73 74 20 63 6f  file by.first co
b2d0: 6d 62 69 6e 69 6e 67 20 74 68 65 20 76 61 6c 75  mbining the valu
b2e0: 65 73 20 69 6e 20 74 68 65 20 76 61 72 69 6f 75  es in the variou
b2f0: 73 20 63 6f 6c 75 6d 6e 73 20 69 6e 74 6f 20 61  s columns into a
b300: 20 62 79 74 65 20 61 72 72 61 79 0a 69 6e 20 74   byte array.in t
b310: 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
b320: 2c 20 74 68 65 6e 20 73 74 6f 72 69 6e 67 20 74  , then storing t
b330: 68 61 74 20 62 79 74 65 20 61 72 72 61 79 20 61  hat byte array a
b340: 73 20 74 68 65 20 70 61 79 6c 6f 61 64 20 69 6e  s the payload in
b350: 0a 61 6e 20 65 6e 74 72 79 20 69 6e 20 74 68 65  .an entry in the
b360: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e 20 20   table b-tree.  
b370: 5e 54 68 65 20 6f 72 64 65 72 20 6f 66 20 76 61  ^The order of va
b380: 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  lues in the reco
b390: 72 64 20 69 73 0a 74 68 65 20 73 61 6d 65 20 61  rd is.the same a
b3a0: 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63  s the order of c
b3b0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 53 51  olumns in the SQ
b3c0: 4c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  L table definiti
b3d0: 6f 6e 2e 0a 5e 57 68 65 6e 20 61 6e 20 53 51 4c  on..^When an SQL
b3e0: 20 74 61 62 6c 65 20 74 68 61 74 20 69 6e 63 6c   table that incl
b3f0: 75 64 65 73 20 61 6e 0a 5b 49 4e 54 45 47 45 52  udes an.[INTEGER
b400: 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f   PRIMARY KEY] co
b410: 6c 75 6d 6e 20 28 77 68 69 63 68 20 61 6c 69 61  lumn (which alia
b420: 73 65 73 20 74 68 65 20 5b 72 6f 77 69 64 5d 29  ses the [rowid])
b430: 20 74 68 65 6e 20 74 68 61 74 0a 63 6f 6c 75 6d   then that.colum
b440: 6e 20 61 70 70 65 61 72 73 20 69 6e 20 74 68 65  n appears in the
b450: 20 72 65 63 6f 72 64 20 61 73 20 61 20 4e 55 4c   record as a NUL
b460: 4c 20 76 61 6c 75 65 2e 20 20 5e 53 51 4c 69 74  L value.  ^SQLit
b470: 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 75 73  e will always us
b480: 65 0a 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  e.the table b-tr
b490: 65 65 20 6b 65 79 20 72 61 74 68 65 72 20 74 68  ee key rather th
b4a0: 61 6e 20 74 68 65 20 4e 55 4c 4c 20 76 61 6c 75  an the NULL valu
b4b0: 65 20 77 68 65 6e 20 72 65 66 65 72 65 6e 63 69  e when referenci
b4c0: 6e 67 20 74 68 65 0a 5b 49 4e 54 45 47 45 52 20  ng the.[INTEGER 
b4d0: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6c  PRIMARY KEY] col
b4e0: 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66  umn.</p>..<p>^If
b4f0: 20 74 68 65 20 5b 61 66 66 69 6e 69 74 79 5d 20   the [affinity] 
b500: 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 52  of a column is R
b510: 45 41 4c 20 61 6e 64 20 74 68 61 74 20 63 6f 6c  EAL and that col
b520: 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61 0a 76  umn contains a.v
b530: 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20 62 65  alue that can be
b540: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6e   converted to an
b550: 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74   integer without
b560: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
b570: 74 69 6f 6e 0a 28 69 66 20 74 68 65 20 76 61 6c  tion.(if the val
b580: 75 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 66  ue contains no f
b590: 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74 20 61  ractional part a
b5a0: 6e 64 20 69 73 20 6e 6f 74 20 74 6f 6f 20 6c 61  nd is not too la
b5b0: 72 67 65 20 74 6f 20 62 65 0a 72 65 70 72 65 73  rge to be.repres
b5c0: 65 6e 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65  ented as an inte
b5d0: 67 65 72 29 20 74 68 65 6e 20 74 68 65 20 63 6f  ger) then the co
b5e0: 6c 75 6d 6e 20 6d 61 79 20 62 65 20 73 74 6f 72  lumn may be stor
b5f0: 65 64 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ed in the record
b600: 0a 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  .as an integer. 
b610: 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20 63 6f   ^SQLite will co
b620: 6e 76 65 72 74 20 74 68 65 20 76 61 6c 75 65 20  nvert the value 
b630: 62 61 63 6b 20 74 6f 20 66 6c 6f 61 74 69 6e 67  back to floating
b640: 0a 70 6f 69 6e 74 20 77 68 65 6e 20 65 78 74 72  .point when extr
b650: 61 63 74 69 6e 67 20 69 74 20 66 72 6f 6d 20 74  acting it from t
b660: 68 65 20 72 65 63 6f 72 64 2e 3c 2f 70 3e 0a 0a  he record.</p>..
b670: 0a 3c 68 33 3e 32 2e 34 20 52 65 70 72 65 73 65  .<h3>2.4 Represe
b680: 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 49  ntation Of SQL I
b690: 6e 64 69 63 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  ndices</h3>..<p>
b6a0: 5e 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 2c  ^Each SQL index,
b6b0: 20 77 68 65 74 68 65 72 20 65 78 70 6c 69 63 69   whether explici
b6c0: 74 6c 79 20 64 65 63 6c 61 72 65 64 20 76 69 61  tly declared via
b6d0: 20 61 20 5b 43 52 45 41 54 45 20 49 4e 44 45 58   a [CREATE INDEX
b6e0: 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72 20 69  ] statement.or i
b6f0: 6d 70 6c 69 65 64 20 62 79 20 61 20 55 4e 49 51  mplied by a UNIQ
b700: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 63  UE constraint, c
b710: 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61 6e  orresponds to an
b720: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69 6e   index b-tree in
b730: 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66 69   the.database fi
b740: 6c 65 2e 0a 5e 54 68 65 72 65 20 69 73 20 6f 6e  le..^There is on
b750: 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78  e entry in index
b760: 20 62 2d 74 72 65 65 20 66 6f 72 20 65 61 63 68   b-tree for each
b770: 20 72 6f 77 20 69 6e 20 74 68 65 20 63 6f 72 72   row in the corr
b780: 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 2e  esponding table.
b790: 0a 5e 54 68 65 20 6b 65 79 20 74 6f 20 61 6e 20  .^The key to an 
b7a0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69 73 0a  index b-tree is.
b7b0: 61 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f 73 65  a record compose
b7c0: 64 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  d of the columns
b7d0: 20 74 68 61 74 20 61 72 65 20 62 65 69 6e 67 20   that are being 
b7e0: 69 6e 64 65 78 65 64 20 66 6f 6c 6c 6f 77 65 64  indexed followed
b7f0: 20 62 79 20 74 68 65 0a 5b 72 6f 77 69 64 5d 20   by the.[rowid] 
b800: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 72 6f 77  of the table row
b810: 2e 20 20 42 65 63 61 75 73 65 20 65 76 65 72 79  .  Because every
b820: 20 72 6f 77 20 69 6e 20 61 20 74 61 62 6c 65 20   row in a table 
b830: 68 61 73 20 61 20 75 6e 69 71 75 65 0a 72 6f 77  has a unique.row
b840: 69 64 20 61 6e 64 20 61 6c 6c 20 6b 65 79 73 20  id and all keys 
b850: 69 6e 20 61 6e 20 69 6e 64 65 78 20 63 6f 6e 74  in an index cont
b860: 61 69 6e 20 74 68 65 20 72 6f 77 69 64 2c 20 61  ain the rowid, a
b870: 6c 6c 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  ll keys in an in
b880: 64 65 78 0a 61 72 65 20 75 6e 69 71 75 65 2e 3c  dex.are unique.<
b890: 2f 70 3e 0a 0a 3c 70 3e 5e 54 68 65 72 65 20 69  /p>..<p>^There i
b8a0: 73 20 61 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d  s a one-to-one m
b8b0: 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 72  apping between r
b8c0: 6f 77 73 20 69 6e 20 61 20 74 61 62 6c 65 20 61  ows in a table a
b8d0: 6e 64 0a 65 6e 74 72 69 65 73 20 69 6e 20 65 61  nd.entries in ea
b8e0: 63 68 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  ch index associa
b8f0: 74 65 64 20 77 69 74 68 20 74 68 61 74 20 74 61  ted with that ta
b900: 62 6c 65 2e 0a 5e 43 6f 72 72 65 73 70 6f 6e 64  ble..^Correspond
b910: 69 6e 67 20 72 6f 77 73 20 69 6e 74 20 74 68 65  ing rows int the
b920: 20 69 6e 64 65 78 20 61 6e 64 20 74 61 62 6c 65   index and table
b930: 20 62 2d 74 72 65 65 73 20 73 68 61 72 65 20 74   b-trees share t
b940: 68 65 20 73 61 6d 65 20 72 6f 77 69 64 0a 76 61  he same rowid.va
b950: 6c 75 65 2c 20 61 6e 64 20 63 6f 6e 74 61 69 6e  lue, and contain
b960: 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
b970: 66 6f 72 20 61 6c 6c 20 69 6e 64 65 78 65 64 20  for all indexed 
b980: 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e 0a 0a 3c 68  columns.</p>..<h
b990: 33 3e 32 2e 35 20 53 74 6f 72 61 67 65 20 4f 66  3>2.5 Storage Of
b9a0: 20 54 68 65 20 53 51 4c 20 44 61 74 61 62 61 73   The SQL Databas
b9b0: 65 20 53 63 68 65 6d 61 3c 2f 68 33 3e 0a 0a 3c  e Schema</h3>..<
b9c0: 70 3e 5e 50 61 67 65 20 31 20 6f 66 20 61 20 64  p>^Page 1 of a d
b9d0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
b9e0: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6f 66  the root page of
b9f0: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
ba00: 74 68 61 74 0a 68 6f 6c 64 73 20 61 20 73 70 65  that.holds a spe
ba10: 63 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 64  cial table named
ba20: 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22   "sqlite_master"
ba30: 20 28 6f 72 20 22 73 71 6c 69 74 65 5f 74 65 6d   (or "sqlite_tem
ba40: 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a 74 68 65  p_master" in.the
ba50: 20 63 61 73 65 20 6f 66 20 61 20 54 45 4d 50 20   case of a TEMP 
ba60: 64 61 74 61 62 61 73 65 29 20 77 68 69 63 68 20  database) which 
ba70: 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6d 70 6c  stores the compl
ba80: 65 74 65 0a 64 61 74 61 62 61 73 65 20 73 63 68  ete.database sch
ba90: 65 6d 61 2e 20 20 5e 28 54 68 65 20 73 74 72 75  ema.  ^(The stru
baa0: 63 74 75 72 65 20 6f 66 20 74 68 65 20 73 71 6c  cture of the sql
bab0: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
bac0: 20 69 73 20 61 73 0a 69 66 20 69 74 20 68 61 64   is as.if it had
bad0: 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 75 73   been created us
bae0: 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ing the followin
baf0: 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  g SQL:</p>..<blo
bb00: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
bb10: 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74  EATE TABLE sqlit
bb20: 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79 70 65  e_master(.  type
bb30: 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74 65   text,.  name te
bb40: 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20 74  xt,.  tbl_name t
bb50: 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65 20  ext,.  rootpage 
bb60: 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c 20 74  integer,.  sql t
bb70: 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ext.);.</pre></b
bb80: 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
bb90: 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  >^The sqlite_mas
bba0: 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  ter table contai
bbb0: 6e 73 20 61 20 72 6f 77 20 66 6f 72 20 65 61 63  ns a row for eac
bbc0: 68 20 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20  h table, index, 
bbd0: 76 69 65 77 2c 0a 61 6e 64 20 74 72 69 67 67 65  view,.and trigge
bbe0: 72 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  r in the databas
bbf0: 65 20 73 63 68 65 6d 61 2c 20 65 78 63 65 70 74  e schema, except
bc00: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65 6e 74   there is no ent
bc10: 72 79 20 66 6f 72 20 74 68 65 0a 73 71 6c 69 74  ry for the.sqlit
bc20: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69  e_master table i
bc30: 74 73 65 6c 66 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  tself.</p>..<p>^
bc40: 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74  (The sqlite_mast
bc50: 65 72 2e 74 79 70 65 20 63 6f 6c 75 6d 6e 20 77  er.type column w
bc60: 69 6c 6c 20 62 65 20 6f 6e 65 0a 6f 66 20 74 68  ill be one.of th
bc70: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74  e following text
bc80: 20 73 74 72 69 6e 67 73 3a 20 20 27 74 61 62 6c   strings:  'tabl
bc90: 65 27 2c 20 27 69 6e 64 65 78 27 2c 20 27 76 69  e', 'index', 'vi
bca0: 65 77 27 2c 20 6f 72 20 27 74 72 69 67 67 65 72  ew', or 'trigger
bcb0: 27 0a 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  '.according to t
bcc0: 68 65 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63  he type of objec
bcd0: 74 20 64 65 66 69 6e 65 64 2e 20 20 5e 54 68 65  t defined.  ^The
bce0: 20 27 74 61 62 6c 65 27 20 73 74 72 69 6e 67 20   'table' string 
bcf0: 69 73 20 75 73 65 64 0a 66 6f 72 20 62 6f 74 68  is used.for both
bd00: 20 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 5b 76   ordinary and [v
bd10: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e 29  irtual tables].)
bd20: 5e 3c 2f 70 3e 0a 0a 3c 2f 70 3e 5e 28 54 68 65  ^</p>..</p>^(The
bd30: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e   sqlite_master.n
bd40: 61 6d 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20  ame column will 
bd50: 68 6f 6c 64 20 74 68 65 20 6e 61 6d 65 20 6f 66  hold the name of
bd60: 20 74 68 65 20 6f 62 6a 65 63 74 2e 0a 5e 46 6f   the object..^Fo
bd70: 72 20 69 6e 64 69 63 65 73 20 74 68 61 74 20 61  r indices that a
bd80: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
bd90: 20 63 72 65 61 74 65 64 20 62 79 20 55 4e 49 51   created by UNIQ
bda0: 55 45 20 6f 72 20 50 52 49 4d 41 52 59 20 4b 45  UE or PRIMARY KE
bdb0: 59 0a 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 74  Y.constraints, t
bdc0: 68 65 20 6e 61 6d 65 20 69 73 20 22 73 71 6c 69  he name is "sqli
bdd0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42  te_autoindex_TAB
bde0: 4c 45 5f 4e 22 20 77 68 65 72 65 20 54 41 42 4c  LE_N" where TABL
bdf0: 45 20 69 73 20 0a 72 65 70 6c 61 63 65 64 20 62  E is .replaced b
be00: 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  y the name of th
be10: 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
be20: 74 61 69 6e 73 20 74 68 65 20 63 6f 6e 73 74 72  tains the constr
be30: 61 69 6e 74 20 61 6e 64 20 4e 20 0a 69 73 20 61  aint and N .is a
be40: 6e 20 69 6e 74 65 67 65 72 20 62 65 67 69 6e 6e  n integer beginn
be50: 69 6e 67 0a 77 69 74 68 20 31 20 61 6e 64 20 69  ing.with 1 and i
be60: 6e 63 72 65 61 73 69 6e 67 20 62 79 20 6f 6e 65  ncreasing by one
be70: 20 77 69 74 68 20 65 61 63 68 20 63 6f 6e 73 74   with each const
be80: 72 61 69 6e 74 20 73 65 65 6e 2e 29 5e 3c 2f 70  raint seen.)^</p
be90: 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65  >..<p>The sqlite
bea0: 5f 6d 61 73 74 65 72 2e 74 62 6c 5f 6e 61 6d 65  _master.tbl_name
beb0: 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68   column holds th
bec0: 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 61 62 6c  e name of a tabl
bed0: 65 20 6f 72 20 76 69 65 77 0a 74 68 61 74 20 74  e or view.that t
bee0: 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61 73 73  he object is ass
bef0: 6f 63 69 61 74 65 64 20 77 69 74 68 2e 20 20 5e  ociated with.  ^
bf00: 46 6f 72 20 61 20 74 61 62 6c 65 20 6f 72 20 76  For a table or v
bf10: 69 65 77 2c 20 74 68 65 0a 74 62 6c 5f 6e 61 6d  iew, the.tbl_nam
bf20: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f  e column is a co
bf30: 70 79 20 6f 66 20 74 68 65 20 6e 61 6d 65 20 63  py of the name c
bf40: 6f 6c 75 6d 6e 2e 20 20 5e 46 6f 72 20 61 6e 20  olumn.  ^For an 
bf50: 69 6e 64 65 78 2c 20 74 68 65 20 74 62 6c 5f 6e  index, the tbl_n
bf60: 61 6d 65 0a 69 73 20 74 68 65 20 6e 61 6d 65 20  ame.is the name 
bf70: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
bf80: 74 20 69 73 20 69 6e 64 65 78 65 64 2e 20 20 5e  t is indexed.  ^
bf90: 46 6f 72 20 61 20 74 72 69 67 67 65 72 2c 20 74  For a trigger, t
bfa0: 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 63 6f 6c 75  he tbl_name.colu
bfb0: 6d 6e 20 73 74 6f 72 65 73 20 74 68 65 20 6e 61  mn stores the na
bfc0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
bfd0: 6f 72 20 76 69 65 77 20 74 68 61 74 20 63 61 75  or view that cau
bfe0: 73 65 73 20 74 68 65 20 74 72 69 67 67 65 72 20  ses the trigger 
bff0: 0a 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c  .to fire.</p>..<
c000: 70 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d  p>^(The sqlite_m
c010: 61 73 74 65 72 2e 72 6f 6f 74 70 61 67 65 20 63  aster.rootpage c
c020: 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74 68 65  olumn stores the
c030: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
c040: 74 68 65 20 72 6f 6f 74 0a 62 2d 74 72 65 65 20  the root.b-tree 
c050: 70 61 67 65 20 66 6f 72 20 74 61 62 6c 65 73 20  page for tables 
c060: 61 6e 64 20 69 6e 64 69 63 65 73 2e 29 5e 20 20  and indices.)^  
c070: 5e 46 6f 72 20 72 6f 77 73 20 74 68 61 74 20 64  ^For rows that d
c080: 65 66 69 6e 65 20 76 69 65 77 73 2c 20 74 72 69  efine views, tri
c090: 67 67 65 72 73 2c 0a 61 6e 64 20 76 69 72 74 75  ggers,.and virtu
c0a0: 61 6c 20 74 61 62 6c 65 73 2c 20 74 68 65 20 72  al tables, the r
c0b0: 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20 69  ootpage column i
c0c0: 73 20 30 20 6f 72 20 4e 55 4c 4c 2e 3c 2f 70 3e  s 0 or NULL.</p>
c0d0: 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69 74  ..<p>^(The sqlit
c0e0: 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f 6c  e_master.sql col
c0f0: 75 6d 6e 20 73 74 6f 72 65 73 20 53 51 4c 20 74  umn stores SQL t
c100: 65 78 74 20 74 68 61 74 20 64 65 73 63 72 69 62  ext that describ
c110: 65 73 20 74 68 65 0a 6f 62 6a 65 63 74 2e 20 20  es the.object.  
c120: 54 68 69 73 20 53 51 4c 20 74 65 78 74 20 69 73  This SQL text is
c130: 20 61 20 5b 43 52 45 41 54 45 20 54 41 42 4c 45   a [CREATE TABLE
c140: 5d 2c 20 5b 43 52 45 41 54 45 20 56 49 52 54 55  ], [CREATE VIRTU
c150: 41 4c 20 54 41 42 4c 45 5d 2c 0a 5b 43 52 45 41  AL TABLE],.[CREA
c160: 54 45 20 49 4e 44 45 58 5d 2c 0a 5b 43 52 45 41  TE INDEX],.[CREA
c170: 54 45 20 56 49 45 57 5d 2c 20 6f 72 20 5b 43 52  TE VIEW], or [CR
c180: 45 41 54 45 20 54 52 49 47 47 45 52 5d 20 73 74  EATE TRIGGER] st
c190: 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 66 20  atement that if 
c1a0: 65 76 61 6c 75 61 74 65 64 20 61 67 61 69 6e 73  evaluated agains
c1b0: 74 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 66  t.the database f
c1c0: 69 6c 65 20 77 68 65 6e 20 69 74 20 69 73 20 74  ile when it is t
c1d0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
c1e0: 20 6f 66 20 61 20 5b 64 61 74 61 62 61 73 65 20   of a [database 
c1f0: 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a 77 6f 75 6c  connection].woul
c200: 64 20 72 65 63 72 65 61 74 65 64 20 74 68 65 20  d recreated the 
c210: 6f 62 6a 65 63 74 2e 29 20 20 54 68 65 20 74 65  object.)  The te
c220: 78 74 20 69 73 20 75 73 75 61 6c 6c 79 20 61 20  xt is usually a 
c230: 63 6f 70 79 20 6f 66 20 74 68 65 20 6f 72 69 67  copy of the orig
c240: 69 6e 61 6c 0a 73 74 61 74 65 6d 65 6e 74 20 75  inal.statement u
c250: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
c260: 65 20 6f 62 6a 65 63 74 20 62 75 74 20 77 69 74  e object but wit
c270: 68 20 6e 6f 72 6d 61 6c 69 7a 61 74 69 6f 6e 73  h normalizations
c280: 20 61 70 70 6c 69 65 64 20 73 6f 0a 74 68 61 74   applied so.that
c290: 20 74 68 65 20 74 65 78 74 20 63 6f 6e 66 6f 72   the text confor
c2a0: 6d 73 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ms to the follow
c2b0: 69 6e 67 20 72 75 6c 65 73 3a 0a 0a 3c 75 6c 3e  ing rules:..<ul>
c2c0: 0a 3c 6c 69 3e 5e 54 68 65 20 43 52 45 41 54 45  .<li>^The CREATE
c2d0: 2c 20 54 41 42 4c 45 2c 20 56 49 45 57 2c 20 54  , TABLE, VIEW, T
c2e0: 52 49 47 47 45 52 2c 20 61 6e 64 20 49 4e 44 45  RIGGER, and INDE
c2f0: 58 20 6b 65 79 77 6f 72 64 73 20 61 74 20 74 68  X keywords at th
c300: 65 20 62 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74  e beginning.of t
c310: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 61 72 65  he statement are
c320: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 61 6c   converted to al
c330: 6c 20 75 70 70 65 72 20 63 61 73 65 20 6c 65 74  l upper case let
c340: 74 65 72 73 2e 0a 3c 6c 69 3e 5e 54 68 65 20 54  ters..<li>^The T
c350: 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59  EMP or TEMPORARY
c360: 20 6b 65 79 77 6f 72 64 20 69 73 20 72 65 6d 6f   keyword is remo
c370: 76 65 64 20 69 66 20 69 74 20 6f 63 63 75 72 73  ved if it occurs
c380: 20 61 66 74 65 72 20 74 68 65 20 0a 69 6e 69 74   after the .init
c390: 69 61 6c 20 43 52 45 41 54 45 20 6b 65 79 77 6f  ial CREATE keywo
c3a0: 72 64 2e 0a 3c 6c 69 3e 5e 41 6e 79 20 64 61 74  rd..<li>^Any dat
c3b0: 61 62 61 73 65 20 6e 61 6d 65 20 71 75 61 6c 69  abase name quali
c3c0: 66 69 65 72 20 74 68 61 74 20 6f 63 63 75 72 73  fier that occurs
c3d0: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 6e 61   prior to the na
c3e0: 6d 65 20 6f 66 20 74 68 65 0a 6f 62 6a 65 63 74  me of the.object
c3f0: 20 62 65 69 6e 67 20 63 72 65 61 74 65 64 20 69   being created i
c400: 73 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e 5e  s removed..<li>^
c410: 4c 65 61 64 69 6e 67 20 73 70 61 63 65 73 20 61  Leading spaces a
c420: 72 65 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c 69 3e  re removed..<li>
c430: 5e 41 6c 6c 20 73 70 61 63 65 73 20 66 6f 6c 6c  ^All spaces foll
c440: 6f 77 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  owing the first 
c450: 74 77 6f 20 6b 65 79 77 6f 72 64 73 20 61 72 65  two keywords are
c460: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
c470: 61 20 73 69 6e 67 6c 65 0a 73 70 61 63 65 2e 0a  a single.space..
c480: 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20  </ul>..<p>^(The 
c490: 74 65 78 74 20 69 6e 20 74 68 65 20 73 71 6c 69  text in the sqli
c4a0: 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f  te_master.sql co
c4b0: 6c 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f  lumn is a copy o
c4c0: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 43  f the original.C
c4d0: 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  REATE statement 
c4e0: 74 65 78 74 20 74 68 61 74 20 63 72 65 61 74 65  text that create
c4f0: 64 20 74 68 65 20 6f 62 6a 65 63 74 2c 20 65 78  d the object, ex
c500: 63 65 70 74 20 6e 6f 72 6d 61 6c 69 7a 65 64 20  cept normalized 
c510: 61 73 0a 64 65 73 63 72 69 62 65 64 20 61 62 6f  as.described abo
c520: 76 65 20 61 6e 64 20 61 73 20 6d 6f 64 69 66 69  ve and as modifi
c530: 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74  ed by subsequent
c540: 20 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 73   [ALTER TABLE] s
c550: 74 61 74 65 6d 65 6e 74 73 2e 29 5e 3c 2f 70 3e  tatements.)^</p>
c560: 0a 0a 3c 70 3e 5e 28 46 6f 72 20 69 6e 64 69 63  ..<p>^(For indic
c570: 65 73 20 74 68 61 74 20 61 72 65 20 61 75 74 6f  es that are auto
c580: 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
c590: 64 20 62 79 20 55 4e 49 51 55 45 20 6f 72 0a 50  d by UNIQUE or.P
c5a0: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
c5b0: 72 61 69 6e 74 73 2c 20 74 68 65 20 73 71 6c 69  raints, the sqli
c5c0: 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 66 69  te_master.sql fi
c5d0: 65 6c 64 20 69 73 20 4e 55 4c 4c 2e 29 5e 3c 2f  eld is NULL.)^</
c5e0: 70 3e 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  p>...<tcl>hd_fra
c5f0: 67 6d 65 6e 74 20 72 6f 6c 6c 62 61 63 6b 6a 6f  gment rollbackjo
c600: 75 72 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63 6b 20  urnal {rollback 
c610: 6a 6f 75 72 6e 61 6c 20 66 6f 72 6d 61 74 7d 3c  journal format}<
c620: 2f 74 63 6c 3e 0a 3c 68 32 3e 33 2e 30 20 54 68  /tcl>.<h2>3.0 Th
c630: 65 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e  e Rollback Journ
c640: 61 6c 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20  al</h2>..<p>The 
c650: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
c660: 20 69 73 20 61 20 66 69 6c 65 20 61 73 73 6f 63   is a file assoc
c670: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
c680: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 0a  SQLite database.
c690: 66 69 6c 65 20 74 68 61 74 20 68 6f 6c 64 20 69  file that hold i
c6a0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
c6b0: 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65 20 64  to restore the d
c6c0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
c6d0: 69 74 73 20 69 6e 69 74 69 61 6c 0a 73 74 61 74  its initial.stat
c6e0: 65 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 75  e during the cou
c6f0: 72 73 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63  rse of a transac
c700: 74 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f 6c 6c 62  tion..^The rollb
c710: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  ack journal file
c720: 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61 74   is always locat
c730: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 0a  ed in the same .
c740: 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68 65  directory as the
c750: 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61   database.file a
c760: 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65 20  nd has the same 
c770: 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61 74 61  name as the data
c780: 62 61 73 65 20 66 69 6c 65 20 62 75 74 20 77 69  base file but wi
c790: 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c  th the string."<
c7a0: 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74 74 3e  tt>-journal</tt>
c7b0: 22 20 61 70 70 65 6e 64 65 64 2e 20 20 54 68 65  " appended.  The
c7c0: 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 61  re can only be a
c7d0: 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63 6b   single rollback
c7e0: 20 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f 63 69 61   journal.associa
c7f0: 74 65 64 20 77 69 74 68 20 61 20 67 69 76 65 20  ted with a give 
c800: 64 61 74 61 62 61 73 65 20 61 6e 64 20 68 65 6e  database and hen
c810: 63 65 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c  ce there can onl
c820: 79 20 62 65 20 6f 6e 65 20 77 72 69 74 65 0a 74  y be one write.t
c830: 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70 65 6e 20  ransaction open 
c840: 61 67 61 69 6e 73 74 20 61 20 73 69 6e 67 6c 65  against a single
c850: 20 64 61 74 61 62 61 73 65 20 61 74 20 6f 6e 65   database at one
c860: 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49   time.</p>..<p>I
c870: 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  f a transaction 
c880: 69 73 20 61 62 6f 72 74 65 64 20 64 75 65 20 74  is aborted due t
c890: 6f 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  o an application
c8a0: 20 63 72 61 73 68 2c 20 61 6e 20 6f 70 65 72 61   crash, an opera
c8b0: 74 69 6e 67 0a 73 79 73 74 65 6d 20 63 72 61 73  ting.system cras
c8c0: 68 2c 20 6f 72 20 61 20 68 61 72 64 77 61 72 65  h, or a hardware
c8d0: 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20 6f   power failure o
c8e0: 72 20 63 72 61 73 68 2c 20 74 68 65 6e 20 74 68  r crash, then th
c8f0: 65 20 64 61 74 61 62 61 73 65 20 6d 61 79 0a 62  e database may.b
c900: 65 20 6c 65 66 74 20 69 6e 20 61 6e 20 69 6e 63  e left in an inc
c910: 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e  onsistent state.
c920: 20 20 5e 54 68 65 20 6e 65 78 74 20 74 69 6d 65    ^The next time
c930: 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70 74 73   SQLite attempts
c940: 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20 64 61 74   to open.the dat
c950: 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20  abase file, the 
c960: 70 72 65 73 65 6e 63 65 20 6f 66 20 74 68 65 20  presence of the 
c970: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
c980: 20 66 69 6c 65 20 77 69 6c 6c 20 62 65 20 0a 64   file will be .d
c990: 65 74 65 63 74 65 64 20 61 6e 64 20 74 68 65 20  etected and the 
c9a0: 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c 20 62 65 20  journal will be 
c9b0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70 6c  automatically pl
c9c0: 61 79 65 64 20 62 61 63 6b 20 74 6f 20 72 65 73  ayed back to res
c9d0: 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62 61 73  tore the.databas
c9e0: 65 20 74 6f 20 69 74 73 20 73 74 61 74 65 20 61  e to its state a
c9f0: 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  t the start of t
ca00: 68 65 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72  he incomplete tr
ca10: 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  ansaction.</p>..
ca20: 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a  <p>^A rollback j
ca30: 6f 75 72 6e 61 6c 20 69 73 20 6f 6e 6c 79 20 63  ournal is only c
ca40: 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 20  onsidered to be 
ca50: 76 61 6c 69 64 20 69 66 20 69 74 20 65 78 69 73  valid if it exis
ca60: 74 73 20 61 6e 64 0a 63 6f 6e 74 61 69 6e 73 20  ts and.contains 
ca70: 61 20 76 61 6c 69 64 20 68 65 61 64 65 72 2e 20  a valid header. 
ca80: 20 48 65 6e 63 65 20 61 20 74 72 61 6e 73 61 63   Hence a transac
ca90: 74 69 6f 6e 20 63 61 6e 20 62 65 20 63 6f 6d 6d  tion can be comm
caa0: 69 74 74 65 64 20 69 6e 20 6f 6e 65 0a 6f 66 20  itted in one.of 
cab0: 74 68 72 65 65 20 77 61 79 73 3a 0a 3c 6f 6c 3e  three ways:.<ol>
cac0: 0a 3c 6c 69 3e 5e 54 68 65 20 72 6f 6c 6c 62 61  .<li>^The rollba
cad0: 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20  ck journal file 
cae0: 63 61 6e 20 62 65 20 64 65 6c 65 74 65 64 2c 0a  can be deleted,.
caf0: 3c 6c 69 3e 5e 54 68 65 20 72 6f 6c 6c 62 61 63  <li>^The rollbac
cb00: 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63  k journal file c
cb10: 61 6e 20 62 65 20 74 72 75 6e 63 61 74 65 64 20  an be truncated 
cb20: 74 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68 2c 20  to zero length, 
cb30: 6f 72 0a 3c 6c 69 3e 5e 54 68 65 20 68 65 61 64  or.<li>^The head
cb40: 65 72 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61  er of the rollba
cb50: 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 62  ck journal can b
cb60: 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 69  e overwritten wi
cb70: 74 68 0a 69 6e 76 61 6c 69 64 20 68 65 61 64 65  th.invalid heade
cb80: 72 20 74 65 78 74 20 28 66 6f 72 20 65 78 61 6d  r text (for exam
cb90: 70 6c 65 2c 20 61 6c 6c 20 7a 65 72 6f 73 29 2e  ple, all zeros).
cba0: 0a 3c 2f 6f 6c 3e 0a 5e 54 68 65 73 65 20 74 68  .</ol>.^These th
cbb0: 72 65 65 20 77 61 79 73 20 6f 66 20 63 6f 6d 6d  ree ways of comm
cbc0: 69 74 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63  itting a transac
cbd0: 74 69 6f 6e 20 63 6f 72 72 65 73 70 6f 6e 64 20  tion correspond 
cbe0: 74 6f 20 74 68 65 20 44 45 4c 45 54 45 2c 0a 54  to the DELETE,.T
cbf0: 52 55 4e 43 41 54 45 2c 20 61 6e 64 20 50 45 52  RUNCATE, and PER
cc00: 53 49 53 54 20 73 65 74 74 69 6e 67 73 2c 20 72  SIST settings, r
cc10: 65 73 70 65 63 74 69 76 65 6c 79 2c 20 6f 66 20  espectively, of 
cc20: 74 68 65 20 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  the [journal_mod
cc30: 65 20 70 72 61 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a  e pragma]..</p>.
cc40: 0a 0a 3c 70 3e 41 20 76 61 6c 69 64 20 72 6f 6c  ..<p>A valid rol
cc50: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 62 65  lback journal be
cc60: 67 69 6e 73 20 77 69 74 68 20 61 20 68 65 61 64  gins with a head
cc70: 65 72 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  er in the follow
cc80: 69 6e 67 20 66 6f 72 6d 61 74 3a 3c 2f 70 3e 0a  ing format:</p>.
cc90: 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c  .<center>.<i>Rol
cca0: 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 48 65  lback Journal He
ccb0: 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  ader Format</i><
ccc0: 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
ccd0: 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
cce0: 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
ccf0: 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
cd00: 69 70 74 69 6f 6e 0a 3c 74 72 3e 5e 28 3c 74 64  iption.<tr>^(<td
cd10: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
cd20: 6e 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c  n=center>0.    <
cd30: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
cd40: 69 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20  ign=center>8.   
cd50: 20 3c 74 64 3e 48 65 61 64 65 72 20 73 74 72 69   <td>Header stri
cd60: 6e 67 3a 20 20 30 78 64 39 2c 20 30 78 64 35 2c  ng:  0xd9, 0xd5,
cd70: 20 30 78 30 35 2c 20 30 78 66 39 2c 20 30 78 32   0x05, 0xf9, 0x2
cd80: 30 2c 20 30 78 61 31 2c 20 30 78 36 33 2c 20 30  0, 0xa1, 0x63, 0
cd90: 78 64 37 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20  xd7)^.<tr>^(<td 
cda0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
cdb0: 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74  =center>8.    <t
cdc0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
cdd0: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
cde0: 3c 74 64 3e 54 68 65 20 22 50 61 67 65 20 43 6f  <td>The "Page Co
cdf0: 75 6e 74 22 20 2d 20 54 68 65 20 6e 75 6d 62 65  unt" - The numbe
ce00: 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
ce10: 65 20 6e 65 78 74 20 73 65 67 6d 65 6e 74 20 6f  e next segment o
ce20: 66 20 74 68 65 20 0a 20 20 20 20 20 20 20 20 6a  f the .        j
ce30: 6f 75 72 6e 61 6c 2c 20 6f 72 20 2d 31 20 74 6f  ournal, or -1 to
ce40: 0a 20 20 20 20 20 20 20 20 6d 65 61 6e 20 61 6c  .        mean al
ce50: 6c 20 63 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65  l content to the
ce60: 20 65 6e 64 20 6f 66 20 74 68 65 20 66 69 6c 65   end of the file
ce70: 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c  )^.<tr>^(<td val
ce80: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
ce90: 6e 74 65 72 3e 31 32 0a 20 20 20 20 3c 74 64 20  nter>12.    <td 
cea0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
ceb0: 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
cec0: 64 3e 41 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65  d>A random nonce
ced0: 20 66 6f 72 20 74 68 65 20 63 68 65 63 6b 73 75   for the checksu
cee0: 6d 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61  m)^.<tr>^(<td va
cef0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
cf00: 65 6e 74 65 72 3e 31 36 0a 20 20 20 20 3c 74 64  enter>16.    <td
cf10: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
cf20: 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
cf30: 74 64 3e 49 6e 69 74 69 61 6c 20 73 69 7a 65 20  td>Initial size 
cf40: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
cf50: 69 6e 20 70 61 67 65 73 29 5e 0a 3c 74 72 3e 5e  in pages)^.<tr>^
cf60: 28 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  (<td valign=top 
cf70: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 0a  align=center>20.
cf80: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
cf90: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
cfa0: 34 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f  4.    <td>Size o
cfb0: 66 20 61 20 64 69 73 6b 20 73 65 63 74 6f 72 20  f a disk sector 
cfc0: 61 73 73 75 6d 65 64 20 62 79 20 74 68 65 20 70  assumed by the p
cfd0: 72 6f 63 65 73 73 20 74 68 61 74 20 77 72 6f 74  rocess that wrot
cfe0: 65 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 6a  e this.        j
cff0: 6f 75 72 6e 61 6c 2e 29 5e 0a 3c 74 72 3e 5e 28  ournal.)^.<tr>^(
d000: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
d010: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 0a 20  lign=center>24. 
d020: 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
d030: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
d040: 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66  .    <td>Size of
d050: 20 70 61 67 65 73 20 69 6e 20 74 68 69 73 20 6a   pages in this j
d060: 6f 75 72 6e 61 6c 2e 29 5e 0a 3c 2f 74 61 62 6c  ournal.)^.</tabl
d070: 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70  e>.</center>..<p
d080: 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  >^A rollback jou
d090: 72 6e 61 6c 20 68 65 61 64 65 72 20 69 73 20 70  rnal header is p
d0a0: 61 64 64 65 64 20 77 69 74 68 20 7a 65 72 6f 73  added with zeros
d0b0: 20 6f 75 74 20 74 6f 20 74 68 65 20 73 69 7a 65   out to the size
d0c0: 20 6f 66 20 61 20 0a 73 69 6e 67 6c 65 20 73 65   of a .single se
d0d0: 63 74 6f 72 20 28 61 73 20 64 65 66 69 6e 65 64  ctor (as defined
d0e0: 20 62 79 20 74 68 65 20 73 65 63 74 6f 72 20 73   by the sector s
d0f0: 69 7a 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  ize integer at o
d100: 66 66 73 65 74 20 32 30 29 2e 0a 54 68 65 20 68  ffset 20)..The h
d110: 65 61 64 65 72 20 69 73 20 69 6e 20 61 20 73 65  eader is in a se
d120: 63 74 6f 72 20 62 79 20 69 74 73 65 6c 66 20 73  ctor by itself s
d130: 6f 20 74 68 61 74 20 69 66 20 61 20 70 6f 77 65  o that if a powe
d140: 72 20 6c 6f 73 73 20 6f 63 63 75 72 73 20 77 68  r loss occurs wh
d150: 69 6c 65 0a 77 72 69 74 69 6e 67 20 74 68 65 20  ile.writing the 
d160: 73 65 63 74 6f 72 2c 20 69 6e 66 6f 72 6d 61 74  sector, informat
d170: 69 6f 6e 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  ion that follows
d180: 20 74 68 65 20 68 65 61 64 65 72 20 77 69 6c 6c   the header will
d190: 20 62 65 0a 28 68 6f 70 65 66 75 6c 6c 79 29 20   be.(hopefully) 
d1a0: 75 6e 64 61 6d 61 67 65 64 2e 3c 2f 70 3e 0a 0a  undamaged.</p>..
d1b0: 3c 70 3e 5e 41 66 74 65 72 20 74 68 65 20 68 65  <p>^After the he
d1c0: 61 64 65 72 20 61 6e 64 20 7a 65 72 6f 20 70 61  ader and zero pa
d1d0: 64 64 69 6e 67 20 61 72 65 20 7a 65 72 6f 20 6f  dding are zero o
d1e0: 72 20 6d 6f 72 65 20 70 61 67 65 20 72 65 63 6f  r more page reco
d1f0: 72 64 73 2e 20 20 5e 45 61 63 68 0a 70 61 67 65  rds.  ^Each.page
d200: 20 72 65 63 6f 72 64 20 73 74 6f 72 65 73 20 61   record stores a
d210: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 63 6f 6e   copy of the con
d220: 74 65 6e 74 20 6f 66 20 61 20 70 61 67 65 20 66  tent of a page f
d230: 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
d240: 20 66 69 6c 65 0a 62 65 66 6f 72 65 20 69 74 20   file.before it 
d250: 77 61 73 20 63 68 61 6e 67 65 64 2e 20 20 5e 54  was changed.  ^T
d260: 68 65 20 73 61 6d 65 20 70 61 67 65 20 6d 61 79  he same page may
d270: 20 6e 6f 74 20 61 70 70 65 61 72 20 6d 6f 72 65   not appear more
d280: 20 74 68 61 6e 20 6f 6e 63 65 0a 77 69 74 68 69   than once.withi
d290: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62  n a single rollb
d2a0: 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 54 6f 20  ack journal..To 
d2b0: 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 69 6e 63 6f  rollback an inco
d2c0: 6d 70 6c 65 74 65 20 74 72 61 6e 73 61 63 74 69  mplete transacti
d2d0: 6f 6e 2c 20 61 20 70 72 6f 63 65 73 73 0a 68 61  on, a process.ha
d2e0: 73 20 6d 65 72 65 6c 79 20 74 6f 20 72 65 61 64  s merely to read
d2f0: 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f   the rollback jo
d300: 75 72 6e 61 6c 20 66 72 6f 6d 20 62 65 67 69 6e  urnal from begin
d310: 6e 69 6e 67 20 74 6f 20 65 6e 64 20 61 6e 64 0a  ning to end and.
d320: 77 72 69 74 65 20 70 61 67 65 73 20 66 6f 75 6e  write pages foun
d330: 64 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c  d in the journal
d340: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 64   back into the d
d350: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74 20  atabase file at 
d360: 74 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20  the.appropriate 
d370: 6c 6f 63 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c  location.</p>..<
d380: 70 3e 4c 65 74 20 74 68 65 20 64 61 74 61 62 61  p>Let the databa
d390: 73 65 20 70 61 67 65 20 73 69 7a 65 20 28 74 68  se page size (th
d3a0: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69  e value of the i
d3b0: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
d3c0: 20 32 34 20 0a 69 6e 20 74 68 65 20 6a 6f 75 72   24 .in the jour
d3d0: 6e 61 6c 20 68 65 61 64 65 72 29 20 62 65 20 4e  nal header) be N
d3e0: 2e 0a 54 68 65 6e 20 74 68 65 20 66 6f 72 6d 61  ..Then the forma
d3f0: 74 20 6f 66 20 61 20 70 61 67 65 20 72 65 63 6f  t of a page reco
d400: 72 64 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73  rd is as follows
d410: 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a  :</p>..<center>.
d420: 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72  <i>Rollback Jour
d430: 6e 61 6c 20 50 61 67 65 20 52 65 63 6f 72 64 20  nal Page Record 
d440: 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c  Format</i><br>.<
d450: 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25  table width="80%
d460: 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e  " border=1>.<tr>
d470: 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69  <th>Offset<th>Si
d480: 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f  ze<th>Descriptio
d490: 6e 0a 3c 74 72 3e 5e 28 3c 74 64 20 76 61 6c 69  n.<tr>^(<td vali
d4a0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
d4b0: 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61  ter>0.    <td va
d4c0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
d4d0: 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
d4e0: 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  The page number 
d4f0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
d500: 66 69 6c 65 29 5e 0a 3c 74 72 3e 5e 28 3c 74 64  file)^.<tr>^(<td
d510: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
d520: 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
d530: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
d540: 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 0a 20 20 20  ign=center>N.   
d550: 20 3c 74 64 3e 4f 72 69 67 69 6e 61 6c 20 63 6f   <td>Original co
d560: 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 70 61 67  ntent of the pag
d570: 65 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 73  e prior to the s
d580: 74 61 72 74 20 6f 66 20 74 68 65 20 74 72 61 6e  tart of the tran
d590: 73 61 63 74 69 6f 6e 29 5e 0a 3c 74 72 3e 5e 28  saction)^.<tr>^(
d5a0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
d5b0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 2b 34 0a  lign=center>N+4.
d5c0: 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74      <td valign=t
d5d0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
d5e0: 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73  4.    <td>Checks
d5f0: 75 6d 29 5e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f  um)^.</table>.</
d600: 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 5e 28 54  center>...<p>^(T
d610: 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20 61  he checksum is a
d620: 6e 20 75 6e 73 69 67 6e 65 64 20 33 32 2d 62 69  n unsigned 32-bi
d630: 74 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 75 74  t integer comput
d640: 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f  ed as follows:</
d650: 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 49 6e 69  p>..<ol>.<li>Ini
d660: 74 69 61 6c 69 7a 65 20 74 68 65 20 63 68 65 63  tialize the chec
d670: 6b 73 75 6d 20 74 6f 20 74 68 65 20 63 68 65 63  ksum to the chec
d680: 6b 73 75 6d 20 6e 6f 6e 63 65 20 76 61 6c 75 65  ksum nonce value
d690: 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 6a 6f   found in the.jo
d6a0: 75 72 6e 61 6c 20 68 65 61 64 65 72 20 61 74 20  urnal header at 
d6b0: 6f 66 66 73 65 74 20 31 32 2e 0a 3c 6c 69 3e 49  offset 12..<li>I
d6c0: 6e 69 74 69 61 6c 69 7a 65 20 69 6e 64 65 78 20  nitialize index 
d6d0: 58 20 74 6f 20 62 65 20 4e 2d 32 30 30 20 28 77  X to be N-200 (w
d6e0: 68 65 72 65 20 4e 20 69 73 20 74 68 65 20 73 69  here N is the si
d6f0: 7a 65 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  ze of a database
d700: 20 70 61 67 65 0a 69 6e 20 62 79 74 65 73 2e 0a   page.in bytes..
d710: 3c 6c 69 3e 49 6e 74 65 72 70 72 65 74 20 74 68  <li>Interpret th
d720: 65 20 66 6f 75 72 20 62 79 74 65 73 20 61 74 20  e four bytes at 
d730: 6f 66 66 73 65 74 20 58 20 69 6e 74 6f 20 74 68  offset X into th
d740: 65 20 70 61 67 65 20 61 73 20 61 20 34 2d 62 79  e page as a 4-by
d750: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 0a 75 6e  te big-endian.un
d760: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2e 20  signed integer. 
d770: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 6f   Add the value o
d780: 66 20 74 68 61 74 20 69 6e 74 65 67 65 72 20 74  f that integer t
d790: 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 0a  o the checksum..
d7a0: 3c 6c 69 3e 53 75 62 74 72 61 63 65 20 32 30 30  <li>Subtrace 200
d7b0: 20 66 72 6f 6d 20 58 2e 0a 3c 6c 69 3e 49 66 20   from X..<li>If 
d7c0: 58 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  X is greater tha
d7d0: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a 65  n or equal to ze
d7e0: 72 6f 2c 20 67 6f 20 62 61 63 6b 20 74 6f 20 73  ro, go back to s
d7f0: 74 65 70 20 33 2e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a  tep 3..</ol>)^..
d800: 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20  <p>The checksum 
d810: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 74 6f  value is used to
d820: 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 69   guard against i
d830: 6e 63 6f 6d 70 6c 65 74 65 20 77 72 69 74 65 73  ncomplete writes
d840: 20 6f 66 0a 61 20 6a 6f 75 72 6e 61 6c 20 70 61   of.a journal pa
d850: 67 65 20 72 65 63 6f 72 64 20 66 6f 6c 6c 6f 77  ge record follow
d860: 69 6e 67 20 61 20 70 6f 77 65 72 20 66 61 69 6c  ing a power fail
d870: 75 72 65 2e 20 20 41 20 64 69 66 66 65 72 65 6e  ure.  A differen
d880: 74 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 0a 69  t random nonce.i
d890: 73 20 75 73 65 64 20 65 61 63 68 20 74 69 6d 65  s used each time
d8a0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
d8b0: 73 20 73 74 61 72 74 65 64 20 69 6e 20 6f 72 64  s started in ord
d8c0: 65 72 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74  er to minimize t
d8d0: 68 65 20 72 69 73 6b 0a 74 68 61 74 20 75 6e 77  he risk.that unw
d8e0: 72 69 74 74 65 6e 20 73 65 63 74 6f 72 73 20 6d  ritten sectors m
d8f0: 69 67 68 74 20 62 79 20 63 68 61 6e 63 65 20 63  ight by chance c
d900: 6f 6e 74 61 69 6e 20 64 61 74 61 20 66 72 6f 6d  ontain data from
d910: 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 0a 74   the same page.t
d920: 68 61 74 20 77 61 73 20 61 20 70 61 72 74 20 6f  hat was a part o
d930: 66 20 70 72 69 6f 72 20 6a 6f 75 72 6e 61 6c 73  f prior journals
d940: 2e 20 20 42 79 20 63 68 61 6e 67 69 6e 67 20 74  .  By changing t
d950: 68 65 20 6e 6f 6e 63 65 20 66 6f 72 20 65 61 63  he nonce for eac
d960: 68 0a 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73  h.transaction, s
d970: 74 61 6c 65 20 64 61 74 61 20 6f 6e 20 64 69 73  tale data on dis
d980: 6b 20 77 69 6c 6c 20 73 74 69 6c 6c 20 67 65 6e  k will still gen
d990: 65 72 61 74 65 20 61 6e 20 69 6e 63 6f 72 72 65  erate an incorre
d9a0: 63 74 20 63 68 65 63 6b 73 75 6d 0a 61 6e 64 20  ct checksum.and 
d9b0: 62 65 20 64 65 74 65 63 74 65 64 20 77 69 74 68  be detected with
d9c0: 20 68 69 67 68 20 70 72 6f 62 61 62 69 6c 69 74   high probabilit
d9d0: 79 2e 20 20 54 68 65 20 63 68 65 63 6b 73 75 6d  y.  The checksum
d9e0: 20 6f 6e 6c 79 20 75 73 65 73 20 61 20 73 70 61   only uses a spa
d9f0: 72 73 65 20 73 61 6d 70 6c 65 0a 6f 66 20 33 32  rse sample.of 32
da00: 2d 62 69 74 20 77 6f 72 64 73 20 66 72 6f 6d 20  -bit words from 
da10: 74 68 65 20 64 61 74 61 20 72 65 63 6f 72 64 20  the data record 
da20: 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  for performance 
da30: 72 65 61 73 6f 6e 73 20 2d 20 64 65 73 69 67 6e  reasons - design
da40: 20 73 74 75 64 69 65 73 20 0a 64 75 72 69 6e 67   studies .during
da50: 20 74 68 65 20 70 6c 61 6e 6e 69 6e 67 20 70 68   the planning ph
da60: 61 73 65 73 20 6f 66 20 53 51 4c 69 74 65 20 33  ases of SQLite 3
da70: 2e 30 2e 30 20 73 68 6f 77 65 64 0a 61 20 73 69  .0.0 showed.a si
da80: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
da90: 6d 61 6e 63 65 20 68 69 74 20 69 6e 20 63 68 65  mance hit in che
daa0: 63 6b 73 75 6d 6d 69 6e 67 20 74 68 65 20 65 6e  cksumming the en
dab0: 74 69 72 65 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a  tire page.</p>..
dac0: 3c 70 3e 4c 65 74 20 74 68 65 20 70 61 67 65 20  <p>Let the page 
dad0: 63 6f 75 6e 74 20 76 61 6c 75 65 20 61 74 20 6f  count value at o
dae0: 66 66 73 65 74 20 38 20 69 6e 20 74 68 65 20 6a  ffset 8 in the j
daf0: 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 62 65  ournal header be
db00: 20 4d 2e 0a 5e 49 66 20 4d 20 69 73 20 67 72 65   M..^If M is gre
db10: 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 74  ater than zero t
db20: 68 65 6e 20 61 66 74 65 72 20 4d 20 70 61 67 65  hen after M page
db30: 20 72 65 63 6f 72 64 73 20 74 68 65 20 6a 6f 75   records the jou
db40: 72 6e 61 6c 20 66 69 6c 65 0a 6d 61 79 20 62 65  rnal file.may be
db50: 20 7a 65 72 6f 20 70 61 64 64 65 64 20 6f 75 74   zero padded out
db60: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6d 75 6c   to the next mul
db70: 74 69 70 6c 65 20 6f 66 20 74 68 65 20 73 65 63  tiple of the sec
db80: 74 6f 72 20 73 69 7a 65 20 61 6e 64 20 61 6e 6f  tor size and ano
db90: 74 68 65 72 0a 6a 6f 75 72 6e 61 6c 20 68 65 61  ther.journal hea
dba0: 64 65 72 20 6d 61 79 20 62 65 20 69 6e 73 65 72  der may be inser
dbb0: 74 65 64 2e 20 20 5e 41 6c 6c 20 6a 6f 75 72 6e  ted.  ^All journ
dbc0: 61 6c 20 68 65 61 64 65 72 73 20 77 69 74 68 69  al headers withi
dbd0: 6e 20 74 68 65 20 73 61 6d 65 0a 6a 6f 75 72 6e  n the same.journ
dbe0: 61 6c 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  al must contain 
dbf0: 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
dc00: 65 20 70 61 67 65 20 73 69 7a 65 20 61 6e 64 20  e page size and 
dc10: 73 65 63 74 6f 72 20 73 69 7a 65 2e 3c 2f 70 3e  sector size.</p>
dc20: 0a 0a 3c 70 3e 5e 49 66 20 4d 20 69 73 20 2d 31  ..<p>^If M is -1
dc30: 20 69 6e 20 74 68 65 20 69 6e 69 74 69 61 6c 20   in the initial 
dc40: 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 2c 20  journal header, 
dc50: 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  then the number 
dc60: 6f 66 20 70 61 67 65 20 72 65 63 6f 72 64 73 0a  of page records.
dc70: 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69 73 20 63  that follow is c
dc80: 6f 6d 70 75 74 65 64 20 62 79 20 63 6f 6d 70 75  omputed by compu
dc90: 74 69 6e 67 20 68 6f 77 20 6d 61 6e 79 20 70 61  ting how many pa
dca0: 67 65 20 72 65 63 6f 72 64 73 20 77 69 6c 6c 20  ge records will 
dcb0: 66 69 74 20 69 6e 0a 74 68 65 20 61 76 61 69 6c  fit in.the avail
dcc0: 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20 74 68  able space of th
dcd0: 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74  e remainder of t
dce0: 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 2e  he journal file.
dcf0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
dd00: 61 67 6d 65 6e 74 20 77 61 6c 66 6f 72 6d 61 74  agment walformat
dd10: 20 7b 57 41 4c 20 66 6f 72 6d 61 74 7d 3c 2f 74   {WAL format}</t
dd20: 63 6c 3e 0a 3c 68 32 3e 34 2e 30 20 54 68 65 20  cl>.<h2>4.0 The 
dd30: 57 72 69 74 65 2d 41 68 65 61 64 20 4c 6f 67 3c  Write-Ahead Log<
dd40: 2f 68 32 3e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69  /h2>..<p>Beginni
dd50: 6e 67 20 77 69 74 68 20 5b 76 65 72 73 69 6f 6e  ng with [version
dd60: 20 33 2e 37 2e 30 5d 2c 20 53 51 4c 69 74 65 20   3.7.0], SQLite 
dd70: 73 75 70 70 6f 72 74 73 20 61 20 6e 65 77 20 74  supports a new t
dd80: 72 61 6e 73 61 63 74 69 6f 6e 0a 63 6f 6e 74 72  ransaction.contr
dd90: 6f 6c 20 6d 65 63 68 61 6e 69 73 6d 20 63 61 6c  ol mechanism cal
dda0: 6c 65 64 20 22 5b 57 41 4c 20 7c 20 77 72 69 74  led "[WAL | writ
ddb0: 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20 6f 72  e-ahead log]" or
ddc0: 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68 65 6e 20   "[WAL]"..^When 
ddd0: 61 20 64 61 74 61 62 61 73 65 20 69 73 20 69 6e  a database is in
dde0: 20 57 41 4c 20 6d 6f 64 65 2c 20 61 6c 6c 20 63   WAL mode, all c
ddf0: 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20 74 68  onnections to th
de00: 61 74 20 64 61 74 61 62 61 73 65 20 6d 75 73 74  at database must
de10: 0a 75 73 65 20 74 68 65 20 57 41 4c 2e 20 20 5e  .use the WAL.  ^
de20: 41 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  A particular dat
de30: 61 62 61 73 65 20 77 69 6c 6c 20 75 73 65 20 65  abase will use e
de40: 69 74 68 65 72 20 61 20 72 6f 6c 6c 62 61 63 6b  ither a rollback
de50: 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61 20 57 41   journal.or a WA
de60: 4c 2c 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 20  L, but not both 
de70: 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
de80: 2e 0a 5e 54 68 65 20 57 41 4c 20 69 73 20 61 6c  ..^The WAL is al
de90: 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e 20  ways located in 
dea0: 74 68 65 20 73 61 6d 65 20 64 69 72 65 63 74 6f  the same directo
deb0: 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62 61  ry as the databa
dec0: 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73 20  se.file and has 
ded0: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73  the same name as
dee0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
def0: 6c 65 20 62 75 74 20 77 69 74 68 20 74 68 65 20  le but with the 
df00: 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 77 61 6c  string."<tt>-wal
df10: 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65 64 2e  </tt>" appended.
df20: 3c 2f 70 3e 0a 0a 3c 68 33 3e 34 2e 31 20 57 41  </p>..<h3>4.1 WA
df30: 4c 20 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 68  L File Format</h
df40: 34 3e 0a 0a 3c 70 3e 41 20 57 41 4c 20 66 69 6c  4>..<p>A WAL fil
df50: 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
df60: 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20  header followed 
df70: 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  by zero or more 
df80: 22 66 72 61 6d 65 73 22 2e 0a 45 61 63 68 20 66  "frames"..Each f
df90: 72 61 6d 65 20 72 65 63 6f 72 64 73 20 74 68 65  rame records the
dfa0: 20 72 65 76 69 73 65 64 20 63 6f 6e 74 65 6e 74   revised content
dfb0: 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67   of a single pag
dfc0: 65 20 66 72 6f 6d 20 74 68 65 0a 64 61 74 61 62  e from the.datab
dfd0: 61 73 65 20 66 69 6c 65 2e 20 20 41 6c 6c 20 63  ase file.  All c
dfe0: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61  hanges to the da
dff0: 74 61 62 61 73 65 20 61 72 65 20 72 65 63 6f 72  tabase are recor
e000: 64 65 64 20 62 79 20 77 72 69 74 69 6e 67 0a 66  ded by writing.f
e010: 72 61 6d 65 73 20 69 6e 74 6f 20 74 68 65 20 57  rames into the W
e020: 41 4c 2e 20 20 54 72 61 6e 73 61 63 74 69 6f 6e  AL.  Transaction
e030: 73 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 61 20  s commit when a 
e040: 66 72 61 6d 65 20 69 73 20 77 72 69 74 74 65 6e  frame is written
e050: 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 61   that.contains a
e060: 20 63 6f 6d 6d 69 74 20 6d 61 72 6b 65 72 2e 20   commit marker. 
e070: 20 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20 63   ^A single WAL c
e080: 61 6e 20 61 6e 64 20 75 73 75 61 6c 6c 79 20 64  an and usually d
e090: 6f 65 73 20 72 65 63 6f 72 64 20 0a 6d 75 6c 74  oes record .mult
e0a0: 69 70 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  iple transaction
e0b0: 73 2e 20 20 50 65 72 69 6f 64 69 63 61 6c 6c 79  s.  Periodically
e0c0: 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  , the content of
e0d0: 20 74 68 65 20 57 41 4c 20 69 73 0a 74 72 61 6e   the WAL is.tran
e0e0: 73 66 65 72 72 65 64 20 62 61 63 6b 20 69 6e 74  sferred back int
e0f0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
e100: 69 6c 65 20 69 6e 20 61 6e 20 6f 70 65 72 61 74  ile in an operat
e110: 69 6f 6e 20 63 61 6c 6c 65 64 20 61 0a 22 63 68  ion called a."ch
e120: 65 63 6b 70 6f 69 6e 74 22 2e 3c 2f 70 3e 0a 0a  eckpoint".</p>..
e130: 3c 70 3e 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c  <p>^A single WAL
e140: 20 66 69 6c 65 20 63 61 6e 20 62 65 20 72 65 75   file can be reu
e150: 73 65 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d  sed multiple tim
e160: 65 73 2e 20 20 5e 49 6e 20 6f 74 68 65 72 20 77  es.  ^In other w
e170: 6f 72 64 73 2c 20 74 68 65 0a 57 41 4c 20 63 61  ords, the.WAL ca
e180: 6e 20 66 69 6c 6c 20 75 70 20 77 69 74 68 20 66  n fill up with f
e190: 72 61 6d 65 73 20 61 6e 64 20 74 68 65 6e 20 62  rames and then b
e1a0: 65 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  e checkpointed a
e1b0: 6e 64 20 74 68 65 6e 20 6e 65 77 0a 66 72 61 6d  nd then new.fram
e1c0: 65 73 20 63 61 6e 20 6f 76 65 72 77 72 69 74 65  es can overwrite
e1d0: 20 74 68 65 20 6f 6c 64 20 6f 6e 65 73 2e 20 20   the old ones.  
e1e0: 5e 41 20 57 41 4c 20 61 6c 77 61 79 73 20 67 72  ^A WAL always gr
e1f0: 6f 77 73 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69  ows from beginni
e200: 6e 67 0a 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng.toward the en
e210: 64 2e 20 20 43 68 65 63 6b 73 75 6d 73 20 61 6e  d.  Checksums an
e220: 64 20 63 6f 75 6e 74 65 72 73 20 61 74 74 61 63  d counters attac
e230: 68 65 64 20 74 6f 20 65 61 63 68 20 66 72 61 6d  hed to each fram
e240: 65 20 61 72 65 0a 75 73 65 64 20 74 6f 20 64 65  e are.used to de
e250: 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20 66 72  termine which fr
e260: 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68 65 20  ames within the 
e270: 57 41 4c 20 61 72 65 20 76 61 6c 69 64 20 61 6e  WAL are valid an
e280: 64 20 77 68 69 63 68 0a 61 72 65 20 6c 65 66 74  d which.are left
e290: 6f 76 65 72 73 20 66 72 6f 6d 20 70 72 69 6f 72  overs from prior
e2a0: 20 63 68 65 63 6b 70 6f 69 6e 74 73 2e 3c 2f 70   checkpoints.</p
e2b0: 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 57 41 4c 20  >..<p>^(The WAL 
e2c0: 68 65 61 64 65 72 20 69 73 20 33 32 20 62 79 74  header is 32 byt
e2d0: 65 73 20 69 6e 20 73 69 7a 65 20 61 6e 64 20 63  es in size and c
e2e0: 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65 20 66  onsists of the f
e2f0: 6f 6c 6c 6f 77 69 6e 67 20 65 69 67 68 74 0a 62  ollowing eight.b
e300: 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74  ig-endian 32-bit
e310: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
e320: 72 20 76 61 6c 75 65 73 3a 3c 2f 70 3e 0a 0a 3c  r values:</p>..<
e330: 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 48  center>.<i>WAL H
e340: 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e  eader Format</i>
e350: 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  <br>.<table widt
e360: 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31  h="80%" border=1
e370: 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74  >.<tr><th>Offset
e380: 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63  <th>Size<th>Desc
e390: 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20  ription.<tr><td 
e3a0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
e3b0: 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c  =center>0<td val
e3c0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
e3d0: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 4d  nter>4.    <td>M
e3e0: 61 67 69 63 20 6e 75 6d 62 65 72 2e 20 20 30 78  agic number.  0x
e3f0: 33 37 37 66 30 36 38 32 20 6f 72 20 30 78 33 37  377f0682 or 0x37
e400: 37 66 30 36 38 33 0a 3c 74 72 3e 3c 74 64 20 76  7f0683.<tr><td v
e410: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
e420: 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69  center>4<td vali
e430: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
e440: 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 69  ter>4.    <td>Fi
e450: 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f  le format versio
e460: 6e 2e 20 20 43 75 72 72 65 6e 74 6c 79 20 33 30  n.  Currently 30
e470: 30 37 30 30 30 2e 0a 3c 74 72 3e 3c 74 64 20 76  07000..<tr><td v
e480: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
e490: 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69  center>8<td vali
e4a0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
e4b0: 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 44 61  ter>4.    <td>Da
e4c0: 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
e4d0: 2e 20 20 45 78 61 6d 70 6c 65 3a 20 31 30 32 34  .  Example: 1024
e4e0: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
e4f0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
e500: 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >12<td valign=to
e510: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
e520: 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 70 6f  .    <td>Checkpo
e530: 69 6e 74 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  int sequence num
e540: 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ber.<tr><td vali
e550: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
e560: 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e  ter>16<td valign
e570: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
e580: 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74  r>4.    <td>Salt
e590: 2d 31 3a 20 72 61 6e 64 6f 6d 20 69 6e 74 65 67  -1: random integ
e5a0: 65 72 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77  er incremented w
e5b0: 69 74 68 20 65 61 63 68 20 63 68 65 63 6b 70 6f  ith each checkpo
e5c0: 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  int.<tr><td vali
e5d0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
e5e0: 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e  ter>20<td valign
e5f0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
e600: 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74  r>4.    <td>Salt
e610: 2d 32 3a 20 61 20 64 69 66 66 65 72 65 6e 74 20  -2: a different 
e620: 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 66 6f  random number fo
e630: 72 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e  r each checkpoin
e640: 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  t.<tr><td valign
e650: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
e660: 72 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>24<td valign=t
e670: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
e680: 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73  4.    <td>Checks
e690: 75 6d 2d 31 3a 20 46 69 72 73 74 20 70 61 72 74  um-1: First part
e6a0: 20 6f 66 20 61 20 63 68 65 63 6b 73 75 6d 20 6f   of a checksum o
e6b0: 6e 20 74 68 65 20 66 69 72 73 74 20 32 34 20 62  n the first 24 b
e6c0: 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a 3c  ytes of header.<
e6d0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
e6e0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
e6f0: 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
e700: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
e710: 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d     <td>Checksum-
e720: 32 3a 20 53 65 63 6f 6e 64 20 70 61 72 74 20 6f  2: Second part o
e730: 66 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 6f  f the checksum o
e740: 6e 20 74 68 65 20 66 69 72 73 74 20 32 34 20 62  n the first 24 b
e750: 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 0a 3c  ytes of header.<
e760: 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
e770: 3e 29 5e 0a 0a 3c 70 3e 5e 49 6d 6d 65 64 69 61  >)^..<p>^Immedia
e780: 74 65 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  tely following t
e790: 68 65 20 77 61 6c 2d 68 65 61 64 65 72 20 61 72  he wal-header ar
e7a0: 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66  e zero or more f
e7b0: 72 61 6d 65 73 2e 20 5e 45 61 63 68 0a 66 72 61  rames. ^Each.fra
e7c0: 6d 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  me consists of a
e7d0: 20 32 34 2d 62 79 74 65 20 66 72 61 6d 65 2d 68   24-byte frame-h
e7e0: 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62  eader followed b
e7f0: 79 20 61 20 3c 69 3e 70 61 67 65 2d 73 69 7a 65  y a <i>page-size
e800: 3c 2f 69 3e 20 62 79 74 65 73 0a 6f 66 20 70 61  </i> bytes.of pa
e810: 67 65 20 64 61 74 61 2e 20 5e 28 54 68 65 20 66  ge data. ^(The f
e820: 72 61 6d 65 2d 68 65 61 64 65 72 20 69 73 20 73  rame-header is s
e830: 69 78 20 62 69 67 2d 65 6e 64 69 61 6e 20 33 32  ix big-endian 32
e840: 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20 0a 69  -bit unsigned .i
e850: 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2c 20 61  nteger values, a
e860: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e  s follows:..<cen
e870: 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 46 72 61 6d  ter>.<i>WAL Fram
e880: 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c  e Header Format<
e890: 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77  /i><br>.<table w
e8a0: 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65  idth="80%" borde
e8b0: 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66  r=1>.<tr><th>Off
e8c0: 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44  set<th>Size<th>D
e8d0: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
e8e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
e8f0: 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20  ign=center>0<td 
e900: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
e910: 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
e920: 64 3e 50 61 67 65 20 6e 75 6d 62 65 72 0a 3c 74  d>Page number.<t
e930: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
e940: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
e950: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
e960: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
e970: 20 3c 74 64 3e 46 6f 72 20 63 6f 6d 6d 69 74 20   <td>For commit 
e980: 72 65 63 6f 72 64 73 2c 20 74 68 65 20 73 69 7a  records, the siz
e990: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
e9a0: 65 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73 0a  e file in pages.
e9b0: 20 20 20 20 20 20 20 20 61 66 74 65 72 20 74 68          after th
e9c0: 65 20 63 6f 6d 6d 69 74 2e 20 20 46 6f 72 20 61  e commit.  For a
e9d0: 6c 6c 20 6f 74 68 65 72 20 72 65 63 6f 72 64 73  ll other records
e9e0: 2c 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20  , zero..<tr><td 
e9f0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
ea00: 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c  =center>8<td val
ea10: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
ea20: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53  nter>4.    <td>S
ea30: 61 6c 74 2d 31 20 63 6f 70 69 65 64 20 66 72 6f  alt-1 copied fro
ea40: 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64 65 72  m the WAL header
ea50: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
ea60: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
ea70: 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >12<td valign=to
ea80: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
ea90: 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 20  .    <td>Salt-2 
eaa0: 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20  copied from the 
eab0: 57 41 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c  WAL header.<tr><
eac0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
ead0: 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64  ign=center>16<td
eae0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
eaf0: 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
eb00: 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 20  td>Checksum-1:  
eb10: 43 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b  Cumulative check
eb20: 73 75 6d 20 75 70 20 74 68 72 6f 75 67 68 20 61  sum up through a
eb30: 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 69  nd including thi
eb40: 73 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64 20 76  s page.<tr><td v
eb50: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
eb60: 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76 61 6c  center>20<td val
eb70: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
eb80: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43  nter>4.    <td>C
eb90: 68 65 63 6b 73 75 6d 2d 32 3a 20 20 53 65 63 6f  hecksum-2:  Seco
eba0: 6e 64 20 68 61 6c 66 20 6f 66 20 74 68 65 20 63  nd half of the c
ebb0: 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b 73  umulative checks
ebc0: 75 6d 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63  um..</table>.</c
ebd0: 65 6e 74 65 72 3e 29 5e 0a 0a 5e 28 3c 70 3e 41  enter>)^..^(<p>A
ebe0: 20 66 72 61 6d 65 20 69 73 20 63 6f 6e 73 69 64   frame is consid
ebf0: 65 72 65 64 20 76 61 6c 69 64 20 69 66 20 61 6e  ered valid if an
ec00: 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 66 6f  d only if the fo
ec10: 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74 69 6f  llowing conditio
ec20: 6e 73 20 61 72 65 0a 74 72 75 65 3a 3c 2f 70 3e  ns are.true:</p>
ec30: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68  ..<ol>.<li><p>Th
ec40: 65 20 73 61 6c 74 2d 31 20 61 6e 64 20 73 61 6c  e salt-1 and sal
ec50: 74 2d 32 20 76 61 6c 75 65 73 20 69 6e 20 74 68  t-2 values in th
ec60: 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20 6d  e frame-header m
ec70: 61 74 63 68 0a 20 20 20 20 20 20 20 73 61 6c 74  atch.       salt
ec80: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 77   values in the w
ec90: 61 6c 2d 68 65 61 64 65 72 3c 2f 70 3e 3c 2f 6c  al-header</p></l
eca0: 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 63  i>..<li><p>The c
ecb0: 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73 20 69  hecksum values i
ecc0: 6e 20 74 68 65 20 66 69 6e 61 6c 20 38 20 62 79  n the final 8 by
ecd0: 74 65 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65  tes of the frame
ece0: 2d 68 65 61 64 65 72 0a 20 20 20 20 20 20 20 65  -header.       e
ecf0: 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65  xactly match the
ed00: 20 63 68 65 63 6b 73 75 6d 20 63 6f 6d 70 75 74   checksum comput
ed10: 65 64 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79  ed consecutively
ed20: 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20 20 57   on the.       W
ed30: 41 4c 20 68 65 61 64 65 72 20 61 6e 64 20 74 68  AL header and th
ed40: 65 20 66 69 72 73 74 20 38 20 62 79 74 65 73 20  e first 8 bytes 
ed50: 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  and the content 
ed60: 6f 66 20 61 6c 6c 20 66 72 61 6d 65 73 0a 20 20  of all frames.  
ed70: 20 20 20 20 20 75 70 20 74 6f 20 61 6e 64 20 69       up to and i
ed80: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 63 75 72  ncluding the cur
ed90: 72 65 6e 74 20 66 72 61 6d 65 2e 3c 2f 70 3e 3c  rent frame.</p><
eda0: 2f 6c 69 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 29  /li></li>.</ol>)
edb0: 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ^..<tcl>hd_fragm
edc0: 65 6e 74 20 77 61 6c 63 6b 73 6d 20 7b 57 41 4c  ent walcksm {WAL
edd0: 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69   checksum algori
ede0: 74 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34  thm}</tcl>.<h3>4
edf0: 2e 32 20 43 68 65 63 6b 73 75 6d 20 41 6c 67 6f  .2 Checksum Algo
ee00: 72 69 74 68 6d 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  rithm</h3>..<p>T
ee10: 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73 20 63  he checksum is c
ee20: 6f 6d 70 75 74 65 64 20 62 79 20 69 6e 74 65 72  omputed by inter
ee30: 70 72 65 74 69 6e 67 20 74 68 65 20 69 6e 70 75  preting the inpu
ee40: 74 20 61 73 0a 61 6e 20 65 76 65 6e 20 6e 75 6d  t as.an even num
ee50: 62 65 72 20 6f 66 20 75 6e 73 69 67 6e 65 64 20  ber of unsigned 
ee60: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73 3a  32-bit integers:
ee70: 20 78 28 30 29 20 74 68 72 6f 75 67 68 20 78 28   x(0) through x(
ee80: 4e 29 2e 0a 5e 54 68 65 20 33 32 2d 62 69 74 20  N)..^The 32-bit 
ee90: 69 6e 74 65 67 65 72 73 20 61 72 65 20 62 69 67  integers are big
eea0: 2d 65 6e 64 69 61 6e 20 69 66 20 74 68 65 0a 6d  -endian if the.m
eeb0: 61 67 69 63 20 6e 75 6d 62 65 72 20 69 6e 20 74  agic number in t
eec0: 68 65 20 66 69 72 73 74 20 34 20 62 79 74 65 73  he first 4 bytes
eed0: 20 6f 66 20 74 68 65 20 57 41 4c 20 68 65 61 64   of the WAL head
eee0: 65 72 20 69 73 20 30 78 33 37 37 66 30 36 38 33  er is 0x377f0683
eef0: 20 61 6e 64 0a 74 68 65 20 69 6e 74 65 67 65 72   and.the integer
ef00: 73 20 61 72 65 20 6c 69 74 74 6c 65 2d 65 6e 64  s are little-end
ef10: 69 61 6e 20 74 68 65 20 6d 61 67 69 63 20 6e 75  ian the magic nu
ef20: 6d 62 65 72 20 69 73 20 30 78 33 37 37 66 30 36  mber is 0x377f06
ef30: 38 32 2e 0a 5e 54 68 65 20 63 68 65 63 6b 73 75  82..^The checksu
ef40: 6d 20 76 61 6c 75 65 73 20 61 72 65 20 61 6c 77  m values are alw
ef50: 61 79 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  ays stored in th
ef60: 65 20 66 72 61 6d 65 20 68 65 61 64 65 72 20 69  e frame header i
ef70: 6e 20 61 0a 62 69 67 2d 65 6e 64 69 61 6e 20 66  n a.big-endian f
ef80: 6f 72 6d 61 74 20 72 65 67 61 72 64 6c 65 73 73  ormat regardless
ef90: 20 6f 66 20 77 68 69 63 68 20 62 79 74 65 20 6f   of which byte o
efa0: 72 64 65 72 20 69 73 20 75 73 65 64 20 74 6f 20  rder is used to 
efb0: 63 6f 6d 70 75 74 65 0a 74 68 65 20 63 68 65 63  compute.the chec
efc0: 6b 73 75 6d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ksum.</p>..<p>Th
efd0: 65 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72  e checksum algor
efe0: 69 74 68 6d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  ithm only works 
eff0: 66 6f 72 20 63 6f 6e 74 65 6e 74 20 77 68 69 63  for content whic
f000: 68 20 69 73 20 61 20 6d 75 6c 74 69 70 6c 65 20  h is a multiple 
f010: 6f 66 0a 38 20 62 79 74 65 73 20 69 6e 20 6c 65  of.8 bytes in le
f020: 6e 67 74 68 2e 20 20 49 6e 20 6f 74 68 65 72 20  ngth.  In other 
f030: 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 69 6e  words, if the in
f040: 70 75 74 73 20 61 72 65 20 78 28 30 29 20 74 68  puts are x(0) th
f050: 72 6f 75 67 68 20 78 28 4e 29 0a 74 68 65 6e 20  rough x(N).then 
f060: 4e 20 6d 75 73 74 20 62 65 20 6f 64 64 2e 0a 5e  N must be odd..^
f070: 28 54 68 65 20 63 68 65 63 6b 73 75 6d 20 61 6c  (The checksum al
f080: 67 6f 72 69 74 68 6d 20 69 73 20 61 73 20 66 6f  gorithm is as fo
f090: 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75  llows:..<blockqu
f0a0: 6f 74 65 3e 3c 70 72 65 3e 20 0a 73 30 20 3d 20  ote><pre> .s0 = 
f0b0: 73 31 20 3d 20 30 0a 66 6f 72 20 69 20 66 72 6f  s1 = 0.for i fro
f0c0: 6d 20 30 20 74 6f 20 6e 2d 31 20 73 74 65 70 20  m 0 to n-1 step 
f0d0: 32 3a 0a 20 20 20 73 30 20 2b 3d 20 78 28 69 29  2:.   s0 += x(i)
f0e0: 20 2b 20 73 31 3b 0a 20 20 20 73 31 20 2b 3d 20   + s1;.   s1 += 
f0f0: 78 28 69 2b 31 29 20 2b 20 73 30 3b 0a 65 6e 64  x(i+1) + s0;.end
f100: 66 6f 72 0a 23 20 72 65 73 75 6c 74 20 69 6e 20  for.# result in 
f110: 73 30 20 61 6e 64 20 73 31 0a 3c 2f 70 72 65 3e  s0 and s1.</pre>
f120: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
f130: 0a 3c 70 3e 5e 54 68 65 20 6f 75 74 70 75 74 73  .<p>^The outputs
f140: 20 73 30 20 61 6e 64 20 73 31 20 61 72 65 20 62   s0 and s1 are b
f150: 6f 74 68 20 77 65 69 67 68 74 65 64 20 63 68 65  oth weighted che
f160: 63 6b 73 75 6d 73 20 75 73 69 6e 67 20 46 69 62  cksums using Fib
f170: 6f 6e 61 63 63 69 20 77 65 69 67 68 74 73 0a 69  onacci weights.i
f180: 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2e  n reverse order.
f190: 20 20 28 5e 54 68 65 20 6c 61 72 67 65 73 74 20    (^The largest 
f1a0: 46 69 62 6f 6e 61 63 63 69 20 77 65 69 67 68 74  Fibonacci weight
f1b0: 20 6f 63 63 75 72 73 20 6f 6e 20 74 68 65 20 66   occurs on the f
f1c0: 69 72 73 74 20 65 6c 65 6d 65 6e 74 0a 6f 66 20  irst element.of 
f1d0: 74 68 65 20 73 65 71 75 65 6e 63 65 20 62 65 69  the sequence bei
f1e0: 6e 67 20 73 75 6d 6d 65 64 2e 29 20 20 5e 54 68  ng summed.)  ^Th
f1f0: 65 20 73 31 20 76 61 6c 75 65 20 73 70 61 6e 73  e s1 value spans
f200: 20 61 6c 6c 20 33 32 2d 62 69 74 20 69 6e 74 65   all 32-bit inte
f210: 67 65 72 0a 74 65 72 6d 73 20 6f 66 20 74 68 65  ger.terms of the
f220: 20 73 65 71 75 65 6e 63 65 20 77 68 65 72 65 61   sequence wherea
f230: 73 20 73 30 20 6f 6d 69 74 73 20 74 68 65 20 66  s s0 omits the f
f240: 69 6e 61 6c 20 74 65 72 6d 2e 3c 2f 70 3e 0a 0a  inal term.</p>..
f250: 3c 68 33 3e 34 2e 33 20 43 68 65 63 6b 70 6f 69  <h3>4.3 Checkpoi
f260: 6e 74 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33  nt Algorithm</h3
f270: 3e 0a 0a 3c 70 3e 5e 4f 6e 20 61 20 5b 63 68 65  >..<p>^On a [che
f280: 63 6b 70 6f 69 6e 74 5d 2c 20 74 68 65 20 57 41  ckpoint], the WA
f290: 4c 20 69 73 20 66 69 72 73 74 20 66 6c 75 73 68  L is first flush
f2a0: 65 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74  ed to persistent
f2b0: 20 73 74 6f 72 61 67 65 20 75 73 69 6e 67 0a 74   storage using.t
f2c0: 68 65 20 78 53 79 6e 63 20 6d 65 74 68 6f 64 20  he xSync method 
f2d0: 6f 66 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  of the [sqlite3_
f2e0: 69 6f 5f 6d 65 74 68 6f 64 73 20 7c 20 56 46 53  io_methods | VFS
f2f0: 5d 2e 20 0a 5e 54 68 65 6e 20 76 61 6c 69 64 20  ]. .^Then valid 
f300: 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 57  content of the W
f310: 41 4c 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  AL is transferre
f320: 64 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  d into the datab
f330: 61 73 65 20 66 69 6c 65 2e 0a 5e 46 69 6e 61 6c  ase file..^Final
f340: 6c 79 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ly, the database
f350: 20 69 73 20 66 6c 75 73 68 65 64 20 74 6f 20 70   is flushed to p
f360: 65 72 73 69 73 74 65 6e 74 20 73 74 6f 72 61 67  ersistent storag
f370: 65 20 75 73 69 6e 67 20 61 6e 6f 74 68 65 72 0a  e using another.
f380: 78 53 79 6e 63 20 6d 65 74 68 6f 64 20 63 61 6c  xSync method cal
f390: 6c 2e 0a 54 68 65 20 78 53 79 6e 63 20 6f 70 65  l..The xSync ope
f3a0: 72 61 74 69 6f 6e 73 20 73 65 72 76 65 20 61 73  rations serve as
f3b0: 20 77 72 69 74 65 20 62 61 72 72 69 65 72 73 20   write barriers 
f3c0: 2d 20 61 6c 6c 20 77 72 69 74 65 73 20 6c 61 75  - all writes lau
f3d0: 6e 63 68 65 64 0a 62 65 66 6f 72 65 20 74 68 65  nched.before the
f3e0: 20 78 53 79 6e 63 20 6d 75 73 74 20 63 6f 6d 70   xSync must comp
f3f0: 6c 65 74 65 20 62 65 66 6f 72 65 20 61 6e 79 20  lete before any 
f400: 77 72 69 74 65 20 74 68 61 74 20 6c 61 75 6e 63  write that launc
f410: 68 65 73 20 61 66 74 65 72 20 74 68 65 0a 78 53  hes after the.xS
f420: 79 6e 63 20 62 65 67 69 6e 73 2e 3c 2f 70 3e 0a  ync begins.</p>.
f430: 0a 3c 70 3e 5e 41 66 74 65 72 20 65 61 63 68 20  .<p>^After each 
f440: 63 68 65 63 6b 70 6f 69 6e 74 2c 20 74 68 65 20  checkpoint, the 
f450: 57 41 4c 20 68 65 61 64 65 72 20 73 61 6c 74 2d  WAL header salt-
f460: 31 20 76 61 6c 75 65 20 69 73 20 69 6e 63 72 65  1 value is incre
f470: 6d 65 6e 74 65 64 20 61 6e 64 20 74 68 65 20 0a  mented and the .
f480: 73 61 6c 74 2d 32 20 76 61 6c 75 65 20 69 73 20  salt-2 value is 
f490: 72 61 6e 64 6f 6d 69 7a 65 64 2e 20 20 54 68 69  randomized.  Thi
f4a0: 73 20 70 72 65 76 65 6e 74 73 20 6f 6c 64 20 61  s prevents old a
f4b0: 6e 64 20 6e 65 77 20 66 72 61 6d 65 73 20 69 6e  nd new frames in
f4c0: 20 74 68 65 20 57 41 4c 20 66 72 6f 6d 0a 62 65   the WAL from.be
f4d0: 69 6e 67 20 63 6f 6e 73 69 64 65 72 65 64 20 76  ing considered v
f4e0: 61 6c 69 64 20 61 74 20 74 68 65 20 73 61 6d 65  alid at the same
f4f0: 20 74 69 6d 65 20 61 6e 64 20 62 65 69 6e 67 20   time and being 
f500: 63 68 65 63 6b 70 6f 69 6e 74 69 6e 67 20 74 6f  checkpointing to
f510: 67 65 74 68 65 72 0a 66 6f 6c 6c 6f 77 69 6e 67  gether.following
f520: 20 61 20 63 72 61 73 68 2e 3c 2f 70 3e 0a 0a 3c   a crash.</p>..<
f530: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
f540: 77 61 6c 72 65 61 64 20 7b 57 41 4c 20 72 65 61  walread {WAL rea
f550: 64 20 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63  d algorithm}</tc
f560: 6c 3e 0a 3c 68 33 3e 34 2e 34 20 52 65 61 64 65  l>.<h3>4.4 Reade
f570: 72 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 33 3e  r Algorithm</h3>
f580: 0a 0a 3c 70 3e 5e 28 54 6f 20 72 65 61 64 20 61  ..<p>^(To read a
f590: 20 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64   page from the d
f5a0: 61 74 61 62 61 73 65 20 28 63 61 6c 6c 20 69 74  atabase (call it
f5b0: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 50 29 2c   page number P),
f5c0: 20 61 20 72 65 61 64 65 72 0a 66 69 72 73 74 20   a reader.first 
f5d0: 63 68 65 63 6b 73 20 74 68 65 20 57 41 4c 20 74  checks the WAL t
f5e0: 6f 20 73 65 65 20 69 66 20 69 74 20 63 6f 6e 74  o see if it cont
f5f0: 61 69 6e 73 20 70 61 67 65 20 50 2e 20 20 49 66  ains page P.  If
f600: 20 73 6f 2c 20 74 68 65 6e 20 74 68 65 0a 6c 61   so, then the.la
f610: 73 74 20 76 61 6c 69 64 20 69 6e 73 74 61 6e 63  st valid instanc
f620: 65 20 6f 66 20 70 61 67 65 20 50 20 74 68 61 74  e of page P that
f630: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
f640: 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 0a 6f  a commit frame.o
f650: 72 20 69 73 20 61 20 63 6f 6d 6d 69 74 20 66 72  r is a commit fr
f660: 61 6d 65 20 69 74 73 65 6c 66 20 62 65 63 6f 6d  ame itself becom
f670: 65 73 20 74 68 65 20 76 61 6c 75 65 20 72 65 61  es the value rea
f680: 64 2e 29 5e 20 20 5e 49 66 20 74 68 65 20 57 41  d.)^  ^If the WA
f690: 4c 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 63 6f  L.contains no co
f6a0: 70 69 65 73 20 6f 66 20 70 61 67 65 20 50 20 74  pies of page P t
f6b0: 68 61 74 20 61 72 65 20 76 61 6c 69 64 20 61 6e  hat are valid an
f6c0: 64 20 77 68 69 63 68 20 61 72 65 20 61 20 63 6f  d which are a co
f6d0: 6d 6d 69 74 0a 66 72 61 6d 65 20 6f 72 20 61 72  mmit.frame or ar
f6e0: 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  e followed by a 
f6f0: 63 6f 6d 6d 69 74 20 66 72 61 6d 65 2c 20 74 68  commit frame, th
f700: 65 6e 20 70 61 67 65 20 50 20 69 73 20 72 65 61  en page P is rea
f710: 64 20 66 72 6f 6d 0a 74 68 65 20 64 61 74 61 62  d from.the datab
f720: 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
f730: 70 3e 54 6f 20 73 74 61 72 74 20 61 20 72 65 61  p>To start a rea
f740: 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  d transaction, t
f750: 68 65 20 72 65 61 64 65 72 20 72 65 63 6f 72 64  he reader record
f760: 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
f770: 68 65 20 6c 61 73 74 0a 76 61 6c 69 64 20 66 72  he last.valid fr
f780: 61 6d 65 20 69 6e 20 74 68 65 20 57 41 4c 2e 20  ame in the WAL. 
f790: 20 54 68 65 20 72 65 61 64 65 72 20 75 73 65 73   The reader uses
f7a0: 20 74 68 69 73 20 72 65 63 6f 72 64 65 64 20 22   this recorded "
f7b0: 6d 78 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 66  mxFrame" value.f
f7c0: 6f 72 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  or all subsequen
f7d0: 74 20 72 65 61 64 20 6f 70 65 72 61 74 69 6f 6e  t read operation
f7e0: 73 2e 20 20 4e 65 77 20 74 72 61 6e 73 61 63 74  s.  New transact
f7f0: 69 6f 6e 73 20 63 61 6e 20 62 65 20 61 70 70 65  ions can be appe
f800: 6e 64 65 64 0a 74 6f 20 74 68 65 20 57 41 4c 2c  nded.to the WAL,
f810: 20 62 75 74 20 61 73 20 6c 6f 6e 67 20 61 73 20   but as long as 
f820: 74 68 65 20 72 65 61 64 65 72 20 75 73 65 73 20  the reader uses 
f830: 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 6d 78 46  its original mxF
f840: 72 61 6d 65 20 76 61 6c 75 65 0a 61 6e 64 20 69  rame value.and i
f850: 67 6e 6f 72 65 73 20 73 75 62 73 65 71 75 65 6e  gnores subsequen
f860: 74 6c 79 20 61 70 70 65 6e 64 65 64 20 63 6f 6e  tly appended con
f870: 74 65 6e 74 2c 20 74 68 65 20 72 65 61 64 65 72  tent, the reader
f880: 20 77 69 6c 6c 20 73 65 65 20 61 20 0a 63 6f 6e   will see a .con
f890: 73 69 73 74 65 6e 74 20 73 6e 61 70 73 68 6f 74  sistent snapshot
f8a0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
f8b0: 20 66 72 6f 6d 20 61 20 73 69 6e 67 6c 65 20 70   from a single p
f8c0: 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e 20 20 0a  oint in time.  .
f8d0: 5e 54 68 69 73 20 74 65 63 68 6e 69 71 75 65 20  ^This technique 
f8e0: 61 6c 6c 6f 77 73 20 6d 75 6c 74 69 70 6c 65 20  allows multiple 
f8f0: 63 6f 6e 63 75 72 72 65 6e 74 20 72 65 61 64 65  concurrent reade
f900: 72 73 20 74 6f 20 76 69 65 77 20 64 69 66 66 65  rs to view diffe
f910: 72 65 6e 74 20 0a 76 65 72 73 69 6f 6e 73 20 6f  rent .versions o
f920: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
f930: 6f 6e 74 65 6e 74 20 73 69 6d 75 6c 74 61 6e 65  ontent simultane
f940: 6f 75 73 6c 79 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  ously.</p>..<p>T
f950: 68 65 20 72 65 61 64 65 72 20 61 6c 67 6f 72 69  he reader algori
f960: 74 68 6d 20 69 6e 20 74 68 65 20 70 72 65 76 69  thm in the previ
f970: 6f 75 73 20 70 61 72 61 67 72 61 70 68 73 20 77  ous paragraphs w
f980: 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 2c 20  orks correctly, 
f990: 62 75 74 20 0a 62 65 63 61 75 73 65 20 66 72 61  but .because fra
f9a0: 6d 65 73 20 66 6f 72 20 70 61 67 65 20 50 20 63  mes for page P c
f9b0: 61 6e 20 61 70 70 65 61 72 20 61 6e 79 77 68 65  an appear anywhe
f9c0: 72 65 20 77 69 74 68 69 6e 20 74 68 65 20 57 41  re within the WA
f9d0: 4c 2c 20 74 68 65 0a 72 65 61 64 65 72 20 68 61  L, the.reader ha
f9e0: 73 20 74 6f 20 73 63 61 6e 20 74 68 65 20 65 6e  s to scan the en
f9f0: 74 69 72 65 20 57 41 4c 20 6c 6f 6f 6b 69 6e 67  tire WAL looking
fa00: 20 66 6f 72 20 70 61 67 65 20 50 20 66 72 61 6d   for page P fram
fa10: 65 73 2e 20 20 49 66 20 74 68 65 0a 57 41 4c 20  es.  If the.WAL 
fa20: 69 73 20 6c 61 72 67 65 20 28 6d 75 6c 74 69 70  is large (multip
fa30: 6c 65 20 6d 65 67 61 62 79 74 65 73 20 69 73 20  le megabytes is 
fa40: 74 79 70 69 63 61 6c 29 20 74 68 61 74 20 73 63  typical) that sc
fa50: 61 6e 20 63 61 6e 20 62 65 20 73 6c 6f 77 2c 0a  an can be slow,.
fa60: 61 6e 64 20 72 65 61 64 20 70 65 72 66 6f 72 6d  and read perform
fa70: 61 6e 63 65 20 73 75 66 66 65 72 73 2e 20 20 5e  ance suffers.  ^
fa80: 54 6f 20 6f 76 65 72 63 6f 6d 65 20 74 68 69 73  To overcome this
fa90: 20 70 72 6f 62 6c 65 6d 2c 20 61 20 73 65 70 61   problem, a sepa
faa0: 72 61 74 65 0a 64 61 74 61 20 73 74 72 75 63 74  rate.data struct
fab0: 75 72 65 20 63 61 6c 6c 65 64 20 74 68 65 20 77  ure called the w
fac0: 61 6c 2d 69 6e 64 65 78 20 69 73 20 6d 61 69 6e  al-index is main
fad0: 74 61 69 6e 65 64 20 74 6f 20 65 78 70 65 64 69  tained to expedi
fae0: 74 65 20 74 68 65 0a 73 65 61 72 63 68 20 66 6f  te the.search fo
faf0: 72 20 66 72 61 6d 65 73 20 6f 66 20 61 20 70 61  r frames of a pa
fb00: 72 74 69 63 75 6c 61 72 20 70 61 67 65 2e 3c 2f  rticular page.</
fb10: 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67  p>..<tcl>hd_frag
fb20: 6d 65 6e 74 20 77 61 6c 69 6e 64 65 78 66 6f 72  ment walindexfor
fb30: 6d 61 74 20 7b 77 61 6c 2d 69 6e 64 65 78 7d 20  mat {wal-index} 
fb40: 7b 57 41 4c 2d 69 6e 64 65 78 20 66 6f 72 6d 61  {WAL-index forma
fb50: 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 34 2e 35  t}</tcl>.<h3>4.5
fb60: 20 57 41 4c 2d 49 6e 64 65 78 20 46 6f 72 6d 61   WAL-Index Forma
fb70: 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 43 6f 6e 63 65  t</h3>..<p>Conce
fb80: 70 74 75 61 6c 6c 79 2c 20 74 68 65 20 77 61 6c  ptually, the wal
fb90: 2d 69 6e 64 65 78 20 69 73 20 73 68 61 72 65 64  -index is shared
fba0: 20 6d 65 6d 6f 72 79 2c 20 74 68 6f 75 67 68 20   memory, though 
fbb0: 74 68 65 20 63 75 72 72 65 6e 74 0a 56 46 53 20  the current.VFS 
fbc0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20  implementations 
fbd0: 75 73 65 20 61 20 6d 6d 61 70 70 65 64 20 66 69  use a mmapped fi
fbe0: 6c 65 20 66 6f 72 20 74 68 65 20 77 61 6c 2d 69  le for the wal-i
fbf0: 6e 64 65 78 2e 20 20 5e 54 68 65 20 6d 6d 61 70  ndex.  ^The mmap
fc00: 70 65 64 0a 66 69 6c 65 20 69 73 20 69 6e 20 74  ped.file is in t
fc10: 68 65 20 73 61 6d 65 20 64 69 72 65 63 74 6f 72  he same director
fc20: 79 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73  y as the databas
fc30: 65 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61  e and has the sa
fc40: 6d 65 20 6e 61 6d 65 0a 61 73 20 74 68 65 20 64  me name.as the d
fc50: 61 74 61 62 61 73 65 20 77 69 74 68 20 61 20 22  atabase with a "
fc60: 3c 74 74 3e 2d 73 68 6d 3c 2f 74 74 3e 22 20 73  <tt>-shm</tt>" s
fc70: 75 66 66 69 78 20 61 70 70 65 6e 64 65 64 2e 20  uffix appended. 
fc80: 20 42 65 63 61 75 73 65 0a 74 68 65 20 77 61 6c   Because.the wal
fc90: 2d 69 6e 64 65 78 20 69 73 20 73 68 61 72 65 64  -index is shared
fca0: 20 6d 65 6d 6f 72 79 2c 20 53 51 4c 69 74 65 20   memory, SQLite 
fcb0: 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
fcc0: 20 0a 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61   .[PRAGMA journa
fcd0: 6c 5f 6d 6f 64 65 20 7c 20 6a 6f 75 72 6e 61 6c  l_mode | journal
fce0: 5f 6d 6f 64 65 3d 57 41 4c 5d 20 0a 6f 6e 20 61  _mode=WAL] .on a
fcf0: 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73 79 73   network filesys
fd00: 74 65 6d 20 77 68 65 6e 20 63 6c 69 65 6e 74 73  tem when clients
fd10: 20 61 72 65 20 6f 6e 20 64 69 66 66 65 72 65 6e   are on differen
fd20: 74 20 6d 61 63 68 69 6e 65 73 2e 0a 41 6c 6c 20  t machines..All 
fd30: 75 73 65 72 73 20 6f 66 20 74 68 65 20 64 61 74  users of the dat
fd40: 61 62 61 73 65 20 6d 75 73 74 20 62 65 20 61 62  abase must be ab
fd50: 6c 65 20 74 6f 20 73 68 61 72 65 20 74 68 65 20  le to share the 
fd60: 73 61 6d 65 20 6d 65 6d 6f 72 79 2e 3c 2f 70 3e  same memory.</p>
fd70: 0a 0a 3c 70 3e 54 68 65 20 70 75 72 70 6f 73 65  ..<p>The purpose
fd80: 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65   of the wal-inde
fd90: 78 20 69 73 20 74 6f 20 61 6e 73 77 65 72 20 74  x is to answer t
fda0: 68 69 73 20 71 75 65 73 74 69 6f 6e 20 71 75 69  his question qui
fdb0: 63 6b 6c 79 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ckly:</p>..<bloc
fdc0: 6b 71 75 6f 74 65 3e 3c 69 3e 0a 47 69 76 65 6e  kquote><i>.Given
fdd0: 20 61 20 70 61 67 65 20 6e 75 6d 62 65 72 20 50   a page number P
fde0: 20 61 6e 64 20 61 20 6d 61 78 69 6d 75 6d 20 57   and a maximum W
fdf0: 41 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20 4d  AL frame index M
fe00: 2c 0a 72 65 74 75 72 6e 20 74 68 65 20 6c 61 72  ,.return the lar
fe10: 67 65 73 74 20 57 41 4c 20 66 72 61 6d 65 20 69  gest WAL frame i
fe20: 6e 64 65 78 20 66 6f 72 20 70 61 67 65 20 50 20  ndex for page P 
fe30: 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  that does not ex
fe40: 63 65 65 64 20 4d 2c 20 0a 6f 72 20 72 65 74 75  ceed M, .or retu
fe50: 72 6e 20 4e 55 4c 4c 20 69 66 20 74 68 65 72 65  rn NULL if there
fe60: 20 61 72 65 20 6e 6f 20 66 72 61 6d 65 73 20 66   are no frames f
fe70: 6f 72 20 70 61 67 65 20 50 20 74 68 61 74 20 64  or page P that d
fe80: 6f 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2e 0a  o not exceed M..
fe90: 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  </i></blockquote
fea0: 3e 0a 0a 3c 70 3e 54 68 65 20 3c 69 3e 4d 3c 2f  >..<p>The <i>M</
feb0: 69 3e 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  i> value in the 
fec0: 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61  previous paragra
fed0: 70 68 20 69 73 20 74 68 65 20 22 6d 78 46 72 61  ph is the "mxFra
fee0: 6d 65 22 20 76 61 6c 75 65 0a 64 65 66 69 6e 65  me" value.define
fef0: 64 20 69 6e 20 5b 57 41 4c 20 72 65 61 64 20 61  d in [WAL read a
ff00: 6c 67 6f 72 69 74 68 6d 20 7c 20 73 65 63 74 69  lgorithm | secti
ff10: 6f 6e 20 34 2e 34 5d 20 74 68 61 74 20 69 73 20  on 4.4] that is 
ff20: 72 65 61 64 20 61 74 20 74 68 65 20 73 74 61 72  read at the star
ff30: 74 20 0a 6f 66 20 61 20 74 72 61 6e 73 61 63 74  t .of a transact
ff40: 69 6f 6e 20 61 6e 64 20 77 68 69 63 68 20 64 65  ion and which de
ff50: 66 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d 75  fines the maximu
ff60: 6d 20 66 72 61 6d 65 20 66 72 6f 6d 20 74 68 65  m frame from the
ff70: 20 57 41 4c 20 74 68 61 74 20 0a 74 68 65 20 72   WAL that .the r
ff80: 65 61 64 65 72 20 77 69 6c 6c 20 75 73 65 2e 3c  eader will use.<
ff90: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 77 61 6c 2d  /p>..<p>The wal-
ffa0: 69 6e 64 65 78 20 69 73 20 74 72 61 6e 73 69 65  index is transie
ffb0: 6e 74 2e 20 20 41 66 74 65 72 20 61 20 63 72 61  nt.  After a cra
ffc0: 73 68 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  sh, the wal-inde
ffd0: 78 20 69 73 0a 72 65 63 6f 6e 73 74 72 75 63 74  x is.reconstruct
ffe0: 65 64 20 66 72 6f 6d 20 74 68 65 20 6f 72 69 67  ed from the orig
fff0: 69 6e 61 6c 20 57 41 4c 20 66 69 6c 65 2e 20 20  inal WAL file.  
10000 5e 54 68 65 20 56 46 53 20 69 73 20 72 65 71 75  ^The VFS is requ
10010 69 72 65 64 0a 74 6f 20 65 69 74 68 65 72 20 74  ired.to either t
10020 72 75 6e 63 61 74 65 20 6f 72 20 7a 65 72 6f 20  runcate or zero 
10030 74 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68  the header of th
10040 65 20 77 61 6c 2d 69 6e 64 65 78 20 77 68 65 6e  e wal-index when
10050 20 74 68 65 20 6c 61 73 74 0a 63 6f 6e 6e 65 63   the last.connec
10060 74 69 6f 6e 20 74 6f 20 69 74 20 63 6c 6f 73 65  tion to it close
10070 73 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20  s.  Because the 
10080 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72 61  wal-index is tra
10090 6e 73 69 65 6e 74 2c 20 69 74 20 63 61 6e 0a 75  nsient, it can.u
100a0 73 65 20 61 6e 20 61 72 63 68 69 74 65 63 74 75  se an architectu
100b0 72 65 2d 73 70 65 63 69 66 69 63 20 66 6f 72 6d  re-specific form
100c0 61 74 3b 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  at; it does not 
100d0 68 61 76 65 20 74 6f 20 62 65 20 63 72 6f 73 73  have to be cross
100e0 2d 70 6c 61 74 66 6f 72 6d 2e 0a 48 65 6e 63 65  -platform..Hence
100f0 2c 20 75 6e 6c 69 6b 65 20 74 68 65 20 64 61 74  , unlike the dat
10100 61 62 61 73 65 20 61 6e 64 20 57 41 4c 20 66 69  abase and WAL fi
10110 6c 65 20 66 6f 72 6d 61 74 73 20 77 68 69 63 68  le formats which
10120 20 73 74 6f 72 65 20 61 6c 6c 20 76 61 6c 75 65   store all value
10130 73 0a 61 73 20 62 69 67 20 65 6e 64 69 61 6e 2c  s.as big endian,
10140 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 73   the wal-index s
10150 74 6f 72 65 73 20 6d 75 6c 74 69 2d 62 79 74 65  tores multi-byte
10160 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 6e   values in the n
10170 61 74 69 76 65 0a 62 79 74 65 20 6f 72 64 65 72  ative.byte order
10180 20 6f 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d   of the host com
10190 70 75 74 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  puter.</p>..<p>T
101a0 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 69 73 20  his document is 
101b0 63 6f 6e 63 65 72 6e 65 64 20 77 69 74 68 20 74  concerned with t
101c0 68 65 20 70 65 72 73 69 73 74 65 6e 74 20 73 74  he persistent st
101d0 61 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ate of the datab
101e0 61 73 65 0a 66 69 6c 65 2c 20 61 6e 64 20 73 69  ase.file, and si
101f0 6e 63 65 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  nce the wal-inde
10200 78 20 69 73 20 61 20 74 72 61 6e 73 69 65 6e 74  x is a transient
10210 20 73 74 72 75 63 74 75 72 65 2c 20 6e 6f 20 66   structure, no f
10220 75 72 74 68 65 72 20 0a 69 6e 66 6f 72 6d 61 74  urther .informat
10230 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f  ion about the fo
10240 72 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c 2d  rmat of the wal-
10250 69 6e 64 65 78 20 77 69 6c 6c 20 62 65 20 70 72  index will be pr
10260 6f 76 69 64 65 64 20 68 65 72 65 2e 0a 43 6f 6d  ovided here..Com
10270 70 6c 65 74 65 20 64 65 74 61 69 6c 73 20 6f 6e  plete details on
10280 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
10290 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 61 72 65  he wal-index are
102a0 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
102b0 6e 0a 63 6f 6d 6d 65 6e 74 73 20 69 6e 20 53 51  n.comments in SQ
102c0 4c 69 74 65 20 73 6f 75 72 63 65 20 63 6f 64 65  Lite source code
102d0 2e 3c 2f 70 3e 0a                                .</p>.