Documentation Source Text

Hex Artifact Content
Login

Artifact 5606bb403c99d43ec98b9b352b34f39f9547b09c1328c95aed9d7a6b163fa4cf:


0000: 3c 74 69 74 6c 65 3e 44 61 74 61 62 61 73 65 20  <title>Database 
0010: 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 74 69 74  File Format</tit
0020: 6c 65 3e 0a 3c 61 6c 74 2d 74 69 74 6c 65 3e 4f  le>.<alt-title>O
0030: 6e 2d 44 69 73 6b 20 46 6f 72 6d 61 74 3c 2f 61  n-Disk Format</a
0040: 6c 74 2d 74 69 74 6c 65 3e 0a 3c 74 63 6c 3e 68  lt-title>.<tcl>h
0050: 64 5f 6b 65 79 77 6f 72 64 73 20 7b 66 69 6c 65  d_keywords {file
0060: 20 66 6f 72 6d 61 74 7d 20 7b 73 65 63 6f 6e 64   format} {second
0070: 20 65 64 69 74 69 6f 6e 20 66 69 6c 65 20 66 6f   edition file fo
0080: 72 6d 61 74 20 64 6f 63 75 6d 65 6e 74 7d 3c 2f  rmat document}</
0090: 74 63 6c 3e 0a 0a 3c 74 61 62 6c 65 5f 6f 66 5f  tcl>..<table_of_
00a0: 63 6f 6e 74 65 6e 74 73 3e 0a 0a 3c 70 3e 54 68  contents>..<p>Th
00b0: 69 73 20 64 6f 63 75 6d 65 6e 74 20 64 65 73 63  is document desc
00c0: 72 69 62 65 73 20 61 6e 64 20 64 65 66 69 6e 65  ribes and define
00d0: 73 20 74 68 65 20 6f 6e 2d 64 69 73 6b 20 64 61  s the on-disk da
00e0: 74 61 62 61 73 65 20 66 69 6c 65 0a 66 6f 72 6d  tabase file.form
00f0: 61 74 20 75 73 65 64 20 62 79 20 61 6c 6c 20 72  at used by all r
0100: 65 6c 65 61 73 65 73 20 6f 66 20 53 51 4c 69 74  eleases of SQLit
0110: 65 20 73 69 6e 63 65 20 0a 76 65 72 73 69 6f 6e  e since .version
0120: 20 33 2e 30 2e 30 20 28 5b 64 61 74 65 6f 66 3a   3.0.0 ([dateof:
0130: 33 2e 30 2e 30 5d 29 2e 3c 2f 70 3e 0a 0a 3c 68  3.0.0]).</p>..<h
0140: 31 3e 54 68 65 20 44 61 74 61 62 61 73 65 20 46  1>The Database F
0150: 69 6c 65 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65  ile</h1>..<p>The
0160: 20 63 6f 6d 70 6c 65 74 65 20 73 74 61 74 65 20   complete state 
0170: 6f 66 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74  of an SQLite dat
0180: 61 62 61 73 65 20 69 73 20 75 73 75 61 6c 6c 79  abase is usually
0190: 0a 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 61 20  .contained in a 
01a0: 73 69 6e 67 6c 65 20 66 69 6c 65 20 6f 6e 20 64  single file on d
01b0: 69 73 6b 20 63 61 6c 6c 65 64 20 74 68 65 20 22  isk called the "
01c0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
01d0: 6c 65 22 2e 3c 2f 70 3e 0a 0a 3c 70 3e 44 75 72  le".</p>..<p>Dur
01e0: 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f  ing a transactio
01f0: 6e 2c 20 53 51 4c 69 74 65 20 73 74 6f 72 65 73  n, SQLite stores
0200: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
0210: 72 6d 61 74 69 6f 6e 20 0a 69 6e 20 61 20 73 65  rmation .in a se
0220: 63 6f 6e 64 20 66 69 6c 65 20 63 61 6c 6c 65 64  cond file called
0230: 20 74 68 65 20 22 72 6f 6c 6c 62 61 63 6b 20 6a   the "rollback j
0240: 6f 75 72 6e 61 6c 22 2c 20 6f 72 20 69 66 20 53  ournal", or if S
0250: 51 4c 69 74 65 20 69 73 20 69 6e 0a 5b 57 41 4c  QLite is in.[WAL
0260: 20 6d 6f 64 65 5d 2c 20 61 20 77 72 69 74 65 2d   mode], a write-
0270: 61 68 65 61 64 20 6c 6f 67 20 66 69 6c 65 2e 0a  ahead log file..
0280: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
0290: 74 20 68 6f 74 6a 72 6e 6c 20 7b 68 6f 74 20 6a  t hotjrnl {hot j
02a0: 6f 75 72 6e 61 6c 7d 20 7b 68 6f 74 20 6a 6f 75  ournal} {hot jou
02b0: 72 6e 61 6c 20 66 69 6c 65 73 7d 3c 2f 74 63 6c  rnal files}</tcl
02c0: 3e 0a 3c 68 32 3e 48 6f 74 20 4a 6f 75 72 6e 61  >.<h2>Hot Journa
02d0: 6c 73 3c 2f 68 32 3e 0a 3c 70 3e 49 66 20 74 68  ls</h2>.<p>If th
02e0: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 6f 72  e application or
02f0: 0a 68 6f 73 74 20 63 6f 6d 70 75 74 65 72 20 63  .host computer c
0300: 72 61 73 68 65 73 20 62 65 66 6f 72 65 20 74 68  rashes before th
0310: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f  e transaction co
0320: 6d 70 6c 65 74 65 73 2c 20 74 68 65 6e 20 74 68  mpletes, then th
0330: 65 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75 72 6e  e rollback.journ
0340: 61 6c 20 6f 72 20 77 72 69 74 65 2d 61 68 65 61  al or write-ahea
0350: 64 20 6c 6f 67 20 63 6f 6e 74 61 69 6e 73 20 69  d log contains i
0360: 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
0370: 64 20 0a 74 6f 20 72 65 73 74 6f 72 65 20 74 68  d .to restore th
0380: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
0390: 66 69 6c 65 20 74 6f 20 61 20 63 6f 6e 73 69 73  file to a consis
03a0: 74 65 6e 74 20 73 74 61 74 65 2e 20 20 57 68 65  tent state.  Whe
03b0: 6e 20 61 20 72 6f 6c 6c 62 61 63 6b 20 0a 6a 6f  n a rollback .jo
03c0: 75 72 6e 61 6c 20 6f 72 20 77 72 69 74 65 2d 61  urnal or write-a
03d0: 68 65 61 64 20 6c 6f 67 20 63 6f 6e 74 61 69 6e  head log contain
03e0: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
03f0: 63 65 73 73 61 72 79 20 66 6f 72 20 72 65 63 6f  cessary for reco
0400: 76 65 72 69 6e 67 20 0a 74 68 65 20 73 74 61 74  vering .the stat
0410: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
0420: 65 2c 20 74 68 65 79 20 61 72 65 20 63 61 6c 6c  e, they are call
0430: 65 64 20 61 20 22 68 6f 74 20 6a 6f 75 72 6e 61  ed a "hot journa
0440: 6c 22 20 6f 72 20 22 68 6f 74 20 57 41 4c 20 66  l" or "hot WAL f
0450: 69 6c 65 22 2e 0a 48 6f 74 20 6a 6f 75 72 6e 61  ile"..Hot journa
0460: 6c 73 20 61 6e 64 20 57 41 4c 20 66 69 6c 65 73  ls and WAL files
0470: 20 61 72 65 20 6f 6e 6c 79 20 61 20 66 61 63 74   are only a fact
0480: 6f 72 20 64 75 72 69 6e 67 20 65 72 72 6f 72 20  or during error 
0490: 72 65 63 6f 76 65 72 79 0a 73 63 65 6e 61 72 69  recovery.scenari
04a0: 6f 73 20 61 6e 64 20 73 6f 20 61 72 65 20 75 6e  os and so are un
04b0: 63 6f 6d 6d 6f 6e 2c 20 62 75 74 20 74 68 65 79  common, but they
04c0: 20 61 72 65 20 70 61 72 74 20 6f 66 20 74 68 65   are part of the
04d0: 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51 4c   state of an SQL
04e0: 69 74 65 0a 64 61 74 61 62 61 73 65 20 61 6e 64  ite.database and
04f0: 20 73 6f 20 63 61 6e 6e 6f 74 20 62 65 20 69 67   so cannot be ig
0500: 6e 6f 72 65 64 2e 20 20 54 68 69 73 20 64 6f 63  nored.  This doc
0510: 75 6d 65 6e 74 20 64 65 66 69 6e 65 73 20 74 68  ument defines th
0520: 65 20 66 6f 72 6d 61 74 0a 6f 66 20 61 20 72 6f  e format.of a ro
0530: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 61  llback journal a
0540: 6e 64 20 74 68 65 20 77 72 69 74 65 2d 61 68 65  nd the write-ahe
0550: 61 64 20 6c 6f 67 20 66 69 6c 65 2c 20 62 75 74  ad log file, but
0560: 20 74 68 65 20 66 6f 63 75 73 20 69 73 0a 6f 6e   the focus is.on
0570: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
0580: 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 68  se file.</p>..<h
0590: 32 3e 50 61 67 65 73 3c 2f 68 32 3e 0a 0a 3c 70  2>Pages</h2>..<p
05a0: 3e 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61  >The main databa
05b0: 73 65 20 66 69 6c 65 20 63 6f 6e 73 69 73 74 73  se file consists
05c0: 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   of one or more 
05d0: 70 61 67 65 73 2e 20 20 5e 54 68 65 20 73 69 7a  pages.  ^The siz
05e0: 65 20 6f 66 20 61 0a 70 61 67 65 20 69 73 20 61  e of a.page is a
05f0: 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 62 65   power of two be
0600: 74 77 65 65 6e 20 35 31 32 20 61 6e 64 20 36 35  tween 512 and 65
0610: 35 33 36 20 69 6e 63 6c 75 73 69 76 65 2e 20 20  536 inclusive.  
0620: 41 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e  All pages within
0630: 0a 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61  .the same databa
0640: 73 65 20 61 72 65 20 74 68 65 20 73 61 6d 65 20  se are the same 
0650: 73 69 7a 65 2e 20 20 5e 54 68 65 20 70 61 67 65  size.  ^The page
0660: 20 73 69 7a 65 20 66 6f 72 20 61 20 64 61 74 61   size for a data
0670: 62 61 73 65 20 66 69 6c 65 0a 69 73 20 64 65 74  base file.is det
0680: 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 32  ermined by the 2
0690: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6c 6f  -byte integer lo
06a0: 63 61 74 65 64 20 61 74 20 61 6e 20 6f 66 66 73  cated at an offs
06b0: 65 74 20 6f 66 0a 31 36 20 62 79 74 65 73 20 66  et of.16 bytes f
06c0: 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
06d0: 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  g of the databas
06e0: 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e file.</p>..<p>
06f0: 50 61 67 65 73 20 61 72 65 20 6e 75 6d 62 65 72  Pages are number
0700: 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
0710: 68 20 31 2e 20 20 54 68 65 20 6d 61 78 69 6d 75  h 1.  The maximu
0720: 6d 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73  m page number is
0730: 0a 32 31 34 37 34 38 33 36 34 36 20 28 32 3c 73  .2147483646 (2<s
0740: 75 70 3e 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d  up><small>31</sm
0750: 61 6c 6c 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e  all></sup> - 2).
0760: 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69    The minimum si
0770: 7a 65 0a 53 51 4c 69 74 65 20 64 61 74 61 62 61  ze.SQLite databa
0780: 73 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 35  se is a single 5
0790: 31 32 2d 62 79 74 65 20 70 61 67 65 2e 0a 54 68  12-byte page..Th
07a0: 65 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 64  e maximum size d
07b0: 61 74 61 62 61 73 65 20 77 6f 75 6c 64 20 62 65  atabase would be
07c0: 20 32 31 34 37 34 38 33 36 34 36 20 70 61 67 65   2147483646 page
07d0: 73 20 61 74 20 36 35 35 33 36 20 62 79 74 65 73  s at 65536 bytes
07e0: 20 70 65 72 0a 70 61 67 65 20 6f 72 20 31 34 30   per.page or 140
07f0: 2c 37 33 37 2c 34 38 38 2c 32 32 34 2c 32 35 36  ,737,488,224,256
0800: 20 62 79 74 65 73 20 28 61 62 6f 75 74 20 31 34   bytes (about 14
0810: 30 20 74 65 72 61 62 79 74 65 73 29 2e 20 20 55  0 terabytes).  U
0820: 73 75 61 6c 6c 79 20 53 51 4c 69 74 65 20 77 69  sually SQLite wi
0830: 6c 6c 0a 68 69 74 20 74 68 65 20 6d 61 78 69 6d  ll.hit the maxim
0840: 75 6d 20 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d  um file size lim
0850: 69 74 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c  it of the underl
0860: 79 69 6e 67 20 66 69 6c 65 73 79 73 74 65 6d 20  ying filesystem 
0870: 6f 72 20 64 69 73 6b 0a 68 61 72 64 77 61 72 65  or disk.hardware
0880: 20 6c 6f 6e 67 20 62 65 66 6f 72 65 20 69 74 20   long before it 
0890: 68 69 74 73 20 69 74 73 20 6f 77 6e 20 69 6e 74  hits its own int
08a0: 65 72 6e 61 6c 20 73 69 7a 65 20 6c 69 6d 69 74  ernal size limit
08b0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 63 6f 6d  .</p>..<p>In com
08c0: 6d 6f 6e 20 75 73 65 2c 20 53 51 4c 69 74 65 20  mon use, SQLite 
08d0: 64 61 74 61 62 61 73 65 73 20 74 65 6e 64 20 74  databases tend t
08e0: 6f 20 72 61 6e 67 65 20 69 6e 20 73 69 7a 65 20  o range in size 
08f0: 66 72 6f 6d 20 61 20 66 65 77 20 6b 69 6c 6f 62  from a few kilob
0900: 79 74 65 73 0a 74 6f 20 61 20 66 65 77 20 67 69  ytes.to a few gi
0910: 67 61 62 79 74 65 73 2c 20 74 68 6f 75 67 68 20  gabytes, though 
0920: 74 65 72 61 62 79 74 65 2d 73 69 7a 65 20 53 51  terabyte-size SQ
0930: 4c 69 74 65 20 64 61 74 61 62 61 73 65 73 20 61  Lite databases a
0940: 72 65 20 6b 6e 6f 77 6e 20 74 6f 20 65 78 69 73  re known to exis
0950: 74 0a 69 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e  t.in production.
0960: 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20 61 6e 79 20  </p>..<p>At any 
0970: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 65  point in time, e
0980: 76 65 72 79 20 70 61 67 65 20 69 6e 20 74 68 65  very page in the
0990: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68   main database h
09a0: 61 73 20 61 20 73 69 6e 67 6c 65 0a 75 73 65 20  as a single.use 
09b0: 77 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66 20  which is one of 
09c0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 3c  the following:.<
09d0: 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 6c 6f 63 6b  ul>.<li>The lock
09e0: 2d 62 79 74 65 20 70 61 67 65 0a 3c 6c 69 3e 41  -byte page.<li>A
09f0: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 0a 3c   freelist page.<
0a00: 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ul>.<li>A freeli
0a10: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 0a 3c 6c  st trunk page.<l
0a20: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 6c 65 61  i>A freelist lea
0a30: 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69  f page.</ul>.<li
0a40: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 0a 3c  >A b-tree page.<
0a50: 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61 62 6c 65 20  ul>.<li>A table 
0a60: 62 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20  b-tree interior 
0a70: 70 61 67 65 0a 3c 6c 69 3e 41 20 74 61 62 6c 65  page.<li>A table
0a80: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
0a90: 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20 62  e.<li>An index b
0aa0: 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20 70  -tree interior p
0ab0: 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78  age.<li>An index
0ac0: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
0ad0: 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 70 61  e.</ul>.<li>A pa
0ae0: 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70  yload overflow p
0af0: 61 67 65 0a 3c 6c 69 3e 41 20 70 6f 69 6e 74 65  age.<li>A pointe
0b00: 72 20 6d 61 70 20 70 61 67 65 0a 3c 2f 75 6c 3e  r map page.</ul>
0b10: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 6c 6c 20 72  .</p>..<p>^All r
0b20: 65 61 64 73 20 66 72 6f 6d 20 61 6e 64 20 77 72  eads from and wr
0b30: 69 74 65 73 20 74 6f 20 74 68 65 20 6d 61 69 6e  ites to the main
0b40: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62   database file b
0b50: 65 67 69 6e 20 61 74 20 61 20 70 61 67 65 0a 62  egin at a page.b
0b60: 6f 75 6e 64 61 72 79 20 61 6e 64 20 61 6c 6c 20  oundary and all 
0b70: 77 72 69 74 65 73 20 61 72 65 20 61 6e 20 69 6e  writes are an in
0b80: 74 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20  teger number of 
0b90: 70 61 67 65 73 20 69 6e 20 73 69 7a 65 2e 20 20  pages in size.  
0ba0: 5e 52 65 61 64 73 0a 61 72 65 20 61 6c 73 6f 20  ^Reads.are also 
0bb0: 75 73 75 61 6c 6c 79 20 61 6e 20 69 6e 74 65 67  usually an integ
0bc0: 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  er number of pag
0bd0: 65 73 20 69 6e 20 73 69 7a 65 2c 20 77 69 74 68  es in size, with
0be0: 20 74 68 65 20 6f 6e 65 20 65 78 63 65 70 74 69   the one excepti
0bf0: 6f 6e 0a 74 68 61 74 20 77 68 65 6e 20 74 68 65  on.that when the
0c00: 20 64 61 74 61 62 61 73 65 20 69 73 20 66 69 72   database is fir
0c10: 73 74 20 6f 70 65 6e 65 64 2c 20 74 68 65 20 66  st opened, the f
0c20: 69 72 73 74 20 31 30 30 20 62 79 74 65 73 20 6f  irst 100 bytes o
0c30: 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  f the.database f
0c40: 69 6c 65 20 28 74 68 65 20 64 61 74 61 62 61 73  ile (the databas
0c50: 65 20 66 69 6c 65 20 68 65 61 64 65 72 29 20 61  e file header) a
0c60: 72 65 20 72 65 61 64 20 61 73 20 61 20 73 75 62  re read as a sub
0c70: 2d 70 61 67 65 20 73 69 7a 65 20 75 6e 69 74 2e  -page size unit.
0c80: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 42 65 66 6f 72 65  </p>..<p>^Before
0c90: 20 61 6e 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   any information
0ca0: 2d 62 65 61 72 69 6e 67 20 70 61 67 65 20 6f 66  -bearing page of
0cb0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
0cc0: 20 6d 6f 64 69 66 69 65 64 2c 20 0a 74 68 65 20   modified, .the 
0cd0: 6f 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66  original unmodif
0ce0: 69 65 64 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  ied content of t
0cf0: 68 61 74 20 70 61 67 65 20 69 73 20 77 72 69 74  hat page is writ
0d00: 74 65 6e 20 69 6e 74 6f 20 74 68 65 20 0a 72 6f  ten into the .ro
0d10: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20  llback journal. 
0d20: 20 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   If a transactio
0d30: 6e 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64  n is interrupted
0d40: 20 61 6e 64 20 6e 65 65 64 73 20 74 6f 20 62 65   and needs to be
0d50: 20 0a 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 20 74   .rolled back, t
0d60: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
0d70: 6e 61 6c 20 63 61 6e 20 74 68 65 6e 20 62 65 20  nal can then be 
0d80: 75 73 65 64 20 74 6f 20 72 65 73 74 6f 72 65 20  used to restore 
0d90: 74 68 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20  the.database to 
0da0: 69 74 73 20 6f 72 69 67 69 6e 61 6c 20 73 74 61  its original sta
0db0: 74 65 2e 20 20 5e 46 72 65 65 6c 69 73 74 20 6c  te.  ^Freelist l
0dc0: 65 61 66 20 70 61 67 65 73 20 62 65 61 72 20 6e  eaf pages bear n
0dd0: 6f 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  o.information th
0de0: 61 74 20 77 6f 75 6c 64 20 6e 65 65 64 20 74 6f  at would need to
0df0: 20 62 65 20 72 65 73 74 6f 72 65 64 20 6f 6e 20   be restored on 
0e00: 61 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 73  a rollback and s
0e10: 6f 20 74 68 65 79 0a 61 72 65 20 6e 6f 74 20 77  o they.are not w
0e20: 72 69 74 74 65 6e 20 74 6f 20 74 68 65 20 6a 6f  ritten to the jo
0e30: 75 72 6e 61 6c 20 70 72 69 6f 72 20 74 6f 20 6d  urnal prior to m
0e40: 6f 64 69 66 69 63 61 74 69 6f 6e 2c 20 69 6e 20  odification, in 
0e50: 6f 72 64 65 72 20 74 6f 0a 72 65 64 75 63 65 20  order to.reduce 
0e60: 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c  disk I/O.</p>..<
0e70: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
0e80: 64 61 74 61 62 61 73 65 5f 68 65 61 64 65 72 20  database_header 
0e90: 7b 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72  {database header
0ea0: 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 54 68 65 20  }</tcl>.<h2>The 
0eb0: 44 61 74 61 62 61 73 65 20 48 65 61 64 65 72 3c  Database Header<
0ec0: 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 72  /h2>..<p>The fir
0ed0: 73 74 20 31 30 30 20 62 79 74 65 73 20 6f 66 20  st 100 bytes of 
0ee0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
0ef0: 65 20 63 6f 6d 70 72 69 73 65 20 74 68 65 20 64  e comprise the d
0f00: 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 68 65  atabase file .he
0f10: 61 64 65 72 2e 20 20 54 68 65 20 64 61 74 61 62  ader.  The datab
0f20: 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20  ase file header 
0f30: 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
0f40: 66 69 65 6c 64 73 20 61 73 20 73 68 6f 77 6e 20  fields as shown 
0f50: 62 79 0a 74 68 65 20 74 61 62 6c 65 20 62 65 6c  by.the table bel
0f60: 6f 77 2e 20 20 41 6c 6c 20 6d 75 6c 74 69 62 79  ow.  All multiby
0f70: 74 65 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  te fields in the
0f80: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
0f90: 65 61 64 65 72 20 61 72 65 0a 73 74 6f 72 65 64  eader are.stored
0fa0: 20 77 69 74 68 20 74 68 65 20 6d 6f 73 74 20 73   with the most s
0fb0: 69 67 6e 69 66 69 63 61 6e 74 20 62 79 74 65 20  ignificant byte 
0fc0: 66 69 72 73 74 20 28 62 69 67 2d 65 6e 64 69 61  first (big-endia
0fd0: 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  n).</p>..<center
0fe0: 3e 0a 3c 69 3e 44 61 74 61 62 61 73 65 20 48 65  >.<i>Database He
0ff0: 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  ader Format</i><
1000: 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
1010: 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
1020: 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
1030: 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
1040: 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76  iption.<tr><td v
1050: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1060: 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69  center>0<td vali
1070: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1080: 74 65 72 3e 31 36 3c 74 64 20 61 6c 69 67 6e 3d  ter>16<td align=
1090: 6c 65 66 74 3e 0a 54 68 65 20 68 65 61 64 65 72  left>.The header
10a0: 20 73 74 72 69 6e 67 3a 20 22 53 51 4c 69 74 65   string: "SQLite
10b0: 20 66 6f 72 6d 61 74 20 33 5c 30 30 30 22 0a 3c   format 3\000".<
10c0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
10d0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
10e0: 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  6<td valign=top 
10f0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74  align=center>2<t
1100: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68  d align=left>.Th
1110: 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
1120: 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e 20 20  size in bytes.  
1130: 4d 75 73 74 20 62 65 20 61 20 70 6f 77 65 72 20  Must be a power 
1140: 6f 66 20 74 77 6f 20 62 65 74 77 65 65 6e 20 35  of two between 5
1150: 31 32 0a 61 6e 64 20 33 32 37 36 38 20 69 6e 63  12.and 32768 inc
1160: 6c 75 73 69 76 65 2c 20 6f 72 20 74 68 65 20 76  lusive, or the v
1170: 61 6c 75 65 20 31 20 72 65 70 72 65 73 65 6e 74  alue 1 represent
1180: 69 6e 67 20 61 20 70 61 67 65 20 73 69 7a 65 20  ing a page size 
1190: 6f 66 20 36 35 35 33 36 2e 0a 3c 74 72 3e 3c 74  of 65536..<tr><t
11a0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
11b0: 67 6e 3d 63 65 6e 74 65 72 3e 31 38 3c 74 64 20  gn=center>18<td 
11c0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
11d0: 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69  =center>1<td ali
11e0: 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c 65 20 66 6f  gn=left>.File fo
11f0: 72 6d 61 74 20 77 72 69 74 65 20 76 65 72 73 69  rmat write versi
1200: 6f 6e 2e 20 20 31 20 66 6f 72 20 6c 65 67 61 63  on.  1 for legac
1210: 79 3b 20 32 20 66 6f 72 20 5b 57 41 4c 5d 2e 0a  y; 2 for [WAL]..
1220: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
1230: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1240: 31 39 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  19<td valign=top
1250: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c   align=center>1<
1260: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46  td align=left>.F
1270: 69 6c 65 20 66 6f 72 6d 61 74 20 72 65 61 64 20  ile format read 
1280: 76 65 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20  version.  1 for 
1290: 6c 65 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57  legacy; 2 for [W
12a0: 41 4c 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  AL]..<tr><td val
12b0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
12c0: 6e 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67  nter>20<td valig
12d0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12e0: 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>1<td align=le
12f0: 66 74 3e 0a 42 79 74 65 73 20 6f 66 20 75 6e 75  ft>.Bytes of unu
1300: 73 65 64 20 22 72 65 73 65 72 76 65 64 22 20 73  sed "reserved" s
1310: 70 61 63 65 20 61 74 20 74 68 65 20 65 6e 64 20  pace at the end 
1320: 6f 66 20 65 61 63 68 20 70 61 67 65 2e 20 20 55  of each page.  U
1330: 73 75 61 6c 6c 79 20 30 2e 0a 3c 74 72 3e 3c 74  sually 0..<tr><t
1340: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1350: 67 6e 3d 63 65 6e 74 65 72 3e 32 31 3c 74 64 20  gn=center>21<td 
1360: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1370: 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69  =center>1<td ali
1380: 67 6e 3d 6c 65 66 74 3e 0a 4d 61 78 69 6d 75 6d  gn=left>.Maximum
1390: 20 65 6d 62 65 64 64 65 64 20 70 61 79 6c 6f 61   embedded payloa
13a0: 64 20 66 72 61 63 74 69 6f 6e 2e 20 20 4d 75 73  d fraction.  Mus
13b0: 74 20 62 65 20 36 34 2e 0a 3c 74 72 3e 3c 74 64  t be 64..<tr><td
13c0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13d0: 6e 3d 63 65 6e 74 65 72 3e 32 32 3c 74 64 20 76  n=center>22<td v
13e0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13f0: 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67  center>1<td alig
1400: 6e 3d 6c 65 66 74 3e 0a 4d 69 6e 69 6d 75 6d 20  n=left>.Minimum 
1410: 65 6d 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64  embedded payload
1420: 20 66 72 61 63 74 69 6f 6e 2e 20 20 4d 75 73 74   fraction.  Must
1430: 20 62 65 20 33 32 2e 0a 3c 74 72 3e 3c 74 64 20   be 32..<tr><td 
1440: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1450: 3d 63 65 6e 74 65 72 3e 32 33 3c 74 64 20 76 61  =center>23<td va
1460: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1470: 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e  enter>1<td align
1480: 3d 6c 65 66 74 3e 0a 4c 65 61 66 20 70 61 79 6c  =left>.Leaf payl
1490: 6f 61 64 20 66 72 61 63 74 69 6f 6e 2e 20 20 4d  oad fraction.  M
14a0: 75 73 74 20 62 65 20 33 32 2e 0a 3c 74 72 3e 3c  ust be 32..<tr><
14b0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
14c0: 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 3c 74 64  ign=center>24<td
14d0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
14e0: 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c  n=center>4<td al
14f0: 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c 65 20 63  ign=left>.File c
1500: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 2e 0a 3c  hange counter..<
1510: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1520: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
1530: 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
1540: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1550: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 53 69  d align=left>.Si
1560: 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
1570: 73 65 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73  se file in pages
1580: 2e 20 20 54 68 65 20 22 69 6e 2d 68 65 61 64 65  .  The "in-heade
1590: 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 22  r database size"
15a0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
15b0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
15c0: 72 3e 33 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>32<td valign=t
15d0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
15e0: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
15f0: 0a 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20  .Page number of 
1600: 74 68 65 20 66 69 72 73 74 20 66 72 65 65 6c 69  the first freeli
1610: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 2e 0a 3c  st trunk page..<
1620: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1630: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33  p align=center>3
1640: 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  6<td valign=top 
1650: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1660: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 6f  d align=left>.To
1670: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 66 72  tal number of fr
1680: 65 65 6c 69 73 74 20 70 61 67 65 73 2e 0a 3c 74  eelist pages..<t
1690: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
16a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 30   align=center>40
16b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
16c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
16d0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65   align=left>.The
16e0: 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 0a   schema cookie..
16f0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
1700: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1710: 34 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  44<td valign=top
1720: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
1730: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54  td align=left>.T
1740: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  he schema format
1750: 20 6e 75 6d 62 65 72 2e 20 20 53 75 70 70 6f 72   number.  Suppor
1760: 74 65 64 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  ted schema forma
1770: 74 73 20 61 72 65 20 31 2c 20 32 2c 20 33 2c 20  ts are 1, 2, 3, 
1780: 61 6e 64 20 34 2e 0a 3c 74 72 3e 3c 74 64 20 76  and 4..<tr><td v
1790: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
17a0: 63 65 6e 74 65 72 3e 34 38 3c 74 64 20 76 61 6c  center>48<td val
17b0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
17c0: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
17d0: 6c 65 66 74 3e 0a 44 65 66 61 75 6c 74 20 70 61  left>.Default pa
17e0: 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 0a 3c  ge cache size..<
17f0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1800: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35  p align=center>5
1810: 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  2<td valign=top 
1820: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
1830: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68  d align=left>.Th
1840: 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  e page number of
1850: 20 74 68 65 20 6c 61 72 67 65 73 74 20 72 6f 6f   the largest roo
1860: 74 20 62 2d 74 72 65 65 20 70 61 67 65 20 77 68  t b-tree page wh
1870: 65 6e 20 69 6e 20 61 75 74 6f 2d 76 61 63 75 75  en in auto-vacuu
1880: 6d 20 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c  m or.incremental
1890: 2d 76 61 63 75 75 6d 20 6d 6f 64 65 73 2c 20 6f  -vacuum modes, o
18a0: 72 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65  r zero otherwise
18b0: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
18c0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
18d0: 72 3e 35 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>56<td valign=t
18e0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
18f0: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1900: 0a 54 68 65 20 64 61 74 61 62 61 73 65 20 74 65  .The database te
1910: 78 74 20 65 6e 63 6f 64 69 6e 67 2e 20 20 41 20  xt encoding.  A 
1920: 76 61 6c 75 65 20 6f 66 20 31 20 6d 65 61 6e 73  value of 1 means
1930: 20 55 54 46 2d 38 2e 20 20 41 20 76 61 6c 75 65   UTF-8.  A value
1940: 20 6f 66 20 32 0a 6d 65 61 6e 73 20 55 54 46 2d   of 2.means UTF-
1950: 31 36 6c 65 2e 20 20 41 20 76 61 6c 75 65 20 6f  16le.  A value o
1960: 66 20 33 20 6d 65 61 6e 73 20 55 54 46 2d 31 36  f 3 means UTF-16
1970: 62 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  be..<tr><td vali
1980: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1990: 74 65 72 3e 36 30 3c 74 64 20 76 61 6c 69 67 6e  ter>60<td valign
19a0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
19b0: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
19c0: 74 3e 0a 54 68 65 20 22 75 73 65 72 20 76 65 72  t>.The "user ver
19d0: 73 69 6f 6e 22 20 61 73 20 72 65 61 64 20 61 6e  sion" as read an
19e0: 64 20 73 65 74 20 62 79 20 74 68 65 20 5b 75 73  d set by the [us
19f0: 65 72 5f 76 65 72 73 69 6f 6e 20 70 72 61 67 6d  er_version pragm
1a00: 61 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  a]..<tr><td vali
1a10: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1a20: 74 65 72 3e 36 34 3c 74 64 20 76 61 6c 69 67 6e  ter>64<td valign
1a30: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1a40: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1a50: 74 3e 0a 54 72 75 65 20 28 6e 6f 6e 2d 7a 65 72  t>.True (non-zer
1a60: 6f 29 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e 74  o) for increment
1a70: 61 6c 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2e 20  al-vacuum mode. 
1a80: 20 46 61 6c 73 65 20 28 7a 65 72 6f 29 20 6f 74   False (zero) ot
1a90: 68 65 72 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64  herwise..<tr><td
1aa0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1ab0: 6e 3d 63 65 6e 74 65 72 3e 36 38 3c 74 64 20 76  n=center>68<td v
1ac0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1ad0: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1ae0: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 22 41 70 70  n=left>.The "App
1af0: 6c 69 63 61 74 69 6f 6e 20 49 44 22 20 73 65 74  lication ID" set
1b00: 20 62 79 20 5b 50 52 41 47 4d 41 20 61 70 70 6c   by [PRAGMA appl
1b10: 69 63 61 74 69 6f 6e 5f 69 64 5d 2e 0a 3c 74 72  ication_id]..<tr
1b20: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1b30: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37 32 3c  align=center>72<
1b40: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1b50: 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64  ign=center>20<td
1b60: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 52 65 73   align=left>.Res
1b70: 65 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e 73  erved for expans
1b80: 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 7a 65  ion.  Must be ze
1b90: 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ro..<tr><td vali
1ba0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1bb0: 74 65 72 3e 39 32 3c 74 64 20 76 61 6c 69 67 6e  ter>92<td valign
1bc0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1bd0: 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>4<td align=lef
1be0: 74 3e 0a 54 68 65 20 5b 76 65 72 73 69 6f 6e 2d  t>.The [version-
1bf0: 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72  valid-for number
1c00: 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ]..<tr><td valig
1c10: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1c20: 65 72 3e 39 36 3c 74 64 20 76 61 6c 69 67 6e 3d  er>96<td valign=
1c30: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1c40: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
1c50: 3e 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  >.[SQLITE_VERSIO
1c60: 4e 5f 4e 55 4d 42 45 52 5d 0a 3c 2f 74 61 62 6c  N_NUMBER].</tabl
1c70: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 68 33  e></center>..<h3
1c80: 3e 4d 61 67 69 63 20 48 65 61 64 65 72 20 53 74  >Magic Header St
1c90: 72 69 6e 67 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 45  ring</h3>..<p>^E
1ca0: 76 65 72 79 20 76 61 6c 69 64 20 53 51 4c 69 74  very valid SQLit
1cb0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1cc0: 62 65 67 69 6e 73 20 77 69 74 68 20 74 68 65 20  begins with the 
1cd0: 66 6f 6c 6c 6f 77 69 6e 67 20 31 36 20 62 79 74  following 16 byt
1ce0: 65 73 20 0a 28 69 6e 20 68 65 78 29 3a 20 35 33  es .(in hex): 53
1cf0: 20 35 31 20 34 63 20 36 39 20 37 34 20 36 35 20   51 4c 69 74 65 
1d00: 32 30 20 36 36 20 36 66 20 37 32 20 36 64 20 36  20 66 6f 72 6d 6
1d10: 31 20 37 34 20 32 30 20 33 33 20 30 30 2e 20 20  1 74 20 33 00.  
1d20: 54 68 69 73 20 62 79 74 65 20 73 65 71 75 65 6e  This byte sequen
1d30: 63 65 0a 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  ce.corresponds t
1d40: 6f 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69  o the UTF-8 stri
1d50: 6e 67 20 22 53 51 4c 69 74 65 20 66 6f 72 6d 61  ng "SQLite forma
1d60: 74 20 33 22 20 69 6e 63 6c 75 64 69 6e 67 20 74  t 3" including t
1d70: 68 65 20 6e 75 6c 0a 74 65 72 6d 69 6e 61 74 6f  he nul.terminato
1d80: 72 20 63 68 61 72 61 63 74 65 72 20 61 74 20 74  r character at t
1d90: 68 65 20 65 6e 64 2e 3c 2f 70 3e 0a 0a 3c 68 33  he end.</p>..<h3
1da0: 3e 50 61 67 65 20 53 69 7a 65 3c 2f 68 33 3e 0a  >Page Size</h3>.
1db0: 0a 3c 70 3e 54 68 65 20 74 77 6f 2d 62 79 74 65  .<p>The two-byte
1dc0: 20 76 61 6c 75 65 20 62 65 67 69 6e 6e 69 6e 67   value beginning
1dd0: 20 61 74 20 6f 66 66 73 65 74 20 31 36 20 64 65   at offset 16 de
1de0: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 70 61 67  termines the pag
1df0: 65 20 73 69 7a 65 20 6f 66 20 0a 74 68 65 20 64  e size of .the d
1e00: 61 74 61 62 61 73 65 2e 20 20 46 6f 72 20 53 51  atabase.  For SQ
1e10: 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 33 2e  Lite versions 3.
1e20: 37 2e 30 2e 31 20 28 5b 64 61 74 65 6f 66 3a 33  7.0.1 ([dateof:3
1e30: 2e 37 2e 30 2e 31 5d 29 0a 61 6e 64 20 65 61 72  .7.0.1]).and ear
1e40: 6c 69 65 72 2c 20 74 68 69 73 20 76 61 6c 75 65  lier, this value
1e50: 20 69 73 20 0a 69 6e 74 65 72 70 72 65 74 65 64   is .interpreted
1e60: 20 61 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e   as a big-endian
1e70: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 6d 75 73   integer and mus
1e80: 74 20 62 65 20 61 20 70 6f 77 65 72 20 6f 66 20  t be a power of 
1e90: 74 77 6f 20 62 65 74 77 65 65 6e 0a 35 31 32 20  two between.512 
1ea0: 61 6e 64 20 33 32 37 36 38 2c 20 69 6e 63 6c 75  and 32768, inclu
1eb0: 73 69 76 65 2e 20 20 42 65 67 69 6e 6e 69 6e 67  sive.  Beginning
1ec0: 20 77 69 74 68 20 53 51 4c 69 74 65 20 5b 76 65   with SQLite [ve
1ed0: 72 73 69 6f 6e 20 33 2e 37 2e 31 5d 0a 28 5b 64  rsion 3.7.1].([d
1ee0: 61 74 65 6f 66 3a 33 2e 37 2e 31 5d 29 2c 20 61  ateof:3.7.1]), a
1ef0: 20 70 61 67 65 0a 73 69 7a 65 20 6f 66 20 36 35   page.size of 65
1f00: 35 33 36 20 62 79 74 65 73 20 69 73 20 73 75 70  536 bytes is sup
1f10: 70 6f 72 74 65 64 2e 20 20 54 68 65 20 76 61 6c  ported.  The val
1f20: 75 65 20 36 35 35 33 36 20 77 69 6c 6c 20 6e 6f  ue 65536 will no
1f30: 74 20 66 69 74 20 69 6e 20 61 0a 74 77 6f 2d 62  t fit in a.two-b
1f40: 79 74 65 20 69 6e 74 65 67 65 72 2c 20 73 6f 20  yte integer, so 
1f50: 74 6f 20 73 70 65 63 69 66 79 20 61 20 36 35 35  to specify a 655
1f60: 33 36 2d 62 79 74 65 20 70 61 67 65 20 73 69 7a  36-byte page siz
1f70: 65 2c 20 74 68 65 20 76 61 6c 75 65 0a 61 74 20  e, the value.at 
1f80: 6f 66 66 73 65 74 20 31 36 20 69 73 20 30 78 30  offset 16 is 0x0
1f90: 30 20 30 78 30 31 2e 0a 54 68 69 73 20 76 61 6c  0 0x01..This val
1fa0: 75 65 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70  ue can be interp
1fb0: 72 65 74 65 64 20 61 73 20 61 20 62 69 67 2d 65  reted as a big-e
1fc0: 6e 64 69 61 6e 0a 31 20 61 6e 64 20 74 68 6f 75  ndian.1 and thou
1fd0: 67 68 74 20 6f 66 20 69 73 20 61 73 20 61 20 6d  ght of is as a m
1fe0: 61 67 69 63 20 6e 75 6d 62 65 72 20 74 6f 20 72  agic number to r
1ff0: 65 70 72 65 73 65 6e 74 20 74 68 65 20 36 35 35  epresent the 655
2000: 33 36 20 70 61 67 65 20 73 69 7a 65 2e 0a 4f 72  36 page size..Or
2010: 20 6f 6e 65 20 63 61 6e 20 76 69 65 77 20 74 68   one can view th
2020: 65 20 74 77 6f 2d 62 79 74 65 20 66 69 65 6c 64  e two-byte field
2030: 20 61 73 20 61 20 6c 69 74 74 6c 65 20 65 6e 64   as a little end
2040: 69 61 6e 20 6e 75 6d 62 65 72 20 61 6e 64 20 73  ian number and s
2050: 61 79 0a 74 68 61 74 20 69 74 20 72 65 70 72 65  ay.that it repre
2060: 73 65 6e 74 73 20 74 68 65 20 70 61 67 65 20 73  sents the page s
2070: 69 7a 65 20 64 69 76 69 64 65 64 20 62 79 20 32  ize divided by 2
2080: 35 36 2e 20 20 54 68 65 73 65 20 74 77 6f 20 0a  56.  These two .
2090: 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 73 20  interpretations 
20a0: 6f 66 20 74 68 65 20 70 61 67 65 2d 73 69 7a 65  of the page-size
20b0: 20 66 69 65 6c 64 20 61 72 65 20 65 71 75 69 76   field are equiv
20c0: 61 6c 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  alent.</p>..<tcl
20d0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 6e 75  >hd_fragment vnu
20e0: 6d 73 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 20  ms {file format 
20f0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 7d  version numbers}
2100: 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 46 69 6c 65 20  </tcl>.<h3>File 
2110: 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e  format version n
2120: 75 6d 62 65 72 73 3c 2f 68 33 3e 0a 0a 3c 70 3e  umbers</h3>..<p>
2130: 54 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  The file format 
2140: 77 72 69 74 65 20 76 65 72 73 69 6f 6e 20 61 6e  write version an
2150: 64 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65  d file format re
2160: 61 64 20 76 65 72 73 69 6f 6e 20 61 74 20 6f 66  ad version at of
2170: 66 73 65 74 73 0a 31 38 20 61 6e 64 20 31 39 20  fsets.18 and 19 
2180: 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20  are intended to 
2190: 61 6c 6c 6f 77 20 66 6f 72 20 65 6e 68 61 6e 63  allow for enhanc
21a0: 65 6d 65 6e 74 73 20 6f 66 20 74 68 65 20 66 69  ements of the fi
21b0: 6c 65 20 66 6f 72 6d 61 74 0a 69 6e 20 66 75 74  le format.in fut
21c0: 75 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ure versions of 
21d0: 53 51 4c 69 74 65 2e 20 20 49 6e 20 63 75 72 72  SQLite.  In curr
21e0: 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ent versions of 
21f0: 53 51 4c 69 74 65 2c 20 62 6f 74 68 20 6f 66 0a  SQLite, both of.
2200: 74 68 65 73 65 20 76 61 6c 75 65 73 20 61 72 65  these values are
2210: 20 31 20 66 6f 72 20 72 6f 6c 6c 62 61 63 6b 20   1 for rollback 
2220: 6a 6f 75 72 6e 61 6c 6c 69 6e 67 20 6d 6f 64 65  journalling mode
2230: 73 20 61 6e 64 20 32 20 66 6f 72 20 5b 57 41 4c  s and 2 for [WAL
2240: 5d 0a 6a 6f 75 72 6e 61 6c 6c 69 6e 67 20 6d 6f  ].journalling mo
2250: 64 65 2e 20 20 49 66 20 61 20 76 65 72 73 69 6f  de.  If a versio
2260: 6e 20 6f 66 20 53 51 4c 69 74 65 20 63 6f 64 65  n of SQLite code
2270: 64 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  d to the current
2280: 0a 66 69 6c 65 20 66 6f 72 6d 61 74 20 73 70 65  .file format spe
2290: 63 69 66 69 63 61 74 69 6f 6e 20 65 6e 63 6f 75  cification encou
22a0: 6e 74 65 72 73 20 61 20 64 61 74 61 62 61 73 65  nters a database
22b0: 20 66 69 6c 65 20 77 68 65 72 65 20 74 68 65 20   file where the 
22c0: 72 65 61 64 0a 76 65 72 73 69 6f 6e 20 69 73 20  read.version is 
22d0: 31 20 6f 72 20 32 20 62 75 74 20 74 68 65 20 77  1 or 2 but the w
22e0: 72 69 74 65 20 76 65 72 73 69 6f 6e 20 69 73 20  rite version is 
22f0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 32 2c 20  greater than 2, 
2300: 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
2310: 65 0a 66 69 6c 65 20 6d 75 73 74 20 62 65 20 74  e.file must be t
2320: 72 65 61 74 65 64 20 61 73 20 72 65 61 64 2d 6f  reated as read-o
2330: 6e 6c 79 2e 20 20 49 66 20 61 20 64 61 74 61 62  nly.  If a datab
2340: 61 73 65 20 66 69 6c 65 20 77 69 74 68 20 61 20  ase file with a 
2350: 72 65 61 64 20 76 65 72 73 69 6f 6e 0a 67 72 65  read version.gre
2360: 61 74 65 72 20 74 68 61 6e 20 32 20 69 73 20 65  ater than 2 is e
2370: 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 6e  ncountered, then
2380: 20 74 68 61 74 20 64 61 74 61 62 61 73 65 20 63   that database c
2390: 61 6e 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  annot be read or
23a0: 20 77 72 69 74 74 65 6e 2e 3c 2f 70 3e 0a 0a 3c   written.</p>..<
23b0: 68 33 3e 52 65 73 65 72 76 65 64 20 62 79 74 65  h3>Reserved byte
23c0: 73 20 70 65 72 20 70 61 67 65 3c 2f 68 33 3e 0a  s per page</h3>.
23d0: 0a 3c 70 3e 53 51 4c 69 74 65 20 68 61 73 20 74  .<p>SQLite has t
23e0: 68 65 20 61 62 69 6c 69 74 79 20 74 6f 20 73 65  he ability to se
23f0: 74 20 61 73 69 64 65 20 61 20 73 6d 61 6c 6c 20  t aside a small 
2400: 6e 75 6d 62 65 72 20 6f 66 20 65 78 74 72 61 20  number of extra 
2410: 62 79 74 65 73 20 61 74 0a 74 68 65 20 65 6e 64  bytes at.the end
2420: 20 6f 66 20 65 76 65 72 79 20 70 61 67 65 20 66   of every page f
2430: 6f 72 20 75 73 65 20 62 79 20 65 78 74 65 6e 73  or use by extens
2440: 69 6f 6e 73 2e 20 20 54 68 65 73 65 20 65 78 74  ions.  These ext
2450: 72 61 20 62 79 74 65 73 20 61 72 65 0a 75 73 65  ra bytes are.use
2460: 64 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20  d, for example, 
2470: 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 45 6e  by the SQLite En
2480: 63 72 79 70 74 69 6f 6e 20 45 78 74 65 6e 73 69  cryption Extensi
2490: 6f 6e 20 74 6f 20 73 74 6f 72 65 20 61 20 6e 6f  on to store a no
24a0: 6e 63 65 0a 61 6e 64 2f 6f 72 20 63 72 79 70 74  nce.and/or crypt
24b0: 6f 67 72 61 70 68 69 63 20 63 68 65 63 6b 73 75  ographic checksu
24c0: 6d 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  m associated wit
24d0: 68 20 65 61 63 68 20 70 61 67 65 2e 20 20 5e 54  h each page.  ^T
24e0: 68 65 20 0a 22 72 65 73 65 72 76 65 64 20 73 70  he ."reserved sp
24f0: 61 63 65 22 20 73 69 7a 65 20 69 6e 20 74 68 65  ace" size in the
2500: 20 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   1-byte integer 
2510: 61 74 20 6f 66 66 73 65 74 20 32 30 20 69 73 20  at offset 20 is 
2520: 74 68 65 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79  the number.of by
2530: 74 65 73 20 6f 66 20 73 70 61 63 65 20 61 74 20  tes of space at 
2540: 74 68 65 20 65 6e 64 20 6f 66 20 65 61 63 68 20  the end of each 
2550: 70 61 67 65 20 74 6f 20 72 65 73 65 72 76 65 20  page to reserve 
2560: 66 6f 72 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a  for extensions..
2570: 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 75 73  This value is us
2580: 75 61 6c 6c 79 20 30 2e 20 20 54 68 65 20 76 61  ually 0.  The va
2590: 6c 75 65 20 63 61 6e 20 62 65 20 6f 64 64 2e 3c  lue can be odd.<
25a0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
25b0: 67 6d 65 6e 74 20 75 73 61 62 6c 65 5f 73 69 7a  gment usable_siz
25c0: 65 20 7b 75 73 61 62 6c 65 20 73 69 7a 65 7d 3c  e {usable size}<
25d0: 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 22 75 73  /tcl>.<p>The "us
25e0: 61 62 6c 65 20 73 69 7a 65 22 20 6f 66 20 61 20  able size" of a 
25f0: 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73  database page is
2600: 20 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 73   the page size s
2610: 70 65 63 69 66 79 20 62 79 20 74 68 65 0a 32 2d  pecify by the.2-
2620: 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20  byte integer at 
2630: 6f 66 66 73 65 74 20 31 36 20 69 6e 20 74 68 65  offset 16 in the
2640: 20 68 65 61 64 65 72 20 6c 65 73 73 20 74 68 65   header less the
2650: 20 22 72 65 73 65 72 76 65 64 22 20 73 70 61 63   "reserved" spac
2660: 65 20 73 69 7a 65 0a 72 65 63 6f 72 64 65 64 20  e size.recorded 
2670: 69 6e 20 74 68 65 20 31 2d 62 79 74 65 20 69 6e  in the 1-byte in
2680: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
2690: 32 30 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  20 in the header
26a0: 2e 20 20 54 68 65 20 75 73 61 62 6c 65 0a 73 69  .  The usable.si
26b0: 7a 65 20 6f 66 20 61 20 70 61 67 65 20 6d 69 67  ze of a page mig
26c0: 68 74 20 62 65 20 61 6e 20 6f 64 64 20 6e 75 6d  ht be an odd num
26d0: 62 65 72 2e 20 20 5e 28 48 6f 77 65 76 65 72 2c  ber.  ^(However,
26e0: 20 74 68 65 20 75 73 61 62 6c 65 20 73 69 7a 65   the usable size
26f0: 20 69 73 20 6e 6f 74 0a 61 6c 6c 6f 77 65 64 20   is not.allowed 
2700: 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
2710: 34 38 30 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  480.  In other w
2720: 6f 72 64 73 2c 20 69 66 20 74 68 65 20 70 61 67  ords, if the pag
2730: 65 20 73 69 7a 65 20 69 73 20 35 31 32 2c 0a 74  e size is 512,.t
2740: 68 65 6e 20 74 68 65 20 72 65 73 65 72 76 65 64  hen the reserved
2750: 20 73 70 61 63 65 20 73 69 7a 65 20 63 61 6e 6e   space size cann
2760: 6f 74 20 65 78 63 65 65 64 20 33 32 2e 29 5e 3c  ot exceed 32.)^<
2770: 2f 70 3e 0a 0a 3c 68 33 3e 50 61 79 6c 6f 61 64  /p>..<h3>Payload
2780: 20 66 72 61 63 74 69 6f 6e 73 3c 2f 68 33 3e 0a   fractions</h3>.
2790: 0a 3c 70 3e 5e 54 68 65 20 6d 61 78 69 6d 75 6d  .<p>^The maximum
27a0: 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20 65 6d 62   and minimum emb
27b0: 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20 66 72  edded payload fr
27c0: 61 63 74 69 6f 6e 73 20 61 6e 64 20 74 68 65 20  actions and the 
27d0: 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20 66 72 61  leaf.payload fra
27e0: 63 74 69 6f 6e 20 76 61 6c 75 65 73 20 6d 75 73  ction values mus
27f0: 74 20 62 65 20 36 34 2c 20 33 32 2c 20 61 6e 64  t be 64, 32, and
2800: 20 33 32 2e 20 20 54 68 65 73 65 20 76 61 6c 75   32.  These valu
2810: 65 73 20 77 65 72 65 0a 6f 72 69 67 69 6e 61 6c  es were.original
2820: 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 62  ly intended to b
2830: 65 20 74 75 6e 61 62 6c 65 20 70 61 72 61 6d 65  e tunable parame
2840: 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c 64 20  ters that could 
2850: 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64 69 66  be used to.modif
2860: 79 20 74 68 65 20 73 74 6f 72 61 67 65 20 66 6f  y the storage fo
2870: 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d 74 72  rmat of the b-tr
2880: 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20 20 48  ee algorithm.  H
2890: 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66 75 6e  owever, that.fun
28a0: 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 6e 6f  ctionality is no
28b0: 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e 64 20  t supported and 
28c0: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63 75 72  there are no cur
28d0: 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20 61 64  rent plans to ad
28e0: 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74 68 65  d.support in the
28f0: 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63 65 2c   future.  Hence,
2900: 20 74 68 65 73 65 20 74 68 72 65 65 20 62 79 74   these three byt
2910: 65 73 20 61 72 65 20 66 69 78 65 64 20 61 74 20  es are fixed at 
2920: 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65 63 69  the.values speci
2930: 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 46  fied.</p>..<h3>F
2940: 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  ile change count
2950: 65 72 3c 2f 68 33 3e 0a 0a 3c 74 63 6c 3e 68 64  er</h3>..<tcl>hd
2960: 5f 66 72 61 67 6d 65 6e 74 20 63 68 6e 67 63 74  _fragment chngct
2970: 72 20 7b 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  r {change counte
2980: 72 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65  r}</tcl>.<p>^The
2990: 20 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75   file change cou
29a0: 6e 74 65 72 20 69 73 20 61 20 34 2d 62 79 74 65  nter is a 4-byte
29b0: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
29c0: 67 65 72 20 61 74 0a 6f 66 66 73 65 74 20 32 34  ger at.offset 24
29d0: 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65   that is increme
29e0: 6e 74 65 64 20 77 68 65 6e 65 76 65 72 20 74 68  nted whenever th
29f0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
2a00: 69 73 20 75 6e 6c 6f 63 6b 65 64 0a 61 66 74 65  is unlocked.afte
2a10: 72 20 68 61 76 69 6e 67 20 62 65 65 6e 20 6d 6f  r having been mo
2a20: 64 69 66 69 65 64 2e 0a 57 68 65 6e 20 74 77 6f  dified..When two
2a30: 20 6f 72 20 6d 6f 72 65 20 70 72 6f 63 65 73 73   or more process
2a40: 65 73 20 61 72 65 20 72 65 61 64 69 6e 67 20 74  es are reading t
2a50: 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
2a60: 20 66 69 6c 65 2c 20 65 61 63 68 20 0a 70 72 6f   file, each .pro
2a70: 63 65 73 73 20 63 61 6e 20 64 65 74 65 63 74 20  cess can detect 
2a80: 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73  database changes
2a90: 20 66 72 6f 6d 20 6f 74 68 65 72 20 70 72 6f 63   from other proc
2aa0: 65 73 73 65 73 20 62 79 20 6d 6f 6e 69 74 6f 72  esses by monitor
2ab0: 69 6e 67 20 0a 74 68 65 20 63 68 61 6e 67 65 20  ing .the change 
2ac0: 63 6f 75 6e 74 65 72 2e 0a 41 20 70 72 6f 63 65  counter..A proce
2ad0: 73 73 20 77 69 6c 6c 20 6e 6f 72 6d 61 6c 6c 79  ss will normally
2ae0: 20 77 61 6e 74 20 74 6f 20 66 6c 75 73 68 20 69   want to flush i
2af0: 74 73 20 64 61 74 61 62 61 73 65 20 70 61 67 65  ts database page
2b00: 20 63 61 63 68 65 20 77 68 65 6e 0a 61 6e 6f 74   cache when.anot
2b10: 68 65 72 20 70 72 6f 63 65 73 73 20 6d 6f 64 69  her process modi
2b20: 66 69 65 64 20 74 68 65 20 64 61 74 61 62 61 73  fied the databas
2b30: 65 2c 20 73 69 6e 63 65 20 74 68 65 20 63 61 63  e, since the cac
2b40: 68 65 20 68 61 73 20 62 65 63 6f 6d 65 20 73 74  he has become st
2b50: 61 6c 65 2e 0a 54 68 65 20 66 69 6c 65 20 63 68  ale..The file ch
2b60: 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 66 61 63  ange counter fac
2b70: 69 6c 69 74 61 74 65 73 20 74 68 69 73 2e 3c 2f  ilitates this.</
2b80: 70 3e 0a 0a 3c 70 3e 49 6e 20 57 41 4c 20 6d 6f  p>..<p>In WAL mo
2b90: 64 65 2c 20 63 68 61 6e 67 65 73 20 74 6f 20 74  de, changes to t
2ba0: 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20  he database are 
2bb0: 64 65 74 65 63 74 65 64 20 75 73 69 6e 67 20 74  detected using t
2bc0: 68 65 20 77 61 6c 2d 69 6e 64 65 78 0a 61 6e 64  he wal-index.and
2bd0: 20 73 6f 20 74 68 65 20 63 68 61 6e 67 65 20 63   so the change c
2be0: 6f 75 6e 74 65 72 20 69 73 20 6e 6f 74 20 6e 65  ounter is not ne
2bf0: 65 64 65 64 2e 20 20 48 65 6e 63 65 2c 20 74 68  eded.  Hence, th
2c00: 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
2c10: 20 6d 69 67 68 74 0a 6e 6f 74 20 62 65 20 69 6e   might.not be in
2c20: 63 72 65 6d 65 6e 74 65 64 20 6f 6e 20 65 61 63  cremented on eac
2c30: 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 6e  h transaction in
2c40: 20 57 41 4c 20 6d 6f 64 65 2e 3c 2f 70 3e 0a 0a   WAL mode.</p>..
2c50: 3c 68 33 3e 49 6e 2d 68 65 61 64 65 72 20 64 61  <h3>In-header da
2c60: 74 61 62 61 73 65 20 73 69 7a 65 3c 2f 68 33 3e  tabase size</h3>
2c70: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
2c80: 6e 74 20 66 69 6c 65 73 69 7a 65 20 7b 69 6e 2d  nt filesize {in-
2c90: 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20  header database 
2ca0: 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 5e  size}</tcl>.<p>^
2cb0: 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65  The 4-byte big-e
2cc0: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
2cd0: 20 6f 66 66 73 65 74 20 32 38 20 69 6e 74 6f 20   offset 28 into 
2ce0: 74 68 65 20 68 65 61 64 65 72 20 0a 73 74 6f 72  the header .stor
2cf0: 65 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  es the size of t
2d00: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2d10: 20 69 6e 20 70 61 67 65 73 2e 20 20 5e 49 66 20   in pages.  ^If 
2d20: 74 68 69 73 20 69 6e 2d 68 65 61 64 65 72 0a 64  this in-header.d
2d30: 61 74 61 73 69 7a 65 20 73 69 7a 65 20 69 73 20  atasize size is 
2d40: 6e 6f 74 20 76 61 6c 69 64 20 28 73 65 65 20 74  not valid (see t
2d50: 68 65 20 6e 65 78 74 20 70 61 72 61 67 72 61 70  he next paragrap
2d60: 68 29 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74  h), then the dat
2d70: 61 62 61 73 65 20 0a 73 69 7a 65 20 69 73 20 63  abase .size is c
2d80: 6f 6d 70 75 74 65 64 20 62 79 20 6c 6f 6f 6b 69  omputed by looki
2d90: 6e 67 0a 61 74 20 74 68 65 20 61 63 74 75 61 6c  ng.at the actual
2da0: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74   size of the dat
2db0: 61 62 61 73 65 20 66 69 6c 65 2e 20 4f 6c 64 65  abase file. Olde
2dc0: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
2dd0: 4c 69 74 65 0a 69 67 6e 6f 72 65 64 20 74 68 65  Lite.ignored the
2de0: 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62   in-header datab
2df0: 61 73 65 20 73 69 7a 65 20 61 6e 64 20 75 73 65  ase size and use
2e00: 64 20 74 68 65 20 61 63 74 75 61 6c 20 66 69 6c  d the actual fil
2e10: 65 20 73 69 7a 65 0a 65 78 63 6c 75 73 69 76 65  e size.exclusive
2e20: 6c 79 2e 20 20 5e 4e 65 77 65 72 20 76 65 72 73  ly.  ^Newer vers
2e30: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75  ions of SQLite u
2e40: 73 65 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72  se the in-header
2e50: 20 64 61 74 61 62 61 73 65 0a 73 69 7a 65 20 69   database.size i
2e60: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
2e70: 65 20 62 75 74 20 66 61 6c 6c 20 62 61 63 6b 20  e but fall back 
2e80: 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 69  to the actual fi
2e90: 6c 65 20 73 69 7a 65 20 69 66 0a 74 68 65 20 69  le size if.the i
2ea0: 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73  n-header databas
2eb0: 65 20 73 69 7a 65 20 69 73 20 6e 6f 74 20 76 61  e size is not va
2ec0: 6c 69 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 54 68  lid.</p>..<p>^Th
2ed0: 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61  e in-header data
2ee0: 62 61 73 65 20 73 69 7a 65 20 69 73 20 6f 6e 6c  base size is onl
2ef0: 79 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  y considered to 
2f00: 62 65 20 76 61 6c 69 64 20 69 66 0a 69 74 20 69  be valid if.it i
2f10: 73 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 69  s non-zero and i
2f20: 66 20 74 68 65 20 34 2d 62 79 74 65 20 5b 63 68  f the 4-byte [ch
2f30: 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 20 61 74  ange counter] at
2f40: 20 6f 66 66 73 65 74 20 32 34 0a 65 78 61 63 74   offset 24.exact
2f50: 6c 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 34  ly matches the 4
2f60: 2d 62 79 74 65 20 5b 76 65 72 73 69 6f 6e 2d 76  -byte [version-v
2f70: 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 5d  alid-for number]
2f80: 20 61 74 20 6f 66 66 73 65 74 20 39 32 2e 0a 5e   at offset 92..^
2f90: 28 54 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64  (The in-header d
2fa0: 61 74 61 62 61 73 65 20 73 69 7a 65 20 69 73 20  atabase size is 
2fb0: 61 6c 77 61 79 73 20 76 61 6c 69 64 20 0a 77 68  always valid .wh
2fc0: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
2fd0: 69 73 20 6f 6e 6c 79 20 6d 6f 64 69 66 69 65 64  is only modified
2fe0: 20 75 73 69 6e 67 20 72 65 63 65 6e 74 20 76 65   using recent ve
2ff0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
3000: 2c 0a 76 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30  ,.versions 3.7.0
3010: 20 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e 30 5d   ([dateof:3.7.0]
3020: 29 20 61 6e 64 20 6c 61 74 65 72 2e 29 5e 0a 49  ) and later.)^.I
3030: 66 20 61 20 6c 65 67 61 63 79 20 76 65 72 73 69  f a legacy versi
3040: 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 77 72 69  on of SQLite wri
3050: 74 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  tes to the datab
3060: 61 73 65 2c 20 69 74 20 77 69 6c 6c 20 6e 6f 74  ase, it will not
3070: 0a 6b 6e 6f 77 20 74 6f 20 75 70 64 61 74 65 20  .know to update 
3080: 74 68 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61  the in-header da
3090: 74 61 62 61 73 65 20 73 69 7a 65 20 61 6e 64 20  tabase size and 
30a0: 73 6f 20 74 68 65 20 69 6e 2d 68 65 61 64 65 72  so the in-header
30b0: 0a 64 61 74 61 62 61 73 65 20 73 69 7a 65 20 63  .database size c
30c0: 6f 75 6c 64 20 62 65 20 69 6e 63 6f 72 72 65 63  ould be incorrec
30d0: 74 2e 20 20 42 75 74 20 6c 65 67 61 63 79 20 76  t.  But legacy v
30e0: 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74  ersions of SQLit
30f0: 65 0a 77 69 6c 6c 20 61 6c 73 6f 20 6c 65 61 76  e.will also leav
3100: 65 20 74 68 65 20 76 65 72 73 69 6f 6e 2d 76 61  e the version-va
3110: 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 20 61  lid-for number a
3120: 74 20 6f 66 66 73 65 74 20 39 32 20 75 6e 63 68  t offset 92 unch
3130: 61 6e 67 65 64 0a 73 6f 20 69 74 20 77 69 6c 6c  anged.so it will
3140: 20 6e 6f 74 20 6d 61 74 63 68 20 74 68 65 20 63   not match the c
3150: 68 61 6e 67 65 2d 63 6f 75 6e 74 65 72 2e 20 20  hange-counter.  
3160: 48 65 6e 63 65 2c 20 69 6e 76 61 6c 69 64 20 69  Hence, invalid i
3170: 6e 2d 68 65 61 64 65 72 0a 64 61 74 61 62 61 73  n-header.databas
3180: 65 20 73 69 7a 65 73 20 63 61 6e 20 62 65 20 64  e sizes can be d
3190: 65 74 65 63 74 65 64 20 28 61 6e 64 20 69 67 6e  etected (and ign
31a0: 6f 72 65 64 29 20 62 79 20 6f 62 73 65 72 76 69  ored) by observi
31b0: 6e 67 20 77 68 65 6e 0a 74 68 65 20 63 68 61 6e  ng when.the chan
31c0: 67 65 2d 63 6f 75 6e 74 65 72 20 64 6f 65 73 20  ge-counter does 
31d0: 6e 6f 74 20 6d 61 74 63 68 20 74 68 65 20 76 65  not match the ve
31e0: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
31f0: 6e 75 6d 62 65 72 2e 3c 2f 70 3e 0a 0a 3c 68 33  number.</p>..<h3
3200: 3e 46 72 65 65 20 70 61 67 65 20 6c 69 73 74 3c  >Free page list<
3210: 2f 68 33 3e 0a 0a 3c 70 3e 55 6e 75 73 65 64 20  /h3>..<p>Unused 
3220: 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74  pages in the dat
3230: 61 62 61 73 65 20 66 69 6c 65 20 61 72 65 20 73  abase file are s
3240: 74 6f 72 65 64 20 6f 6e 20 61 20 66 72 65 65 6c  tored on a freel
3250: 69 73 74 2e 20 20 5e 54 68 65 0a 34 2d 62 79 74  ist.  ^The.4-byt
3260: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
3270: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 33  eger at offset 3
3280: 32 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67  2 stores the pag
3290: 65 20 6e 75 6d 62 65 72 20 6f 66 0a 74 68 65 20  e number of.the 
32a0: 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74 68  first page of th
32b0: 65 20 66 72 65 65 6c 69 73 74 2c 20 6f 72 20 7a  e freelist, or z
32c0: 65 72 6f 20 69 66 20 74 68 65 20 66 72 65 65 6c  ero if the freel
32d0: 69 73 74 20 69 73 20 65 6d 70 74 79 2e 0a 5e 54  ist is empty..^T
32e0: 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he 4-byte big-en
32f0: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20  dian integer at 
3300: 6f 66 66 73 65 74 20 33 36 20 73 74 6f 72 65 73  offset 36 stores
3310: 20 73 74 6f 72 65 73 20 74 68 65 20 74 6f 74 61   stores the tota
3320: 6c 20 0a 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  l .number of pag
3330: 65 73 20 6f 6e 20 74 68 65 20 66 72 65 65 6c 69  es on the freeli
3340: 73 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 63 68  st.</p>..<h3>Sch
3350: 65 6d 61 20 63 6f 6f 6b 69 65 3c 2f 68 33 3e 0a  ema cookie</h3>.
3360: 0a 3c 70 3e 5e 54 68 65 20 73 63 68 65 6d 61 20  .<p>^The schema 
3370: 63 6f 6f 6b 69 65 20 69 73 20 61 20 34 2d 62 79  cookie is a 4-by
3380: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
3390: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
33a0: 34 30 0a 74 68 61 74 20 69 73 20 69 6e 63 72 65  40.that is incre
33b0: 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 20  mented whenever 
33c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
33d0: 65 6d 61 20 63 68 61 6e 67 65 73 2e 20 20 41 20  ema changes.  A 
33e0: 0a 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d  .prepared statem
33f0: 65 6e 74 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ent is compiled 
3400: 61 67 61 69 6e 73 74 20 61 20 73 70 65 63 69 66  against a specif
3410: 69 63 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ic version of th
3420: 65 0a 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e.database schem
3430: 61 2e 20 20 57 68 65 6e 20 74 68 65 20 64 61 74  a.  When the dat
3440: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
3450: 6e 67 65 73 2c 20 74 68 65 20 73 74 61 74 65 6d  nges, the statem
3460: 65 6e 74 0a 6d 75 73 74 20 62 65 20 72 65 70 72  ent.must be repr
3470: 65 70 61 72 65 64 2e 20 20 5e 57 68 65 6e 20 61  epared.  ^When a
3480: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
3490: 65 6e 74 20 72 75 6e 73 2c 20 69 74 20 66 69 72  ent runs, it fir
34a0: 73 74 20 63 68 65 63 6b 73 0a 74 68 65 20 73 63  st checks.the sc
34b0: 68 65 6d 61 20 63 6f 6f 6b 69 65 20 74 6f 20 65  hema cookie to e
34c0: 6e 73 75 72 65 20 74 68 65 20 76 61 6c 75 65 20  nsure the value 
34d0: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 77  is the same as w
34e0: 68 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e  hen the statemen
34f0: 74 0a 77 61 73 20 70 72 65 70 61 72 65 64 20 61  t.was prepared a
3500: 6e 64 20 69 66 20 74 68 65 20 73 63 68 65 6d 61  nd if the schema
3510: 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e   cookie has chan
3520: 67 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  ged, the stateme
3530: 6e 74 20 65 69 74 68 65 72 0a 61 75 74 6f 6d 61  nt either.automa
3540: 74 69 63 61 6c 6c 79 20 72 65 70 72 65 70 61 72  tically reprepar
3550: 65 73 20 61 6e 64 20 72 65 72 75 6e 73 20 6f 72  es and reruns or
3560: 20 69 74 20 61 62 6f 72 74 73 20 77 69 74 68 20   it aborts with 
3570: 61 6e 20 5b 53 51 4c 49 54 45 5f 53 43 48 45 4d  an [SQLITE_SCHEM
3580: 41 5d 20 0a 65 72 72 6f 72 2e 3c 2f 70 3e 0a 0a  A] .error.</p>..
3590: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
35a0: 20 7b 73 63 68 65 6d 61 66 6f 72 6d 61 74 7d 20   {schemaformat} 
35b0: 7b 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 7d 20  {schema format} 
35c0: 7b 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e  {schema format n
35d0: 75 6d 62 65 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  umber}</tcl>.<h3
35e0: 3e 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e  >Schema format n
35f0: 75 6d 62 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 54  umber</h3>..<p>T
3600: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  he schema format
3610: 20 6e 75 6d 62 65 72 20 69 73 20 61 20 34 2d 62   number is a 4-b
3620: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
3630: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
3640: 20 34 34 2e 0a 54 68 65 20 73 63 68 65 6d 61 20   44..The schema 
3650: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 20 69 73  format number is
3660: 20 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 65 20   similar to the 
3670: 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65 61 64  file format read
3680: 20 61 6e 64 20 77 72 69 74 65 0a 76 65 72 73 69   and write.versi
3690: 6f 6e 20 6e 75 6d 62 65 72 73 20 61 74 20 6f 66  on numbers at of
36a0: 66 73 65 74 73 20 31 38 20 61 6e 64 20 31 39 20  fsets 18 and 19 
36b0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
36c0: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
36d0: 6d 62 65 72 0a 72 65 66 65 72 73 20 74 6f 20 74  mber.refers to t
36e0: 68 65 20 68 69 67 68 2d 6c 65 76 65 6c 20 53 51  he high-level SQ
36f0: 4c 20 66 6f 72 6d 61 74 74 69 6e 67 20 72 61 74  L formatting rat
3700: 68 65 72 20 74 68 61 6e 20 74 68 65 20 6c 6f 77  her than the low
3710: 2d 6c 65 76 65 6c 20 62 2d 74 72 65 65 0a 66 6f  -level b-tree.fo
3720: 72 6d 61 74 74 69 6e 67 2e 20 20 46 6f 75 72 20  rmatting.  Four 
3730: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
3740: 6d 62 65 72 73 20 61 72 65 20 63 75 72 72 65 6e  mbers are curren
3750: 74 6c 79 20 64 65 66 69 6e 65 64 3a 3c 2f 70 3e  tly defined:</p>
3760: 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 20 76 61 6c 75 65  ..<ol>.<li value
3770: 3d 31 3e 46 6f 72 6d 61 74 20 31 20 69 73 20 75  =1>Format 1 is u
3780: 6e 64 65 72 73 74 6f 6f 64 20 62 79 20 61 6c 6c  nderstood by all
3790: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
37a0: 69 74 65 20 62 61 63 6b 20 74 6f 0a 5b 76 65 72  ite back to.[ver
37b0: 73 69 6f 6e 20 33 2e 30 2e 30 5d 20 28 5b 64 61  sion 3.0.0] ([da
37c0: 74 65 6f 66 3a 33 2e 30 2e 30 5d 29 2e 3c 2f 6c  teof:3.0.0]).</l
37d0: 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 32 3e 46  i>.<li value=2>F
37e0: 6f 72 6d 61 74 20 32 20 61 64 64 73 20 74 68 65  ormat 2 adds the
37f0: 20 61 62 69 6c 69 74 79 20 6f 66 20 72 6f 77 73   ability of rows
3800: 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
3810: 20 74 61 62 6c 65 0a 74 6f 20 68 61 76 65 20 61   table.to have a
3820: 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 20   varying number 
3830: 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 20 6f  of columns, in o
3840: 72 64 65 72 20 74 6f 20 73 75 70 70 6f 72 74 20  rder to support 
3850: 74 68 65 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45  the.[ALTER TABLE
3860: 20 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20 2e   | ALTER TABLE .
3870: 2e 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20 66  .. ADD COLUMN] f
3880: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 2e 20 20 53  unctionality.  S
3890: 75 70 70 6f 72 74 20 66 6f 72 0a 72 65 61 64 69  upport for.readi
38a0: 6e 67 20 61 6e 64 20 77 72 69 74 69 6e 67 20 66  ng and writing f
38b0: 6f 72 6d 61 74 20 32 20 77 61 73 20 61 64 64 65  ormat 2 was adde
38c0: 64 20 69 6e 20 53 51 4c 69 74 65 20 0a 5b 76 65  d in SQLite .[ve
38d0: 72 73 69 6f 6e 20 33 2e 31 2e 33 5d 20 6f 6e 20  rsion 3.1.3] on 
38e0: 5b 64 61 74 65 6f 66 3a 33 2e 31 2e 33 5d 2e 3c  [dateof:3.1.3].<
38f0: 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 33  /li>.<li value=3
3900: 3e 46 6f 72 6d 61 74 20 33 20 61 64 64 73 20 74  >Format 3 adds t
3910: 68 65 20 61 62 69 6c 69 74 79 20 6f 66 20 65 78  he ability of ex
3920: 74 72 61 20 63 6f 6c 75 6d 6e 73 20 61 64 64 65  tra columns adde
3930: 64 20 62 79 0a 5b 41 4c 54 45 52 20 54 41 42 4c  d by.[ALTER TABL
3940: 45 20 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20  E | ALTER TABLE 
3950: 2e 2e 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20  ... ADD COLUMN] 
3960: 74 6f 20 68 61 76 65 20 6e 6f 6e 2d 4e 55 4c 4c  to have non-NULL
3970: 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 73 2e   default.values.
3980: 20 20 54 68 69 73 20 63 61 70 61 62 69 6c 69 74    This capabilit
3990: 79 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53  y was added in S
39a0: 51 4c 69 74 65 20 5b 76 65 72 73 69 6f 6e 20 33  QLite [version 3
39b0: 2e 31 2e 34 5d 0a 6f 6e 20 5b 64 61 74 65 6f 66  .1.4].on [dateof
39c0: 3a 33 2e 31 2e 34 5d 2e 3c 2f 6c 69 3e 0a 3c 6c  :3.1.4].</li>.<l
39d0: 69 20 76 61 6c 75 65 3d 34 3e 5e 46 6f 72 6d 61  i value=4>^Forma
39e0: 74 20 34 20 63 61 75 73 65 73 20 53 51 4c 69 74  t 4 causes SQLit
39f0: 65 20 74 6f 20 72 65 73 70 65 63 74 20 74 68 65  e to respect the
3a00: 0a 5b 64 65 73 63 65 6e 64 69 6e 67 20 69 6e 64  .[descending ind
3a10: 65 78 65 73 20 7c 20 44 45 53 43 20 6b 65 79 77  exes | DESC keyw
3a20: 6f 72 64 5d 20 6f 6e 0a 69 6e 64 65 78 20 64 65  ord] on.index de
3a30: 63 6c 61 72 61 74 69 6f 6e 73 2e 20 20 28 5e 54  clarations.  (^T
3a40: 68 65 20 44 45 53 43 20 6b 65 79 77 6f 72 64 20  he DESC keyword 
3a50: 69 73 20 69 67 6e 6f 72 65 64 20 69 6e 20 69 6e  is ignored in in
3a60: 64 65 78 65 73 20 66 6f 72 20 0a 66 6f 72 6d 61  dexes for .forma
3a70: 74 73 20 31 2c 20 32 2c 20 61 6e 64 20 33 2e 29  ts 1, 2, and 3.)
3a80: 0a 5e 46 6f 72 6d 61 74 20 34 20 61 6c 73 6f 20  .^Format 4 also 
3a90: 61 64 64 73 20 74 77 6f 20 6e 65 77 20 62 6f 6f  adds two new boo
3aa0: 6c 65 61 6e 20 72 65 63 6f 72 64 20 74 79 70 65  lean record type
3ab0: 20 76 61 6c 75 65 73 20 28 5b 73 65 72 69 61 6c   values ([serial
3ac0: 20 74 79 70 65 73 5d 0a 38 20 61 6e 64 20 39 29   types].8 and 9)
3ad0: 2e 20 20 53 75 70 70 6f 72 74 20 66 6f 72 20 66  .  Support for f
3ae0: 6f 72 6d 61 74 20 34 20 77 61 73 20 61 64 64 65  ormat 4 was adde
3af0: 64 20 69 6e 20 53 51 4c 69 74 65 20 33 2e 33 2e  d in SQLite 3.3.
3b00: 30 20 6f 6e 0a 32 30 30 36 2d 30 31 2d 31 30 2e  0 on.2006-01-10.
3b10: 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e  </li>.</ol>..<p>
3b20: 5e 4e 65 77 20 64 61 74 61 62 61 73 65 20 66 69  ^New database fi
3b30: 6c 65 73 20 63 72 65 61 74 65 64 20 62 79 20 53  les created by S
3b40: 51 4c 69 74 65 20 75 73 65 20 66 6f 72 6d 61 74  QLite use format
3b50: 20 34 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 5e   4 by default..^
3b60: 54 68 65 20 5b 6c 65 67 61 63 79 5f 66 69 6c 65  The [legacy_file
3b70: 5f 66 6f 72 6d 61 74 20 70 72 61 67 6d 61 5d 20  _format pragma] 
3b80: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63  can be used to c
3b90: 61 75 73 65 20 53 51 4c 69 74 65 0a 74 6f 20 63  ause SQLite.to c
3ba0: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
3bb0: 73 65 20 66 69 6c 65 73 20 75 73 69 6e 67 20 66  se files using f
3bc0: 6f 72 6d 61 74 20 31 2e 0a 54 68 65 20 66 6f 72  ormat 1..The for
3bd0: 6d 61 74 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  mat version numb
3be0: 65 72 20 63 61 6e 20 62 65 20 6d 61 64 65 20 74  er can be made t
3bf0: 6f 20 64 65 66 61 75 6c 74 20 74 6f 20 31 20 69  o default to 1 i
3c00: 6e 73 74 65 61 64 20 6f 66 20 34 20 62 79 0a 73  nstead of 4 by.s
3c10: 65 74 74 69 6e 67 20 5b 53 51 4c 49 54 45 5f 44  etting [SQLITE_D
3c20: 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
3c30: 41 54 5d 3d 31 20 61 74 20 63 6f 6d 70 69 6c 65  AT]=1 at compile
3c40: 2d 74 69 6d 65 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33  -time..</p>..<h3
3c50: 3e 53 75 67 67 65 73 74 65 64 20 63 61 63 68 65  >Suggested cache
3c60: 20 73 69 7a 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54   size</h3>..<p>T
3c70: 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he 4-byte big-en
3c80: 64 69 61 6e 20 73 69 67 6e 65 64 20 69 6e 74 65  dian signed inte
3c90: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 34 38  ger at offset 48
3ca0: 20 69 73 20 74 68 65 20 73 75 67 67 65 73 74 65   is the suggeste
3cb0: 64 0a 63 61 63 68 65 20 73 69 7a 65 20 69 6e 20  d.cache size in 
3cc0: 70 61 67 65 73 20 66 6f 72 20 74 68 65 20 64 61  pages for the da
3cd0: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
3ce0: 65 20 76 61 6c 75 65 20 69 73 20 61 20 73 75 67  e value is a sug
3cf0: 67 65 73 74 69 6f 6e 0a 6f 6e 6c 79 20 61 6e 64  gestion.only and
3d00: 20 53 51 4c 69 74 65 20 69 73 20 75 6e 64 65 72   SQLite is under
3d10: 20 6e 6f 20 6f 62 6c 69 67 61 74 69 6f 6e 20 74   no obligation t
3d20: 6f 20 68 6f 6e 6f 72 20 69 74 2e 20 20 54 68 65  o honor it.  The
3d30: 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 0a   absolute value.
3d40: 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  of the integer i
3d50: 73 20 75 73 65 64 20 61 73 20 74 68 65 20 73 75  s used as the su
3d60: 67 67 65 73 74 65 64 20 73 69 7a 65 2e 20 20 54  ggested size.  T
3d70: 68 65 20 73 75 67 67 65 73 74 65 64 20 63 61 63  he suggested cac
3d80: 68 65 20 73 69 7a 65 0a 63 61 6e 20 62 65 20 73  he size.can be s
3d90: 65 74 20 75 73 69 6e 67 20 74 68 65 20 5b 64 65  et using the [de
3da0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
3db0: 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c   pragma].</p>..<
3dc0: 68 33 3e 49 6e 63 72 65 6d 65 6e 74 61 6c 20 76  h3>Incremental v
3dd0: 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73 3c 2f  acuum settings</
3de0: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 74 77 6f 20  h3>..<p>The two 
3df0: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
3e00: 6e 20 69 6e 74 65 67 65 72 73 20 61 74 20 6f 66  n integers at of
3e10: 66 73 65 74 73 20 35 32 20 61 6e 64 20 36 34 20  fsets 52 and 64 
3e20: 61 72 65 20 75 73 65 64 0a 74 6f 20 6d 61 6e 61  are used.to mana
3e30: 67 65 20 74 68 65 20 5b 61 75 74 6f 5f 76 61 63  ge the [auto_vac
3e40: 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d  uum] and [increm
3e50: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f  ental_vacuum] mo
3e60: 64 65 73 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e  des.  ^If.the in
3e70: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3e80: 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e 20  52 is zero then 
3e90: 70 6f 69 6e 74 65 72 2d 6d 61 70 20 28 70 74 72  pointer-map (ptr
3ea0: 6d 61 70 29 20 70 61 67 65 73 20 61 72 65 0a 6f  map) pages are.o
3eb0: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
3ec0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
3ed0: 64 20 6e 65 69 74 68 65 72 20 61 75 74 6f 5f 76  d neither auto_v
3ee0: 61 63 75 75 6d 20 6e 6f 72 0a 69 6e 63 72 65 6d  acuum nor.increm
3ef0: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 20 61 72 65  ental_vacuum are
3f00: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 5e 49 66   supported.  ^If
3f10: 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   the integer at 
3f20: 6f 66 66 73 65 74 20 35 32 20 69 73 0a 6e 6f 6e  offset 52 is.non
3f30: 2d 7a 65 72 6f 20 74 68 65 6e 20 69 74 20 69 73  -zero then it is
3f40: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
3f50: 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   of the largest 
3f60: 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
3f70: 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20  .database file, 
3f80: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
3f90: 65 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 70  e will contain p
3fa0: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6e 64  trmap pages, and
3fb0: 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62   the.mode must b
3fc0: 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61  e either auto_va
3fd0: 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e  cuum or incremen
3fe0: 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 5e 49 6e  tal_vacuum.  ^In
3ff0: 20 74 68 69 73 20 6c 61 74 74 65 72 0a 63 61 73   this latter.cas
4000: 65 2c 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  e, the integer a
4010: 74 20 6f 66 66 73 65 74 20 36 34 20 69 73 20 74  t offset 64 is t
4020: 72 75 65 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e  rue for incremen
4030: 74 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66  tal_vacuum and.f
4040: 61 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f 76 61  alse for auto_va
4050: 63 75 75 6d 2e 20 20 5e 49 66 20 74 68 65 20 69  cuum.  ^If the i
4060: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
4070: 20 35 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e   52 is zero then
4080: 0a 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20  .the integer at 
4090: 6f 66 66 73 65 74 20 36 34 20 6d 75 73 74 20 61  offset 64 must a
40a0: 6c 73 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e  lso be zero.</p>
40b0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
40c0: 6e 74 20 65 6e 63 20 7b 74 65 78 74 20 65 6e 63  nt enc {text enc
40d0: 6f 64 69 6e 67 7d 3c 2f 74 63 6c 3e 0a 3c 68 33  oding}</tcl>.<h3
40e0: 3e 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 3c 2f  >Text encoding</
40f0: 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 34 2d 62  h3>..<p>^The 4-b
4100: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
4110: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
4120: 20 35 36 20 64 65 74 65 72 6d 69 6e 65 73 20 74   56 determines t
4130: 68 65 20 65 6e 63 6f 64 69 6e 67 0a 75 73 65 64  he encoding.used
4140: 20 66 6f 72 20 61 6c 6c 20 74 65 78 74 20 73 74   for all text st
4150: 72 69 6e 67 73 20 73 74 6f 72 65 64 20 69 6e 20  rings stored in 
4160: 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 0a  the database.  .
4170: 5e 41 20 76 61 6c 75 65 20 6f 66 20 31 20 6d 65  ^A value of 1 me
4180: 61 6e 73 20 55 54 46 2d 38 2e 0a 5e 41 20 76 61  ans UTF-8..^A va
4190: 6c 75 65 20 6f 66 20 32 20 6d 65 61 6e 73 20 55  lue of 2 means U
41a0: 54 46 2d 31 36 6c 65 2e 0a 5e 41 20 76 61 6c 75  TF-16le..^A valu
41b0: 65 20 6f 66 20 33 20 6d 65 61 6e 73 20 55 54 46  e of 3 means UTF
41c0: 2d 31 36 62 65 2e 0a 4e 6f 20 6f 74 68 65 72 20  -16be..No other 
41d0: 76 61 6c 75 65 73 20 61 72 65 20 61 6c 6c 6f 77  values are allow
41e0: 65 64 2e 0a 5e 28 54 68 65 20 73 71 6c 69 74 65  ed..^(The sqlite
41f0: 33 2e 68 20 68 65 61 64 65 72 20 66 69 6c 65 20  3.h header file 
4200: 64 65 66 69 6e 65 73 20 43 2d 70 72 65 70 72 6f  defines C-prepro
4210: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 53 51  cessor macros SQ
4220: 4c 49 54 45 5f 55 54 46 38 20 61 73 20 31 2c 0a  LITE_UTF8 as 1,.
4230: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 61  SQLITE_UTF16LE a
4240: 73 20 32 2c 20 61 6e 64 20 53 51 4c 49 54 45 5f  s 2, and SQLITE_
4250: 55 54 46 31 36 42 45 20 61 73 20 33 2c 20 74 6f  UTF16BE as 3, to
4260: 20 75 73 65 20 69 6e 20 70 6c 61 63 65 20 6f 66   use in place of
4270: 0a 74 68 65 20 6e 75 6d 65 72 69 63 20 63 6f 64  .the numeric cod
4280: 65 73 20 66 6f 72 20 74 68 65 20 74 65 78 74 20  es for the text 
4290: 65 6e 63 6f 64 69 6e 67 2e 29 5e 3c 2f 70 3e 0a  encoding.)^</p>.
42a0: 0a 3c 68 33 3e 55 73 65 72 20 76 65 72 73 69 6f  .<h3>User versio
42b0: 6e 20 6e 75 6d 62 65 72 3c 2f 68 33 3e 0a 0a 3c  n number</h3>..<
42c0: 70 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69  p>^The 4-byte bi
42d0: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
42e0: 20 61 74 20 6f 66 66 73 65 74 20 36 30 20 69 73   at offset 60 is
42f0: 20 74 68 65 20 75 73 65 72 20 76 65 72 73 69 6f   the user versio
4300: 6e 20 77 68 69 63 68 0a 69 73 20 73 65 74 20 61  n which.is set a
4310: 6e 64 20 71 75 65 72 69 65 64 20 62 79 20 74 68  nd queried by th
4320: 65 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  e [user_version 
4330: 70 72 61 67 6d 61 5d 2e 20 20 54 68 65 20 75 73  pragma].  The us
4340: 65 72 20 76 65 72 73 69 6f 6e 20 69 73 0a 6e 6f  er version is.no
4350: 74 20 75 73 65 64 20 62 79 20 53 51 4c 69 74 65  t used by SQLite
4360: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
4370: 72 61 67 6d 65 6e 74 20 61 70 70 69 64 20 7b 41  ragment appid {A
4380: 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 7d 3c 2f  pplication ID}</
4390: 74 63 6c 3e 0a 3c 68 33 3e 41 70 70 6c 69 63 61  tcl>.<h3>Applica
43a0: 74 69 6f 6e 20 49 44 3c 2f 68 33 3e 0a 0a 3c 70  tion ID</h3>..<p
43b0: 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  >^The 4-byte big
43c0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
43d0: 61 74 20 6f 66 66 73 65 74 20 36 38 20 69 73 20  at offset 68 is 
43e0: 61 6e 20 22 41 70 70 6c 69 63 61 74 69 6f 6e 20  an "Application 
43f0: 49 44 22 20 74 68 61 74 0a 63 61 6e 20 62 65 20  ID" that.can be 
4400: 73 65 74 20 62 79 20 74 68 65 20 5b 50 52 41 47  set by the [PRAG
4410: 4d 41 20 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69  MA application_i
4420: 64 5d 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 6f 72  d] command in or
4430: 64 65 72 20 74 6f 20 69 64 65 6e 74 69 66 79 20  der to identify 
4440: 74 68 65 0a 64 61 74 61 62 61 73 65 20 61 73 20  the.database as 
4450: 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 6f 72 20  belonging to or 
4460: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
4470: 61 20 70 61 72 74 69 63 75 6c 61 72 20 61 70 70  a particular app
4480: 6c 69 63 61 74 69 6f 6e 2e 0a 54 68 65 20 61 70  lication..The ap
4490: 70 6c 69 63 61 74 69 6f 6e 20 49 44 20 69 73 20  plication ID is 
44a0: 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 64 61 74  intended for dat
44b0: 61 62 61 73 65 20 66 69 6c 65 73 20 75 73 65 64  abase files used
44c0: 20 61 73 20 61 6e 0a 5b 61 70 70 6c 69 63 61 74   as an.[applicat
44d0: 69 6f 6e 20 66 69 6c 65 2d 66 6f 72 6d 61 74 5d  ion file-format]
44e0: 2e 20 20 54 68 65 20 61 70 70 6c 69 63 61 74 69  .  The applicati
44f0: 6f 6e 20 49 44 20 63 61 6e 20 62 65 20 75 73 65  on ID can be use
4500: 64 20 62 79 20 75 74 69 6c 69 74 69 65 73 20 0a  d by utilities .
4510: 73 75 63 68 20 61 73 20 5b 68 74 74 70 3a 2f 2f  such as [http://
4520: 77 77 77 2e 64 61 72 77 69 6e 73 79 73 2e 63 6f  www.darwinsys.co
4530: 6d 2f 66 69 6c 65 2f 20 7c 20 66 69 6c 65 28 31  m/file/ | file(1
4540: 29 5d 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  )] to determine 
4550: 74 68 65 20 73 70 65 63 69 66 69 63 0a 66 69 6c  the specific.fil
4560: 65 20 74 79 70 65 20 72 61 74 68 65 72 20 74 68  e type rather th
4570: 61 6e 20 6a 75 73 74 20 72 65 70 6f 72 74 69 6e  an just reportin
4580: 67 20 22 53 51 4c 69 74 65 33 20 44 61 74 61 62  g "SQLite3 Datab
4590: 61 73 65 22 2e 20 20 41 20 6c 69 73 74 20 6f 66  ase".  A list of
45a0: 0a 61 73 73 69 67 6e 65 64 20 61 70 70 6c 69 63  .assigned applic
45b0: 61 74 69 6f 6e 20 49 44 73 20 63 61 6e 20 62 65  ation IDs can be
45c0: 20 73 65 65 6e 20 62 79 20 63 6f 6e 73 75 6c 74   seen by consult
45d0: 69 6e 67 20 74 68 65 0a 5b 68 74 74 70 3a 2f 2f  ing the.[http://
45e0: 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73  www.sqlite.org/s
45f0: 72 63 2f 61 72 74 69 66 61 63 74 3f 63 69 3d 74  rc/artifact?ci=t
4600: 72 75 6e 6b 26 66 69 6c 65 6e 61 6d 65 3d 6d 61  runk&filename=ma
4610: 67 69 63 2e 74 78 74 7c 6d 61 67 69 63 2e 74 78  gic.txt|magic.tx
4620: 74 5d 0a 66 69 6c 65 20 69 6e 20 74 68 65 20 53  t].file in the S
4630: 51 4c 69 74 65 20 73 6f 75 72 63 65 20 72 65 70  QLite source rep
4640: 6f 73 69 74 6f 72 79 2e 3c 2f 70 3e 0a 0a 3c 74  ository.</p>..<t
4650: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76  cl>hd_fragment v
4660: 61 6c 69 64 66 6f 72 20 7b 76 65 72 73 69 6f 6e  alidfor {version
4670: 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65  -valid-for numbe
4680: 72 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 57 72 69  r}</tcl>.<h3>Wri
4690: 74 65 20 6c 69 62 72 61 72 79 20 76 65 72 73 69  te library versi
46a0: 6f 6e 20 6e 75 6d 62 65 72 20 61 6e 64 20 76 65  on number and ve
46b0: 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72 20  rsion-valid-for 
46c0: 6e 75 6d 62 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e  number</h3>..<p>
46d0: 5e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  ^The 4-byte big-
46e0: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
46f0: 74 20 6f 66 66 73 65 74 20 39 36 20 73 74 6f 72  t offset 96 stor
4700: 65 73 20 74 68 65 20 0a 5b 53 51 4c 49 54 45 5f  es the .[SQLITE_
4710: 56 45 52 53 49 4f 4e 5f 4e 55 4d 42 45 52 5d 20  VERSION_NUMBER] 
4720: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 51  value for the SQ
4730: 4c 69 74 65 20 6c 69 62 72 61 72 79 20 74 68 61  Lite library tha
4740: 74 20 6d 6f 73 74 0a 72 65 63 65 6e 74 6c 79 20  t most.recently 
4750: 6d 6f 64 69 66 69 65 64 20 74 68 65 20 64 61 74  modified the dat
4760: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 5e 54 68  abase file.  ^Th
4770: 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  e 4-byte big-end
4780: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 0a 6f  ian integer at.o
4790: 66 66 73 65 74 20 39 32 20 69 73 20 74 68 65 20  ffset 92 is the 
47a0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 5b 63 68  value of the [ch
47b0: 61 6e 67 65 20 63 6f 75 6e 74 65 72 5d 20 77 68  ange counter] wh
47c0: 65 6e 20 74 68 65 20 76 65 72 73 69 6f 6e 20 6e  en the version n
47d0: 75 6d 62 65 72 0a 77 61 73 20 73 74 6f 72 65 64  umber.was stored
47e0: 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 61  .  The integer a
47f0: 74 20 6f 66 66 73 65 74 20 39 32 20 69 6e 64 69  t offset 92 indi
4800: 63 61 74 65 73 20 77 68 69 63 68 20 74 72 61 6e  cates which tran
4810: 73 61 63 74 69 6f 6e 0a 74 68 65 20 76 65 72 73  saction.the vers
4820: 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20 76 61  ion number is va
4830: 6c 69 64 20 66 6f 72 20 61 6e 64 20 69 73 20 73  lid for and is s
4840: 6f 6d 65 74 69 6d 65 73 20 63 61 6c 6c 65 64 20  ometimes called 
4850: 74 68 65 0a 22 76 65 72 73 69 6f 6e 2d 76 61 6c  the."version-val
4860: 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 22 2e 0a  id-for number"..
4870: 0a 3c 68 33 3e 48 65 61 64 65 72 20 73 70 61 63  .<h3>Header spac
4880: 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 20 65  e reserved for e
4890: 78 70 61 6e 73 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c  xpansion</h3>..<
48a0: 70 3e 41 6c 6c 20 6f 74 68 65 72 20 62 79 74 65  p>All other byte
48b0: 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
48c0: 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 61 72  e file header ar
48d0: 65 20 72 65 73 65 72 76 65 64 20 66 6f 72 0a 66  e reserved for.f
48e0: 75 74 75 72 65 20 65 78 70 61 6e 73 69 6f 6e 20  uture expansion 
48f0: 61 6e 64 20 6d 75 73 74 20 62 65 20 73 65 74 20  and must be set 
4900: 74 6f 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 74  to zero.</p>..<t
4910: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 6c  cl>hd_fragment l
4920: 6f 63 6b 62 79 74 65 20 7b 6c 6f 63 6b 2d 62 79  ockbyte {lock-by
4930: 74 65 20 70 61 67 65 7d 3c 2f 74 63 6c 3e 0a 3c  te page}</tcl>.<
4940: 68 32 3e 54 68 65 20 4c 6f 63 6b 2d 42 79 74 65  h2>The Lock-Byte
4950: 20 50 61 67 65 3c 2f 68 32 3e 0a 0a 3c 70 3e 54   Page</h2>..<p>T
4960: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he lock-byte pag
4970: 65 20 69 73 20 74 68 65 20 73 69 6e 67 6c 65 20  e is the single 
4980: 70 61 67 65 20 6f 66 20 74 68 65 20 64 61 74 61  page of the data
4990: 62 61 73 65 20 66 69 6c 65 0a 74 68 61 74 20 63  base file.that c
49a0: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 79 74 65  ontains the byte
49b0: 73 20 61 74 20 6f 66 66 73 65 74 73 20 62 65 74  s at offsets bet
49c0: 77 65 65 6e 20 31 30 37 33 37 34 31 38 32 34 20  ween 1073741824 
49d0: 61 6e 64 20 31 30 37 33 37 34 32 33 33 35 2c 0a  and 1073742335,.
49e0: 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 20 64 61  inclusive.  A da
49f0: 74 61 62 61 73 65 20 66 69 6c 65 20 74 68 61 74  tabase file that
4a00: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
4a10: 20 65 71 75 61 6c 20 74 6f 20 31 30 37 33 37 34   equal to 107374
4a20: 31 38 32 34 20 62 79 74 65 73 20 0a 69 6e 20 73  1824 bytes .in s
4a30: 69 7a 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  ize contains no 
4a40: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 2e 20  lock-byte page. 
4a50: 20 41 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   A database file
4a60: 20 6c 61 72 67 65 72 20 74 68 61 6e 0a 31 30 37   larger than.107
4a70: 33 37 34 31 38 32 34 20 63 6f 6e 74 61 69 6e 73  3741824 contains
4a80: 20 65 78 61 63 74 6c 79 20 6f 6e 65 20 6c 6f 63   exactly one loc
4a90: 6b 2d 62 79 74 65 20 70 61 67 65 2e 0a 3c 2f 70  k-byte page..</p
4aa0: 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d 62  >..<p>The lock-b
4ab0: 79 74 65 20 70 61 67 65 20 69 73 20 73 65 74 20  yte page is set 
4ac0: 61 73 69 64 65 20 66 6f 72 20 75 73 65 20 62 79  aside for use by
4ad0: 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 2d 73   the operating-s
4ae0: 79 73 74 65 6d 20 73 70 65 63 69 66 69 63 0a 5b  ystem specific.[
4af0: 56 46 53 5d 20 69 6d 70 6c 65 6d 65 6e 74 61 74  VFS] implementat
4b00: 69 6f 6e 20 69 6e 20 69 6d 70 6c 65 6d 65 6e 74  ion in implement
4b10: 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
4b20: 20 66 69 6c 65 20 6c 6f 63 6b 69 6e 67 20 70 72   file locking pr
4b30: 69 6d 69 74 69 76 65 73 2e 0a 5e 53 51 4c 69 74  imitives..^SQLit
4b40: 65 20 64 6f 65 73 20 6e 6f 74 20 75 73 65 20 74  e does not use t
4b50: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he lock-byte pag
4b60: 65 2e 20 20 5e 54 68 65 20 53 51 4c 69 74 65 20  e.  ^The SQLite 
4b70: 63 6f 72 65 20 0a 77 69 6c 6c 20 6e 65 76 65 72  core .will never
4b80: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 74   read or write t
4b90: 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he lock-byte pag
4ba0: 65 2c 0a 74 68 6f 75 67 68 20 6f 70 65 72 61 74  e,.though operat
4bb0: 69 6e 67 2d 73 79 73 74 65 6d 20 73 70 65 63 69  ing-system speci
4bc0: 66 69 63 20 5b 56 46 53 5d 20 0a 69 6d 70 6c 65  fic [VFS] .imple
4bd0: 6d 65 6e 74 61 74 69 6f 6e 73 20 6d 61 79 20 63  mentations may c
4be0: 68 6f 6f 73 65 20 74 6f 20 72 65 61 64 20 6f 72  hoose to read or
4bf0: 20 77 72 69 74 65 20 62 79 74 65 73 20 6f 6e 20   write bytes on 
4c00: 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 0a 70  the lock-byte .p
4c10: 61 67 65 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  age according to
4c20: 20 74 68 65 20 0a 6e 65 65 64 73 20 61 6e 64 20   the .needs and 
4c30: 70 72 6f 63 6c 69 76 69 74 69 65 73 20 6f 66 20  proclivities of 
4c40: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 73  the underlying s
4c50: 79 73 74 65 6d 2e 20 20 54 68 65 20 75 6e 69 78  ystem.  The unix
4c60: 20 61 6e 64 20 77 69 6e 33 32 0a 5b 56 46 53 5d   and win32.[VFS]
4c70: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73   implementations
4c80: 20 74 68 61 74 20 63 6f 6d 65 20 62 75 69 6c 74   that come built
4c90: 20 69 6e 74 6f 20 53 51 4c 69 74 65 20 64 6f 20   into SQLite do 
4ca0: 6e 6f 74 20 77 72 69 74 65 20 74 6f 20 74 68 65  not write to the
4cb0: 0a 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 2c  .lock-byte page,
4cc0: 20 62 75 74 20 74 68 69 72 64 2d 70 61 72 74 79   but third-party
4cd0: 20 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74   VFS implementat
4ce0: 69 6f 6e 73 20 66 6f 72 0a 6f 74 68 65 72 20 6f  ions for.other o
4cf0: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 73  perating systems
4d00: 20 6d 69 67 68 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e   might.</p>..<p>
4d10: 54 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61  The lock-byte pa
4d20: 67 65 20 61 72 6f 73 65 20 66 72 6f 6d 20 74 68  ge arose from th
4d30: 65 20 6e 65 65 64 20 74 6f 20 73 75 70 70 6f 72  e need to suppor
4d40: 74 20 57 69 6e 39 35 20 77 68 69 63 68 20 77 61  t Win95 which wa
4d50: 73 20 74 68 65 0a 70 72 65 64 6f 6d 69 6e 61 6e  s the.predominan
4d60: 74 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  t operating syst
4d70: 65 6d 20 77 68 65 6e 20 74 68 69 73 20 66 69 6c  em when this fil
4d80: 65 20 66 6f 72 6d 61 74 20 77 61 73 20 64 65 73  e format was des
4d90: 69 67 6e 65 64 20 61 6e 64 20 77 68 69 63 68 20  igned and which 
4da0: 0a 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20  .only supported 
4db0: 6d 61 6e 64 61 74 6f 72 79 20 66 69 6c 65 20 6c  mandatory file l
4dc0: 6f 63 6b 69 6e 67 2e 20 20 41 6c 6c 20 6d 6f 64  ocking.  All mod
4dd0: 65 72 6e 20 6f 70 65 72 61 74 69 6e 67 20 73 79  ern operating sy
4de0: 73 74 65 6d 73 20 74 68 61 74 0a 77 65 20 6b 6e  stems that.we kn
4df0: 6f 77 20 6f 66 20 73 75 70 70 6f 72 74 20 61 64  ow of support ad
4e00: 76 69 73 6f 72 79 20 66 69 6c 65 20 6c 6f 63 6b  visory file lock
4e10: 69 6e 67 2c 20 61 6e 64 20 73 6f 20 74 68 65 20  ing, and so the 
4e20: 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69  lock-byte page i
4e30: 73 0a 6e 6f 74 20 72 65 61 6c 6c 79 20 6e 65 65  s.not really nee
4e40: 64 65 64 20 61 6e 79 20 6d 6f 72 65 2c 20 62 75  ded any more, bu
4e50: 74 20 69 73 20 72 65 74 61 69 6e 65 64 20 66 6f  t is retained fo
4e60: 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  r backwards comp
4e70: 61 74 69 62 69 6c 69 74 79 2e 3c 2f 70 3e 0a 0a  atibility.</p>..
4e80: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
4e90: 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66 72 65   {freelist} {fre
4ea0: 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d 70 61 67  elist} {free-pag
4eb0: 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  e list}</tcl>.<h
4ec0: 32 3e 54 68 65 20 46 72 65 65 6c 69 73 74 3c 2f  2>The Freelist</
4ed0: 68 32 3e 0a 0a 3c 70 3e 41 20 64 61 74 61 62 61  h2>..<p>A databa
4ee0: 73 65 20 66 69 6c 65 20 6d 69 67 68 74 20 63 6f  se file might co
4ef0: 6e 74 61 69 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72  ntain one or mor
4f00: 65 20 70 61 67 65 73 20 74 68 61 74 20 61 72 65  e pages that are
4f10: 20 6e 6f 74 20 69 6e 0a 61 63 74 69 76 65 20 75   not in.active u
4f20: 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67 65  se.  Unused page
4f30: 73 20 63 61 6e 20 63 6f 6d 65 20 61 62 6f 75 74  s can come about
4f40: 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 77  , for example, w
4f50: 68 65 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  hen information.
4f60: 69 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d 20  is deleted from 
4f70: 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 55  the database.  U
4f80: 6e 75 73 65 64 20 70 61 67 65 73 20 61 72 65 20  nused pages are 
4f90: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 66 72  stored on the fr
4fa0: 65 65 6c 69 73 74 0a 61 6e 64 20 61 72 65 20 72  eelist.and are r
4fb0: 65 75 73 65 64 20 77 68 65 6e 20 61 64 64 69 74  eused when addit
4fc0: 69 6f 6e 61 6c 20 70 61 67 65 73 20 61 72 65 20  ional pages are 
4fd0: 72 65 71 75 69 72 65 64 2e 3c 2f 70 3e 0a 0a 3c  required.</p>..<
4fe0: 70 3e 54 68 65 20 66 72 65 65 6c 69 73 74 20 69  p>The freelist i
4ff0: 73 20 6f 72 67 61 6e 69 7a 65 64 20 61 73 20 61  s organized as a
5000: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
5010: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70  freelist trunk p
5020: 61 67 65 73 0a 77 69 74 68 20 65 61 63 68 20 74  ages.with each t
5030: 72 75 6e 6b 20 70 61 67 65 73 20 63 6f 6e 74 61  runk pages conta
5040: 69 6e 69 6e 67 20 70 61 67 65 20 6e 75 6d 62 65  ining page numbe
5050: 72 73 20 66 6f 72 20 7a 65 72 6f 20 6f 72 20 6d  rs for zero or m
5060: 6f 72 65 20 66 72 65 65 6c 69 73 74 0a 6c 65 61  ore freelist.lea
5070: 66 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70  f pages.</p>..<p
5080: 3e 41 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e  >A freelist trun
5090: 6b 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20  k page consists 
50a0: 6f 66 20 61 6e 20 61 72 72 61 79 20 6f 66 20 34  of an array of 4
50b0: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
50c0: 20 69 6e 74 65 67 65 72 73 2e 0a 54 68 65 20 73   integers..The s
50d0: 69 7a 65 20 6f 66 20 74 68 65 20 61 72 72 61 79  ize of the array
50e0: 20 69 73 20 61 73 20 6d 61 6e 79 20 69 6e 74 65   is as many inte
50f0: 67 65 72 73 20 61 73 20 77 69 6c 6c 20 66 69 74  gers as will fit
5100: 20 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20 73   in the usable s
5110: 70 61 63 65 0a 6f 66 20 61 20 70 61 67 65 2e 20  pace.of a page. 
5120: 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 75 73 61   The minimum usa
5130: 62 6c 65 20 73 70 61 63 65 20 69 73 20 34 38 30  ble space is 480
5140: 20 62 79 74 65 73 20 73 6f 20 74 68 65 20 61 72   bytes so the ar
5150: 72 61 79 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a  ray will always.
5160: 62 65 20 61 74 20 6c 65 61 73 74 20 31 32 30 20  be at least 120 
5170: 65 6e 74 72 69 65 73 20 69 6e 20 6c 65 6e 67 74  entries in lengt
5180: 68 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20 69  h.  ^The first i
5190: 6e 74 65 67 65 72 20 6f 6e 20 61 20 66 72 65 65  nteger on a free
51a0: 6c 69 73 74 20 74 72 75 6e 6b 0a 70 61 67 65 20  list trunk.page 
51b0: 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  is the page numb
51c0: 65 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20 66  er of the next f
51d0: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61  reelist trunk pa
51e0: 67 65 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  ge in the list o
51f0: 72 20 7a 65 72 6f 20 0a 69 66 20 74 68 69 73 20  r zero .if this 
5200: 69 73 20 74 68 65 20 6c 61 73 74 20 66 72 65 65  is the last free
5210: 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65 2e  list trunk page.
5220: 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 69 6e    ^The second in
5230: 74 65 67 65 72 20 6f 6e 20 61 20 66 72 65 65 6c  teger on a freel
5240: 69 73 74 0a 74 72 75 6e 6b 20 70 61 67 65 20 69  ist.trunk page i
5250: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
5260: 6c 65 61 66 20 70 61 67 65 20 70 6f 69 6e 74 65  leaf page pointe
5270: 72 73 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20 0a  rs to follow.  .
5280: 5e 28 43 61 6c 6c 20 74 68 65 20 73 65 63 6f 6e  ^(Call the secon
5290: 64 20 69 6e 74 65 67 65 72 20 6f 6e 20 61 20 66  d integer on a f
52a0: 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61  reelist trunk pa
52b0: 67 65 20 4c 2e 0a 49 66 20 4c 20 69 73 20 67 72  ge L..If L is gr
52c0: 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20  eater than zero 
52d0: 74 68 65 6e 20 69 6e 74 65 67 65 72 73 20 77 69  then integers wi
52e0: 74 68 20 61 72 72 61 79 20 69 6e 64 65 78 65 73  th array indexes
52f0: 20 62 65 74 77 65 65 6e 20 32 20 61 6e 64 0a 4c   between 2 and.L
5300: 2b 31 20 69 6e 63 6c 75 73 69 76 65 20 63 6f 6e  +1 inclusive con
5310: 74 61 69 6e 20 70 61 67 65 20 6e 75 6d 62 65 72  tain page number
5320: 73 20 66 6f 72 20 66 72 65 65 6c 69 73 74 20 6c  s for freelist l
5330: 65 61 66 20 70 61 67 65 73 2e 29 5e 3c 2f 70 3e  eaf pages.)^</p>
5340: 0a 0a 3c 70 3e 46 72 65 65 6c 69 73 74 20 6c 65  ..<p>Freelist le
5350: 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e  af pages contain
5360: 20 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e   no information.
5370: 20 20 5e 53 51 4c 69 74 65 20 61 76 6f 69 64 73    ^SQLite avoids
5380: 20 72 65 61 64 69 6e 67 20 6f 72 0a 77 72 69 74   reading or.writ
5390: 69 6e 67 20 66 72 65 65 6c 69 73 74 20 6c 65 61  ing freelist lea
53a0: 66 20 70 61 67 65 73 20 69 6e 20 6f 72 64 65 72  f pages in order
53b0: 20 74 6f 20 72 65 64 75 63 65 20 64 69 73 6b 20   to reduce disk 
53c0: 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62  I/O.</p>..<p>A b
53d0: 75 67 20 69 6e 20 53 51 4c 69 74 65 20 76 65 72  ug in SQLite ver
53e0: 73 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f 20 33  sions prior to 3
53f0: 2e 36 2e 30 20 28 5b 64 61 74 65 6f 66 3a 33 2e  .6.0 ([dateof:3.
5400: 36 2e 30 5d 29 0a 63 61 75 73 65 64 20 74 68 65  6.0]).caused the
5410: 20 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a   database to be.
5420: 72 65 70 6f 72 74 65 64 20 61 73 20 63 6f 72 72  reported as corr
5430: 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
5440: 65 20 6c 61 73 74 20 36 20 65 6e 74 72 69 65 73  e last 6 entries
5450: 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74   in the freelist
5460: 20 74 72 75 6e 6b 20 70 61 67 65 20 0a 61 72 72   trunk page .arr
5470: 61 79 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e  ay contained non
5480: 2d 7a 65 72 6f 20 76 61 6c 75 65 73 2e 20 20 4e  -zero values.  N
5490: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
54a0: 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 68   SQLite do not h
54b0: 61 76 65 0a 74 68 69 73 20 70 72 6f 62 6c 65 6d  ave.this problem
54c0: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 6e 65 77  .  ^However, new
54d0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
54e0: 51 4c 69 74 65 20 73 74 69 6c 6c 20 61 76 6f 69  QLite still avoi
54f0: 64 20 75 73 69 6e 67 20 74 68 65 20 0a 6c 61 73  d using the .las
5500: 74 20 73 69 78 20 65 6e 74 72 69 65 73 20 69 6e  t six entries in
5510: 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 74 72   the freelist tr
5520: 75 6e 6b 20 70 61 67 65 20 61 72 72 61 79 20 69  unk page array i
5530: 6e 20 6f 72 64 65 72 20 74 68 61 74 20 64 61 74  n order that dat
5540: 61 62 61 73 65 0a 66 69 6c 65 73 20 63 72 65 61  abase.files crea
5550: 74 65 64 20 62 79 20 6e 65 77 65 72 20 76 65 72  ted by newer ver
5560: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
5570: 63 61 6e 20 62 65 20 72 65 61 64 20 62 79 20 6f  can be read by o
5580: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f 66  lder versions.of
5590: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70   SQLite.</p>..<p
55a0: 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  >^The number of 
55b0: 66 72 65 65 6c 69 73 74 20 70 61 67 65 73 20 69  freelist pages i
55c0: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 34 2d  s stored as a 4-
55d0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
55e0: 69 6e 74 65 67 65 72 0a 69 6e 20 74 68 65 20 64  integer.in the d
55f0: 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 61  atabase header a
5600: 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33  t an offset of 3
5610: 36 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  6 from the begin
5620: 6e 69 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65  ning of the file
5630: 2e 0a 5e 54 68 65 20 64 61 74 61 62 61 73 65 20  ..^The database 
5640: 68 65 61 64 65 72 20 61 6c 73 6f 20 73 74 6f 72  header also stor
5650: 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  es the page numb
5660: 65 72 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  er of the first 
5670: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70  freelist trunk.p
5680: 61 67 65 20 61 73 20 61 20 34 2d 62 79 74 65 20  age as a 4-byte 
5690: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
56a0: 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  er at an offset 
56b0: 6f 66 20 33 32 20 66 72 6f 6d 20 74 68 65 20 62  of 32 from the b
56c0: 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20  eginning.of the 
56d0: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  file.</p>..<tcl>
56e0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 74 72 65  hd_fragment btre
56f0: 65 20 7b 42 2a 2d 54 72 65 65 73 7d 20 7b 42 2d  e {B*-Trees} {B-
5700: 74 72 65 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e  tree}</tcl>.<h2>
5710: 42 2d 74 72 65 65 20 50 61 67 65 73 3c 2f 68 32  B-tree Pages</h2
5720: 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65 65  >..<p>The b-tree
5730: 20 61 6c 67 6f 72 69 74 68 6d 20 70 72 6f 76 69   algorithm provi
5740: 64 65 73 20 6b 65 79 2f 64 61 74 61 20 73 74 6f  des key/data sto
5750: 72 61 67 65 20 77 69 74 68 20 75 6e 69 71 75 65  rage with unique
5760: 20 61 6e 64 0a 6f 72 64 65 72 65 64 20 6b 65 79   and.ordered key
5770: 73 20 6f 6e 20 70 61 67 65 2d 6f 72 69 65 6e 74  s on page-orient
5780: 65 64 20 73 74 6f 72 61 67 65 20 64 65 76 69 63  ed storage devic
5790: 65 73 2e 0a 46 6f 72 20 62 61 63 6b 67 72 6f 75  es..For backgrou
57a0: 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  nd information o
57b0: 6e 20 62 2d 74 72 65 65 73 2c 20 73 65 65 0a 4b  n b-trees, see.K
57c0: 6e 75 74 68 2c 20 3c 75 3e 54 68 65 20 41 72 74  nuth, <u>The Art
57d0: 20 4f 66 20 43 6f 6d 70 75 74 65 72 20 50 72 6f   Of Computer Pro
57e0: 67 72 61 6d 6d 69 6e 67 3c 2f 75 3e 2c 20 56 6f  gramming</u>, Vo
57f0: 6c 75 6d 65 20 33 20 22 53 6f 72 74 69 6e 67 0a  lume 3 "Sorting.
5800: 61 6e 64 20 53 65 61 72 63 68 69 6e 67 22 2c 20  and Searching", 
5810: 70 61 67 65 73 20 34 37 31 2d 34 37 39 2e 20 20  pages 471-479.  
5820: 54 77 6f 20 6b 69 6e 64 73 20 6f 66 20 62 2d 74  Two kinds of b-t
5830: 72 65 65 73 20 61 72 65 20 75 73 65 64 20 62 79  rees are used by
5840: 0a 53 51 4c 69 74 65 2e 20 20 54 68 65 20 61 6c  .SQLite.  The al
5850: 67 6f 72 69 74 68 6d 20 74 68 61 74 20 4b 6e 75  gorithm that Knu
5860: 74 68 20 63 61 6c 6c 73 20 22 42 2a 2d 54 72 65  th calls "B*-Tre
5870: 65 22 20 73 74 6f 72 65 73 20 61 6c 6c 20 64 61  e" stores all da
5880: 74 61 0a 69 6e 20 74 68 65 20 6c 65 61 76 65 73  ta.in the leaves
5890: 20 6f 66 20 74 68 65 20 74 72 65 65 2e 20 20 53   of the tree.  S
58a0: 51 4c 69 74 65 20 63 61 6c 6c 73 20 74 68 69 73  QLite calls this
58b0: 20 76 61 72 69 65 74 79 20 6f 66 20 62 2d 74 72   variety of b-tr
58c0: 65 65 0a 61 20 22 74 61 62 6c 65 20 62 2d 74 72  ee.a "table b-tr
58d0: 65 65 22 2e 20 54 68 65 20 61 6c 67 6f 72 69 74  ee". The algorit
58e0: 68 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63 61  hm that Knuth ca
58f0: 6c 6c 73 20 73 69 6d 70 6c 79 20 22 42 2d 54 72  lls simply "B-Tr
5900: 65 65 22 0a 73 74 6f 72 65 73 20 62 6f 74 68 20  ee".stores both 
5910: 74 68 65 20 6b 65 79 20 61 6e 64 20 74 68 65 20  the key and the 
5920: 64 61 74 61 20 74 6f 67 65 74 68 65 72 20 69 6e  data together in
5930: 20 62 6f 74 68 20 6c 65 61 76 65 73 0a 61 6e 64   both leaves.and
5940: 20 69 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67   in interior pag
5950: 65 73 2e 20 20 49 6e 20 74 68 65 20 53 51 4c 69  es.  In the SQLi
5960: 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  te implementatio
5970: 6e 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  n, the original.
5980: 42 2d 54 72 65 65 20 61 6c 67 6f 72 69 74 68 6d  B-Tree algorithm
5990: 20 73 74 6f 72 65 73 20 6b 65 79 73 20 6f 6e 6c   stores keys onl
59a0: 79 2c 20 6f 6d 69 74 74 69 6e 67 20 74 68 65 20  y, omitting the 
59b0: 64 61 74 61 20 65 6e 74 69 72 65 6c 79 2c 20 61  data entirely, a
59c0: 6e 64 0a 69 73 20 63 61 6c 6c 65 64 20 61 6e 20  nd.is called an 
59d0: 22 69 6e 64 65 78 20 62 2d 74 72 65 65 22 2e 0a  "index b-tree"..
59e0: 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67  .<p>A b-tree pag
59f0: 65 20 69 73 20 65 69 74 68 65 72 20 61 6e 20 69  e is either an i
5a00: 6e 74 65 72 69 6f 72 20 70 61 67 65 20 6f 72 20  nterior page or 
5a10: 61 20 6c 65 61 66 20 70 61 67 65 2e 0a 41 20 6c  a leaf page..A l
5a20: 65 61 66 20 70 61 67 65 20 63 6f 6e 74 61 69 6e  eaf page contain
5a30: 73 20 6b 65 79 73 20 61 6e 64 20 69 6e 20 74 68  s keys and in th
5a40: 65 20 63 61 73 65 20 6f 66 20 61 20 74 61 62 6c  e case of a tabl
5a50: 65 20 62 2d 74 72 65 65 20 65 61 63 68 0a 6b 65  e b-tree each.ke
5a60: 79 20 68 61 73 20 61 73 73 6f 63 69 61 74 65 64  y has associated
5a70: 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 74 65 72   data.  An inter
5a80: 69 6f 72 20 70 61 67 65 20 63 6f 6e 74 61 69 6e  ior page contain
5a90: 73 0a 4b 20 6b 65 79 73 20 74 6f 67 65 74 68 65  s.K keys togethe
5aa0: 72 20 77 69 74 68 20 4b 2b 31 20 70 6f 69 6e 74  r with K+1 point
5ab0: 65 72 73 20 74 6f 20 63 68 69 6c 64 20 62 2d 74  ers to child b-t
5ac0: 72 65 65 20 70 61 67 65 73 2e 0a 41 20 22 70 6f  ree pages..A "po
5ad0: 69 6e 74 65 72 22 20 69 6e 20 61 6e 20 69 6e 74  inter" in an int
5ae0: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
5af0: 65 20 69 73 20 6a 75 73 74 20 74 68 65 20 33 31  e is just the 31
5b00: 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 70 61 67  -bit integer.pag
5b10: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
5b20: 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f 70 3e 0a  child page.</p>.
5b30: 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20 64  .<p>Define the d
5b40: 65 70 74 68 0a 6f 66 20 61 20 6c 65 61 66 20 62  epth.of a leaf b
5b50: 2d 74 72 65 65 20 74 6f 20 62 65 20 31 20 61 6e  -tree to be 1 an
5b60: 64 20 74 68 65 20 64 65 70 74 68 20 6f 66 20 61  d the depth of a
5b70: 6e 79 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  ny interior b-tr
5b80: 65 65 20 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f 72  ee to be one.mor
5b90: 65 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d  e than the maxim
5ba0: 75 6d 20 64 65 70 74 68 20 6f 66 20 61 6e 79 20  um depth of any 
5bb0: 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e 2e  of its children.
5bc0: 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72    ^In a well-for
5bd0: 6d 65 64 0a 64 61 74 61 62 61 73 65 2c 20 61 6c  med.database, al
5be0: 6c 20 63 68 69 6c 64 72 65 6e 20 6f 66 20 61 6e  l children of an
5bf0: 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65   interior b-tree
5c00: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64   have the same d
5c10: 65 70 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  epth.</p>..<p>In
5c20: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74   an interior b-t
5c30: 72 65 65 20 70 61 67 65 2c 20 74 68 65 20 70 6f  ree page, the po
5c40: 69 6e 74 65 72 73 20 61 6e 64 20 6b 65 79 73 20  inters and keys 
5c50: 6c 6f 67 69 63 61 6c 6c 79 20 61 6c 74 65 72 6e  logically altern
5c60: 61 74 65 20 0a 77 69 74 68 20 61 20 70 6f 69 6e  ate .with a poin
5c70: 74 65 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64 73  ter on both ends
5c80: 2e 20 28 54 68 65 20 70 72 65 76 69 6f 75 73 20  . (The previous 
5c90: 73 65 6e 74 65 6e 63 65 20 69 73 20 74 6f 20 62  sentence is to b
5ca0: 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f 6e  e understood.con
5cb0: 63 65 70 74 75 61 6c 6c 79 20 2d 20 74 68 65 20  ceptually - the 
5cc0: 61 63 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f 66  actual layout of
5cd0: 20 74 68 65 20 6b 65 79 73 20 61 6e 64 0a 70 6f   the keys and.po
5ce0: 69 6e 74 65 72 73 20 77 69 74 68 69 6e 20 74 68  inters within th
5cf0: 65 20 70 61 67 65 20 69 73 20 6d 6f 72 65 20 63  e page is more c
5d00: 6f 6d 70 6c 69 63 61 74 65 64 20 61 6e 64 20 77  omplicated and w
5d10: 69 6c 6c 20 62 65 20 64 65 73 63 72 69 62 65 64  ill be described
5d20: 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e 29   in.the sequel.)
5d30: 20 20 41 6c 6c 20 6b 65 79 73 20 77 69 74 68 69    All keys withi
5d40: 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20  n the same page 
5d50: 61 72 65 20 75 6e 69 71 75 65 20 61 6e 64 20 61  are unique and a
5d60: 72 65 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72 67  re logically.org
5d70: 61 6e 69 7a 65 64 20 69 6e 20 61 73 63 65 6e 64  anized in ascend
5d80: 69 6e 67 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c  ing order from l
5d90: 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20 28  eft to right.  (
5da0: 41 67 61 69 6e 2c 20 74 68 69 73 20 6f 72 64 65  Again, this orde
5db0: 72 69 6e 67 0a 69 73 20 6c 6f 67 69 63 61 6c 2c  ring.is logical,
5dc0: 20 6e 6f 74 20 70 68 79 73 69 63 61 6c 2e 20 20   not physical.  
5dd0: 54 68 65 20 61 63 74 75 61 6c 20 6c 6f 63 61 74  The actual locat
5de0: 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68  ion of keys with
5df0: 69 6e 20 74 68 65 20 70 61 67 65 0a 69 73 20 61  in the page.is a
5e00: 72 62 69 74 72 61 72 79 2e 29 20 5e 46 6f 72 20  rbitrary.) ^For 
5e10: 61 6e 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e 74  any key X, point
5e20: 65 72 73 20 74 6f 20 74 68 65 20 6c 65 66 74 0a  ers to the left.
5e30: 6f 66 20 61 20 58 20 72 65 66 65 72 20 74 6f 20  of a X refer to 
5e40: 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e 20  b-tree pages on 
5e50: 77 68 69 63 68 20 61 6c 6c 20 6b 65 79 73 20 61  which all keys a
5e60: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  re less than or 
5e70: 65 71 75 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f 69  equal to X..^Poi
5e80: 6e 74 65 72 73 20 74 6f 20 74 68 65 20 72 69 67  nters to the rig
5e90: 68 74 20 6f 66 20 58 20 72 65 66 65 72 20 74 6f  ht of X refer to
5ea0: 20 70 61 67 65 73 20 77 68 65 72 65 20 61 6c 6c   pages where all
5eb0: 20 6b 65 79 73 20 61 72 65 20 0a 67 72 65 61 74   keys are .great
5ec0: 65 72 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a 0a  er than X.</p>..
5ed0: 3c 70 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e 74  <p>Within an int
5ee0: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
5ef0: 65 2c 20 65 61 63 68 20 6b 65 79 20 61 6e 64 20  e, each key and 
5f00: 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  the pointer to i
5f10: 74 73 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65 66  ts.immediate lef
5f20: 74 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 69  t are combined i
5f30: 6e 74 6f 20 61 20 73 74 72 75 63 74 75 72 65 20  nto a structure 
5f40: 63 61 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22 2e  called a "cell".
5f50: 20 20 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73 74    The.right-most
5f60: 20 70 6f 69 6e 74 65 72 20 69 73 20 68 65 6c 64   pointer is held
5f70: 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 20   separately.  A 
5f80: 6c 65 61 66 20 62 2d 74 72 65 65 20 70 61 67 65  leaf b-tree page
5f90: 20 68 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72 73   has no.pointers
5fa0: 2c 20 62 75 74 20 69 74 20 73 74 69 6c 6c 20 75  , but it still u
5fb0: 73 65 73 20 74 68 65 20 63 65 6c 6c 20 73 74 72  ses the cell str
5fc0: 75 63 74 75 72 65 20 74 6f 20 68 6f 6c 64 20 6b  ucture to hold k
5fd0: 65 79 73 20 66 6f 72 0a 69 6e 64 65 78 20 62 2d  eys for.index b-
5fe0: 74 72 65 65 73 20 6f 72 20 6b 65 79 73 20 61 6e  trees or keys an
5ff0: 64 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 61  d content for ta
6000: 62 6c 65 20 62 2d 74 72 65 65 73 2e 20 20 44 61  ble b-trees.  Da
6010: 74 61 20 69 73 20 61 6c 73 6f 0a 63 6f 6e 74 61  ta is also.conta
6020: 69 6e 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c  ined in the cell
6030: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72 79  ..</p>..<p>Every
6040: 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61 73   b-tree page has
6050: 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61 72   at most one par
6060: 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ent b-tree page.
6070: 0a 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 77  .A b-tree page w
6080: 69 74 68 6f 75 74 20 61 20 70 61 72 65 6e 74 20  ithout a parent 
6090: 69 73 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f 74  is called a root
60a0: 20 70 61 67 65 2e 20 20 41 20 72 6f 6f 74 20 62   page.  A root b
60b0: 2d 74 72 65 65 20 70 61 67 65 0a 74 6f 67 65 74  -tree page.toget
60c0: 68 65 72 20 77 69 74 68 20 74 68 65 20 63 6c 6f  her with the clo
60d0: 73 75 72 65 20 6f 66 20 69 74 73 20 63 68 69 6c  sure of its chil
60e0: 64 72 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d 70  dren form a comp
60f0: 6c 65 74 65 20 62 2d 74 72 65 65 2e 0a 49 74 20  lete b-tree..It 
6100: 69 73 20 70 6f 73 73 69 62 6c 65 20 28 61 6e 64  is possible (and
6110: 20 69 6e 20 66 61 63 74 20 72 61 74 68 65 72 20   in fact rather 
6120: 63 6f 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65 20  common) to have 
6130: 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65  a complete b-tre
6140: 65 0a 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20  e.that consists 
6150: 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65  of a single page
6160: 20 74 68 61 74 20 69 73 20 62 6f 74 68 20 61 20   that is both a 
6170: 6c 65 61 66 20 61 6e 64 20 74 68 65 20 72 6f 6f  leaf and the roo
6180: 74 2e 0a 42 65 63 61 75 73 65 20 74 68 65 72 65  t..Because there
6190: 20 61 72 65 20 70 6f 69 6e 74 65 72 73 20 66 72   are pointers fr
61a0: 6f 6d 20 70 61 72 65 6e 74 73 20 74 6f 20 63 68  om parents to ch
61b0: 69 6c 64 72 65 6e 2c 20 65 76 65 72 79 20 70 61  ildren, every pa
61c0: 67 65 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74 65  ge of a.complete
61d0: 20 62 2d 74 72 65 65 20 63 61 6e 20 62 65 20 6c   b-tree can be l
61e0: 6f 63 61 74 65 64 20 69 66 20 6f 6e 6c 79 20 74  ocated if only t
61f0: 68 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20  he root page is 
6200: 6b 6e 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a 62  known.  Hence,.b
6210: 2d 74 72 65 65 73 20 61 72 65 20 69 64 65 6e 74  -trees are ident
6220: 69 66 69 65 64 20 62 79 20 74 68 65 69 72 20 72  ified by their r
6230: 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  oot page number.
6240: 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65  </p>..<p>A b-tre
6250: 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65 72  e page is either
6260: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
6270: 70 61 67 65 20 6f 72 20 61 6e 20 69 6e 64 65 78  page or an index
6280: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 6c   b-tree page..Al
6290: 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 20 65  l pages within e
62a0: 61 63 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74  ach complete b-t
62b0: 72 65 65 20 61 72 65 20 6f 66 20 74 68 65 20 73  ree are of the s
62c0: 61 6d 65 20 74 79 70 65 3a 20 65 69 74 68 65 72  ame type: either
62d0: 20 74 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78 2e   table.or index.
62e0: 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65 20 74    There is one t
62f0: 61 62 6c 65 20 62 2d 74 72 65 65 73 20 69 6e 20  able b-trees in 
6300: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6310: 65 0a 66 6f 72 20 65 61 63 68 20 72 6f 77 69 64  e.for each rowid
6320: 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61   table in the da
6330: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 69  tabase schema, i
6340: 6e 63 6c 75 64 69 6e 67 20 73 79 73 74 65 6d 20  ncluding system 
6350: 74 61 62 6c 65 73 0a 73 75 63 68 20 61 73 20 73  tables.such as s
6360: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20 20 54  qlite_master.  T
6370: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 64 65  here is one inde
6380: 78 20 62 2d 74 72 65 65 0a 69 6e 20 74 68 65 20  x b-tree.in the 
6390: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f  database file fo
63a0: 72 20 65 61 63 68 20 69 6e 64 65 78 20 69 6e 20  r each index in 
63b0: 74 68 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c  the schema, incl
63c0: 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e  uding implied in
63d0: 64 65 78 65 73 0a 63 72 65 61 74 65 64 20 62 79  dexes.created by
63e0: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73   uniqueness cons
63f0: 74 72 61 69 6e 74 73 2e 20 20 54 68 65 72 65 20  traints.  There 
6400: 61 72 65 20 6e 6f 20 62 2d 74 72 65 65 73 20 61  are no b-trees a
6410: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 5b  ssociated with.[
6420: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e  virtual tables].
6430: 20 20 53 70 65 63 69 66 69 63 20 76 69 72 74 75    Specific virtu
6440: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
6450: 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 6d  ntations might m
6460: 61 6b 65 20 75 73 65 0a 6f 66 20 5b 73 68 61 64  ake use.of [shad
6470: 6f 77 20 74 61 62 6c 65 73 5d 20 66 6f 72 20 73  ow tables] for s
6480: 74 6f 72 61 67 65 2c 20 62 75 74 20 74 68 6f 73  torage, but thos
6490: 65 20 73 68 61 64 6f 77 20 74 61 62 6c 65 73 20  e shadow tables 
64a0: 77 69 6c 6c 20 68 61 76 65 20 73 65 70 61 72 61  will have separa
64b0: 74 65 0a 65 6e 74 72 69 65 73 20 69 6e 20 74 68  te.entries in th
64c0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
64d0: 61 2e 20 20 5b 57 49 54 48 4f 55 54 20 52 4f 57  a.  [WITHOUT ROW
64e0: 49 44 5d 20 74 61 62 6c 65 73 20 75 73 65 20 69  ID] tables use i
64f0: 6e 64 65 78 20 62 2d 74 72 65 65 73 0a 72 61 74  ndex b-trees.rat
6500: 68 65 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65  her than a table
6510: 20 62 2d 74 72 65 65 73 2c 20 73 6f 20 74 68 65   b-trees, so the
6520: 72 65 20 69 73 20 6f 6e 65 0a 69 6e 64 65 78 20  re is one.index 
6530: 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 64 61  b-tree in the da
6540: 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
6550: 65 61 63 68 20 5b 57 49 54 48 4f 55 54 20 52 4f  each [WITHOUT RO
6560: 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20  WID] table..The 
6570: 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e  b-tree correspon
6580: 64 69 6e 67 20 74 6f 20 74 68 65 20 73 71 6c 69  ding to the sqli
6590: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
65a0: 69 73 20 61 6c 77 61 79 73 20 61 20 74 61 62 6c  is always a tabl
65b0: 65 0a 62 2d 74 72 65 65 20 61 6e 64 20 61 6c 77  e.b-tree and alw
65c0: 61 79 73 20 68 61 73 20 61 20 72 6f 6f 74 20 70  ays has a root p
65d0: 61 67 65 20 6f 66 20 31 2e 0a 54 68 65 20 73 71  age of 1..The sq
65e0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
65f0: 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  e contains the r
6600: 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
6610: 66 6f 72 20 65 76 65 72 79 20 6f 74 68 65 72 20  for every other 
6620: 0a 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78  .table and index
6630: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
6640: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45   file.</p>..<p>E
6650: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 20 74  ach entry in a t
6660: 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e 73  able b-tree cons
6670: 69 73 74 73 20 6f 66 20 61 20 36 34 2d 62 69 74  ists of a 64-bit
6680: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
6690: 6b 65 79 0a 61 6e 64 20 75 70 20 74 6f 20 32 31  key.and up to 21
66a0: 34 37 34 38 33 36 34 37 20 62 79 74 65 73 20 6f  47483647 bytes o
66b0: 66 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  f arbitrary data
66c0: 2e 20 20 28 54 68 65 20 6b 65 79 20 6f 66 20 61  .  (The key of a
66d0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 0a 63 6f   table b-tree.co
66e0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
66f0: 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20   [rowid] of the 
6700: 53 51 4c 20 74 61 62 6c 65 20 74 68 61 74 20 74  SQL table that t
6710: 68 65 20 62 2d 74 72 65 65 20 69 6d 70 6c 65 6d  he b-tree implem
6720: 65 6e 74 73 2e 29 0a 49 6e 74 65 72 69 6f 72 20  ents.).Interior 
6730: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68 6f  table b-trees ho
6740: 6c 64 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e 64  ld only keys and
6750: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 69   pointers to chi
6760: 6c 64 72 65 6e 2e 0a 41 6c 6c 20 64 61 74 61 20  ldren..All data 
6770: 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  is contained in 
6780: 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65  the table b-tree
6790: 20 6c 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c 70   leaves.</p>..<p
67a0: 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61  >Each entry in a
67b0: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 63  n index b-tree c
67c0: 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72  onsists of an ar
67d0: 62 69 74 72 61 72 79 20 6b 65 79 20 6f 66 20 75  bitrary key of u
67e0: 70 0a 74 6f 20 32 31 34 37 34 38 33 36 34 37 20  p.to 2147483647 
67f0: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 20  bytes in length 
6800: 61 6e 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70 3e  and no data.</p>
6810: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
6820: 6e 74 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64 20  nt cell_payload 
6830: 7b 63 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c 2f  {cell payload}</
6840: 74 63 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20 74  tcl>.<p>Define t
6850: 68 65 20 22 70 61 79 6c 6f 61 64 22 20 6f 66 20  he "payload" of 
6860: 61 20 63 65 6c 6c 20 74 6f 20 62 65 20 74 68 65  a cell to be the
6870: 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74   arbitrary lengt
6880: 68 20 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68 65  h section.of the
6890: 20 63 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20 69   cell.  For an i
68a0: 6e 64 65 78 20 62 2d 74 72 65 65 2c 20 74 68 65  ndex b-tree, the
68b0: 20 6b 65 79 20 69 73 20 61 6c 77 61 79 73 20 61   key is always a
68c0: 72 62 69 74 72 61 72 79 20 69 6e 20 6c 65 6e 67  rbitrary in leng
68d0: 74 68 0a 61 6e 64 20 68 65 6e 63 65 20 74 68 65  th.and hence the
68e0: 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20   payload is the 
68f0: 6b 65 79 2e 20 20 54 68 65 72 65 20 61 72 65 20  key.  There are 
6900: 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e  no arbitrary len
6910: 67 74 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e 20  gth elements.in 
6920: 74 68 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e 74  the cells of int
6930: 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72  erior table b-tr
6940: 65 65 20 70 61 67 65 73 20 61 6e 64 20 73 6f 20  ee pages and so 
6950: 74 68 6f 73 65 20 63 65 6c 6c 73 20 68 61 76 65  those cells have
6960: 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54 61   no.payload.  Ta
6970: 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20  ble b-tree leaf 
6980: 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 20 61 72  pages contain ar
6990: 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20 63  bitrary length c
69a0: 6f 6e 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66 6f  ontent and.so fo
69b0: 72 20 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73 65  r cells on those
69c0: 20 70 61 67 65 73 20 74 68 65 20 70 61 79 6c 6f   pages the paylo
69d0: 61 64 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e  ad is the conten
69e0: 74 2e 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 73  t..<p>When the s
69f0: 69 7a 65 20 6f 66 20 70 61 79 6c 6f 61 64 20 66  ize of payload f
6a00: 6f 72 20 61 20 63 65 6c 6c 20 65 78 63 65 65 64  or a cell exceed
6a10: 73 20 61 20 63 65 72 74 61 69 6e 20 74 68 72 65  s a certain thre
6a20: 73 68 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65 66  shold (to.be def
6a30: 69 6e 65 64 20 6c 61 74 65 72 29 20 74 68 65 6e  ined later) then
6a40: 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   only the first 
6a50: 66 65 77 20 62 79 74 65 73 20 6f 66 20 74 68 65  few bytes of the
6a60: 20 70 61 79 6c 6f 61 64 0a 61 72 65 20 73 74 6f   payload.are sto
6a70: 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65  red on the b-tre
6a80: 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20 62  e page and the b
6a90: 61 6c 61 6e 63 65 20 69 73 20 73 74 6f 72 65 64  alance is stored
6aa0: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   in a linked lis
6ab0: 74 0a 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76 65  t.of content ove
6ac0: 72 66 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70 3e  rflow pages.</p>
6ad0: 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61  ..<p>A b-tree pa
6ae0: 67 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  ge is divided in
6af0: 74 6f 20 72 65 67 69 6f 6e 73 20 69 6e 20 74 68  to regions in th
6b00: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64 65  e following orde
6b10: 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68 65  r:..<ol>.<li>The
6b20: 20 31 30 30 2d 62 79 74 65 20 64 61 74 61 62 61   100-byte databa
6b30: 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 28  se file header (
6b40: 66 6f 75 6e 64 20 6f 6e 20 70 61 67 65 20 31 20  found on page 1 
6b50: 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38 20  only).<li>The 8 
6b60: 6f 72 20 31 32 20 62 79 74 65 20 62 2d 74 72 65  or 12 byte b-tre
6b70: 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 3c 6c  e page header.<l
6b80: 69 3e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74  i>The cell point
6b90: 65 72 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e 61  er array.<li>Una
6ba0: 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 0a 3c  llocated space.<
6bb0: 6c 69 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e 74  li>The cell cont
6bc0: 65 6e 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68 65  ent area.<li>The
6bd0: 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e   reserved region
6be0: 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70  ..</ol>.</p>..<p
6bf0: 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64 61  >The 100-byte da
6c00: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
6c10: 65 72 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c 79  er is found only
6c20: 20 6f 6e 20 70 61 67 65 20 31 2c 20 77 68 69 63   on page 1, whic
6c30: 68 20 69 73 0a 61 6c 77 61 79 73 20 61 20 74 61  h is.always a ta
6c40: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ble b-tree page.
6c50: 20 20 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74 72    All other b-tr
6c60: 65 65 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ee pages in the 
6c70: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 6f 6d  database file.om
6c80: 69 74 20 74 68 69 73 20 31 30 30 2d 62 79 74 65  it this 100-byte
6c90: 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70   header.</p>..<p
6ca0: 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72 65  >The reserved re
6cb0: 67 69 6f 6e 20 69 73 20 61 6e 20 61 72 65 61 20  gion is an area 
6cc0: 6f 66 20 75 6e 75 73 65 64 20 73 70 61 63 65 20  of unused space 
6cd0: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65 76  at the end of ev
6ce0: 65 72 79 0a 70 61 67 65 20 28 65 78 63 65 70 74  ery.page (except
6cf0: 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61 67   the locking pag
6d00: 65 29 20 74 68 61 74 20 65 78 74 65 6e 73 69 6f  e) that extensio
6d10: 6e 73 20 63 61 6e 20 75 73 65 20 74 6f 20 68 6f  ns can use to ho
6d20: 6c 64 20 70 65 72 2d 70 61 67 65 0a 69 6e 66 6f  ld per-page.info
6d30: 72 6d 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20 73  rmation.  ^The s
6d40: 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65 72  ize of the reser
6d50: 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 64 65  ved region is de
6d60: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
6d70: 6f 6e 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e 65  one-byte.unsigne
6d80: 64 20 69 6e 74 65 67 65 72 20 66 6f 75 6e 64 20  d integer found 
6d90: 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20  at an offset of 
6da0: 32 30 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  20 into the data
6db0: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
6dc0: 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  ..The size of th
6dd0: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
6de0: 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 7a 65 72  n is usually zer
6df0: 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 62  o.</p>..<p>The b
6e00: 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65  -tree page heade
6e10: 72 20 69 73 20 38 20 62 79 74 65 73 20 69 6e 20  r is 8 bytes in 
6e20: 73 69 7a 65 20 66 6f 72 20 6c 65 61 66 20 70 61  size for leaf pa
6e30: 67 65 73 20 61 6e 64 20 31 32 0a 62 79 74 65 73  ges and 12.bytes
6e40: 20 66 6f 72 20 69 6e 74 65 72 69 6f 72 20 70 61   for interior pa
6e50: 67 65 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69 62  ges.  All multib
6e60: 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68  yte values in th
6e70: 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 61 72  e page header.ar
6e80: 65 20 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54 68  e big-endian..Th
6e90: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65  e b-tree page he
6ea0: 61 64 65 72 20 69 73 20 63 6f 6d 70 6f 73 65 64  ader is composed
6eb0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
6ec0: 67 20 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c  g fields:</p>..<
6ed0: 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65  center>.<i>B-tre
6ee0: 65 20 50 61 67 65 20 48 65 61 64 65 72 20 46 6f  e Page Header Fo
6ef0: 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
6f00: 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64  ble border=1 wid
6f10: 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74  th="80%">.<tr><t
6f20: 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
6f30: 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
6f40: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
6f50: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6f60: 30 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  0<td align=cente
6f70: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74  r valign=top>1<t
6f80: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54  d align=left>.^T
6f90: 68 65 20 6f 6e 65 2d 62 79 74 65 20 66 6c 61 67  he one-byte flag
6fa0: 20 61 74 20 6f 66 66 73 65 74 20 30 20 69 6e 64   at offset 0 ind
6fb0: 69 63 61 74 69 6e 67 20 74 68 65 20 62 2d 74 72  icating the b-tr
6fc0: 65 65 20 70 61 67 65 20 74 79 70 65 2e 3c 75 6c  ee page type.<ul
6fd0: 3e 0a 3c 6c 69 3e 5e 41 20 76 61 6c 75 65 20 6f  >.<li>^A value o
6fe0: 66 20 32 20 28 30 78 30 32 29 20 6d 65 61 6e 73  f 2 (0x02) means
6ff0: 20 74 68 65 20 70 61 67 65 20 69 73 20 61 6e 20   the page is an 
7000: 69 6e 74 65 72 69 6f 72 20 69 6e 64 65 78 20 62  interior index b
7010: 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 6c 69 3e  -tree page..<li>
7020: 5e 41 20 76 61 6c 75 65 20 6f 66 20 35 20 28 30  ^A value of 5 (0
7030: 78 30 35 29 20 6d 65 61 6e 73 20 74 68 65 20 70  x05) means the p
7040: 61 67 65 20 69 73 20 61 6e 20 69 6e 74 65 72 69  age is an interi
7050: 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  or table b-tree 
7060: 70 61 67 65 2e 0a 3c 6c 69 3e 5e 41 20 76 61 6c  page..<li>^A val
7070: 75 65 20 6f 66 20 31 30 20 28 30 78 30 61 29 20  ue of 10 (0x0a) 
7080: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
7090: 73 20 61 20 6c 65 61 66 20 69 6e 64 65 78 20 62  s a leaf index b
70a0: 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 6c 69 3e  -tree page..<li>
70b0: 5e 41 20 76 61 6c 75 65 20 6f 66 20 31 33 20 28  ^A value of 13 (
70c0: 30 78 30 64 29 20 6d 65 61 6e 73 20 74 68 65 20  0x0d) means the 
70d0: 70 61 67 65 20 69 73 20 61 20 6c 65 61 66 20 74  page is a leaf t
70e0: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
70f0: 2e 3c 2f 75 6c 3e 0a 5e 41 6e 79 20 6f 74 68 65  .</ul>.^Any othe
7100: 72 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  r value for the 
7110: 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65  b-tree page type
7120: 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 74   is an error..<t
7130: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
7140: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c  er valign=top>1<
7150: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7160: 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20  valign=top>2<td 
7170: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65  align=left>.^The
7180: 20 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65   two-byte intege
7190: 72 20 61 74 20 6f 66 66 73 65 74 20 31 20 67 69  r at offset 1 gi
71a0: 76 65 73 20 74 68 65 20 73 74 61 72 74 20 6f 66  ves the start of
71b0: 20 74 68 65 0a 66 69 72 73 74 20 66 72 65 65 62   the.first freeb
71c0: 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 70 61 67 65  lock on the page
71d0: 2c 20 6f 72 20 69 73 20 7a 65 72 6f 20 69 66 20  , or is zero if 
71e0: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65  there are no fre
71f0: 65 62 6c 6f 63 6b 73 2e 0a 3c 74 72 3e 3c 74 64  eblocks..<tr><td
7200: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7210: 6c 69 67 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c  lign=top>3<td al
7220: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
7230: 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e  n=top>2<td align
7240: 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f 2d  =left>.^The two-
7250: 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20  byte integer at 
7260: 6f 66 66 73 65 74 20 33 20 67 69 76 65 73 20 74  offset 3 gives t
7270: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c  he number of cel
7280: 6c 73 20 6f 6e 20 74 68 65 20 70 61 67 65 2e 0a  ls on the page..
7290: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
72a0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
72b0: 35 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  5<td align=cente
72c0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74  r valign=top>2<t
72d0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28  d align=left>.^(
72e0: 54 68 65 20 74 77 6f 2d 62 79 74 65 20 69 6e 74  The two-byte int
72f0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35  eger at offset 5
7300: 20 64 65 73 69 67 6e 61 74 65 73 20 74 68 65 20   designates the 
7310: 73 74 61 72 74 20 6f 66 20 74 68 65 20 63 65 6c  start of the cel
7320: 6c 20 63 6f 6e 74 65 6e 74 0a 61 72 65 61 2e 20  l content.area. 
7330: 20 41 20 7a 65 72 6f 20 76 61 6c 75 65 20 66 6f   A zero value fo
7340: 72 20 74 68 69 73 20 69 6e 74 65 67 65 72 20 69  r this integer i
7350: 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  s interpreted as
7360: 20 36 35 35 33 36 2e 29 5e 0a 3c 74 72 3e 3c 74   65536.)^.<tr><t
7370: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
7380: 61 6c 69 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61  align=top>7<td a
7390: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
73a0: 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67  gn=top>1<td alig
73b0: 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 6f 6e 65  n=left>.^The one
73c0: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74  -byte integer at
73d0: 20 6f 66 66 73 65 74 20 37 20 67 69 76 65 73 20   offset 7 gives 
73e0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72  the number of fr
73f0: 61 67 6d 65 6e 74 65 64 20 66 72 65 65 0a 62 79  agmented free.by
7400: 74 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63  tes within the c
7410: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
7420: 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  ..<tr><td align=
7430: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7440: 70 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  p>8<td align=cen
7450: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34  ter valign=top>4
7460: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
7470: 5e 28 54 68 65 20 66 6f 75 72 2d 62 79 74 65 20  ^(The four-byte 
7480: 70 61 67 65 20 6e 75 6d 62 65 72 20 61 74 20 6f  page number at o
7490: 66 66 73 65 74 20 38 20 69 73 20 74 68 65 20 72  ffset 8 is the r
74a0: 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65  ight-most pointe
74b0: 72 2e 20 20 54 68 69 73 0a 76 61 6c 75 65 20 61  r.  This.value a
74c0: 70 70 65 61 72 73 20 69 6e 20 74 68 65 20 68 65  ppears in the he
74d0: 61 64 65 72 20 6f 66 20 69 6e 74 65 72 69 6f 72  ader of interior
74e0: 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e   b-tree pages on
74f0: 6c 79 20 61 6e 64 20 69 73 20 6f 6d 69 74 74 65  ly and is omitte
7500: 64 20 66 72 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72  d from.all other
7510: 20 70 61 67 65 73 2e 29 5e 0a 3c 2f 74 61 62 6c   pages.)^.</tabl
7520: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e  e></center>..<p>
7530: 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65  ^The cell pointe
7540: 72 20 61 72 72 61 79 20 6f 66 20 61 20 62 2d 74  r array of a b-t
7550: 72 65 65 20 70 61 67 65 20 69 6d 6d 65 64 69 61  ree page immedia
7560: 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65  tely follows the
7570: 20 62 2d 74 72 65 65 0a 70 61 67 65 20 68 65 61   b-tree.page hea
7580: 64 65 72 2e 20 20 4c 65 74 20 4b 20 62 65 20 74  der.  Let K be t
7590: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c  he number of cel
75a0: 6c 73 20 6f 6e 20 74 68 65 20 62 74 72 65 65 2e  ls on the btree.
75b0: 20 20 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e    ^The cell poin
75c0: 74 65 72 0a 61 72 72 61 79 20 63 6f 6e 73 69 73  ter.array consis
75d0: 74 73 20 6f 66 20 4b 20 32 2d 62 79 74 65 20 69  ts of K 2-byte i
75e0: 6e 74 65 67 65 72 20 6f 66 66 73 65 74 73 20 74  nteger offsets t
75f0: 6f 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  o the cell conte
7600: 6e 74 73 2e 20 20 5e 54 68 65 0a 63 65 6c 6c 20  nts.  ^The.cell 
7610: 70 6f 69 6e 74 65 72 73 20 61 72 65 20 61 72 72  pointers are arr
7620: 61 6e 67 65 64 20 69 6e 20 6b 65 79 20 6f 72 64  anged in key ord
7630: 65 72 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73  er with left-mos
7640: 74 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c  t cell (the cell
7650: 20 77 69 74 68 20 74 68 65 0a 73 6d 61 6c 6c 65   with the.smalle
7660: 73 74 20 6b 65 79 29 20 66 69 72 73 74 20 61 6e  st key) first an
7670: 64 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  d the right-most
7680: 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20   cell (the cell 
7690: 77 69 74 68 20 74 68 65 20 6c 61 72 67 65 73 74  with the largest
76a0: 0a 6b 65 79 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a  .key) last.</p>.
76b0: 0a 3c 70 3e 43 65 6c 6c 20 63 6f 6e 74 65 6e 74  .<p>Cell content
76c0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
76d0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 72  e cell content r
76e0: 65 67 69 6f 6e 20 6f 66 20 74 68 65 20 62 2d 74  egion of the b-t
76f0: 72 65 65 20 70 61 67 65 2e 0a 53 51 4c 69 74 65  ree page..SQLite
7700: 20 73 74 72 69 76 65 73 20 74 6f 20 70 6c 61 63   strives to plac
7710: 65 20 63 65 6c 6c 73 20 61 73 20 66 61 72 20 74  e cells as far t
7720: 6f 77 61 72 64 20 74 68 65 20 65 6e 64 20 6f 66  oward the end of
7730: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
7740: 20 61 73 0a 69 74 20 63 61 6e 2c 20 69 6e 20 6f   as.it can, in o
7750: 72 64 65 72 20 74 6f 20 6c 65 61 76 65 20 73 70  rder to leave sp
7760: 61 63 65 20 66 6f 72 20 66 75 74 75 72 65 20 67  ace for future g
7770: 72 6f 77 74 68 20 6f 66 20 74 68 65 20 63 65 6c  rowth of the cel
7780: 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 2e  l pointer array.
7790: 0a 54 68 65 20 61 72 65 61 20 69 6e 20 62 65 74  .The area in bet
77a0: 77 65 65 6e 20 74 68 65 20 6c 61 73 74 20 63 65  ween the last ce
77b0: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
77c0: 20 65 6e 74 72 79 20 61 6e 64 20 74 68 65 20 62   entry and the b
77d0: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 74 68 65 20  eginning of.the 
77e0: 66 69 72 73 74 20 63 65 6c 6c 20 69 73 20 74 68  first cell is th
77f0: 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65  e unallocated re
7800: 67 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  gion..</p>..<p>^
7810: 49 66 20 61 20 70 61 67 65 20 63 6f 6e 74 61 69  If a page contai
7820: 6e 73 20 6e 6f 20 63 65 6c 6c 73 20 28 77 68 69  ns no cells (whi
7830: 63 68 20 69 73 20 6f 6e 6c 79 20 70 6f 73 73 69  ch is only possi
7840: 62 6c 65 20 66 6f 72 20 61 20 72 6f 6f 74 20 70  ble for a root p
7850: 61 67 65 0a 6f 66 20 61 20 74 61 62 6c 65 20 74  age.of a table t
7860: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  hat contains no 
7870: 72 6f 77 73 29 20 74 68 65 6e 20 74 68 65 20 6f  rows) then the o
7880: 66 66 73 65 74 20 74 6f 20 74 68 65 0a 63 65 6c  ffset to the.cel
7890: 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 20 77  l content area w
78a0: 69 6c 6c 20 65 71 75 61 6c 20 74 68 65 20 70 61  ill equal the pa
78b0: 67 65 20 73 69 7a 65 20 6d 69 6e 75 73 20 74 68  ge size minus th
78c0: 65 20 62 79 74 65 73 20 6f 66 20 72 65 73 65 72  e bytes of reser
78d0: 76 65 64 20 73 70 61 63 65 2e 0a 5e 28 49 66 20  ved space..^(If 
78e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
78f0: 73 20 61 20 36 35 35 33 36 2d 62 79 74 65 20 70  s a 65536-byte p
7900: 61 67 65 20 73 69 7a 65 20 61 6e 64 20 74 68 65  age size and the
7910: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20   reserved space 
7920: 69 73 20 7a 65 72 6f 0a 28 74 68 65 20 75 73 75  is zero.(the usu
7930: 61 6c 20 76 61 6c 75 65 20 66 6f 72 20 72 65 73  al value for res
7940: 65 72 76 65 64 20 73 70 61 63 65 29 20 74 68 65  erved space) the
7950: 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  n the cell conte
7960: 6e 74 20 6f 66 66 73 65 74 20 6f 66 20 61 6e 0a  nt offset of an.
7970: 65 6d 70 74 79 20 70 61 67 65 20 77 61 6e 74 73  empty page wants
7980: 20 74 6f 20 62 65 20 36 35 35 33 36 2e 20 20 0a   to be 65536.  .
7990: 48 6f 77 65 76 65 72 2c 20 74 68 61 74 20 69 6e  However, that in
79a0: 74 65 67 65 72 20 69 73 20 74 6f 6f 20 6c 61 72  teger is too lar
79b0: 67 65 20 74 6f 20 62 65 20 73 74 6f 72 65 64 20  ge to be stored 
79c0: 69 6e 20 61 0a 32 2d 62 79 74 65 20 75 6e 73 69  in a.2-byte unsi
79d0: 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 73 6f  gned integer, so
79e0: 20 61 20 76 61 6c 75 65 20 6f 66 20 30 20 69 73   a value of 0 is
79f0: 20 75 73 65 64 20 69 6e 20 69 74 73 20 70 6c 61   used in its pla
7a00: 63 65 2e 29 5e 0a 0a 3c 70 3e 41 20 66 72 65 65  ce.)^..<p>A free
7a10: 62 6c 6f 63 6b 20 69 73 20 61 20 73 74 72 75 63  block is a struc
7a20: 74 75 72 65 20 75 73 65 64 20 74 6f 20 69 64 65  ture used to ide
7a30: 6e 74 69 66 79 20 75 6e 61 6c 6c 6f 63 61 74 65  ntify unallocate
7a40: 64 20 73 70 61 63 65 20 77 69 74 68 69 6e 0a 61  d space within.a
7a50: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 46   b-tree page.  F
7a60: 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 6f 72  reeblocks are or
7a70: 67 61 6e 69 7a 65 64 20 61 73 20 61 20 63 68 61  ganized as a cha
7a80: 69 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  in.  ^The first 
7a90: 32 20 62 79 74 65 73 20 6f 66 0a 61 20 66 72 65  2 bytes of.a fre
7aa0: 65 62 6c 6f 63 6b 20 61 72 65 20 61 20 62 69 67  eblock are a big
7ab0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
7ac0: 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
7ad0: 73 65 74 20 69 6e 20 74 68 65 20 62 2d 74 72 65  set in the b-tre
7ae0: 65 20 70 61 67 65 0a 6f 66 20 74 68 65 20 6e 65  e page.of the ne
7af0: 78 74 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20  xt freeblock in 
7b00: 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65  the chain, or ze
7b10: 72 6f 20 69 66 20 74 68 65 20 66 72 65 65 62 6c  ro if the freebl
7b20: 6f 63 6b 20 69 73 20 74 68 65 20 6c 61 73 74 20  ock is the last 
7b30: 6f 6e 0a 74 68 65 20 63 68 61 69 6e 2e 20 20 5e  on.the chain.  ^
7b40: 54 68 65 20 74 68 69 72 64 20 61 6e 64 20 66 6f  The third and fo
7b50: 75 72 74 68 20 62 79 74 65 73 20 6f 66 20 65 61  urth bytes of ea
7b60: 63 68 20 66 72 65 65 62 6c 6f 63 6b 20 66 6f 72  ch freeblock for
7b70: 6d 0a 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  m.a big-endian i
7b80: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
7b90: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
7ba0: 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20 62 79 74  freeblock in byt
7bb0: 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 74 68  es, including.th
7bc0: 65 20 34 2d 62 79 74 65 20 68 65 61 64 65 72 2e  e 4-byte header.
7bd0: 20 20 5e 46 72 65 65 62 6c 6f 63 6b 73 20 61 72    ^Freeblocks ar
7be0: 65 20 61 6c 77 61 79 73 20 63 6f 6e 6e 65 63 74  e always connect
7bf0: 65 64 20 69 6e 20 6f 72 64 65 72 20 0a 6f 66 20  ed in order .of 
7c00: 69 6e 63 72 65 61 73 69 6e 67 20 6f 66 66 73 65  increasing offse
7c10: 74 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20  t.  ^The second 
7c20: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74  field of the b-t
7c30: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 20  ree page header 
7c40: 69 73 20 74 68 65 0a 6f 66 66 73 65 74 20 6f 66  is the.offset of
7c50: 20 74 68 65 20 66 69 72 73 74 20 66 72 65 65 62   the first freeb
7c60: 6c 6f 63 6b 2c 20 6f 72 20 7a 65 72 6f 20 69 66  lock, or zero if
7c70: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72   there are no fr
7c80: 65 65 62 6c 6f 63 6b 73 20 6f 6e 20 74 68 65 0a  eeblocks on the.
7c90: 70 61 67 65 2e 20 20 5e 49 6e 20 61 20 77 65 6c  page.  ^In a wel
7ca0: 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65 65 20  l-formed b-tree 
7cb0: 70 61 67 65 2c 20 74 68 65 72 65 20 77 69 6c 6c  page, there will
7cc0: 20 61 6c 77 61 79 73 20 62 65 20 61 74 20 6c 65   always be at le
7cd0: 61 73 74 20 6f 6e 65 20 63 65 6c 6c 0a 62 65 66  ast one cell.bef
7ce0: 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 66 72  ore the first fr
7cf0: 65 65 62 6c 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70  eeblock.</p>..<p
7d00: 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 72 65 71  >A freeblock req
7d10: 75 69 72 65 73 20 61 74 20 6c 65 61 73 74 20 34  uires at least 4
7d20: 20 62 79 74 65 73 20 6f 66 20 73 70 61 63 65 2e   bytes of space.
7d30: 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e    If there is an
7d40: 20 69 73 6f 6c 61 74 65 64 0a 67 72 6f 75 70 20   isolated.group 
7d50: 6f 66 20 31 2c 20 32 2c 20 6f 72 20 33 20 75 6e  of 1, 2, or 3 un
7d60: 75 73 65 64 20 62 79 74 65 73 20 77 69 74 68 69  used bytes withi
7d70: 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  n the cell conte
7d80: 6e 74 20 61 72 65 61 2c 20 74 68 6f 73 65 20 62  nt area, those b
7d90: 79 74 65 73 0a 63 6f 6d 70 72 69 73 65 20 61 20  ytes.comprise a 
7da0: 66 72 61 67 6d 65 6e 74 2e 20 20 5e 54 68 65 20  fragment.  ^The 
7db0: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
7dc0: 62 79 74 65 73 20 69 6e 20 61 6c 6c 20 66 72 61  bytes in all fra
7dd0: 67 6d 65 6e 74 73 20 69 73 20 73 74 6f 72 65 64  gments is stored
7de0: 0a 69 6e 20 74 68 65 20 66 69 66 74 68 20 66 69  .in the fifth fi
7df0: 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65  eld of the b-tre
7e00: 65 20 70 61 67 65 20 68 65 61 64 65 72 2e 20 20  e page header.  
7e10: 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  ^In a well-forme
7e20: 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74  d b-tree page,.t
7e30: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
7e40: 6f 66 20 62 79 74 65 73 20 69 6e 20 66 72 61 67  of bytes in frag
7e50: 6d 65 6e 74 73 20 6d 61 79 20 6e 6f 74 20 65 78  ments may not ex
7e60: 63 65 65 64 20 36 30 2e 3c 2f 70 3e 0a 0a 3c 70  ceed 60.</p>..<p
7e70: 3e 54 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e  >The total amoun
7e80: 74 20 6f 66 20 66 72 65 65 20 73 70 61 63 65 20  t of free space 
7e90: 6f 6e 20 61 20 62 2d 74 72 65 65 20 70 61 67 65  on a b-tree page
7ea0: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
7eb0: 20 73 69 7a 65 0a 6f 66 20 74 68 65 20 75 6e 61   size.of the una
7ec0: 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 20  llocated region 
7ed0: 70 6c 75 73 20 74 68 65 20 74 6f 74 61 6c 20 73  plus the total s
7ee0: 69 7a 65 20 6f 66 20 61 6c 6c 20 66 72 65 65 62  ize of all freeb
7ef0: 6c 6f 63 6b 73 20 70 6c 75 73 20 74 68 65 0a 6e  locks plus the.n
7f00: 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e  umber of fragmen
7f10: 74 65 64 20 66 72 65 65 20 62 79 74 65 73 2e 20  ted free bytes. 
7f20: 20 5e 53 51 4c 69 74 65 20 6d 61 79 20 66 72 6f   ^SQLite may fro
7f30: 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 72  m time to time r
7f40: 65 6f 72 67 61 6e 69 7a 65 0a 61 20 62 2d 74 72  eorganize.a b-tr
7f50: 65 65 20 70 61 67 65 20 73 6f 20 74 68 61 74 20  ee page so that 
7f60: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65  there are no fre
7f70: 65 62 6c 6f 63 6b 73 20 6f 72 20 66 72 61 67 6d  eblocks or fragm
7f80: 65 6e 74 20 62 79 74 65 73 2c 20 61 6c 6c 0a 75  ent bytes, all.u
7f90: 6e 75 73 65 64 20 62 79 74 65 73 20 61 72 65 20  nused bytes are 
7fa0: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
7fb0: 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61   unallocated spa
7fc0: 63 65 20 72 65 67 69 6f 6e 2c 20 61 6e 64 20 61  ce region, and a
7fd0: 6c 6c 0a 63 65 6c 6c 73 20 61 72 65 20 70 61 63  ll.cells are pac
7fe0: 6b 65 64 20 74 69 67 68 74 6c 79 20 61 74 20 74  ked tightly at t
7ff0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61  he end of the pa
8000: 67 65 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  ge.  This is cal
8010: 6c 65 64 20 0a 22 64 65 66 72 61 67 6d 65 6e 74  led ."defragment
8020: 69 6e 67 22 20 74 68 65 20 62 2d 74 72 65 65 20  ing" the b-tree 
8030: 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  page.</p>..<tcl>
8040: 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 69  hd_fragment vari
8050: 6e 74 20 7b 76 61 72 69 61 62 6c 65 2d 6c 65 6e  nt {variable-len
8060: 67 74 68 20 69 6e 74 65 67 65 72 7d 20 7b 76 61  gth integer} {va
8070: 72 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  rint}</tcl>..<p>
8080: 41 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  A variable-lengt
8090: 68 20 69 6e 74 65 67 65 72 20 6f 72 20 22 76 61  h integer or "va
80a0: 72 69 6e 74 22 20 69 73 20 61 20 73 74 61 74 69  rint" is a stati
80b0: 63 20 48 75 66 66 6d 61 6e 20 65 6e 63 6f 64 69  c Huffman encodi
80c0: 6e 67 0a 6f 66 20 36 34 2d 62 69 74 20 74 77 6f  ng.of 64-bit two
80d0: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
80e0: 65 67 65 72 73 20 74 68 61 74 20 75 73 65 73 20  egers that uses 
80f0: 6c 65 73 73 20 73 70 61 63 65 20 66 6f 72 20 73  less space for s
8100: 6d 61 6c 6c 20 70 6f 73 69 74 69 76 65 20 0a 76  mall positive .v
8110: 61 6c 75 65 73 2e 20 0a 41 20 76 61 72 69 6e 74  alues. .A varint
8120: 20 69 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e   is between 1 an
8130: 64 20 39 20 62 79 74 65 73 20 69 6e 20 6c 65 6e  d 9 bytes in len
8140: 67 74 68 2e 20 20 54 68 65 20 76 61 72 69 6e 74  gth.  The varint
8150: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 65 69 74   consists of eit
8160: 68 65 72 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  her.zero or more
8170: 20 62 79 74 65 73 20 77 68 69 63 68 20 68 61 76   bytes which hav
8180: 65 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  e the high-order
8190: 20 62 69 74 20 73 65 74 20 66 6f 6c 6c 6f 77 65   bit set followe
81a0: 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 62 79  d by a single by
81b0: 74 65 0a 77 69 74 68 20 74 68 65 20 68 69 67 68  te.with the high
81c0: 2d 6f 72 64 65 72 20 62 69 74 20 63 6c 65 61 72  -order bit clear
81d0: 2c 20 6f 72 20 6e 69 6e 65 20 62 79 74 65 73 2c  , or nine bytes,
81e0: 20 77 68 69 63 68 65 76 65 72 20 69 73 20 73 68   whichever is sh
81f0: 6f 72 74 65 72 2e 0a 54 68 65 20 6c 6f 77 65 72  orter..The lower
8200: 20 73 65 76 65 6e 20 62 69 74 73 20 6f 66 20 65   seven bits of e
8210: 61 63 68 20 6f 66 20 74 68 65 20 66 69 72 73 74  ach of the first
8220: 20 65 69 67 68 74 20 62 79 74 65 73 20 61 6e 64   eight bytes and
8230: 20 61 6c 6c 20 38 20 62 69 74 73 20 6f 66 0a 74   all 8 bits of.t
8240: 68 65 20 6e 69 6e 74 68 20 62 79 74 65 20 61 72  he ninth byte ar
8250: 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 6e 73  e used to recons
8260: 74 72 75 63 74 20 74 68 65 20 36 34 2d 62 69 74  truct the 64-bit
8270: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
8280: 20 69 6e 74 65 67 65 72 2e 0a 56 61 72 69 6e 74   integer..Varint
8290: 73 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e  s are big-endian
82a0: 3a 20 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f  : bits taken fro
82b0: 6d 20 74 68 65 20 65 61 72 6c 69 65 72 20 62 79  m the earlier by
82c0: 74 65 20 6f 66 20 74 68 65 20 76 61 72 69 6e 74  te of the varint
82d0: 0a 61 72 65 20 74 68 65 20 6d 6f 72 65 20 73 69  .are the more si
82e0: 67 6e 69 66 69 63 61 6e 74 20 74 68 61 6e 20 62  gnificant than b
82f0: 69 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74  its taken from t
8300: 68 65 20 6c 61 74 65 72 20 62 79 74 65 73 2e 20  he later bytes. 
8310: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72  </p>..<p>The for
8320: 6d 61 74 20 6f 66 20 61 20 63 65 6c 6c 20 64 65  mat of a cell de
8330: 70 65 6e 64 73 20 6f 6e 20 77 68 69 63 68 20 6b  pends on which k
8340: 69 6e 64 20 6f 66 20 62 2d 74 72 65 65 20 70 61  ind of b-tree pa
8350: 67 65 20 74 68 65 20 63 65 6c 6c 0a 61 70 70 65  ge the cell.appe
8360: 61 72 73 20 6f 6e 2e 20 20 54 68 65 20 66 6f 6c  ars on.  The fol
8370: 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 73 68 6f  lowing table sho
8380: 77 73 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20  ws the elements 
8390: 6f 66 20 61 20 63 65 6c 6c 2c 20 69 6e 0a 6f 72  of a cell, in.or
83a0: 64 65 72 20 6f 66 20 61 70 70 65 61 72 61 6e 63  der of appearanc
83b0: 65 2c 20 66 6f 72 20 74 68 65 20 76 61 72 69 6f  e, for the vario
83c0: 75 73 20 62 2d 74 72 65 65 20 70 61 67 65 20 74  us b-tree page t
83d0: 79 70 65 73 2e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e  ypes...<dl>.<dt>
83e0: 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20  <p>Table B-Tree 
83f0: 4c 65 61 66 20 43 65 6c 6c 20 28 68 65 61 64 65  Leaf Cell (heade
8400: 72 20 30 78 30 64 29 3a 3c 2f 70 3e 3c 2f 64 74  r 0x0d):</p></dt
8410: 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c  >.<dd><p><ul>.<l
8420: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
8430: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
8440: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
8450: 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64   payload, includ
8460: 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77  ing any.overflow
8470: 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68  .<li>A varint wh
8480: 69 63 68 20 69 73 20 74 68 65 20 69 6e 74 65 67  ich is the integ
8490: 65 72 20 6b 65 79 2c 20 61 2e 6b 2e 61 2e 20 22  er key, a.k.a. "
84a0: 5b 72 6f 77 69 64 5d 22 0a 3c 6c 69 3e 54 68 65  [rowid]".<li>The
84b0: 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e   initial portion
84c0: 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20   of the payload 
84d0: 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70  that does not sp
84e0: 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a  ill to overflow.
84f0: 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62  pages..<li>A 4-b
8500: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
8510: 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62  nteger page numb
8520: 65 72 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  er for the first
8530: 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65   page of the.ove
8540: 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20  rflow page list 
8550: 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c  - omitted if all
8560: 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e   payload fits on
8570: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
8580: 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e  ..</ul></p></dd>
8590: 0a 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42  ..<dt><p>Table B
85a0: 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43  -Tree Interior C
85b0: 65 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30 35  ell (header 0x05
85c0: 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  ):</p></dt>.<dd>
85d0: 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d  <p><ul>.<li>A 4-
85e0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
85f0: 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63  page number whic
8600: 68 20 69 73 20 74 68 65 20 6c 65 66 74 20 63 68  h is the left ch
8610: 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69  ild pointer..<li
8620: 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20  >A varint which 
8630: 69 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b  is the integer k
8640: 65 79 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64  ey.</ul></p></dd
8650: 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20  >..<dt><p>Index 
8660: 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c  B-Tree Leaf Cell
8670: 20 28 68 65 61 64 65 72 20 30 78 30 61 29 3a 3c   (header 0x0a):<
8680: 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /p></dt>.<dd><p>
8690: 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e  <ul>.<li>A varin
86a0: 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74  t which is the t
86b0: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
86c0: 79 74 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c  ytes of key payl
86d0: 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61  oad, including a
86e0: 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e  ny.overflow.<li>
86f0: 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74  The initial port
8700: 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f  ion of the paylo
8710: 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  ad that does not
8720: 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c   spill to overfl
8730: 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20  ow.pages..<li>A 
8740: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
8750: 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e  n integer page n
8760: 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69  umber for the fi
8770: 72 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a  rst page of the.
8780: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69  overflow page li
8790: 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20  st - omitted if 
87a0: 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73  all payload fits
87b0: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
87c0: 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f  age..</ul></p></
87d0: 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65  dd>..<dt><p>Inde
87e0: 78 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f  x B-Tree Interio
87f0: 72 20 43 65 6c 6c 20 28 68 65 61 64 65 72 20 30  r Cell (header 0
8800: 78 30 32 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c  x02):</p></dt>.<
8810: 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41  dd><p><ul>.<li>A
8820: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
8830: 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 20 77  an page number w
8840: 68 69 63 68 20 69 73 20 74 68 65 20 6c 65 66 74  hich is the left
8850: 20 63 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a   child pointer..
8860: 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69  <li>A varint whi
8870: 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ch is the total 
8880: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
8890: 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20  of key payload, 
88a0: 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76  including any.ov
88b0: 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69  erflow.<li>The i
88c0: 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f  nitial portion o
88d0: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68  f the payload th
88e0: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c  at does not spil
88f0: 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61  l to overflow.pa
8900: 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  ges..<li>A 4-byt
8910: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
8920: 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72  eger page number
8930: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70   for the first p
8940: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
8950: 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20  low page list - 
8960: 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70  omitted if all p
8970: 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74  ayload fits on t
8980: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
8990: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c  </ul></p></dd>.<
89a0: 2f 64 6c 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 66  /dl>..<p>The inf
89b0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20 63  ormation above c
89c0: 61 6e 20 62 65 20 72 65 63 61 73 74 20 69 6e 74  an be recast int
89d0: 6f 20 61 20 74 61 62 6c 65 20 66 6f 72 6d 61 74  o a table format
89e0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
89f0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
8a00: 6e 74 20 63 65 6c 6c 66 6f 72 6d 61 74 20 7b 63  nt cellformat {c
8a10: 65 6c 6c 20 66 6f 72 6d 61 74 20 73 75 6d 6d 61  ell format summa
8a20: 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74 65  ry}</tcl>.<cente
8a30: 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 43 65 6c  r>.<i>B-tree Cel
8a40: 6c 20 46 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74 61  l Format</i>.<ta
8a50: 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64  ble border=1 wid
8a60: 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74  th="80%">.<tr><t
8a70: 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 61 74 61  h rowspan=2>Data
8a80: 74 79 70 65 0a 20 20 20 20 3c 74 68 20 63 6f 6c  type.    <th col
8a90: 73 70 61 6e 3d 34 3e 41 70 70 65 61 72 73 20 69  span=4>Appears i
8aa0: 6e 2e 2e 2e 0a 20 20 20 20 3c 74 68 20 72 6f 77  n....    <th row
8ab0: 73 70 61 6e 3d 32 3e 44 65 73 63 72 69 70 74 69  span=2>Descripti
8ac0: 6f 6e 0a 3c 74 72 3e 3c 74 68 3e 54 61 62 6c 65  on.<tr><th>Table
8ad0: 20 4c 65 61 66 20 28 30 78 30 64 29 0a 20 20 20   Leaf (0x0d).   
8ae0: 20 3c 74 68 3e 54 61 62 6c 65 20 49 6e 74 65 72   <th>Table Inter
8af0: 69 6f 72 20 28 30 78 30 35 29 0a 20 20 20 20 3c  ior (0x05).    <
8b00: 74 68 3e 49 6e 64 65 78 20 4c 65 61 66 20 28 30  th>Index Leaf (0
8b10: 78 30 61 29 0a 20 20 20 20 3c 74 68 3e 49 6e 64  x0a).    <th>Ind
8b20: 65 78 20 49 6e 74 65 72 69 6f 72 20 28 30 78 30  ex Interior (0x0
8b30: 32 29 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  2).<tr><td align
8b40: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8b50: 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65  op>4-byte intege
8b60: 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  r.    <td align=
8b70: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8b80: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
8b90: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8ba0: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8bb0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8bc0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8bd0: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
8be0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8bf0: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8c00: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
8c10: 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72  left>Page number
8c20: 20 6f 66 20 6c 65 66 74 20 63 68 69 6c 64 0a 3c   of left child.<
8c30: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
8c40: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76  ter valign=top>v
8c50: 61 72 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c  arint.    <td al
8c60: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8c70: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8c80: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8c90: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8ca0: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
8cb0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8cc0: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8cd0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8ce0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8cf0: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8d00: 61 6c 69 67 6e 3d 6c 65 66 74 3e 4e 75 6d 62 65  align=left>Numbe
8d10: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61  r of bytes of pa
8d20: 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c  yload.<tr><td al
8d30: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8d40: 6e 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20  n=top>varint.   
8d50: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8d60: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8d70: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8d80: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8d90: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8da0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8db0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8dc0: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
8dd0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8de0: 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20  n=top>&nbsp;.   
8df0: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
8e00: 52 6f 77 69 64 0a 3c 74 72 3e 3c 74 64 20 61 6c  Rowid.<tr><td al
8e10: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8e20: 6e 3d 74 6f 70 3e 62 79 74 65 20 61 72 72 61 79  n=top>byte array
8e30: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8e40: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8e50: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8e60: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8e70: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
8e80: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8e90: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8ea0: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8eb0: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8ec0: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
8ed0: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
8ee0: 3d 6c 65 66 74 3e 50 61 79 6c 6f 61 64 0a 3c 74  =left>Payload.<t
8ef0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
8f00: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d  er valign=top>4-
8f10: 62 79 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20  byte integer.   
8f20: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8f30: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8f40: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8f50: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8f60: 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20  n=top>&nbsp;.   
8f70: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8f80: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8f90: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8fa0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8fb0: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8fc0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66     <td align=lef
8fd0: 74 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t>Page number of
8fe0: 20 66 69 72 73 74 20 6f 76 65 72 66 6c 6f 77 20   first overflow 
8ff0: 70 61 67 65 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63  page.</table></c
9000: 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 54 68 65 20  enter>...<p>The 
9010: 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f 61  amount of payloa
9020: 64 20 74 68 61 74 20 73 70 69 6c 6c 73 20 6f 6e  d that spills on
9030: 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  to overflow page
9040: 73 20 61 6c 73 6f 20 64 65 70 65 6e 64 73 20 6f  s also depends o
9050: 6e 0a 74 68 65 20 70 61 67 65 20 74 79 70 65 2e  n.the page type.
9060: 20 20 46 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77    For the follow
9070: 69 6e 67 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  ing computations
9080: 2c 20 6c 65 74 20 55 20 62 65 20 74 68 65 20 75  , let U be the u
9090: 73 61 62 6c 65 20 73 69 7a 65 0a 6f 66 20 61 20  sable size.of a 
90a0: 64 61 74 61 62 61 73 65 20 70 61 67 65 2c 20 74  database page, t
90b0: 68 65 20 74 6f 74 61 6c 20 70 61 67 65 20 73 69  he total page si
90c0: 7a 65 20 6c 65 73 73 20 74 68 65 20 72 65 73 65  ze less the rese
90d0: 72 76 65 64 20 73 70 61 63 65 20 61 74 20 74 68  rved space at th
90e0: 65 0a 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61  e.end of each pa
90f0: 67 65 2e 20 20 41 6e 64 20 6c 65 74 20 50 20 62  ge.  And let P b
9100: 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69  e the payload si
9110: 7a 65 2e 20 20 49 6e 20 74 68 65 20 66 6f 6c 6c  ze.  In the foll
9120: 6f 77 69 6e 67 2c 0a 73 79 6d 62 6f 6c 20 58 20  owing,.symbol X 
9130: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6d  represents the m
9140: 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66  aximum amount of
9150: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 63 61   payload that ca
9160: 6e 20 62 65 20 73 74 6f 72 65 64 20 64 69 72 65  n be stored dire
9170: 63 74 6c 79 0a 6f 6e 20 74 68 65 20 62 2d 74 72  ctly.on the b-tr
9180: 65 65 20 70 61 67 65 20 77 69 74 68 6f 75 74 20  ee page without 
9190: 73 70 69 6c 6c 69 6e 67 20 6f 6e 74 6f 20 61 6e  spilling onto an
91a0: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 61   overflow page a
91b0: 6e 64 20 73 79 6d 62 6f 6c 20 4d 0a 72 65 70 72  nd symbol M.repr
91c0: 65 73 65 6e 74 73 20 74 68 65 20 6d 69 6e 69 6d  esents the minim
91d0: 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79  um amount of pay
91e0: 6c 6f 61 64 20 74 68 61 74 20 6d 75 73 74 20 62  load that must b
91f0: 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  e stored on the 
9200: 62 74 72 65 65 0a 70 61 67 65 20 62 65 66 6f 72  btree.page befor
9210: 65 20 73 70 69 6c 6c 69 6e 67 20 69 73 20 61 6c  e spilling is al
9220: 6c 6f 77 65 64 2e 0a 0a 3c 64 6c 3e 0a 3c 64 74  lowed...<dl>.<dt
9230: 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65  ><p>Table B-Tree
9240: 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 64 74 3e   Leaf Cell:</dt>
9250: 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74 20 58  .<dd><p>.^(Let X
9260: 20 62 65 20 55 2d 33 35 2e 20 20 49 66 20 74 68   be U-35.  If th
9270: 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50  e payload size P
9280: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
9290: 20 65 71 75 61 6c 20 74 6f 20 58 20 74 68 65 6e   equal to X then
92a0: 0a 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c  .the entire payl
92b0: 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  oad is stored on
92c0: 20 74 68 65 20 62 2d 74 72 65 65 20 6c 65 61 66   the b-tree leaf
92d0: 20 70 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d   page.)^.^(Let M
92e0: 20 62 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32   be ((U-12)*32/2
92f0: 35 35 29 2d 32 33 20 61 6e 64 20 6c 65 74 20 4b  55)-23 and let K
9300: 20 62 65 20 4d 2b 28 28 50 2d 4d 29 25 28 55 2d   be M+((P-M)%(U-
9310: 34 29 29 2e 0a 49 66 20 50 20 69 73 20 67 72 65  4))..If P is gre
9320: 61 74 65 72 20 74 68 61 6e 20 58 0a 74 68 65 6e  ater than X.then
9330: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
9340: 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74  ytes stored on t
9350: 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  he table b-tree 
9360: 6c 65 61 66 20 70 61 67 65 20 69 73 20 4b 0a 69  leaf page is K.i
9370: 66 20 4b 20 69 73 20 6c 65 73 73 20 6f 72 20 65  f K is less or e
9380: 71 75 61 6c 20 74 6f 20 58 20 6f 72 20 4d 20 6f  qual to X or M o
9390: 74 68 65 72 77 69 73 65 2e 29 5e 0a 5e 28 54 68  therwise.)^.^(Th
93a0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
93b0: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
93c0: 6c 65 61 66 20 70 61 67 65 20 69 73 20 6e 65 76  leaf page is nev
93d0: 65 72 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29  er less than M.)
93e0: 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  ^.</p></dd>..<dt
93f0: 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65  ><p>Table B-Tree
9400: 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c   Interior Cell:<
9410: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 49 6e 74  /dt>.<dd><p>.Int
9420: 65 72 69 6f 72 20 70 61 67 65 73 20 6f 66 20 74  erior pages of t
9430: 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68 61 76  able b-trees hav
9440: 65 20 6e 6f 20 70 61 79 6c 6f 61 64 20 61 6e 64  e no payload and
9450: 20 73 6f 20 74 68 65 72 65 20 69 73 20 6e 65 76   so there is nev
9460: 65 72 0a 61 6e 79 20 70 61 79 6c 6f 61 64 20 74  er.any payload t
9470: 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70 3e 3c 2f 64  o spill..</p></d
9480: 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78  d>..<dt><p>Index
9490: 20 42 2d 54 72 65 65 20 4c 65 61 66 20 4f 72 20   B-Tree Leaf Or 
94a0: 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f  Interior Cell:</
94b0: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65  dt>.<dd><p>.^(Le
94c0: 74 20 58 20 62 65 20 28 28 55 2d 31 32 29 2a 36  t X be ((U-12)*6
94d0: 34 2f 32 35 35 29 2d 32 33 29 2e 20 20 49 66 20  4/255)-23).  If 
94e0: 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65  the payload size
94f0: 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a   P is less than.
9500: 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20 74 68  or equal to X th
9510: 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  en the entire pa
9520: 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20  yload is stored 
9530: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
9540: 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62 65  ge.)^.^(Let M be
9550: 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29   ((U-12)*32/255)
9560: 2d 32 33 20 61 6e 64 20 6c 65 74 20 4b 20 62 65  -23 and let K be
9570: 20 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29   M+((P-M)%(U-4))
9580: 2e 0a 49 66 20 50 20 69 73 20 67 72 65 61 74 65  ..If P is greate
9590: 72 20 74 68 61 6e 20 58 20 74 68 65 6e 20 74 68  r than X then th
95a0: 65 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65  e number.of byte
95b0: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
95c0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67  index b-tree pag
95d0: 65 20 69 73 20 4b 20 69 66 20 4b 20 69 73 20 6c  e is K if K is l
95e0: 65 73 73 20 74 68 61 6e 20 6f 72 0a 65 71 75 61  ess than or.equa
95f0: 6c 20 74 6f 20 58 20 6f 72 20 4d 20 6f 74 68 65  l to X or M othe
9600: 72 77 69 73 65 2e 29 5e 0a 5e 28 54 68 65 20 6e  rwise.)^.^(The n
9610: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 73  umber of bytes s
9620: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 69 6e 64  tored on the ind
9630: 65 78 20 70 61 67 65 20 69 73 20 6e 65 76 65 72  ex page is never
9640: 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e 0a   less than M.)^.
9650: 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 0a  </p></dd>.</dl>.
9660: 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 6e 20 61  .<p>Here is an a
9670: 6c 74 65 72 6e 61 74 69 76 65 20 64 65 73 63 72  lternative descr
9680: 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 61  iption of the sa
9690: 6d 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 3a 0a  me computation:.
96a0: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 58 20 69 73 20 55  .<ul>.<li>X is U
96b0: 2d 33 35 20 66 6f 72 20 74 61 62 6c 65 20 62 74  -35 for table bt
96c0: 72 65 65 20 6c 65 61 66 20 70 61 67 65 73 20 6f  ree leaf pages o
96d0: 72 0a 20 20 20 20 28 28 55 2d 31 32 29 2a 36 34  r.    ((U-12)*64
96e0: 2f 32 35 35 29 2d 32 33 20 66 6f 72 20 69 6e 64  /255)-23 for ind
96f0: 65 78 20 70 61 67 65 73 2e 0a 3c 6c 69 3e 4d 20  ex pages..<li>M 
9700: 69 73 20 61 6c 77 61 79 73 20 28 28 55 2d 31 32  is always ((U-12
9710: 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e 0a 3c 6c  )*32/255)-23..<l
9720: 69 3e 4c 65 74 20 4b 20 62 65 20 4d 2b 28 28 50  i>Let K be M+((P
9730: 2d 4d 29 25 28 55 2d 34 29 29 2e 0a 3c 6c 69 3e  -M)%(U-4))..<li>
9740: 5e 49 66 20 50 26 6c 74 3b 3d 58 20 74 68 65 6e  ^If P&lt;=X then
9750: 20 61 6c 6c 20 50 20 62 79 74 65 73 20 6f 66 20   all P bytes of 
9760: 70 61 79 6c 6f 61 64 20 61 72 65 20 73 74 6f 72  payload are stor
9770: 65 64 20 64 69 72 65 63 74 6c 79 20 6f 6e 20 74  ed directly on t
9780: 68 65 20 0a 20 20 20 20 62 74 72 65 65 20 70 61  he .    btree pa
9790: 67 65 20 77 69 74 68 6f 75 74 20 6f 76 65 72 66  ge without overf
97a0: 6c 6f 77 2e 0a 3c 6c 69 3e 5e 49 66 20 50 26 67  low..<li>^If P&g
97b0: 74 3b 58 20 61 6e 64 20 4b 26 6c 74 3b 3d 58 20  t;X and K&lt;=X 
97c0: 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 4b  then the first K
97d0: 20 62 79 74 65 73 20 6f 66 20 50 20 61 72 65 20   bytes of P are 
97e0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 0a 20  stored on the . 
97f0: 20 20 20 62 74 72 65 65 20 70 61 67 65 20 61 6e     btree page an
9800: 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  d the remaining 
9810: 50 2d 4b 20 62 79 74 65 73 20 61 72 65 20 73 74  P-K bytes are st
9820: 6f 72 65 64 20 6f 6e 20 6f 76 65 72 66 6c 6f 77  ored on overflow
9830: 20 70 61 67 65 73 2e 0a 3c 6c 69 3e 5e 49 66 20   pages..<li>^If 
9840: 50 26 67 74 3b 58 20 61 6e 64 20 4b 26 67 74 3b  P&gt;X and K&gt;
9850: 58 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  X then the first
9860: 20 4d 20 62 79 74 65 73 20 6f 66 20 50 20 61 72   M bytes of P ar
9870: 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 0a  e stored on the.
9880: 20 20 20 20 62 74 72 65 65 20 70 61 67 65 20 61      btree page a
9890: 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67  nd the remaining
98a0: 20 50 2d 4d 20 62 79 74 65 73 20 61 72 65 20 73   P-M bytes are s
98b0: 74 6f 72 65 64 20 6f 6e 20 6f 76 65 72 66 6c 6f  tored on overflo
98c0: 77 20 70 61 67 65 73 2e 0a 3c 2f 75 6c 3e 0a 0a  w pages..</ul>..
98d0: 3c 70 3e 54 68 65 20 6f 76 65 72 66 6c 6f 77 20  <p>The overflow 
98e0: 74 68 72 65 73 68 6f 6c 64 73 20 61 72 65 20 64  thresholds are d
98f0: 65 73 69 67 6e 65 64 20 74 6f 20 67 69 76 65 20  esigned to give 
9900: 61 20 6d 69 6e 69 6d 75 6d 20 66 61 6e 6f 75 74  a minimum fanout
9910: 20 6f 66 0a 34 20 66 6f 72 20 69 6e 64 65 78 20   of.4 for index 
9920: 62 2d 74 72 65 65 73 20 61 6e 64 20 74 6f 20 6d  b-trees and to m
9930: 61 6b 65 20 73 75 72 65 20 65 6e 6f 75 67 68 20  ake sure enough 
9940: 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 69  of the payload.i
9950: 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s on the b-tree 
9960: 70 61 67 65 20 74 68 61 74 20 74 68 65 20 72 65  page that the re
9970: 63 6f 72 64 20 68 65 61 64 65 72 20 63 61 6e 20  cord header can 
9980: 75 73 75 61 6c 6c 79 20 62 65 20 61 63 63 65 73  usually be acces
9990: 73 65 64 0a 77 69 74 68 6f 75 74 20 63 6f 6e 73  sed.without cons
99a0: 75 6c 74 69 6e 67 20 61 6e 20 6f 76 65 72 66 6c  ulting an overfl
99b0: 6f 77 20 70 61 67 65 2e 20 20 49 6e 20 68 69 6e  ow page.  In hin
99c0: 64 73 69 67 68 74 2c 20 74 68 65 20 64 65 73 69  dsight, the desi
99d0: 67 6e 65 72 20 6f 66 0a 74 68 65 20 53 51 4c 69  gner of.the SQLi
99e0: 74 65 20 62 2d 74 72 65 65 20 6c 6f 67 69 63 20  te b-tree logic 
99f0: 72 65 61 6c 69 7a 65 64 20 74 68 61 74 20 74 68  realized that th
9a00: 65 73 65 20 74 68 72 65 73 68 6f 6c 64 73 20 63  ese thresholds c
9a10: 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 6d  ould have been.m
9a20: 61 64 65 20 6d 75 63 68 20 73 69 6d 70 6c 65 72  ade much simpler
9a30: 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20  .  However, the 
9a40: 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 63 61 6e  computations can
9a50: 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 0a 77  not be changed.w
9a60: 69 74 68 6f 75 74 20 72 65 73 75 6c 74 69 6e 67  ithout resulting
9a70: 20 69 6e 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69   in an incompati
9a80: 62 6c 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e  ble file format.
9a90: 20 20 41 6e 64 20 74 68 65 20 63 75 72 72 65 6e    And the curren
9aa0: 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 0a 77  t computations.w
9ab0: 6f 72 6b 20 77 65 6c 6c 2c 20 65 76 65 6e 20 69  ork well, even i
9ac0: 66 20 74 68 65 79 20 61 72 65 20 61 20 6c 69 74  f they are a lit
9ad0: 74 6c 65 20 63 6f 6d 70 6c 65 78 2e 3c 2f 70 3e  tle complex.</p>
9ae0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
9af0: 6e 74 20 6f 76 66 6c 70 67 73 20 7b 6f 76 65 72  nt ovflpgs {over
9b00: 66 6c 6f 77 20 70 61 67 65 7d 20 7b 6f 76 65 72  flow page} {over
9b10: 66 6c 6f 77 20 70 61 67 65 73 7d 3c 2f 74 63 6c  flow pages}</tcl
9b20: 3e 0a 3c 68 32 3e 43 65 6c 6c 20 50 61 79 6c 6f  >.<h2>Cell Paylo
9b30: 61 64 20 4f 76 65 72 66 6c 6f 77 20 50 61 67 65  ad Overflow Page
9b40: 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  s</h2>..<p>^When
9b50: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 6f 66 20   the payload of 
9b60: 61 20 62 2d 74 72 65 65 20 63 65 6c 6c 20 69 73  a b-tree cell is
9b70: 20 74 6f 6f 20 6c 61 72 67 65 20 66 6f 72 20 74   too large for t
9b80: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a  he b-tree page,.
9b90: 74 68 65 20 73 75 72 70 6c 75 73 20 69 73 20 73  the surplus is s
9ba0: 70 69 6c 6c 65 64 20 6f 6e 74 6f 20 6f 76 65 72  pilled onto over
9bb0: 66 6c 6f 77 20 70 61 67 65 73 2e 20 20 5e 4f 76  flow pages.  ^Ov
9bc0: 65 72 66 6c 6f 77 20 70 61 67 65 73 20 66 6f 72  erflow pages for
9bd0: 6d 20 61 20 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e  m a linked.list.
9be0: 20 20 5e 54 68 65 20 66 69 72 73 74 20 66 6f 75    ^The first fou
9bf0: 72 20 62 79 74 65 73 20 6f 66 20 65 61 63 68 20  r bytes of each 
9c00: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 61 72  overflow page ar
9c10: 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a 69  e a big-endian.i
9c20: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
9c30: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
9c40: 6f 66 20 74 68 65 20 6e 65 78 74 20 70 61 67 65  of the next page
9c50: 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2c 20 6f   in the chain, o
9c60: 72 20 7a 65 72 6f 0a 66 6f 72 20 74 68 65 20 66  r zero.for the f
9c70: 69 6e 61 6c 20 70 61 67 65 20 69 6e 20 74 68 65  inal page in the
9c80: 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 66 69   chain.  ^The fi
9c90: 66 74 68 20 62 79 74 65 20 74 68 72 6f 75 67 68  fth byte through
9ca0: 20 74 68 65 20 6c 61 73 74 20 75 73 61 62 6c 65   the last usable
9cb0: 0a 62 79 74 65 20 61 72 65 20 75 73 65 64 20 74  .byte are used t
9cc0: 6f 20 68 6f 6c 64 20 6f 76 65 72 66 6c 6f 77 20  o hold overflow 
9cd0: 63 6f 6e 74 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68  content.</p>..<h
9ce0: 32 3e 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72  2>Pointer Map or
9cf0: 20 50 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68   Ptrmap Pages</h
9d00: 32 3e 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d  2>..<p>Pointer m
9d10: 61 70 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67  ap or ptrmap pag
9d20: 65 73 20 61 72 65 20 65 78 74 72 61 20 70 61 67  es are extra pag
9d30: 65 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  es inserted into
9d40: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f   the database.to
9d50: 20 6d 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74   make the operat
9d60: 69 6f 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63  ion of [auto_vac
9d70: 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d  uum] and [increm
9d80: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f  ental_vacuum] mo
9d90: 64 65 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65  des.more efficie
9da0: 6e 74 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20  nt.  Other page 
9db0: 74 79 70 65 73 20 69 6e 20 74 68 65 20 64 61 74  types in the dat
9dc0: 61 62 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20  abase typically 
9dd0: 68 61 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72  have pointers.fr
9de0: 6f 6d 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69  om parent to chi
9df0: 6c 64 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ld.  For example
9e00: 2c 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  , an interior b-
9e10: 74 72 65 65 20 70 61 67 65 20 63 6f 6e 74 61 69  tree page contai
9e20: 6e 73 20 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69  ns pointers.to i
9e30: 74 73 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20  ts child b-tree 
9e40: 70 61 67 65 73 20 61 6e 64 20 61 6e 20 6f 76 65  pages and an ove
9e50: 72 66 6c 6f 77 20 63 68 61 69 6e 20 68 61 73 20  rflow chain has 
9e60: 61 20 70 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65  a pointer.from e
9e70: 61 72 6c 69 65 72 20 74 6f 20 6c 61 74 65 72 20  arlier to later 
9e80: 6c 69 6e 6b 73 20 69 6e 20 74 68 65 20 63 68 61  links in the cha
9e90: 69 6e 2e 20 20 41 20 70 74 72 6d 61 70 20 70 61  in.  A ptrmap pa
9ea0: 67 65 20 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b  ge contains link
9eb0: 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  age.information 
9ec0: 67 6f 69 6e 67 20 69 6e 20 74 68 65 20 6f 70 70  going in the opp
9ed0: 6f 73 69 74 65 20 64 69 72 65 63 74 69 6f 6e 2c  osite direction,
9ee0: 20 66 72 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70   from child to p
9ef0: 61 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  arent.</p>..<p>^
9f00: 50 74 72 6d 61 70 20 70 61 67 65 73 20 6d 75 73  Ptrmap pages mus
9f10: 74 20 65 78 69 73 74 20 69 6e 20 61 6e 79 20 64  t exist in any d
9f20: 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 69  atabase file whi
9f30: 63 68 20 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72  ch has a non-zer
9f40: 6f 0a 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62  o.largest root b
9f50: 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c 75 65  -tree page value
9f60: 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 6e   at offset 52 in
9f70: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
9f80: 61 64 65 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61  ader..^If the la
9f90: 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65  rgest root b-tre
9fa0: 65 20 70 61 67 65 20 76 61 6c 75 65 20 69 73 20  e page value is 
9fb0: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 64  zero, then the d
9fc0: 61 74 61 62 61 73 65 20 6d 75 73 74 20 6e 6f 74  atabase must not
9fd0: 0a 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20  .contain ptrmap 
9fe0: 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  pages.</p>..<p>^
9ff0: 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 77 69  In a database wi
a000: 74 68 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c  th ptrmap pages,
a010: 20 74 68 65 20 66 69 72 73 74 20 70 74 72 6d 61   the first ptrma
a020: 70 20 70 61 67 65 20 69 73 20 70 61 67 65 20 32  p page is page 2
a030: 2e 0a 41 20 70 74 72 6d 61 70 20 70 61 67 65 20  ..A ptrmap page 
a040: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
a050: 72 72 61 79 20 6f 66 20 35 2d 62 79 74 65 20 65  rray of 5-byte e
a060: 6e 74 72 69 65 73 2e 20 20 4c 65 74 20 4a 20 62  ntries.  Let J b
a070: 65 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20  e the.number of 
a080: 35 2d 62 79 74 65 20 65 6e 74 72 69 65 73 20 74  5-byte entries t
a090: 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20  hat will fit in 
a0a0: 74 68 65 20 75 73 61 62 6c 65 20 73 70 61 63 65  the usable space
a0b0: 20 6f 66 20 61 20 70 61 67 65 2e 0a 28 49 6e 20   of a page..(In 
a0c0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55  other words, J=U
a0d0: 2f 35 2e 29 20 20 5e 54 68 65 20 66 69 72 73 74  /5.)  ^The first
a0e0: 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c   ptrmap page wil
a0f0: 6c 20 63 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70  l contain back p
a100: 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69  ointer.informati
a110: 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 33 20 74  on for pages 3 t
a120: 68 72 6f 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c  hrough J+2, incl
a130: 75 73 69 76 65 2e 20 20 5e 54 68 65 20 73 65 63  usive.  ^The sec
a140: 6f 6e 64 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a  ond pointer map.
a150: 70 61 67 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20  page will be on 
a160: 70 61 67 65 20 4a 2b 33 20 61 6e 64 20 74 68 61  page J+3 and tha
a170: 74 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69  t ptrmap page wi
a180: 6c 6c 20 70 72 6f 76 69 64 65 20 62 61 63 6b 20  ll provide back 
a190: 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74  pointer.informat
a1a0: 69 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 4a 2b  ion for pages J+
a1b0: 34 20 74 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20  4 through 2*J+3 
a1c0: 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6e 64 20  inclusive.  And 
a1d0: 73 6f 20 66 6f 72 74 68 20 66 6f 72 0a 74 68 65  so forth for.the
a1e0: 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
a1f0: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   file.</p>..<p>^
a200: 28 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 74  (In a database t
a210: 68 61 74 20 75 73 65 73 20 70 74 72 6d 61 70 20  hat uses ptrmap 
a220: 70 61 67 65 73 2c 20 61 6c 6c 20 70 61 67 65 73  pages, all pages
a230: 20 61 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64   at locations id
a240: 65 6e 74 69 66 69 65 64 0a 62 79 20 74 68 65 20  entified.by the 
a250: 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 74  computation in t
a260: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
a270: 67 72 61 70 68 20 6d 75 73 74 20 62 65 20 70 74  graph must be pt
a280: 72 6d 61 70 20 70 61 67 65 20 61 6e 64 20 6e 6f  rmap page and no
a290: 0a 6f 74 68 65 72 20 70 61 67 65 20 6d 61 79 20  .other page may 
a2a0: 62 65 20 61 20 70 74 72 6d 61 70 20 70 61 67 65  be a ptrmap page
a2b0: 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 74 68  .  Except, if th
a2c0: 65 20 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65  e byte-lock page
a2d0: 20 68 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c   happens to.fall
a2e0: 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67   on the same pag
a2f0: 65 20 6e 75 6d 62 65 72 20 61 73 20 61 20 70 74  e number as a pt
a300: 72 6d 61 70 20 70 61 67 65 2c 20 74 68 65 6e 20  rmap page, then 
a310: 74 68 65 20 70 74 72 6d 61 70 20 69 73 20 6d 6f  the ptrmap is mo
a320: 76 65 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ved.to the follo
a330: 77 69 6e 67 20 70 61 67 65 20 66 6f 72 20 74 68  wing page for th
a340: 61 74 20 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f  at one case.)^</
a350: 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79  p>..<p>Each 5-by
a360: 74 65 20 65 6e 74 72 79 20 6f 6e 20 61 20 70 74  te entry on a pt
a370: 72 6d 61 70 20 70 61 67 65 20 70 72 6f 76 69 64  rmap page provid
a380: 65 73 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66  es back-link inf
a390: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a  ormation about .
a3a0: 6f 6e 65 20 6f 66 20 74 68 65 20 70 61 67 65 73  one of the pages
a3b0: 20 74 68 61 74 20 69 6d 6d 65 64 69 61 74 65 6c   that immediatel
a3c0: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70 6f 69  y follow the poi
a3d0: 6e 74 65 72 20 6d 61 70 2e 20 20 5e 28 49 66 20  nter map.  ^(If 
a3e0: 70 61 67 65 20 42 20 69 73 20 61 0a 70 74 72 6d  page B is a.ptrm
a3f0: 61 70 20 70 61 67 65 20 74 68 65 6e 20 62 61 63  ap page then bac
a400: 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69  k-link informati
a410: 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b  on about page B+
a420: 31 20 69 73 20 70 72 6f 76 69 64 65 64 20 62 79  1 is provided by
a430: 0a 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79  .the first entry
a440: 20 6f 6e 20 74 68 65 20 70 6f 69 6e 74 65 72 20   on the pointer 
a450: 6d 61 70 2e 20 20 49 6e 66 6f 72 6d 61 74 69 6f  map.  Informatio
a460: 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b 32  n about page B+2
a470: 20 69 73 0a 70 72 6f 76 69 64 65 64 20 62 79 20   is.provided by 
a480: 74 68 65 20 73 65 63 6f 6e 64 20 65 6e 74 72 79  the second entry
a490: 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e  .  And so forth.
a4a0: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20  )^</p>..<p>Each 
a4b0: 35 2d 62 79 74 65 20 70 74 72 6d 61 70 20 65 6e  5-byte ptrmap en
a4c0: 74 72 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  try consists of 
a4d0: 6f 6e 65 20 62 79 74 65 20 6f 66 20 22 70 61 67  one byte of "pag
a4e0: 65 20 74 79 70 65 22 20 69 6e 66 6f 72 6d 61 74  e type" informat
a4f0: 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ion.followed by 
a500: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
a510: 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  ian page number.
a520: 20 20 46 69 76 65 20 70 61 67 65 20 74 79 70 65    Five page type
a530: 73 20 61 72 65 20 72 65 63 6f 67 6e 69 7a 65 64  s are recognized
a540: 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  :.</p>..<ol>.<li
a550: 3e 41 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70  >A b-tree root p
a560: 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e  age.  The.page n
a570: 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65 20  umber should be 
a580: 7a 65 72 6f 2e 0a 3c 6c 69 3e 41 20 66 72 65 65  zero..<li>A free
a590: 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 65 20  list page.  The 
a5a0: 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68 6f 75  page number shou
a5b0: 6c 64 20 62 65 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e  ld be.zero..<li>
a5c0: 54 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  The first page o
a5d0: 66 20 61 0a 63 65 6c 6c 20 70 61 79 6c 6f 61 64  f a.cell payload
a5e0: 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e   overflow chain.
a5f0: 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65    The page numbe
a600: 72 20 69 73 20 74 68 65 20 62 2d 74 72 65 65 20  r is the b-tree 
a610: 70 61 67 65 20 74 68 61 74 0a 63 6f 6e 74 61 69  page that.contai
a620: 6e 73 20 74 68 65 20 63 65 6c 6c 20 77 68 6f 73  ns the cell whos
a630: 65 20 63 6f 6e 74 65 6e 74 20 68 61 73 20 6f 76  e content has ov
a640: 65 72 66 6c 6f 77 65 64 2e 0a 3c 6c 69 3e 41 20  erflowed..<li>A 
a650: 70 61 67 65 20 69 6e 20 61 6e 20 6f 76 65 72 66  page in an overf
a660: 6c 6f 77 20 63 68 61 69 6e 0a 6f 74 68 65 72 20  low chain.other 
a670: 74 68 61 6e 20 74 68 65 20 66 69 72 73 74 20 70  than the first p
a680: 61 67 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e  age.  The page n
a690: 75 6d 62 65 72 20 69 73 20 74 68 65 20 70 72 69  umber is the pri
a6a0: 6f 72 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f  or page of the.o
a6b0: 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e 0a 3c  verflow chain..<
a6c0: 6c 69 3e 41 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d  li>A non-root b-
a6d0: 74 72 65 65 20 70 61 67 65 2e 20 20 54 68 65 0a  tree page.  The.
a6e0: 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74  page number is t
a6f0: 68 65 20 70 61 72 65 6e 74 20 62 2d 74 72 65 65  he parent b-tree
a700: 20 70 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   page..</ol>..<p
a710: 3e 5e 49 6e 20 61 6e 79 20 64 61 74 61 62 61 73  >^In any databas
a720: 65 20 66 69 6c 65 20 74 68 61 74 20 63 6f 6e 74  e file that cont
a730: 61 69 6e 73 20 70 74 72 6d 61 70 20 70 61 67 65  ains ptrmap page
a740: 73 2c 20 61 6c 6c 20 62 2d 74 72 65 65 20 72 6f  s, all b-tree ro
a750: 6f 74 20 70 61 67 65 73 20 0a 6d 75 73 74 20 63  ot pages .must c
a760: 6f 6d 65 20 62 65 66 6f 72 65 20 61 6e 79 20 6e  ome before any n
a770: 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  on-root b-tree p
a780: 61 67 65 2c 20 63 65 6c 6c 20 70 61 79 6c 6f 61  age, cell payloa
a790: 64 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2c  d overflow page,
a7a0: 20 6f 72 0a 66 72 65 65 6c 69 73 74 20 70 61 67   or.freelist pag
a7b0: 65 2e 20 20 54 68 69 73 20 72 65 73 74 72 69 63  e.  This restric
a7c0: 74 69 6f 6e 20 65 6e 73 75 72 65 73 20 74 68 61  tion ensures tha
a7d0: 74 20 61 20 72 6f 6f 74 20 70 61 67 65 20 77 69  t a root page wi
a7e0: 6c 6c 20 6e 65 76 65 72 0a 62 65 20 6d 6f 76 65  ll never.be move
a7f0: 64 20 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f  d during an auto
a800: 2d 76 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65  -vacuum or incre
a810: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 2e 20 20  mental-vacuum.  
a820: 54 68 65 20 61 75 74 6f 2d 76 61 63 75 75 6d 0a  The auto-vacuum.
a830: 6c 6f 67 69 63 20 64 6f 65 73 20 6e 6f 74 20 6b  logic does not k
a840: 6e 6f 77 20 68 6f 77 20 74 6f 20 75 70 64 61 74  now how to updat
a850: 65 20 74 68 65 20 72 6f 6f 74 5f 70 61 67 65 20  e the root_page 
a860: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
a870: 69 74 65 5f 6d 61 73 74 65 72 0a 74 61 62 6c 65  ite_master.table
a880: 20 61 6e 64 20 73 6f 20 69 74 20 69 73 20 6e 65   and so it is ne
a890: 63 65 73 73 61 72 79 20 74 6f 20 70 72 65 76 65  cessary to preve
a8a0: 6e 74 20 72 6f 6f 74 20 70 61 67 65 73 20 66 72  nt root pages fr
a8b0: 6f 6d 20 62 65 69 6e 67 20 6d 6f 76 65 64 0a 64  om being moved.d
a8c0: 75 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61  uring an auto-va
a8d0: 63 75 75 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f  cuum in order to
a8e0: 20 70 72 65 73 65 72 76 65 20 74 68 65 20 69 6e   preserve the in
a8f0: 74 65 67 72 69 74 79 20 6f 66 20 74 68 65 0a 73  tegrity of the.s
a900: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
a910: 6c 65 2e 20 20 5e 52 6f 6f 74 20 70 61 67 65 73  le.  ^Root pages
a920: 20 61 72 65 20 6d 6f 76 65 64 20 74 6f 20 74 68   are moved to th
a930: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
a940: 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  he.database file
a950: 20 62 79 20 74 68 65 20 43 52 45 41 54 45 20 54   by the CREATE T
a960: 41 42 4c 45 2c 20 43 52 45 41 54 45 20 49 4e 44  ABLE, CREATE IND
a970: 45 58 2c 20 44 52 4f 50 20 54 41 42 4c 45 2c 20  EX, DROP TABLE, 
a980: 61 6e 64 0a 44 52 4f 50 20 49 4e 44 45 58 20 6f  and.DROP INDEX o
a990: 70 65 72 61 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a  perations.</p>..
a9a0: 3c 68 31 3e 53 63 68 65 6d 61 20 4c 61 79 65 72  <h1>Schema Layer
a9b0: 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h1>..<p>The fo
a9c0: 72 65 67 6f 69 6e 67 20 74 65 78 74 20 64 65 73  regoing text des
a9d0: 63 72 69 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c  cribes low-level
a9e0: 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20   aspects of the 
a9f0: 53 51 4c 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d  SQLite file.form
aa00: 61 74 2e 20 20 54 68 65 20 62 2d 74 72 65 65 20  at.  The b-tree 
aa10: 6d 65 63 68 61 6e 69 73 6d 20 70 72 6f 76 69 64  mechanism provid
aa20: 65 73 20 61 20 70 6f 77 65 72 66 75 6c 20 61 6e  es a powerful an
aa30: 64 20 65 66 66 69 63 69 65 6e 74 20 6d 65 61 6e  d efficient mean
aa40: 73 20 6f 66 0a 61 63 63 65 73 73 69 6e 67 20 61  s of.accessing a
aa50: 20 6c 61 72 67 65 20 64 61 74 61 20 73 65 74 2e   large data set.
aa60: 20 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 77    This section w
aa70: 69 6c 6c 20 64 65 73 63 72 69 62 65 20 68 6f 77  ill describe how
aa80: 20 74 68 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62   the.low-level b
aa90: 2d 74 72 65 65 20 6c 61 79 65 72 20 69 73 20 75  -tree layer is u
aaa0: 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
aab0: 20 68 69 67 68 65 72 2d 6c 65 76 65 6c 20 53 51   higher-level SQ
aac0: 4c 0a 63 61 70 61 62 69 6c 69 74 69 65 73 2e 3c  L.capabilities.<
aad0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
aae0: 67 6d 65 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72  gment record_for
aaf0: 6d 61 74 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d  mat {record form
ab00: 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 52 65  at}</tcl>.<h2>Re
ab10: 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 68 32 3e  cord Format</h2>
ab20: 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f  ..<p>The data fo
ab30: 72 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  r a table b-tree
ab40: 20 6c 65 61 66 20 70 61 67 65 20 61 6e 64 20 74   leaf page and t
ab50: 68 65 20 6b 65 79 0a 6f 66 20 61 6e 20 69 6e 64  he key.of an ind
ab60: 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 20 77  ex b-tree page w
ab70: 61 73 20 63 68 61 72 61 63 74 65 72 69 7a 65 64  as characterized
ab80: 20 61 62 6f 76 65 0a 61 73 20 61 6e 20 61 72 62   above.as an arb
ab90: 69 74 72 61 72 79 20 73 65 71 75 65 6e 63 65 20  itrary sequence 
aba0: 6f 66 20 62 79 74 65 73 2e 0a 54 68 65 20 70 72  of bytes..The pr
abb0: 69 6f 72 20 64 69 73 63 75 73 73 69 6f 6e 20 6d  ior discussion m
abc0: 65 6e 74 69 6f 6e 65 64 20 6f 6e 65 20 6b 65 79  entioned one key
abd0: 20 62 65 69 6e 67 20 6c 65 73 73 20 74 68 61 6e   being less than
abe0: 20 61 6e 6f 74 68 65 72 2c 20 62 75 74 0a 64 69   another, but.di
abf0: 64 20 6e 6f 74 20 64 65 66 69 6e 65 20 77 68 61  d not define wha
ac00: 74 20 22 6c 65 73 73 20 74 68 61 6e 22 20 6d 65  t "less than" me
ac10: 61 6e 74 2e 20 20 54 68 65 20 63 75 72 72 65 6e  ant.  The curren
ac20: 74 20 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20 61  t section will a
ac30: 64 64 72 65 73 73 0a 74 68 65 73 65 20 6f 6d 69  ddress.these omi
ac40: 73 73 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ssions.</p>..<p>
ac50: 50 61 79 6c 6f 61 64 2c 20 65 69 74 68 65 72 20  Payload, either 
ac60: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 64 61 74  table b-tree dat
ac70: 61 20 6f 72 20 69 6e 64 65 78 20 62 2d 74 72 65  a or index b-tre
ac80: 65 20 6b 65 79 73 2c 20 0a 69 73 20 61 6c 77 61  e keys, .is alwa
ac90: 79 73 20 69 6e 20 74 68 65 20 22 72 65 63 6f 72  ys in the "recor
aca0: 64 20 66 6f 72 6d 61 74 22 2e 0a 54 68 65 20 72  d format"..The r
acb0: 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 64 65 66  ecord format def
acc0: 69 6e 65 73 20 61 20 73 65 71 75 65 6e 63 65 20  ines a sequence 
acd0: 6f 66 20 76 61 6c 75 65 73 20 63 6f 72 72 65 73  of values corres
ace0: 70 6f 6e 64 69 6e 67 0a 74 6f 20 63 6f 6c 75 6d  ponding.to colum
acf0: 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20 6f 72  ns in a table or
ad00: 20 69 6e 64 65 78 2e 20 20 54 68 65 20 72 65 63   index.  The rec
ad10: 6f 72 64 20 66 6f 72 6d 61 74 20 73 70 65 63 69  ord format speci
ad20: 66 69 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a  fies the number.
ad30: 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20  of columns, the 
ad40: 64 61 74 61 74 79 70 65 20 6f 66 20 65 61 63 68  datatype of each
ad50: 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65   column, and the
ad60: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68   content of each
ad70: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70   column.</p>..<p
ad80: 3e 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d  >The record form
ad90: 61 74 20 6d 61 6b 65 73 20 65 78 74 65 6e 73 69  at makes extensi
ada0: 76 65 20 75 73 65 20 6f 66 20 74 68 65 20 0a 5b  ve use of the .[
adb0: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
adc0: 69 6e 74 65 67 65 72 5d 20 6f 72 20 5b 76 61 72  integer] or [var
add0: 69 6e 74 5d 0a 72 65 70 72 65 73 65 6e 74 61 74  int].representat
ade0: 69 6f 6e 20 6f 66 20 36 34 2d 62 69 74 20 73 69  ion of 64-bit si
adf0: 67 6e 65 64 20 69 6e 74 65 67 65 72 73 20 64 65  gned integers de
ae00: 66 69 6e 65 64 20 61 62 6f 76 65 2e 3c 2f 70 3e  fined above.</p>
ae10: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
ae20: 6e 74 20 73 65 72 69 61 6c 74 79 70 65 20 7b 73  nt serialtype {s
ae30: 65 72 69 61 6c 20 74 79 70 65 7d 20 7b 73 65 72  erial type} {ser
ae40: 69 61 6c 20 74 79 70 65 73 7d 3c 2f 74 63 6c 3e  ial types}</tcl>
ae50: 0a 3c 70 3e 41 20 72 65 63 6f 72 64 20 63 6f 6e  .<p>A record con
ae60: 74 61 69 6e 73 20 61 20 68 65 61 64 65 72 20 61  tains a header a
ae70: 6e 64 20 61 20 62 6f 64 79 2c 20 69 6e 20 74 68  nd a body, in th
ae80: 61 74 20 6f 72 64 65 72 2e 20 20 0a 5e 28 54 68  at order.  .^(Th
ae90: 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20  e header begins 
aea0: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61  with a single va
aeb0: 72 69 6e 74 20 77 68 69 63 68 20 64 65 74 65 72  rint which deter
aec0: 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20  mines the total 
aed0: 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20  number.of bytes 
aee0: 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 20  in the header.  
aef0: 54 68 65 20 76 61 72 69 6e 74 20 76 61 6c 75 65  The varint value
af00: 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20   is the size of 
af10: 74 68 65 20 68 65 61 64 65 72 20 69 6e 0a 62 79  the header in.by
af20: 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  tes including th
af30: 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 69 74  e size varint it
af40: 73 65 6c 66 2e 29 5e 20 20 5e 46 6f 6c 6c 6f 77  self.)^  ^Follow
af50: 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
af60: 69 6e 74 20 61 72 65 0a 6f 6e 65 20 6f 72 20 6d  int are.one or m
af70: 6f 72 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76  ore additional v
af80: 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20  arints, one per 
af90: 63 6f 6c 75 6d 6e 2e 20 20 54 68 65 73 65 20 61  column.  These a
afa0: 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
afb0: 73 0a 61 72 65 20 63 61 6c 6c 65 64 20 22 73 65  s.are called "se
afc0: 72 69 61 6c 20 74 79 70 65 22 20 6e 75 6d 62 65  rial type" numbe
afd0: 72 73 20 61 6e 64 0a 64 65 74 65 72 6d 69 6e 65  rs and.determine
afe0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
aff0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 63   each column, ac
b000: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66  cording to the f
b010: 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 3c  ollowing chart:<
b020: 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  /p>..<center>.<i
b030: 3e 53 65 72 69 61 6c 20 54 79 70 65 20 43 6f 64  >Serial Type Cod
b040: 65 73 20 4f 66 20 54 68 65 20 52 65 63 6f 72 64  es Of The Record
b050: 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
b060: 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
b070: 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
b080: 3e 3c 74 68 3e 53 65 72 69 61 6c 20 54 79 70 65  ><th>Serial Type
b090: 3c 74 68 3e 43 6f 6e 74 65 6e 74 20 53 69 7a 65  <th>Content Size
b0a0: 3c 74 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e  <th>Meaning.<tr>
b0b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b0c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
b0d0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
b0e0: 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c  n=center>0<td al
b0f0: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65  ign=left>.^Value
b100: 20 69 73 20 61 20 4e 55 4c 4c 2e 0a 3c 74 72 3e   is a NULL..<tr>
b110: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b120: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
b130: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
b140: 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c  n=center>1<td al
b150: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65  ign=left>.^Value
b160: 20 69 73 20 61 6e 20 38 2d 62 69 74 20 74 77 6f   is an 8-bit two
b170: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
b180: 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  eger..<tr><td va
b190: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
b1a0: 65 6e 74 65 72 3e 32 3c 74 64 20 76 61 6c 69 67  enter>2<td valig
b1b0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b1c0: 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>2<td align=le
b1d0: 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20  ft>.^Value is a 
b1e0: 62 69 67 2d 65 6e 64 69 61 6e 20 31 36 2d 62 69  big-endian 16-bi
b1f0: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
b200: 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c  t integer..<tr><
b210: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b220: 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20  ign=center>3<td 
b230: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b240: 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20 61 6c 69  =center>3<td ali
b250: 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20  gn=left>.^Value 
b260: 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20  is a big-endian 
b270: 32 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  24-bit twos-comp
b280: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a  lement integer..
b290: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
b2a0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b2b0: 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
b2c0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
b2d0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56  d align=left>.^V
b2e0: 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e  alue is a big-en
b2f0: 64 69 61 6e 20 33 32 2d 62 69 74 20 74 77 6f 73  dian 32-bit twos
b300: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
b310: 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ger..<tr><td val
b320: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b330: 6e 74 65 72 3e 35 3c 74 64 20 76 61 6c 69 67 6e  nter>5<td valign
b340: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b350: 72 3e 36 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>6<td align=lef
b360: 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62  t>.^Value is a b
b370: 69 67 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69 74  ig-endian 48-bit
b380: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
b390: 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74   integer..<tr><t
b3a0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b3b0: 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 76  gn=center>6<td v
b3c0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b3d0: 63 65 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67  center>8<td alig
b3e0: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
b3f0: 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 36  s a big-endian 6
b400: 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  4-bit twos-compl
b410: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c  ement integer..<
b420: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
b430: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37  p align=center>7
b440: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b450: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64  lign=center>8<td
b460: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
b470: 6c 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64  lue is a big-end
b480: 69 61 6e 20 49 45 45 45 20 37 35 34 2d 32 30 30  ian IEEE 754-200
b490: 38 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e  8 64-bit floatin
b4a0: 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a  g point number..
b4b0: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
b4c0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b4d0: 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
b4e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74  align=center>0<t
b4f0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56  d align=left>.^V
b500: 61 6c 75 65 20 69 73 20 74 68 65 20 69 6e 74 65  alue is the inte
b510: 67 65 72 20 30 2e 20 28 4f 6e 6c 79 20 61 76 61  ger 0. (Only ava
b520: 69 6c 61 62 6c 65 20 66 6f 72 20 5b 73 63 68 65  ilable for [sche
b530: 6d 61 20 66 6f 72 6d 61 74 5d 20 34 20 61 6e 64  ma format] 4 and
b540: 20 68 69 67 68 65 72 2e 29 0a 3c 74 72 3e 3c 74   higher.).<tr><t
b550: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b560: 67 6e 3d 63 65 6e 74 65 72 3e 39 3c 74 64 20 76  gn=center>9<td v
b570: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b580: 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67  center>0<td alig
b590: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
b5a0: 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 31 2e  s the integer 1.
b5b0: 20 28 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65   (Only available
b5c0: 20 66 6f 72 20 5b 73 63 68 65 6d 61 20 66 6f 72   for [schema for
b5d0: 6d 61 74 5d 20 34 20 61 6e 64 20 68 69 67 68 65  mat] 4 and highe
b5e0: 72 2e 29 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  r.).<tr><td vali
b5f0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
b600: 74 65 72 3e 31 30 2c 31 31 0a 20 20 20 20 3c 74  ter>10,11.    <t
b610: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b620: 67 6e 3d 63 65 6e 74 65 72 3e 3c 69 3e 76 61 72  gn=center><i>var
b630: 69 61 62 6c 65 3c 2f 69 3e 3c 74 64 20 61 6c 69  iable</i><td ali
b640: 67 6e 3d 6c 65 66 74 3e 0a 3c 69 3e 52 65 73 65  gn=left>.<i>Rese
b650: 72 76 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61  rved for interna
b660: 6c 20 75 73 65 2e 20 20 54 68 65 73 65 20 73 65  l use.  These se
b670: 72 69 61 6c 20 74 79 70 65 20 63 6f 64 65 73 20  rial type codes 
b680: 77 69 6c 6c 0a 20 20 20 6e 65 76 65 72 20 61 70  will.   never ap
b690: 70 65 61 72 20 69 6e 20 61 20 77 65 6c 6c 2d 66  pear in a well-f
b6a0: 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 20 66  ormed database f
b6b0: 69 6c 65 2c 20 62 75 74 20 74 68 65 79 0a 20 20  ile, but they.  
b6c0: 20 6d 69 67 68 74 20 62 65 20 75 73 65 64 20 69   might be used i
b6d0: 6e 20 74 72 61 6e 73 69 65 6e 74 20 61 6e 64 20  n transient and 
b6e0: 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61  temporary databa
b6f0: 73 65 20 66 69 6c 65 73 0a 20 20 20 74 68 61 74  se files.   that
b700: 20 53 51 4c 69 74 65 20 73 6f 6d 65 74 69 6d 65   SQLite sometime
b710: 73 20 67 65 6e 65 72 61 74 65 73 20 66 6f 72 20  s generates for 
b720: 69 74 73 20 6f 77 6e 20 75 73 65 2e 0a 20 20 20  its own use..   
b730: 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
b740: 74 68 65 73 65 20 63 6f 64 65 73 20 63 61 6e 20  these codes can 
b750: 73 68 69 66 74 20 66 72 6f 6d 20 6f 6e 65 20 72  shift from one r
b760: 65 6c 65 61 73 65 0a 20 20 20 6f 66 20 53 51 4c  elease.   of SQL
b770: 69 74 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ite to the next.
b780: 3c 2f 69 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  </i>.<tr><td val
b790: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b7a0: 6e 74 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 32  nter>N&#x2265;12
b7b0: 20 61 6e 64 20 65 76 65 6e 0a 20 20 20 20 3c 74   and even.    <t
b7c0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b7d0: 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31 32 29  gn=center>(N-12)
b7e0: 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  /2<td align=left
b7f0: 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 42 4c  >.^Value is a BL
b800: 4f 42 20 74 68 61 74 20 69 73 20 28 4e 2d 31 32  OB that is (N-12
b810: 29 2f 32 20 62 79 74 65 73 20 69 6e 20 6c 65 6e  )/2 bytes in len
b820: 67 74 68 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  gth..<tr><td val
b830: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b840: 6e 74 65 72 3e 4e 26 23 78 32 32 36 35 3b 31 33  nter>N&#x2265;13
b850: 20 61 6e 64 20 6f 64 64 0a 20 20 20 20 3c 74 64   and odd.    <td
b860: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
b870: 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31 33 29 2f  n=center>(N-13)/
b880: 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  2<td align=left>
b890: 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 73 74 72  .^Value is a str
b8a0: 69 6e 67 20 69 6e 20 74 68 65 20 5b 74 65 78 74  ing in the [text
b8b0: 20 65 6e 63 6f 64 69 6e 67 5d 20 61 6e 64 20 28   encoding] and (
b8c0: 4e 2d 31 33 29 2f 32 20 62 79 74 65 73 20 69 6e  N-13)/2 bytes in
b8d0: 20 6c 65 6e 67 74 68 2e 0a 5e 54 68 65 20 6e 75   length..^The nu
b8e0: 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20 69 73 20  l terminator is 
b8f0: 6e 6f 74 20 73 74 6f 72 65 64 2e 0a 3c 2f 74 61  not stored..</ta
b900: 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c  ble></center>..<
b910: 70 3e 54 68 65 20 68 65 61 64 65 72 20 73 69 7a  p>The header siz
b920: 65 20 76 61 72 69 6e 74 0a 61 6e 64 20 73 65 72  e varint.and ser
b930: 69 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73  ial type varints
b940: 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 63 6f   will usually co
b950: 6e 73 69 73 74 20 6f 66 20 61 20 73 69 6e 67 6c  nsist of a singl
b960: 65 20 62 79 74 65 2e 20 20 54 68 65 0a 73 65 72  e byte.  The.ser
b970: 69 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73  ial type varints
b980: 20 66 6f 72 20 6c 61 72 67 65 20 73 74 72 69 6e   for large strin
b990: 67 73 20 61 6e 64 20 42 4c 4f 42 73 20 6d 69 67  gs and BLOBs mig
b9a0: 68 74 20 65 78 74 65 6e 64 20 74 6f 20 74 77 6f  ht extend to two
b9b0: 20 6f 72 20 74 68 72 65 65 0a 62 79 74 65 20 76   or three.byte v
b9c0: 61 72 69 6e 74 73 2c 20 62 75 74 20 74 68 61 74  arints, but that
b9d0: 20 69 73 20 74 68 65 20 65 78 63 65 70 74 69 6f   is the exceptio
b9e0: 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68  n rather than th
b9f0: 65 20 72 75 6c 65 2e 20 0a 54 68 65 20 76 61 72  e rule. .The var
ba00: 69 6e 74 20 66 6f 72 6d 61 74 20 69 73 20 76 65  int format is ve
ba10: 72 79 20 65 66 66 69 63 69 65 6e 74 20 61 74 20  ry efficient at 
ba20: 63 6f 64 69 6e 67 20 74 68 65 20 72 65 63 6f 72  coding the recor
ba30: 64 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c  d header.</p>..<
ba40: 70 3e 5e 54 68 65 20 76 61 6c 75 65 73 20 66 6f  p>^The values fo
ba50: 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e  r each column in
ba60: 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65   the record imme
ba70: 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74  diately follow t
ba80: 68 65 20 68 65 61 64 65 72 2e 0a 5e 28 46 6f 72  he header..^(For
ba90: 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 30 2c   serial types 0,
baa0: 20 38 2c 20 39 2c 20 31 32 2c 20 61 6e 64 20 31   8, 9, 12, and 1
bab0: 33 2c 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  3, the value is 
bac0: 7a 65 72 6f 20 62 79 74 65 73 20 69 6e 0a 6c 65  zero bytes in.le
bad0: 6e 67 74 68 2e 20 20 49 66 20 61 6c 6c 20 63 6f  ngth.  If all co
bae0: 6c 75 6d 6e 73 20 61 72 65 20 6f 66 20 74 68 65  lumns are of the
baf0: 73 65 20 74 79 70 65 73 20 74 68 65 6e 20 74 68  se types then th
bb00: 65 20 62 6f 64 79 20 73 65 63 74 69 6f 6e 20 6f  e body section o
bb10: 66 20 74 68 65 0a 72 65 63 6f 72 64 20 69 73 20  f the.record is 
bb20: 65 6d 70 74 79 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  empty.)^</p>..<p
bb30: 3e 5e 41 20 72 65 63 6f 72 64 20 6d 69 67 68 74  >^A record might
bb40: 20 68 61 76 65 20 66 65 77 65 72 20 76 61 6c 75   have fewer valu
bb50: 65 73 20 74 68 61 6e 20 74 68 65 20 6e 75 6d 62  es than the numb
bb60: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
bb70: 20 74 68 65 0a 63 6f 72 72 65 73 70 6f 6e 64 69   the.correspondi
bb80: 6e 67 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  ng table.  This 
bb90: 63 61 6e 20 68 61 70 70 65 6e 2c 20 66 6f 72 20  can happen, for 
bba0: 65 78 61 6d 70 6c 65 2c 20 61 66 74 65 72 20 61  example, after a
bbb0: 6e 0a 5b 41 4c 54 45 52 20 54 41 42 4c 45 7c 41  n.[ALTER TABLE|A
bbc0: 4c 54 45 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41  LTER TABLE ... A
bbd0: 44 44 20 43 4f 4c 55 4d 4e 5d 20 53 51 4c 20 73  DD COLUMN] SQL s
bbe0: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 69 6e 63  tatement has inc
bbf0: 72 65 61 73 65 64 0a 74 68 65 20 6e 75 6d 62 65  reased.the numbe
bc00: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
bc10: 74 68 65 20 74 61 62 6c 65 20 73 63 68 65 6d 61  the table schema
bc20: 20 77 69 74 68 6f 75 74 20 6d 6f 64 69 66 79 69   without modifyi
bc30: 6e 67 20 70 72 65 65 78 69 73 74 69 6e 67 20 72  ng preexisting r
bc40: 6f 77 73 0a 69 6e 20 74 68 65 20 74 61 62 6c 65  ows.in the table
bc50: 2e 0a 5e 4d 69 73 73 69 6e 67 20 76 61 6c 75 65  ..^Missing value
bc60: 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
bc70: 74 68 65 20 72 65 63 6f 72 64 20 61 72 65 20 66  the record are f
bc80: 69 6c 6c 65 64 20 69 6e 20 75 73 69 6e 67 20 74  illed in using t
bc90: 68 65 0a 5b 64 65 66 61 75 6c 74 20 76 61 6c 75  he.[default valu
bca0: 65 5d 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65  e] for the corre
bcb0: 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d 6e 73  sponding columns
bcc0: 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68 65 20   defined in the 
bcd0: 74 61 62 6c 65 20 73 63 68 65 6d 61 2e 0a 3c 2f  table schema..</
bce0: 70 3e 0a 0a 0a 3c 68 32 3e 52 65 63 6f 72 64 20  p>...<h2>Record 
bcf0: 53 6f 72 74 20 4f 72 64 65 72 3c 2f 68 32 3e 0a  Sort Order</h2>.
bd00: 0a 3c 70 3e 54 68 65 20 6f 72 64 65 72 20 6f 66  .<p>The order of
bd10: 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
bd20: 78 20 62 2d 74 72 65 65 20 69 73 20 64 65 74 65  x b-tree is dete
bd30: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 73 6f  rmined by the so
bd40: 72 74 20 6f 72 64 65 72 20 6f 66 0a 74 68 65 20  rt order of.the 
bd50: 72 65 63 6f 72 64 73 20 74 68 61 74 20 74 68 65  records that the
bd60: 20 6b 65 79 73 20 72 65 70 72 65 73 65 6e 74 2e   keys represent.
bd70: 20 20 52 65 63 6f 72 64 20 63 6f 6d 70 61 72 69    Record compari
bd80: 73 6f 6e 20 70 72 6f 67 72 65 73 73 65 73 20 63  son progresses c
bd90: 6f 6c 75 6d 6e 0a 62 79 20 63 6f 6c 75 6d 6e 2e  olumn.by column.
bda0: 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 72    Columns of a r
bdb0: 65 63 6f 72 64 20 61 72 65 20 65 78 61 6d 69 6e  ecord are examin
bdc0: 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ed from left to 
bdd0: 72 69 67 68 74 2e 20 20 54 68 65 0a 66 69 72 73  right.  The.firs
bde0: 74 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e  t pair of column
bdf0: 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 65  s that are not e
be00: 71 75 61 6c 20 64 65 74 65 72 6d 69 6e 65 73 20  qual determines 
be10: 74 68 65 20 72 65 6c 61 74 69 76 65 20 6f 72 64  the relative ord
be20: 65 72 0a 6f 66 20 74 68 65 20 74 77 6f 20 72 65  er.of the two re
be30: 63 6f 72 64 73 2e 20 20 54 68 65 20 73 6f 72 74  cords.  The sort
be40: 20 6f 72 64 65 72 20 6f 66 20 69 6e 64 69 76 69   order of indivi
be50: 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 69 73 20  dual columns is 
be60: 61 73 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as.follows:</p>.
be70: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28 4e 55 4c 4c  .<ol>.<li>^(NULL
be80: 20 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20   values (serial 
be90: 74 79 70 65 20 30 29 20 73 6f 72 74 20 66 69 72  type 0) sort fir
bea0: 73 74 2e 29 5e 0a 3c 6c 69 3e 5e 28 4e 75 6d 65  st.)^.<li>^(Nume
beb0: 72 69 63 20 76 61 6c 75 65 73 20 28 73 65 72 69  ric values (seri
bec0: 61 6c 20 74 79 70 65 73 20 31 20 74 68 72 6f 75  al types 1 throu
bed0: 67 68 20 39 29 20 73 6f 72 74 20 61 66 74 65 72  gh 9) sort after
bee0: 20 4e 55 4c 4c 73 0a 20 20 20 20 20 20 61 6e 64   NULLs.      and
bef0: 20 69 6e 20 6e 75 6d 65 72 69 63 20 6f 72 64 65   in numeric orde
bf00: 72 2e 29 5e 0a 3c 6c 69 3e 5e 28 54 65 78 74 20  r.)^.<li>^(Text 
bf10: 76 61 6c 75 65 73 20 28 6f 64 64 20 73 65 72 69  values (odd seri
bf20: 61 6c 20 74 79 70 65 73 20 31 33 20 61 6e 64 20  al types 13 and 
bf30: 6c 61 72 67 65 72 29 20 73 6f 72 74 20 61 66 74  larger) sort aft
bf40: 65 72 20 6e 75 6d 65 72 69 63 0a 20 20 20 20 76  er numeric.    v
bf50: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 6f 72 64  alues in the ord
bf60: 65 72 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  er determined by
bf70: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 5b 63 6f   the columns [co
bf80: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
bf90: 5d 2e 29 5e 0a 3c 6c 69 3e 5e 28 42 4c 4f 42 20  ].)^.<li>^(BLOB 
bfa0: 76 61 6c 75 65 73 20 28 65 76 65 6e 20 73 65 72  values (even ser
bfb0: 69 61 6c 20 74 79 70 65 73 20 31 32 20 61 6e 64  ial types 12 and
bfc0: 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20 6c 61   larger) sort la
bfd0: 73 74 20 61 6e 64 20 69 6e 20 74 68 65 20 6f 72  st and in the or
bfe0: 64 65 72 20 0a 20 20 20 20 64 65 74 65 72 6d 69  der .    determi
bff0: 6e 65 64 20 62 79 20 6d 65 6d 63 6d 70 28 29 2e  ned by memcmp().
c000: 29 5e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 41 20 5b  )^.</ol>..<p>A [
c010: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
c020: 6f 6e 5d 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  on] for each col
c030: 75 6d 6e 20 69 73 20 6e 65 63 65 73 73 61 72 79  umn is necessary
c040: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d   in order to com
c050: 70 75 74 65 0a 74 68 65 20 6f 72 64 65 72 20 6f  pute.the order o
c060: 66 20 74 65 78 74 20 66 69 65 6c 64 73 2e 0a 5e  f text fields..^
c070: 28 53 51 4c 69 74 65 20 64 65 66 69 6e 65 73 20  (SQLite defines 
c080: 74 68 72 65 65 20 62 75 69 6c 74 2d 69 6e 20 63  three built-in c
c090: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
c0a0: 6e 73 3a 29 5e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ns:)^.</p>..<blo
c0b0: 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20 62  ckquote><table b
c0c0: 6f 72 64 65 72 3d 30 20 63 65 6c 6c 73 70 61 63  order=0 cellspac
c0d0: 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 3c 74 64 20  ing=10>.<tr><td 
c0e0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 42 49 4e 41 52  valign=top>BINAR
c0f0: 59 0a 20 20 20 20 3c 74 64 3e 20 5e 28 54 68 65  Y.    <td> ^(The
c100: 20 62 75 69 6c 74 2d 69 6e 20 42 49 4e 41 52 59   built-in BINARY
c110: 20 63 6f 6c 6c 61 74 69 6f 6e 20 63 6f 6d 70 61   collation compa
c120: 72 65 73 20 73 74 72 69 6e 67 73 20 62 79 74 65  res strings byte
c130: 20 62 79 20 62 79 74 65 0a 20 20 20 20 20 20 20   by byte.       
c140: 20 75 73 69 6e 67 20 74 68 65 20 6d 65 6d 63 6d   using the memcm
c150: 70 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20  p() function.   
c160: 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 73 74       from the st
c170: 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72 79  andard C library
c180: 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  .)^.<tr><td vali
c190: 67 6e 3d 74 6f 70 3e 4e 4f 43 41 53 45 0a 20 20  gn=top>NOCASE.  
c1a0: 20 20 3c 74 64 3e 20 5e 28 54 68 65 20 4e 4f 43    <td> ^(The NOC
c1b0: 41 53 45 20 63 6f 6c 6c 61 74 69 6f 6e 20 69 73  ASE collation is
c1c0: 20 6c 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63   like BINARY exc
c1d0: 65 70 74 20 74 68 61 74 20 75 70 70 65 72 63 61  ept that upperca
c1e0: 73 65 0a 20 20 20 20 20 20 20 20 41 53 43 49 49  se.        ASCII
c1f0: 20 63 68 61 72 61 63 74 65 72 73 20 28 27 41 27   characters ('A'
c200: 20 74 68 72 6f 75 67 68 20 27 5a 27 29 0a 20 20   through 'Z').  
c210: 20 20 20 20 20 20 61 72 65 20 66 6f 6c 64 65 64        are folded
c220: 20 69 6e 74 6f 20 74 68 65 69 72 20 6c 6f 77 65   into their lowe
c230: 72 63 61 73 65 20 65 71 75 69 76 61 6c 65 6e 74  rcase equivalent
c240: 73 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69  s prior to runni
c250: 6e 67 20 74 68 65 0a 20 20 20 20 20 20 20 20 63  ng the.        c
c260: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 4f 6e 6c 79  omparison.  Only
c270: 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
c280: 73 20 61 72 65 20 63 61 73 65 2d 66 6f 6c 64 65  s are case-folde
c290: 64 2e 29 5e 0a 20 20 20 20 20 20 20 20 5e 28 4e  d.)^.        ^(N
c2a0: 4f 43 41 53 45 0a 20 20 20 20 20 20 20 20 64 6f  OCASE.        do
c2b0: 65 73 20 6e 6f 74 20 69 6d 70 6c 65 6d 65 6e 74  es not implement
c2c0: 20 61 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f   a general purpo
c2d0: 73 65 20 75 6e 69 63 6f 64 65 20 63 61 73 65 6c  se unicode casel
c2e0: 65 73 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 29  ess comparison.)
c2f0: 5e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ^.<tr><td valign
c300: 3d 74 6f 70 3e 52 54 52 49 4d 0a 20 20 20 20 3c  =top>RTRIM.    <
c310: 74 64 3e 20 5e 28 52 54 52 49 4d 20 69 73 20 6c  td> ^(RTRIM is l
c320: 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63 65 70  ike BINARY excep
c330: 74 20 74 68 61 74 20 65 78 74 72 61 20 73 70 61  t that extra spa
c340: 63 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ces at the end o
c350: 66 20 65 69 74 68 65 72 0a 20 20 20 20 20 20 20  f either.       
c360: 20 20 73 74 72 69 6e 67 20 64 6f 20 6e 6f 74 20    string do not 
c370: 63 68 61 6e 67 65 20 74 68 65 20 72 65 73 75 6c  change the resul
c380: 74 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  t.  In other wor
c390: 64 73 2c 20 73 74 72 69 6e 67 73 20 77 69 6c 6c  ds, strings will
c3a0: 0a 20 20 20 20 20 20 20 20 20 63 6f 6d 70 61 72  .         compar
c3b0: 65 20 65 71 75 61 6c 20 74 6f 20 6f 6e 65 20 61  e equal to one a
c3c0: 6e 6f 74 68 65 72 20 61 73 20 6c 6f 6e 67 20 61  nother as long a
c3d0: 73 20 74 68 65 79 0a 20 20 20 20 20 20 20 20 20  s they.         
c3e0: 64 69 66 66 65 72 20 6f 6e 6c 79 20 69 6e 20 74  differ only in t
c3f0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 70 61  he number of spa
c400: 63 65 73 20 61 74 20 74 68 65 20 65 6e 64 2e 29  ces at the end.)
c410: 5e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62 6c 6f 63  ^.</table></bloc
c420: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 5e 41 64 64  kquote>..<p>^Add
c430: 69 74 69 6f 6e 61 6c 20 61 70 70 6c 69 63 61 74  itional applicat
c440: 69 6f 6e 2d 73 70 65 63 69 66 69 63 20 63 6f 6c  ion-specific col
c450: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
c460: 20 63 61 6e 20 62 65 20 61 64 64 65 64 20 74 6f   can be added to
c470: 0a 53 51 4c 69 74 65 20 75 73 69 6e 67 20 74 68  .SQLite using th
c480: 65 20 5b 73 71 6c 69 74 65 33 5f 63 72 65 61 74  e [sqlite3_creat
c490: 65 5f 63 6f 6c 6c 61 74 69 6f 6e 28 29 5d 20 69  e_collation()] i
c4a0: 6e 74 65 72 66 61 63 65 2e 3c 2f 70 3e 0a 0a 3c  nterface.</p>..<
c4b0: 70 3e 5e 54 68 65 20 64 65 66 61 75 6c 74 20 63  p>^The default c
c4c0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
c4d0: 6e 20 66 6f 72 20 61 6c 6c 20 73 74 72 69 6e 67  n for all string
c4e0: 73 20 69 73 20 42 49 4e 41 52 59 2e 0a 5e 41 6c  s is BINARY..^Al
c4f0: 74 65 72 6e 61 74 69 76 65 20 63 6f 6c 6c 61 74  ternative collat
c500: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 20 66 6f  ing functions fo
c510: 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d 6e 73 20  r table columns 
c520: 63 61 6e 20 62 65 20 73 70 65 63 69 66 69 65 64  can be specified
c530: 20 69 6e 20 74 68 65 0a 5b 43 52 45 41 54 45 20   in the.[CREATE 
c540: 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e 74  TABLE] statement
c550: 20 75 73 69 6e 67 20 74 68 65 20 43 4f 4c 4c 41   using the COLLA
c560: 54 45 20 63 6c 61 75 73 65 20 6f 6e 20 74 68 65  TE clause on the
c570: 20 5b 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74   [column definit
c580: 69 6f 6e 5d 2e 0a 5e 57 68 65 6e 20 61 20 63 6f  ion]..^When a co
c590: 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78 65 64 2c  lumn is indexed,
c5a0: 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 6c 61 74   the same collat
c5b0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
c5c0: 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43  cified in the.[C
c5d0: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
c5e0: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 66  tement is used f
c5f0: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  or the column in
c600: 20 74 68 65 20 69 6e 64 65 78 2c 20 62 79 20 64   the index, by d
c610: 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67 68 20 74  efault,.though t
c620: 68 69 73 20 63 61 6e 20 62 65 20 6f 76 65 72 72  his can be overr
c630: 69 64 64 65 6e 20 75 73 69 6e 67 20 61 20 43 4f  idden using a CO
c640: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20  LLATE clause in 
c650: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 49 4e 44  the .[CREATE IND
c660: 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  EX] statement...
c670: 3c 68 32 3e 52 65 70 72 65 73 65 6e 74 61 74 69  <h2>Representati
c680: 6f 6e 20 4f 66 20 53 51 4c 20 54 61 62 6c 65 73  on Of SQL Tables
c690: 3c 2f 68 32 3e 0a 0a 3c 70 3e 20 5e 45 61 63 68  </h2>..<p> ^Each
c6a0: 20 6f 72 64 69 6e 61 72 79 20 53 51 4c 20 74 61   ordinary SQL ta
c6b0: 62 6c 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  ble in the datab
c6c0: 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 72 65  ase schema is re
c6d0: 70 72 65 73 65 6e 74 65 64 20 6f 6e 2d 64 69 73  presented on-dis
c6e0: 6b 0a 62 79 20 61 20 74 61 62 6c 65 20 62 2d 74  k.by a table b-t
c6f0: 72 65 65 2e 20 20 5e 45 61 63 68 20 65 6e 74 72  ree.  ^Each entr
c700: 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  y in the table b
c710: 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64  -tree correspond
c720: 73 20 74 6f 20 61 20 72 6f 77 0a 6f 66 20 74 68  s to a row.of th
c730: 65 20 53 51 4c 20 74 61 62 6c 65 2e 20 20 5e 54  e SQL table.  ^T
c740: 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68  he [rowid] of th
c750: 65 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 74  e SQL table is t
c760: 68 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  he 64-bit signed
c770: 0a 69 6e 74 65 67 65 72 20 6b 65 79 20 66 6f 72  .integer key for
c780: 20 65 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74   each entry in t
c790: 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e  he table b-tree.
c7a0: 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 63  </p>..<p> ^The c
c7b0: 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68 20 53  ontent of each S
c7c0: 51 4c 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  QL table row is 
c7d0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
c7e0: 74 61 62 61 73 65 20 66 69 6c 65 20 62 79 0a 66  tabase file by.f
c7f0: 69 72 73 74 20 63 6f 6d 62 69 6e 69 6e 67 20 74  irst combining t
c800: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  he values in the
c810: 20 76 61 72 69 6f 75 73 20 63 6f 6c 75 6d 6e 73   various columns
c820: 20 69 6e 74 6f 20 61 20 62 79 74 65 20 61 72 72   into a byte arr
c830: 61 79 0a 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ay.in the record
c840: 20 66 6f 72 6d 61 74 2c 20 74 68 65 6e 20 73 74   format, then st
c850: 6f 72 69 6e 67 20 74 68 61 74 20 62 79 74 65 20  oring that byte 
c860: 61 72 72 61 79 20 61 73 20 74 68 65 20 70 61 79  array as the pay
c870: 6c 6f 61 64 20 69 6e 0a 61 6e 20 65 6e 74 72 79  load in.an entry
c880: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   in the table b-
c890: 74 72 65 65 2e 20 20 5e 54 68 65 20 6f 72 64 65  tree.  ^The orde
c8a0: 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74  r of values in t
c8b0: 68 65 20 72 65 63 6f 72 64 20 69 73 0a 74 68 65  he record is.the
c8c0: 20 73 61 6d 65 20 61 73 20 74 68 65 20 6f 72 64   same as the ord
c8d0: 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
c8e0: 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20 64   the SQL table d
c8f0: 65 66 69 6e 69 74 69 6f 6e 2e 0a 5e 57 68 65 6e  efinition..^When
c900: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 6e   an SQL table in
c910: 63 6c 75 64 65 73 20 61 6e 0a 5b 49 4e 54 45 47  cludes an.[INTEG
c920: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  ER PRIMARY KEY] 
c930: 63 6f 6c 75 6d 6e 20 28 77 68 69 63 68 20 61 6c  column (which al
c940: 69 61 73 65 73 20 74 68 65 20 5b 72 6f 77 69 64  iases the [rowid
c950: 5d 29 20 74 68 65 6e 20 74 68 61 74 0a 63 6f 6c  ]) then that.col
c960: 75 6d 6e 20 61 70 70 65 61 72 73 20 69 6e 20 74  umn appears in t
c970: 68 65 20 72 65 63 6f 72 64 20 61 73 20 61 20 4e  he record as a N
c980: 55 4c 4c 20 76 61 6c 75 65 2e 20 20 5e 53 51 4c  ULL value.  ^SQL
c990: 69 74 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ite will always 
c9a0: 75 73 65 0a 74 68 65 20 74 61 62 6c 65 20 62 2d  use.the table b-
c9b0: 74 72 65 65 20 6b 65 79 20 72 61 74 68 65 72 20  tree key rather 
c9c0: 74 68 61 6e 20 74 68 65 20 4e 55 4c 4c 20 76 61  than the NULL va
c9d0: 6c 75 65 20 77 68 65 6e 20 72 65 66 65 72 65 6e  lue when referen
c9e0: 63 69 6e 67 20 74 68 65 0a 5b 49 4e 54 45 47 45  cing the.[INTEGE
c9f0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63  R PRIMARY KEY] c
ca00: 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20  olumn.</p>..<p> 
ca10: 5e 49 66 20 74 68 65 20 5b 61 66 66 69 6e 69 74  ^If the [affinit
ca20: 79 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69  y] of a column i
ca30: 73 20 52 45 41 4c 20 61 6e 64 20 74 68 61 74 20  s REAL and that 
ca40: 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20  column contains 
ca50: 61 0a 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e  a.value that can
ca60: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f   be converted to
ca70: 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
ca80: 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f  out loss of info
ca90: 72 6d 61 74 69 6f 6e 0a 28 69 66 20 74 68 65 20  rmation.(if the 
caa0: 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 73 20 6e  value contains n
cab0: 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72  o fractional par
cac0: 74 20 61 6e 64 20 69 73 20 6e 6f 74 20 74 6f 6f  t and is not too
cad0: 20 6c 61 72 67 65 20 74 6f 20 62 65 0a 72 65 70   large to be.rep
cae0: 72 65 73 65 6e 74 65 64 20 61 73 20 61 6e 20 69  resented as an i
caf0: 6e 74 65 67 65 72 29 20 74 68 65 6e 20 74 68 65  nteger) then the
cb00: 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 62 65 20 73   column may be s
cb10: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 72 65 63  tored in the rec
cb20: 6f 72 64 0a 61 73 20 61 6e 20 69 6e 74 65 67 65  ord.as an intege
cb30: 72 2e 20 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c  r.  ^SQLite will
cb40: 20 63 6f 6e 76 65 72 74 20 74 68 65 20 76 61 6c   convert the val
cb50: 75 65 20 62 61 63 6b 20 74 6f 20 66 6c 6f 61 74  ue back to float
cb60: 69 6e 67 0a 70 6f 69 6e 74 20 77 68 65 6e 20 65  ing.point when e
cb70: 78 74 72 61 63 74 69 6e 67 20 69 74 20 66 72 6f  xtracting it fro
cb80: 6d 20 74 68 65 20 72 65 63 6f 72 64 2e 3c 2f 70  m the record.</p
cb90: 3e 0a 0a 3c 68 32 3e 52 65 70 72 65 73 65 6e 74  >..<h2>Represent
cba0: 61 74 69 6f 6e 20 6f 66 20 57 49 54 48 4f 55 54  ation of WITHOUT
cbb0: 20 52 4f 57 49 44 20 54 61 62 6c 65 73 3c 2f 68   ROWID Tables</h
cbc0: 32 3e 0a 0a 3c 70 3e 5e 49 66 20 61 6e 20 53 51  2>..<p>^If an SQ
cbd0: 4c 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  L table is creat
cbe0: 65 64 20 75 73 69 6e 67 20 74 68 65 20 22 57 49  ed using the "WI
cbf0: 54 48 4f 55 54 20 52 4f 57 49 44 22 20 63 6c 61  THOUT ROWID" cla
cc00: 75 73 65 20 61 74 20 74 68 65 0a 65 6e 64 20 6f  use at the.end o
cc10: 66 20 69 74 73 20 43 52 45 41 54 45 20 54 41 42  f its CREATE TAB
cc20: 4c 45 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  LE statement, th
cc30: 65 6e 20 74 68 61 74 20 74 61 62 6c 65 20 69 73  en that table is
cc40: 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57 49   a [WITHOUT ROWI
cc50: 44 5d 0a 74 61 62 6c 65 20 61 6e 64 20 75 73 65  D].table and use
cc60: 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 6f 6e  s a different on
cc70: 2d 64 69 73 6b 20 72 65 70 72 65 73 65 6e 74 61  -disk representa
cc80: 74 69 6f 6e 2e 20 20 5e 41 20 57 49 54 48 4f 55  tion.  ^A WITHOU
cc90: 54 20 52 4f 57 49 44 0a 74 61 62 6c 65 20 75 73  T ROWID.table us
cca0: 65 73 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  es an index b-tr
ccb0: 65 65 20 72 61 74 68 65 72 20 74 68 61 6e 20 61  ee rather than a
ccc0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 66 6f   table b-tree fo
ccd0: 72 20 73 74 6f 72 61 67 65 2e 0a 5e 54 68 65 20  r storage..^The 
cce0: 6b 65 79 20 66 6f 72 20 65 61 63 68 20 65 6e 74  key for each ent
ccf0: 72 79 20 69 6e 20 74 68 65 20 57 49 54 48 4f 55  ry in the WITHOU
cd00: 54 20 52 4f 57 49 44 20 62 2d 74 72 65 65 20 69  T ROWID b-tree i
cd10: 73 20 61 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f  s a record compo
cd20: 73 65 64 0a 6f 66 20 74 68 65 20 63 6f 6c 75 6d  sed.of the colum
cd30: 6e 73 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52  ns of the PRIMAR
cd40: 59 20 4b 45 59 20 66 6f 6c 6c 6f 77 65 64 20 62  Y KEY followed b
cd50: 79 20 61 6c 6c 20 72 65 6d 61 69 6e 69 6e 67 20  y all remaining 
cd60: 63 6f 6c 75 6d 6e 73 20 6f 66 0a 74 68 65 20 74  columns of.the t
cd70: 61 62 6c 65 2e 20 20 5e 54 68 65 20 70 72 69 6d  able.  ^The prim
cd80: 61 72 79 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  ary key columns 
cd90: 61 70 70 65 61 72 20 69 6e 20 74 68 65 20 6f 72  appear in the or
cda0: 64 65 72 20 74 68 65 79 20 74 68 65 79 20 77 65  der they they we
cdb0: 72 65 0a 64 65 63 6c 61 72 65 64 20 69 6e 20 74  re.declared in t
cdc0: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63  he PRIMARY KEY c
cdd0: 6c 61 75 73 65 20 61 6e 64 20 74 68 65 20 72 65  lause and the re
cde0: 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20  maining columns 
cdf0: 61 70 70 65 61 72 20 69 6e 0a 74 68 65 20 6f 72  appear in.the or
ce00: 64 65 72 20 74 68 65 79 20 6f 63 63 75 72 20 69  der they occur i
ce10: 6e 20 74 68 65 20 43 52 45 41 54 45 20 54 41 42  n the CREATE TAB
ce20: 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a 3c  LE statement...<
ce30: 70 3e 5e 48 65 6e 63 65 2c 20 74 68 65 20 63 6f  p>^Hence, the co
ce40: 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20 66  ntent encoding f
ce50: 6f 72 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57  or a WITHOUT ROW
ce60: 49 44 20 74 61 62 6c 65 20 69 73 20 74 68 65 20  ID table is the 
ce70: 73 61 6d 65 0a 61 73 20 74 68 65 20 63 6f 6e 74  same.as the cont
ce80: 65 6e 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72  ent encoding for
ce90: 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f 77   an ordinary row
cea0: 69 64 20 74 61 62 6c 65 2c 20 65 78 63 65 70 74  id table, except
ceb0: 20 74 68 61 74 20 74 68 65 0a 6f 72 64 65 72 20   that the.order 
cec0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69  of the columns i
ced0: 73 20 72 65 61 72 72 61 6e 67 65 64 20 73 6f 20  s rearranged so 
cee0: 74 68 61 74 20 50 52 49 4d 41 52 59 20 4b 45 59  that PRIMARY KEY
cef0: 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65 0a 66 69   columns come.fi
cf00: 72 73 74 2c 20 61 6e 64 20 74 68 65 20 63 6f 6e  rst, and the con
cf10: 74 65 6e 74 20 69 73 20 75 73 65 64 20 61 73 20  tent is used as 
cf20: 74 68 65 20 6b 65 79 20 69 6e 20 61 6e 20 69 6e  the key in an in
cf30: 64 65 78 20 62 2d 74 72 65 65 20 72 61 74 68 65  dex b-tree rathe
cf40: 72 0a 74 68 61 6e 20 61 73 20 74 68 65 20 64 61  r.than as the da
cf50: 74 61 20 69 6e 20 61 20 74 61 62 6c 65 20 62 2d  ta in a table b-
cf60: 74 72 65 65 2e 0a 5e 54 68 65 20 73 70 65 63 69  tree..^The speci
cf70: 61 6c 20 65 6e 63 6f 64 69 6e 67 20 72 75 6c 65  al encoding rule
cf80: 73 20 66 6f 72 20 63 6f 6c 75 6d 6e 73 20 77 69  s for columns wi
cf90: 74 68 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79  th REAL affinity
cfa0: 0a 61 70 70 6c 79 20 74 6f 20 57 49 54 48 4f 55  .apply to WITHOU
cfb0: 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 20 74  T ROWID tables t
cfc0: 68 65 20 73 61 6d 65 20 61 73 20 74 68 65 79 20  he same as they 
cfd0: 64 6f 20 77 69 74 68 20 72 6f 77 69 64 20 74 61  do with rowid ta
cfe0: 62 6c 65 73 2e 0a 0a 3c 68 32 3e 52 65 70 72 65  bles...<h2>Repre
cff0: 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c  sentation Of SQL
d000: 20 49 6e 64 69 63 65 73 3c 2f 68 32 3e 0a 0a 3c   Indices</h2>..<
d010: 70 3e 5e 45 61 63 68 20 53 51 4c 20 69 6e 64 65  p>^Each SQL inde
d020: 78 2c 20 77 68 65 74 68 65 72 20 65 78 70 6c 69  x, whether expli
d030: 63 69 74 6c 79 20 64 65 63 6c 61 72 65 64 20 76  citly declared v
d040: 69 61 20 61 20 5b 43 52 45 41 54 45 20 49 4e 44  ia a [CREATE IND
d050: 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 0a 6f 72  EX] statement.or
d060: 20 69 6d 70 6c 69 65 64 20 62 79 20 61 20 55 4e   implied by a UN
d070: 49 51 55 45 20 6f 72 20 50 52 49 4d 41 52 59 20  IQUE or PRIMARY 
d080: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20  KEY constraint, 
d090: 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 61  corresponds to a
d0a0: 6e 20 0a 69 6e 64 65 78 20 62 2d 74 72 65 65 20  n .index b-tree 
d0b0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
d0c0: 66 69 6c 65 2e 0a 5e 45 61 63 68 20 65 6e 74 72  file..^Each entr
d0d0: 79 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 62  y in the index b
d0e0: 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64  -tree correspond
d0f0: 73 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 72 6f  s to a single ro
d100: 77 20 69 6e 20 74 68 65 20 0a 61 73 73 6f 63 69  w in the .associ
d110: 61 74 65 64 20 53 51 4c 20 74 61 62 6c 65 2e 0a  ated SQL table..
d120: 5e 54 68 65 20 6b 65 79 20 74 6f 20 61 6e 20 69  ^The key to an i
d130: 6e 64 65 78 20 62 2d 74 72 65 65 20 69 73 0a 61  ndex b-tree is.a
d140: 20 72 65 63 6f 72 64 20 63 6f 6d 70 6f 73 65 64   record composed
d150: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
d160: 74 68 61 74 20 61 72 65 20 62 65 69 6e 67 20 69  that are being i
d170: 6e 64 65 78 65 64 20 66 6f 6c 6c 6f 77 65 64 20  ndexed followed 
d180: 62 79 20 74 68 65 0a 6b 65 79 20 6f 66 20 74 68  by the.key of th
d190: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
d1a0: 74 61 62 6c 65 20 72 6f 77 2e 20 20 46 6f 72 20  table row.  For 
d1b0: 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73 2c  ordinary tables,
d1c0: 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69 73 0a   the row key is.
d1d0: 74 68 65 20 5b 72 6f 77 69 64 5d 2c 20 61 6e 64  the [rowid], and
d1e0: 20 66 6f 72 20 5b 57 49 54 48 4f 55 54 20 52 4f   for [WITHOUT RO
d1f0: 57 49 44 5d 20 74 61 62 6c 65 73 20 74 68 65 20  WID] tables the 
d200: 72 6f 77 20 6b 65 79 20 69 73 20 74 68 65 20 50  row key is the P
d210: 52 49 4d 41 52 59 20 4b 45 59 2e 0a 42 65 63 61  RIMARY KEY..Beca
d220: 75 73 65 20 65 76 65 72 79 20 72 6f 77 20 69 6e  use every row in
d230: 20 74 68 65 20 74 61 62 6c 65 20 68 61 73 20 61   the table has a
d240: 20 75 6e 69 71 75 65 20 72 6f 77 20 6b 65 79 2c   unique row key,
d250: 0a 61 6c 6c 20 6b 65 79 73 20 69 6e 20 61 6e 20  .all keys in an 
d260: 69 6e 64 65 78 20 61 72 65 20 75 6e 69 71 75 65  index are unique
d270: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 20  .</p>..<p>^In a 
d280: 6e 6f 72 6d 61 6c 20 69 6e 64 65 78 2c 20 74 68  normal index, th
d290: 65 72 65 20 69 73 20 61 20 6f 6e 65 2d 74 6f 2d  ere is a one-to-
d2a0: 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65 74 77  one mapping betw
d2b0: 65 65 6e 20 72 6f 77 73 20 69 6e 20 61 20 0a 74  een rows in a .t
d2c0: 61 62 6c 65 20 61 6e 64 20 65 6e 74 72 69 65 73  able and entries
d2d0: 20 69 6e 20 65 61 63 68 20 69 6e 64 65 78 20 61   in each index a
d2e0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
d2f0: 68 61 74 20 74 61 62 6c 65 2e 0a 5e 48 6f 77 65  hat table..^Howe
d300: 76 65 72 2c 20 69 6e 20 61 20 5b 70 61 72 74 69  ver, in a [parti
d310: 61 6c 20 69 6e 64 65 78 5d 2c 20 74 68 65 20 69  al index], the i
d320: 6e 64 65 78 20 62 2d 74 72 65 65 20 6f 6e 6c 79  ndex b-tree only
d330: 20 63 6f 6e 74 61 69 6e 73 20 65 6e 74 72 69 65   contains entrie
d340: 73 0a 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  s.corresponding 
d350: 74 6f 20 74 61 62 6c 65 20 72 6f 77 73 20 66 6f  to table rows fo
d360: 72 20 77 68 69 63 68 20 74 68 65 20 57 48 45 52  r which the WHER
d370: 45 20 63 6c 61 75 73 65 20 65 78 70 72 65 73 73  E clause express
d380: 69 6f 6e 20 6f 6e 20 74 68 65 0a 43 52 45 41 54  ion on the.CREAT
d390: 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e  E INDEX statemen
d3a0: 74 20 69 73 20 74 72 75 65 2e 0a 5e 43 6f 72 72  t is true..^Corr
d3b0: 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77 73 20 69  esponding rows i
d3c0: 6e 20 74 68 65 20 69 6e 64 65 78 20 61 6e 64 20  n the index and 
d3d0: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 73 68  table b-trees sh
d3e0: 61 72 65 20 74 68 65 20 73 61 6d 65 20 72 6f 77  are the same row
d3f0: 69 64 0a 6f 72 20 70 72 69 6d 61 72 79 20 6b 65  id.or primary ke
d400: 79 20 76 61 6c 75 65 73 20 61 6e 64 20 63 6f 6e  y values and con
d410: 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20 76 61  tain the same va
d420: 6c 75 65 20 66 6f 72 20 61 6c 6c 20 69 6e 64 65  lue for all inde
d430: 78 65 64 20 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e  xed columns.</p>
d440: 0a 0a 3c 68 33 3e 53 75 70 70 72 65 73 73 69 6f  ..<h3>Suppressio
d450: 6e 20 6f 66 20 72 65 64 75 6e 64 61 6e 74 20 63  n of redundant c
d460: 6f 6c 75 6d 6e 73 20 69 6e 20 57 49 54 48 4f 55  olumns in WITHOU
d470: 54 20 52 4f 57 49 44 20 73 65 63 6f 6e 64 61 72  T ROWID secondar
d480: 79 20 69 6e 64 65 78 65 73 0a 3c 2f 68 33 3e 0a  y indexes.</h3>.
d490: 0a 3c 70 3e 20 5e 49 6e 20 61 6e 20 69 6e 64 65  .<p> ^In an inde
d4a0: 78 20 6f 6e 20 61 20 57 49 54 48 4f 55 54 20 52  x on a WITHOUT R
d4b0: 4f 57 49 44 20 74 61 62 6c 65 2c 20 69 66 20 6f  OWID table, if o
d4c0: 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  ne or more of th
d4d0: 65 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65  e columns.of the
d4e0: 20 74 61 62 6c 65 20 50 52 49 4d 41 52 59 20 4b   table PRIMARY K
d4f0: 45 59 20 61 72 65 20 61 6c 73 6f 20 63 6f 6c 75  EY are also colu
d500: 6d 6e 73 20 6f 66 20 74 68 65 20 69 6e 64 65 78  mns of the index
d510: 2c 20 74 68 65 6e 20 74 68 65 0a 69 6e 64 65 78  , then the.index
d520: 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 6f 74  ed column is not
d530: 20 72 65 70 65 61 74 65 64 20 69 6e 20 74 68 65   repeated in the
d540: 20 74 61 62 6c 65 2d 6b 65 79 20 73 75 66 66 69   table-key suffi
d550: 78 20 6f 6e 20 74 68 65 20 65 6e 64 20 6f 66 0a  x on the end of.
d560: 74 68 65 20 69 6e 64 65 78 20 72 65 63 6f 72 64  the index record
d570: 2e 20 20 5e 28 41 73 20 61 6e 20 65 78 61 6d 70  .  ^(As an examp
d580: 6c 65 2c 20 63 6f 6e 73 69 64 65 72 20 74 68 65  le, consider the
d590: 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c 3a 0a   following SQL:.
d5a0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
d5b0: 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
d5c0: 65 78 32 35 28 61 2c 62 2c 63 2c 64 2c 65 2c 50  ex25(a,b,c,d,e,P
d5d0: 52 49 4d 41 52 59 20 4b 45 59 28 64 2c 63 2c 61  RIMARY KEY(d,c,a
d5e0: 29 29 20 57 49 54 48 4f 55 54 20 72 6f 77 69 64  )) WITHOUT rowid
d5f0: 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58 20 65  ;.CREATE INDEX e
d600: 78 32 35 63 65 20 4f 4e 20 65 78 32 35 28 63 2c  x25ce ON ex25(c,
d610: 65 29 3b 0a 43 52 45 41 54 45 20 49 4e 44 45 58  e);.CREATE INDEX
d620: 20 65 78 32 35 61 63 64 65 20 4f 4e 20 65 78 32   ex25acde ON ex2
d630: 35 28 61 2c 63 2c 64 2c 65 29 3b 0a 3c 2f 70 72  5(a,c,d,e);.</pr
d640: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
d650: 0a 3c 70 3e 45 61 63 68 20 72 6f 77 20 69 6e 20  .<p>Each row in 
d660: 74 68 65 20 65 78 32 35 63 65 20 69 6e 64 65 78  the ex25ce index
d670: 20 69 73 20 61 20 72 65 63 6f 72 64 0a 77 69 74   is a record.wit
d680: 68 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 73 3a  h these columns:
d690: 20 63 2c 20 65 2c 20 64 2c 20 61 2e 20 20 54 68   c, e, d, a.  Th
d6a0: 65 20 66 69 72 73 74 20 74 77 6f 20 63 6f 6c 75  e first two colu
d6b0: 6d 6e 73 20 61 72 65 0a 74 68 65 20 63 6f 6c 75  mns are.the colu
d6c0: 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65  mns being indexe
d6d0: 64 2c 20 63 20 61 6e 64 20 65 2e 20 20 54 68 65  d, c and e.  The
d6e0: 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c 75 6d   remaining colum
d6f0: 6e 73 20 61 72 65 20 74 68 65 20 70 72 69 6d 61  ns are the prima
d700: 72 79 0a 6b 65 79 20 6f 66 20 74 68 65 20 63 6f  ry.key of the co
d710: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c  rresponding tabl
d720: 65 20 72 6f 77 2e 20 20 4e 6f 72 6d 61 6c 6c 79  e row.  Normally
d730: 2c 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  , the primary ke
d740: 79 20 77 6f 75 6c 64 20 62 65 0a 63 6f 6c 75 6d  y would be.colum
d750: 6e 73 20 64 2c 20 63 2c 20 61 6e 64 20 61 2c 20  ns d, c, and a, 
d760: 62 75 74 20 62 65 63 61 75 73 65 20 63 6f 6c 75  but because colu
d770: 6d 6e 20 63 20 61 6c 72 65 61 64 79 20 61 70 70  mn c already app
d780: 65 61 72 73 20 65 61 72 6c 69 65 72 20 69 6e 20  ears earlier in 
d790: 74 68 65 0a 69 6e 64 65 78 2c 20 69 74 20 69 73  the.index, it is
d7a0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
d7b0: 65 20 6b 65 79 20 73 75 66 66 69 78 2e 29 5e 3c  e key suffix.)^<
d7c0: 2f 70 3e 0a 0a 3c 70 3e 5e 28 49 6e 20 74 68 65  /p>..<p>^(In the
d7d0: 20 65 78 74 72 65 6d 65 20 63 61 73 65 20 77 68   extreme case wh
d7e0: 65 72 65 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  ere the columns 
d7f0: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 63 6f  being indexed co
d800: 76 65 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a  ver all columns.
d810: 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  of the PRIMARY K
d820: 45 59 2c 20 74 68 65 20 69 6e 64 65 78 20 77 69  EY, the index wi
d830: 6c 6c 20 63 6f 6e 73 69 73 74 20 6f 66 20 6f 6e  ll consist of on
d840: 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62  ly the columns b
d850: 65 69 6e 67 0a 69 6e 64 65 78 65 64 2e 20 20 54  eing.indexed.  T
d860: 68 65 20 65 78 32 35 61 63 64 65 20 65 78 61 6d  he ex25acde exam
d870: 70 6c 65 20 61 62 6f 76 65 20 64 65 6d 6f 6e 73  ple above demons
d880: 74 72 61 74 65 73 20 74 68 69 73 2e 29 5e 20 20  trates this.)^  
d890: 5e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 0a 74  ^Each entry in.t
d8a0: 68 65 20 65 78 32 35 61 63 64 65 20 69 6e 64 65  he ex25acde inde
d8b0: 78 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e  x consists of on
d8c0: 6c 79 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 61  ly the columns a
d8d0: 2c 20 63 2c 20 64 2c 20 61 6e 64 20 65 2c 20 69  , c, d, and e, i
d8e0: 6e 20 74 68 61 74 0a 6f 72 64 65 72 2e 3c 2f 70  n that.order.</p
d8f0: 3e 0a 0a 3c 70 3e 20 5e 54 68 65 20 73 75 70 70  >..<p> ^The supp
d900: 72 65 73 73 69 6f 6e 20 6f 66 20 72 65 64 75 6e  ression of redun
d910: 64 61 6e 74 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  dant columns in 
d920: 74 68 65 20 6b 65 79 20 73 75 66 66 69 78 20 6f  the key suffix o
d930: 66 20 61 6e 20 69 6e 64 65 78 0a 65 6e 74 72 79  f an index.entry
d940: 20 6f 6e 6c 79 20 6f 63 63 75 72 73 20 69 6e 20   only occurs in 
d950: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
d960: 62 6c 65 73 2e 20 20 5e 49 6e 20 61 6e 20 6f 72  bles.  ^In an or
d970: 64 69 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62  dinary rowid tab
d980: 6c 65 2c 0a 74 68 65 20 69 6e 64 65 78 20 65 6e  le,.the index en
d990: 74 72 79 20 61 6c 77 61 79 73 20 65 6e 64 73 20  try always ends 
d9a0: 77 69 74 68 20 74 68 65 20 72 6f 77 69 64 20 65  with the rowid e
d9b0: 76 65 6e 20 69 66 20 74 68 65 20 5b 49 4e 54 45  ven if the [INTE
d9c0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
d9d0: 0a 63 6f 6c 75 6d 6e 20 69 73 20 6f 6e 65 20 6f  .column is one o
d9e0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 62 65  f the columns be
d9f0: 69 6e 67 20 69 6e 64 65 78 65 64 2e 3c 2f 70 3e  ing indexed.</p>
da00: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
da10: 6e 74 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  nt sqlite_master
da20: 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d   {sqlite_master}
da30: 20 7b 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20   {sqlite_master 
da40: 74 61 62 6c 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 32  table}</tcl>.<h2
da50: 3e 53 74 6f 72 61 67 65 20 4f 66 20 54 68 65 20  >Storage Of The 
da60: 53 51 4c 20 44 61 74 61 62 61 73 65 20 53 63 68  SQL Database Sch
da70: 65 6d 61 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 50 61  ema</h2>..<p>^Pa
da80: 67 65 20 31 20 6f 66 20 61 20 64 61 74 61 62 61  ge 1 of a databa
da90: 73 65 20 66 69 6c 65 20 69 73 20 74 68 65 20 72  se file is the r
daa0: 6f 6f 74 20 70 61 67 65 20 6f 66 20 61 20 74 61  oot page of a ta
dab0: 62 6c 65 20 62 2d 74 72 65 65 20 74 68 61 74 0a  ble b-tree that.
dac0: 68 6f 6c 64 73 20 61 20 73 70 65 63 69 61 6c 20  holds a special 
dad0: 74 61 62 6c 65 20 6e 61 6d 65 64 20 22 73 71 6c  table named "sql
dae0: 69 74 65 5f 6d 61 73 74 65 72 22 20 28 6f 72 20  ite_master" (or 
daf0: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
db00: 74 65 72 22 20 69 6e 0a 74 68 65 20 63 61 73 65  ter" in.the case
db10: 20 6f 66 20 61 20 54 45 4d 50 20 64 61 74 61 62   of a TEMP datab
db20: 61 73 65 29 20 77 68 69 63 68 20 73 74 6f 72 65  ase) which store
db30: 73 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 0a 64  s the complete.d
db40: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
db50: 20 5e 28 54 68 65 20 73 74 72 75 63 74 75 72 65   ^(The structure
db60: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   of the sqlite_m
db70: 61 73 74 65 72 20 74 61 62 6c 65 20 69 73 20 61  aster table is a
db80: 73 0a 69 66 20 69 74 20 68 61 64 20 62 65 65 6e  s.if it had been
db90: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74   created using t
dba0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 53 51 4c  he following SQL
dbb0: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
dbc0: 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
dbd0: 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 6d 61 73  TABLE sqlite_mas
dbe0: 74 65 72 28 0a 20 20 74 79 70 65 20 74 65 78 74  ter(.  type text
dbf0: 2c 0a 20 20 6e 61 6d 65 20 74 65 78 74 2c 0a 20  ,.  name text,. 
dc00: 20 74 62 6c 5f 6e 61 6d 65 20 74 65 78 74 2c 0a   tbl_name text,.
dc10: 20 20 72 6f 6f 74 70 61 67 65 20 69 6e 74 65 67    rootpage integ
dc20: 65 72 2c 0a 20 20 73 71 6c 20 74 65 78 74 0a 29  er,.  sql text.)
dc30: 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71  ;.</pre></blockq
dc40: 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65  uote>)^..<p>^The
dc50: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
dc60: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  able contains on
dc70: 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 74  e row for each t
dc80: 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 76 69 65  able, index, vie
dc90: 77 2c 0a 61 6e 64 20 74 72 69 67 67 65 72 20 28  w,.and trigger (
dca0: 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 22 6f 62  collectively "ob
dcb0: 6a 65 63 74 73 22 29 20 69 6e 20 74 68 65 20 64  jects") in the d
dcc0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
dcd0: 65 78 63 65 70 74 20 74 68 65 72 65 0a 69 73 20  except there.is 
dce0: 6e 6f 20 65 6e 74 72 79 20 66 6f 72 20 74 68 65  no entry for the
dcf0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74   sqlite_master t
dd00: 61 62 6c 65 20 69 74 73 65 6c 66 2e 20 20 5e 54  able itself.  ^T
dd10: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
dd20: 20 74 61 62 6c 65 0a 63 6f 6e 74 61 69 6e 73 20   table.contains 
dd30: 65 6e 74 72 69 65 73 20 66 6f 72 20 5b 69 6e 74  entries for [int
dd40: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
dd50: 65 63 74 73 5d 20 69 6e 20 61 64 64 69 74 69 6f  ects] in additio
dd60: 6e 20 74 6f 20 61 70 70 6c 69 63 61 74 69 6f 6e  n to application
dd70: 2d 0a 61 6e 64 20 70 72 6f 67 72 61 6d 6d 65 72  -.and programmer
dd80: 2d 64 65 66 69 6e 65 64 20 6f 62 6a 65 63 74 73  -defined objects
dd90: 2e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c  ....<p>^(The sql
dda0: 69 74 65 5f 6d 61 73 74 65 72 2e 74 79 70 65 20  ite_master.type 
ddb0: 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 20 6f  column will be o
ddc0: 6e 65 0a 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne.of the follow
ddd0: 69 6e 67 20 74 65 78 74 20 73 74 72 69 6e 67 73  ing text strings
dde0: 3a 20 20 27 74 61 62 6c 65 27 2c 20 27 69 6e 64  :  'table', 'ind
ddf0: 65 78 27 2c 20 27 76 69 65 77 27 2c 20 6f 72 20  ex', 'view', or 
de00: 27 74 72 69 67 67 65 72 27 0a 61 63 63 6f 72 64  'trigger'.accord
de10: 69 6e 67 20 74 6f 20 74 68 65 20 74 79 70 65 20  ing to the type 
de20: 6f 66 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65  of object define
de30: 64 2e 20 20 54 68 65 20 27 74 61 62 6c 65 27 20  d.  The 'table' 
de40: 73 74 72 69 6e 67 20 69 73 20 75 73 65 64 0a 66  string is used.f
de50: 6f 72 20 62 6f 74 68 20 6f 72 64 69 6e 61 72 79  or both ordinary
de60: 20 61 6e 64 20 5b 76 69 72 74 75 61 6c 20 74 61   and [virtual ta
de70: 62 6c 65 73 5d 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70  bles].)^</p>..<p
de80: 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  >^(The sqlite_ma
de90: 73 74 65 72 2e 6e 61 6d 65 20 63 6f 6c 75 6d 6e  ster.name column
dea0: 20 77 69 6c 6c 20 68 6f 6c 64 20 74 68 65 20 6e   will hold the n
deb0: 61 6d 65 20 6f 66 20 74 68 65 20 6f 62 6a 65 63  ame of the objec
dec0: 74 2e 29 5e 0a 5e 28 5b 55 4e 49 51 55 45 5d 20  t.)^.^([UNIQUE] 
ded0: 61 6e 64 20 5b 50 52 49 4d 41 52 59 20 4b 45 59  and [PRIMARY KEY
dee0: 5d 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 6f 6e  ] constraints on
def0: 20 74 61 62 6c 65 73 20 63 61 75 73 65 20 53 51   tables cause SQ
df00: 4c 69 74 65 20 74 6f 20 63 72 65 61 74 65 0a 5b  Lite to create.[
df10: 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 65 73  internal indexes
df20: 5d 20 77 69 74 68 20 6e 61 6d 65 73 20 6f 66 20  ] with names of 
df30: 74 68 65 20 66 6f 72 6d 20 22 73 71 6c 69 74 65  the form "sqlite
df40: 5f 61 75 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45  _autoindex_TABLE
df50: 5f 4e 22 0a 77 68 65 72 65 20 54 41 42 4c 45 20  _N".where TABLE 
df60: 69 73 20 72 65 70 6c 61 63 65 64 20 62 79 20 74  is replaced by t
df70: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
df80: 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
df90: 6e 73 20 74 68 65 0a 63 6f 6e 73 74 72 61 69 6e  ns the.constrain
dfa0: 74 20 61 6e 64 20 4e 20 69 73 20 61 6e 20 69 6e  t and N is an in
dfb0: 74 65 67 65 72 20 62 65 67 69 6e 6e 69 6e 67 20  teger beginning 
dfc0: 77 69 74 68 20 31 20 61 6e 64 20 69 6e 63 72 65  with 1 and incre
dfd0: 61 73 69 6e 67 20 62 79 20 6f 6e 65 0a 77 69 74  asing by one.wit
dfe0: 68 20 65 61 63 68 20 63 6f 6e 73 74 72 61 69 6e  h each constrain
dff0: 74 20 73 65 65 6e 20 69 6e 20 74 68 65 20 74 61  t seen in the ta
e000: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 29  ble definition.)
e010: 5e 0a 5e 28 49 6e 20 61 20 5b 57 49 54 48 4f 55  ^.^(In a [WITHOU
e020: 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 20  T ROWID] table, 
e030: 74 68 65 72 65 20 69 73 20 6e 6f 20 73 71 6c 69  there is no sqli
e040: 74 65 5f 6d 61 73 74 65 72 20 65 6e 74 72 79 20  te_master entry 
e050: 66 6f 72 20 74 68 65 0a 50 52 49 4d 41 52 59 20  for the.PRIMARY 
e060: 4b 45 59 2c 20 62 75 74 20 74 68 65 20 22 73 71  KEY, but the "sq
e070: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 54  lite_autoindex_T
e080: 41 42 4c 45 5f 4e 22 20 6e 61 6d 65 20 69 73 20  ABLE_N" name is 
e090: 73 65 74 20 61 73 69 64 65 0a 66 6f 72 20 74 68  set aside.for th
e0a0: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 73  e PRIMARY KEY as
e0b0: 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 5f 6d   if the sqlite_m
e0c0: 61 73 74 65 72 20 65 6e 74 72 79 20 64 69 64 20  aster entry did 
e0d0: 65 78 69 73 74 2e 20 20 54 68 69 73 0a 77 69 6c  exist.  This.wil
e0e0: 6c 20 61 66 66 65 63 74 20 74 68 65 20 6e 75 6d  l affect the num
e0f0: 62 65 72 69 6e 67 20 6f 66 20 73 75 62 73 65 71  bering of subseq
e100: 75 65 6e 74 20 55 4e 49 51 55 45 20 63 6f 6e 73  uent UNIQUE cons
e110: 74 72 61 69 6e 74 73 2e 29 5e 0a 5e 54 68 65 20  traints.)^.^The 
e120: 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65  "sqlite_autoinde
e130: 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d 65 20  x_TABLE_N" name 
e140: 69 73 20 6e 65 76 65 72 20 61 6c 6c 6f 63 61 74  is never allocat
e150: 65 64 20 66 6f 72 20 61 6e 0a 5b 49 4e 54 45 47  ed for an.[INTEG
e160: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 2c  ER PRIMARY KEY],
e170: 20 65 69 74 68 65 72 20 69 6e 20 72 6f 77 69 64   either in rowid
e180: 20 74 61 62 6c 65 73 20 6f 72 20 57 49 54 48 4f   tables or WITHO
e190: 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 73 2e  UT ROWID tables.
e1a0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 71  .</p>..<p>The sq
e1b0: 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 62 6c 5f  lite_master.tbl_
e1c0: 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  name column hold
e1d0: 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
e1e0: 74 61 62 6c 65 20 6f 72 20 76 69 65 77 0a 74 68  table or view.th
e1f0: 61 74 20 74 68 65 20 6f 62 6a 65 63 74 20 69 73  at the object is
e200: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
e210: 2e 20 20 5e 46 6f 72 20 61 20 74 61 62 6c 65 20  .  ^For a table 
e220: 6f 72 20 76 69 65 77 2c 20 74 68 65 0a 74 62 6c  or view, the.tbl
e230: 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 69 73 20  _name column is 
e240: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6e 61  a copy of the na
e250: 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 5e 46 6f 72  me column.  ^For
e260: 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 20 74   an index, the t
e270: 62 6c 5f 6e 61 6d 65 0a 69 73 20 74 68 65 20 6e  bl_name.is the n
e280: 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
e290: 20 74 68 61 74 20 69 73 20 69 6e 64 65 78 65 64   that is indexed
e2a0: 2e 20 20 5e 46 6f 72 20 61 20 74 72 69 67 67 65  .  ^For a trigge
e2b0: 72 2c 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a  r, the tbl_name.
e2c0: 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74 68  column stores th
e2d0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
e2e0: 62 6c 65 20 6f 72 20 76 69 65 77 20 74 68 61 74  ble or view that
e2f0: 20 63 61 75 73 65 73 20 74 68 65 20 74 72 69 67   causes the trig
e300: 67 65 72 20 0a 74 6f 20 66 69 72 65 2e 3c 2f 70  ger .to fire.</p
e310: 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69  >..<p>^(The sqli
e320: 74 65 5f 6d 61 73 74 65 72 2e 72 6f 6f 74 70 61  te_master.rootpa
e330: 67 65 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73  ge column stores
e340: 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   the page number
e350: 20 6f 66 20 74 68 65 20 72 6f 6f 74 0a 62 2d 74   of the root.b-t
e360: 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 61 62  ree page for tab
e370: 6c 65 73 20 61 6e 64 20 69 6e 64 65 78 65 73 2e  les and indexes.
e380: 29 5e 20 20 5e 46 6f 72 20 72 6f 77 73 20 74 68  )^  ^For rows th
e390: 61 74 20 64 65 66 69 6e 65 20 76 69 65 77 73 2c  at define views,
e3a0: 20 74 72 69 67 67 65 72 73 2c 0a 61 6e 64 20 76   triggers,.and v
e3b0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 74  irtual tables, t
e3c0: 68 65 20 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75  he rootpage colu
e3d0: 6d 6e 20 69 73 20 30 20 6f 72 20 4e 55 4c 4c 2e  mn is 0 or NULL.
e3e0: 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73  </p>..<p>^(The s
e3f0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c  qlite_master.sql
e400: 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 53   column stores S
e410: 51 4c 20 74 65 78 74 20 74 68 61 74 20 64 65 73  QL text that des
e420: 63 72 69 62 65 73 20 74 68 65 0a 6f 62 6a 65 63  cribes the.objec
e430: 74 2e 20 20 54 68 69 73 20 53 51 4c 20 74 65 78  t.  This SQL tex
e440: 74 20 69 73 20 61 20 5b 43 52 45 41 54 45 20 54  t is a [CREATE T
e450: 41 42 4c 45 5d 2c 20 5b 43 52 45 41 54 45 20 56  ABLE], [CREATE V
e460: 49 52 54 55 41 4c 20 54 41 42 4c 45 5d 2c 0a 5b  IRTUAL TABLE],.[
e470: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 2c 0a 5b  CREATE INDEX],.[
e480: 43 52 45 41 54 45 20 56 49 45 57 5d 2c 20 6f 72  CREATE VIEW], or
e490: 20 5b 43 52 45 41 54 45 20 54 52 49 47 47 45 52   [CREATE TRIGGER
e4a0: 5d 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  ] statement that
e4b0: 20 69 66 20 65 76 61 6c 75 61 74 65 64 20 61 67   if evaluated ag
e4c0: 61 69 6e 73 74 0a 74 68 65 20 64 61 74 61 62 61  ainst.the databa
e4d0: 73 65 20 66 69 6c 65 20 77 68 65 6e 20 69 74 20  se file when it 
e4e0: 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
e4f0: 62 61 73 65 20 6f 66 20 61 20 5b 64 61 74 61 62  base of a [datab
e500: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 0a  ase connection].
e510: 77 6f 75 6c 64 20 72 65 63 72 65 61 74 65 20 74  would recreate t
e520: 68 65 20 6f 62 6a 65 63 74 2e 29 5e 20 20 54 68  he object.)^  Th
e530: 65 20 74 65 78 74 20 69 73 20 75 73 75 61 6c 6c  e text is usuall
e540: 79 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  y a copy of the 
e550: 6f 72 69 67 69 6e 61 6c 0a 73 74 61 74 65 6d 65  original.stateme
e560: 6e 74 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  nt used to creat
e570: 65 20 74 68 65 20 6f 62 6a 65 63 74 20 62 75 74  e the object but
e580: 20 77 69 74 68 20 6e 6f 72 6d 61 6c 69 7a 61 74   with normalizat
e590: 69 6f 6e 73 20 61 70 70 6c 69 65 64 20 73 6f 0a  ions applied so.
e5a0: 74 68 61 74 20 74 68 65 20 74 65 78 74 20 63 6f  that the text co
e5b0: 6e 66 6f 72 6d 73 20 74 6f 20 74 68 65 20 66 6f  nforms to the fo
e5c0: 6c 6c 6f 77 69 6e 67 20 72 75 6c 65 73 3a 0a 0a  llowing rules:..
e5d0: 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54 68 65 20 43 52  <ul>.<li>^The CR
e5e0: 45 41 54 45 2c 20 54 41 42 4c 45 2c 20 56 49 45  EATE, TABLE, VIE
e5f0: 57 2c 20 54 52 49 47 47 45 52 2c 20 61 6e 64 20  W, TRIGGER, and 
e600: 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 73 20 61  INDEX keywords a
e610: 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  t the beginning.
e620: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
e630: 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 74   are converted t
e640: 6f 20 61 6c 6c 20 75 70 70 65 72 20 63 61 73 65  o all upper case
e650: 20 6c 65 74 74 65 72 73 2e 0a 3c 6c 69 3e 5e 54   letters..<li>^T
e660: 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f  he TEMP or TEMPO
e670: 52 41 52 59 20 6b 65 79 77 6f 72 64 20 69 73 20  RARY keyword is 
e680: 72 65 6d 6f 76 65 64 20 69 66 20 69 74 20 6f 63  removed if it oc
e690: 63 75 72 73 20 61 66 74 65 72 20 74 68 65 20 0a  curs after the .
e6a0: 69 6e 69 74 69 61 6c 20 43 52 45 41 54 45 20 6b  initial CREATE k
e6b0: 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e 5e 41 6e 79  eyword..<li>^Any
e6c0: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 71   database name q
e6d0: 75 61 6c 69 66 69 65 72 20 74 68 61 74 20 6f 63  ualifier that oc
e6e0: 63 75 72 73 20 70 72 69 6f 72 20 74 6f 20 74 68  curs prior to th
e6f0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 0a 6f 62  e name of the.ob
e700: 6a 65 63 74 20 62 65 69 6e 67 20 63 72 65 61 74  ject being creat
e710: 65 64 20 69 73 20 72 65 6d 6f 76 65 64 2e 0a 3c  ed is removed..<
e720: 6c 69 3e 5e 4c 65 61 64 69 6e 67 20 73 70 61 63  li>^Leading spac
e730: 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a  es are removed..
e740: 3c 6c 69 3e 5e 41 6c 6c 20 73 70 61 63 65 73 20  <li>^All spaces 
e750: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 66 69  following the fi
e760: 72 73 74 20 74 77 6f 20 6b 65 79 77 6f 72 64 73  rst two keywords
e770: 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20 69   are converted i
e780: 6e 74 6f 20 61 20 73 69 6e 67 6c 65 0a 73 70 61  nto a single.spa
e790: 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 5e 28  ce..</ul>..<p>^(
e7a0: 54 68 65 20 74 65 78 74 20 69 6e 20 74 68 65 20  The text in the 
e7b0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71  sqlite_master.sq
e7c0: 6c 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f  l column is a co
e7d0: 70 79 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e  py of the origin
e7e0: 61 6c 0a 43 52 45 41 54 45 20 73 74 61 74 65 6d  al.CREATE statem
e7f0: 65 6e 74 20 74 65 78 74 20 74 68 61 74 20 63 72  ent text that cr
e800: 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65 63 74  eated the object
e810: 2c 20 65 78 63 65 70 74 20 6e 6f 72 6d 61 6c 69  , except normali
e820: 7a 65 64 20 61 73 0a 64 65 73 63 72 69 62 65 64  zed as.described
e830: 20 61 62 6f 76 65 20 61 6e 64 20 61 73 20 6d 6f   above and as mo
e840: 64 69 66 69 65 64 20 62 79 20 73 75 62 73 65 71  dified by subseq
e850: 75 65 6e 74 20 5b 41 4c 54 45 52 20 54 41 42 4c  uent [ALTER TABL
e860: 45 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 29 5e  E] statements.)^
e870: 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 6d 61  .^(The sqlite_ma
e880: 73 74 65 72 2e 73 71 6c 20 69 73 20 4e 55 4c 4c  ster.sql is NULL
e890: 20 66 6f 72 20 74 68 65 20 5b 69 6e 74 65 72 6e   for the [intern
e8a0: 61 6c 20 69 6e 64 65 78 65 73 5d 20 74 68 61 74  al indexes] that
e8b0: 20 61 72 65 0a 61 75 74 6f 6d 61 74 69 63 61 6c   are.automatical
e8c0: 6c 79 20 63 72 65 61 74 65 64 20 62 79 20 5b 55  ly created by [U
e8d0: 4e 49 51 55 45 5d 20 6f 72 20 5b 50 52 49 4d 41  NIQUE] or [PRIMA
e8e0: 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69  RY KEY] constrai
e8f0: 6e 74 73 2e 29 5e 3c 2f 70 3e 0a 0a 0a 3c 74 63  nts.)^</p>...<tc
e900: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 69 6e  l>hd_fragment in
e910: 74 73 63 68 65 6d 61 20 7b 69 6e 74 65 72 6e 61  tschema {interna
e920: 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  l schema objects
e930: 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20 73 63  } \.{internal sc
e940: 68 65 6d 61 20 6f 62 6a 65 63 74 7d 20 7b 69 6e  hema object} {in
e950: 74 65 72 6e 61 6c 20 69 6e 64 65 78 7d 20 7b 69  ternal index} {i
e960: 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 65 73 7d  nternal indexes}
e970: 20 5c 0a 7b 69 6e 74 65 72 6e 61 6c 20 74 61 62   \.{internal tab
e980: 6c 65 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 74 61  le} {internal ta
e990: 62 6c 65 73 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  bles}</tcl>.<h3>
e9a0: 49 6e 74 65 72 6e 61 6c 20 53 63 68 65 6d 61 20  Internal Schema 
e9b0: 4f 62 6a 65 63 74 73 3c 2f 68 33 3e 0a 0a 3c 70  Objects</h3>..<p
e9c0: 3e 5e 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f  >^In addition to
e9d0: 20 74 68 65 20 74 61 62 6c 65 73 2c 20 69 6e 64   the tables, ind
e9e0: 65 78 65 73 2c 20 76 69 65 77 73 2c 20 61 6e 64  exes, views, and
e9f0: 20 74 72 69 67 67 65 72 73 20 63 72 65 61 74 65   triggers create
ea00: 64 20 62 79 0a 74 68 65 20 61 70 70 6c 69 63 61  d by.the applica
ea10: 74 69 6f 6e 20 61 6e 64 2f 6f 72 20 74 68 65 20  tion and/or the 
ea20: 64 65 76 65 6c 6f 70 65 72 20 75 73 69 6e 67 20  developer using 
ea30: 43 52 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74  CREATE statement
ea40: 73 20 53 51 4c 2c 20 74 68 65 0a 73 71 6c 69 74  s SQL, the.sqlit
ea50: 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 6d  e_master table m
ea60: 61 79 20 63 6f 6e 74 61 69 6e 20 7a 65 72 6f 20  ay contain zero 
ea70: 6f 72 20 6d 6f 72 65 20 65 6e 74 72 69 65 73 20  or more entries 
ea80: 66 6f 72 20 0a 3c 69 3e 69 6e 74 65 72 6e 61 6c  for .<i>internal
ea90: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 3c   schema objects<
eaa0: 2f 69 3e 20 74 68 61 74 20 61 72 65 20 63 72 65  /i> that are cre
eab0: 61 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 66  ated by SQLite f
eac0: 6f 72 20 69 74 73 20 0a 6f 77 6e 20 69 6e 74 65  or its .own inte
ead0: 72 6e 61 6c 20 75 73 65 2e 20 20 5e 54 68 65 20  rnal use.  ^The 
eae0: 6e 61 6d 65 73 20 6f 66 20 69 6e 74 65 72 6e 61  names of interna
eaf0: 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  l schema objects
eb00: 0a 61 6c 77 61 79 73 20 62 65 67 69 6e 20 77 69  .always begin wi
eb10: 74 68 20 22 73 71 6c 69 74 65 5f 22 20 61 6e 64  th "sqlite_" and
eb20: 20 61 6e 79 20 74 61 62 6c 65 2c 20 69 6e 64 65   any table, inde
eb30: 78 2c 20 76 69 65 77 2c 20 6f 72 20 74 72 69 67  x, view, or trig
eb40: 67 65 72 0a 77 68 6f 73 65 20 6e 61 6d 65 20 62  ger.whose name b
eb50: 65 67 69 6e 73 20 77 69 74 68 20 22 73 71 6c 69  egins with "sqli
eb60: 74 65 5f 22 20 69 73 20 61 6e 20 69 6e 74 65 72  te_" is an inter
eb70: 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  nal schema objec
eb80: 74 2e 0a 5e 53 51 4c 69 74 65 20 70 72 6f 68 69  t..^SQLite prohi
eb90: 62 69 74 73 20 61 70 70 6c 69 63 61 74 69 6f 6e  bits application
eba0: 73 20 66 72 6f 6d 20 63 72 65 61 74 69 6e 67 20  s from creating 
ebb0: 6f 62 6a 65 63 74 73 20 77 68 6f 73 65 20 6e 61  objects whose na
ebc0: 6d 65 73 20 62 65 67 69 6e 0a 77 69 74 68 20 22  mes begin.with "
ebd0: 73 71 6c 69 74 65 5f 22 2e 20 20 0a 0a 3c 70 3e  sqlite_".  ..<p>
ebe0: 49 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  Internal schema 
ebf0: 6f 62 6a 65 63 74 73 20 75 73 65 64 20 62 79 20  objects used by 
ec00: 53 51 4c 69 74 65 20 6d 61 79 20 69 6e 63 6c 75  SQLite may inclu
ec10: 64 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  de the following
ec20: 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 3c 70 3e 49  :..<ul>.<li><p>I
ec30: 6e 64 69 63 65 73 20 77 69 74 68 20 6e 61 6d 65  ndices with name
ec40: 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73  s of the form "s
ec50: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
ec60: 54 41 42 4c 45 5f 4e 22 20 74 68 61 74 0a 20 20  TABLE_N" that.  
ec70: 20 20 20 20 20 61 72 65 20 75 73 65 64 20 74 6f       are used to
ec80: 20 69 6d 70 6c 65 6d 65 6e 74 20 5b 55 4e 49 51   implement [UNIQ
ec90: 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52 59  UE] and [PRIMARY
eca0: 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e 74   KEY] constraint
ecb0: 73 20 6f 6e 0a 20 20 20 20 20 20 20 6f 72 64 69  s on.       ordi
ecc0: 6e 61 72 79 20 74 61 62 6c 65 73 2e 0a 0a 3c 6c  nary tables...<l
ecd0: 69 3e 3c 70 3e 41 20 74 61 62 6c 65 20 77 69 74  i><p>A table wit
ece0: 68 20 74 68 65 20 6e 61 6d 65 20 22 73 71 6c 69  h the name "sqli
ecf0: 74 65 5f 73 65 71 75 65 6e 63 65 22 20 74 68 61  te_sequence" tha
ed00: 74 20 69 73 20 75 73 65 64 20 74 6f 20 6b 65 65  t is used to kee
ed10: 70 20 74 72 61 63 6b 0a 20 20 20 20 20 20 20 6f  p track.       o
ed20: 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 69  f the maximum hi
ed30: 73 74 6f 72 69 63 61 6c 20 5b 49 4e 54 45 47 45  storical [INTEGE
ed40: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 66  R PRIMARY KEY] f
ed50: 6f 72 20 61 20 74 61 62 6c 65 0a 20 20 20 20 20  or a table.     
ed60: 20 20 75 73 69 6e 67 20 5b 41 55 54 4f 49 4e 43    using [AUTOINC
ed70: 52 45 4d 45 4e 54 5d 2e 0a 0a 3c 6c 69 3e 3c 70  REMENT]...<li><p
ed80: 3e 54 61 62 6c 65 73 20 77 69 74 68 20 6e 61 6d  >Tables with nam
ed90: 65 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  es of the form "
eda0: 73 71 6c 69 74 65 5f 73 74 61 74 4e 22 20 77 68  sqlite_statN" wh
edb0: 65 72 65 20 4e 20 69 73 20 61 6e 20 69 6e 74 65  ere N is an inte
edc0: 67 65 72 2e 0a 20 20 20 20 20 20 20 53 75 63 68  ger..       Such
edd0: 20 74 61 62 6c 65 73 20 73 74 6f 72 65 20 64 61   tables store da
ede0: 74 61 62 61 73 65 20 73 74 61 74 69 73 74 69 63  tabase statistic
edf0: 73 20 67 61 74 68 65 72 65 64 20 62 79 20 74 68  s gathered by th
ee00: 65 20 5b 41 4e 41 4c 59 5a 45 5d 0a 20 20 20 20  e [ANALYZE].    
ee10: 20 20 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 75     command and u
ee20: 73 65 64 20 62 79 20 74 68 65 20 71 75 65 72 79  sed by the query
ee30: 20 70 6c 61 6e 6e 65 72 20 74 6f 20 68 65 6c 70   planner to help
ee40: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 62   determine the b
ee50: 65 73 74 0a 20 20 20 20 20 20 20 61 6c 67 6f 72  est.       algor
ee60: 69 74 68 6d 20 74 6f 20 75 73 65 20 66 6f 72 20  ithm to use for 
ee70: 65 61 63 68 20 71 75 65 72 79 2e 0a 3c 2f 75 6c  each query..</ul
ee80: 3e 0a 0a 3c 70 3e 4e 65 77 20 69 6e 74 65 72 6e  >..<p>New intern
ee90: 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  al schema object
eea0: 73 20 6e 61 6d 65 73 2c 20 61 6c 77 61 79 73 20  s names, always 
eeb0: 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 22  beginning with "
eec0: 73 71 6c 69 74 65 5f 22 2c 0a 6d 61 79 20 62 65  sqlite_",.may be
eed0: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 53 51   added to the SQ
eee0: 4c 69 74 65 20 66 69 6c 65 20 66 6f 72 6d 61 74  Lite file format
eef0: 20 69 6e 20 66 75 74 75 72 65 20 72 65 6c 65 61   in future relea
ef00: 73 65 73 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  ses...<tcl>hd_fr
ef10: 61 67 6d 65 6e 74 20 73 65 71 74 61 62 20 7b 73  agment seqtab {s
ef20: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 7d 3c  qlite_sequence}<
ef30: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71  /tcl>.<h3>The sq
ef40: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
ef50: 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ble</h3>..<p>^Th
ef60: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
ef70: 65 20 74 61 62 6c 65 20 69 73 20 61 6e 20 69 6e  e table is an in
ef80: 74 65 72 6e 61 6c 20 74 61 62 6c 65 20 75 73 65  ternal table use
ef90: 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d  d to help implem
efa0: 65 6e 74 0a 5b 41 55 54 4f 49 4e 43 52 45 4d 45  ent.[AUTOINCREME
efb0: 4e 54 5d 2e 20 20 5e 54 68 65 20 73 71 6c 69 74  NT].  ^The sqlit
efc0: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
efd0: 20 69 73 20 63 72 65 61 74 65 64 20 61 75 74 6f   is created auto
efe0: 6d 61 74 69 63 61 6c 6c 79 0a 77 68 65 6e 65 76  matically.whenev
eff0: 65 72 20 61 6e 79 20 6f 72 64 69 6e 61 72 79 20  er any ordinary 
f000: 74 61 62 6c 65 20 77 69 74 68 20 61 6e 20 41 55  table with an AU
f010: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 69 6e 74 65  TOINCREMENT inte
f020: 67 65 72 20 70 72 69 6d 61 72 79 0a 6b 65 79 20  ger primary.key 
f030: 69 73 20 63 72 65 61 74 65 64 2e 20 20 5e 4f 6e  is created.  ^On
f040: 63 65 20 63 72 65 61 74 65 64 2c 20 74 68 65 20  ce created, the 
f050: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
f060: 74 61 62 6c 65 20 65 78 69 73 74 73 20 69 6e 20  table exists in 
f070: 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73 74 65  the.sqlite_maste
f080: 72 20 74 61 62 6c 65 20 66 6f 72 65 76 65 72 3b  r table forever;
f090: 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 64 72   it cannot be dr
f0a0: 6f 70 70 65 64 2e 0a 5e 28 54 68 65 20 73 63 68  opped..^(The sch
f0b0: 65 6d 61 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ema for the sqli
f0c0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
f0d0: 65 20 69 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  e is:..<blockquo
f0e0: 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20  te><pre>.CREATE 
f0f0: 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73 65 71  TABLE sqlite_seq
f100: 75 65 6e 63 65 28 6e 61 6d 65 2c 73 65 71 29 3b  uence(name,seq);
f110: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
f120: 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 72  ote>)^..<p>^Ther
f130: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 72 6f  e is a single ro
f140: 77 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  w in the sqlite_
f150: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 66  sequence table f
f160: 6f 72 20 65 61 63 68 20 6f 72 64 69 6e 61 72 79  or each ordinary
f170: 0a 74 61 62 6c 65 20 74 68 61 74 20 75 73 65 73  .table that uses
f180: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 2e 20   AUTOINCREMENT. 
f190: 20 5e 28 54 68 65 20 6e 61 6d 65 20 6f 66 20 74   ^(The name of t
f1a0: 68 65 20 74 61 62 6c 65 20 28 61 73 20 69 74 20  he table (as it 
f1b0: 61 70 70 65 61 72 73 20 69 6e 0a 73 71 6c 69 74  appears in.sqlit
f1c0: 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65 29 20 69  e_master.name) i
f1d0: 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  s in the sqlite_
f1e0: 73 65 71 75 65 6e 63 65 2e 6d 61 69 6e 20 66 69  sequence.main fi
f1f0: 65 6c 64 20 61 6e 64 20 74 68 65 20 6c 61 72 67  eld and the larg
f200: 65 73 74 0a 5b 49 4e 54 45 47 45 52 20 50 52 49  est.[INTEGER PRI
f210: 4d 41 52 59 20 4b 45 59 5d 20 65 76 65 72 20 69  MARY KEY] ever i
f220: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 61  nserted into tha
f230: 74 20 74 61 62 6c 65 20 69 73 20 0a 69 6e 20 74  t table is .in t
f240: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f250: 63 65 2e 73 65 71 20 66 69 65 6c 64 2e 29 5e 20  ce.seq field.)^ 
f260: 20 0a 5e 4e 65 77 20 61 75 74 6f 6d 61 74 69 63   .^New automatic
f270: 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 69  ally generated i
f280: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
f290: 65 79 73 20 66 6f 72 20 41 55 54 4f 49 4e 43 52  eys for AUTOINCR
f2a0: 45 4d 45 4e 54 0a 74 61 62 6c 65 73 20 61 72 65  EMENT.tables are
f2b0: 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 62   guaranteed to b
f2c0: 65 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  e larger than th
f2d0: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
f2e0: 65 2e 73 65 71 20 66 69 65 6c 64 20 66 6f 72 0a  e.seq field for.
f2f0: 74 68 61 74 20 74 61 62 6c 65 2e 0a 5e 28 49 66  that table..^(If
f300: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
f310: 65 6e 63 65 2e 73 65 71 20 66 69 65 6c 64 20 6f  ence.seq field o
f320: 66 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  f an AUTOINCREME
f330: 4e 54 20 74 61 62 6c 65 20 69 73 20 61 6c 72 65  NT table is alre
f340: 61 64 79 20 61 74 0a 74 68 65 20 6c 61 72 67 65  ady at.the large
f350: 73 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  st integer value
f360: 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37   (92233720368547
f370: 37 35 38 30 37 29 20 74 68 65 6e 20 61 74 74 65  75807) then atte
f380: 6d 70 74 73 20 74 6f 20 61 64 64 20 6e 65 77 0a  mpts to add new.
f390: 72 6f 77 73 20 74 6f 20 74 68 61 74 20 74 61 62  rows to that tab
f3a0: 6c 65 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  le with an autom
f3b0: 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74  atically generat
f3c0: 65 64 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  ed integer prima
f3d0: 72 79 20 77 69 6c 6c 20 66 61 69 6c 0a 77 69 74  ry will fail.wit
f3e0: 68 20 61 6e 20 5b 53 51 4c 49 54 45 5f 46 55 4c  h an [SQLITE_FUL
f3f0: 4c 5d 20 65 72 72 6f 72 2e 29 5e 0a 5e 54 68 65  L] error.)^.^The
f400: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
f410: 2e 73 65 71 20 66 69 65 6c 64 20 69 73 20 61 75  .seq field is au
f420: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 75 70 64 61  tomatically upda
f430: 74 65 64 20 69 66 20 72 65 71 75 69 72 65 64 20  ted if required 
f440: 77 68 65 6e 0a 6e 65 77 20 65 6e 74 72 69 65 73  when.new entries
f450: 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 74 6f   are inserted to
f460: 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
f470: 54 20 74 61 62 6c 65 2e 20 20 0a 5e 54 68 65 20  T table.  .^The 
f480: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
f490: 72 6f 77 20 66 6f 72 20 61 6e 20 41 55 54 4f 49  row for an AUTOI
f4a0: 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20 69  NCREMENT table i
f4b0: 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  s automatically 
f4c0: 64 65 6c 65 74 65 64 0a 77 68 65 6e 20 74 68 65  deleted.when the
f4d0: 20 74 61 62 6c 65 20 69 73 20 64 72 6f 70 70 65   table is droppe
f4e0: 64 2e 0a 5e 49 66 20 74 68 65 20 73 71 6c 69 74  d..^If the sqlit
f4f0: 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20 66  e_sequence row f
f500: 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  or an AUTOINCREM
f510: 45 4e 54 20 74 61 62 6c 65 20 64 6f 65 73 20 6e  ENT table does n
f520: 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 74 68  ot exist when.th
f530: 65 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  e AUTOINCREMENT 
f540: 74 61 62 6c 65 20 69 73 20 75 70 64 61 74 65 64  table is updated
f550: 2c 20 74 68 65 6e 20 61 20 6e 65 77 20 73 71 6c  , then a new sql
f560: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 72 6f 77  ite_sequence row
f570: 20 69 73 20 63 72 65 61 74 65 64 2e 0a 5e 28 49   is created..^(I
f580: 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71  f the sqlite_seq
f590: 75 65 6e 63 65 2e 73 65 71 20 76 61 6c 75 65 20  uence.seq value 
f5a0: 66 6f 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45  for an AUTOINCRE
f5b0: 4d 45 4e 54 20 74 61 62 6c 65 20 69 73 20 6d 61  MENT table is ma
f5c0: 6e 75 61 6c 6c 79 20 0a 73 65 74 20 74 6f 20 73  nually .set to s
f5d0: 6f 6d 65 74 68 69 6e 67 20 6f 74 68 65 72 20 74  omething other t
f5e0: 68 61 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 61  han an integer a
f5f0: 6e 64 20 74 68 65 72 65 20 69 73 20 61 20 73 75  nd there is a su
f600: 62 73 65 71 75 65 6e 74 20 61 74 74 65 6d 70 74  bsequent attempt
f610: 20 74 6f 0a 69 6e 73 65 72 74 20 74 68 65 20 6f   to.insert the o
f620: 72 20 75 70 64 61 74 65 20 74 68 65 20 41 55 54  r update the AUT
f630: 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
f640: 2c 20 74 68 65 6e 20 74 68 65 20 62 65 68 61 76  , then the behav
f650: 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65 64  ior is undefined
f660: 2e 29 5e 0a 0a 3c 70 3e 5e 41 70 70 6c 69 63 61  .)^..<p>^Applica
f670: 74 69 6f 6e 20 63 6f 64 65 20 69 73 20 61 6c 6c  tion code is all
f680: 6f 77 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 74  owed to modify t
f690: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
f6a0: 63 65 20 74 61 62 6c 65 2c 20 74 6f 20 61 64 64  ce table, to add
f6b0: 0a 6e 65 77 20 72 6f 77 73 2c 20 74 6f 20 64 65  .new rows, to de
f6c0: 6c 65 74 65 20 72 6f 77 73 2c 20 6f 72 20 74 6f  lete rows, or to
f6d0: 20 6d 6f 64 69 66 79 20 65 78 69 73 74 69 6e 67   modify existing
f6e0: 20 72 6f 77 73 2e 20 20 5e 48 6f 77 65 76 65 72   rows.  ^However
f6f0: 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e 0a 63 6f  , application.co
f700: 64 65 20 63 61 6e 6e 6f 74 20 63 72 65 61 74 65  de cannot create
f710: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
f720: 65 6e 63 65 20 74 61 62 6c 65 20 69 66 20 69 74  ence table if it
f730: 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64   does not alread
f740: 79 20 65 78 69 73 74 2e 0a 5e 41 70 70 6c 69 63  y exist..^Applic
f750: 61 74 69 6f 6e 20 63 6f 64 65 20 63 61 6e 20 64  ation code can d
f760: 65 6c 65 74 65 20 61 6c 6c 20 65 6e 74 72 69 65  elete all entrie
f770: 73 20 66 72 6f 6d 20 74 68 65 20 73 71 6c 69 74  s from the sqlit
f780: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
f790: 2c 0a 62 75 74 20 61 70 70 6c 69 63 61 74 69 6f  ,.but applicatio
f7a0: 6e 20 63 6f 64 65 20 63 61 6e 6e 6f 74 20 64 72  n code cannot dr
f7b0: 6f 70 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65  op the sqlite_se
f7c0: 71 75 65 6e 63 65 20 74 61 62 6c 65 2e 0a 0a 3c  quence table...<
f7d0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
f7e0: 73 74 61 74 31 74 61 62 20 7b 73 71 6c 69 74 65  stat1tab {sqlite
f7f0: 5f 73 74 61 74 31 7d 20 53 51 4c 49 54 45 5f 53  _stat1} SQLITE_S
f800: 54 41 54 31 20 3c 2f 74 63 6c 3e 0a 3c 68 33 3e  TAT1 </tcl>.<h3>
f810: 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  The sqlite_stat1
f820: 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e   table</h3>..<p>
f830: 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  ^The sqlite_stat
f840: 31 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c  1 is an internal
f850: 20 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62   table created b
f860: 79 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20  y the [ANALYZE] 
f870: 63 6f 6d 6d 61 6e 64 0a 61 6e 64 20 75 73 65 64  command.and used
f880: 20 74 6f 20 68 6f 6c 64 20 73 75 70 70 6c 65 6d   to hold supplem
f890: 65 6e 74 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ental informatio
f8a0: 6e 20 61 62 6f 75 74 20 74 61 62 6c 65 73 20 61  n about tables a
f8b0: 6e 64 20 69 6e 64 65 78 65 73 20 74 68 61 74 20  nd indexes that 
f8c0: 74 68 65 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65  the.query planne
f8d0: 72 20 63 61 6e 20 75 73 65 20 74 6f 20 68 65 6c  r can use to hel
f8e0: 70 20 69 74 20 66 69 6e 64 20 62 65 74 74 65 72  p it find better
f8f0: 20 77 61 79 73 20 6f 66 20 70 65 72 66 6f 72 6d   ways of perform
f900: 69 6e 67 20 71 75 65 72 69 65 73 2e 0a 5e 41 70  ing queries..^Ap
f910: 70 6c 69 63 61 74 69 6f 6e 73 20 63 61 6e 20 75  plications can u
f920: 70 64 61 74 65 2c 20 64 65 6c 65 74 65 20 66 72  pdate, delete fr
f930: 6f 6d 2c 20 69 6e 73 65 72 74 20 69 6e 74 6f 20  om, insert into 
f940: 6f 72 20 64 72 6f 70 20 74 68 65 20 73 71 6c 69  or drop the sqli
f950: 74 65 5f 73 74 61 74 31 0a 74 61 62 6c 65 2c 20  te_stat1.table, 
f960: 62 75 74 20 6d 61 79 20 6e 6f 74 20 63 72 65 61  but may not crea
f970: 74 65 20 6f 72 20 61 6c 74 65 72 20 74 68 65 20  te or alter the 
f980: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
f990: 6c 65 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61  le..^(The schema
f9a0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   of the sqlite_s
f9b0: 74 61 74 31 20 74 61 62 6c 65 20 69 73 20 61 73  tat1 table is as
f9c0: 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63   follows:..<bloc
f9d0: 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45  kquote><pre>.CRE
f9e0: 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65  ATE TABLE sqlite
f9f0: 5f 73 74 61 74 31 28 74 62 6c 2c 69 64 78 2c 73  _stat1(tbl,idx,s
fa00: 74 61 74 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  tat);.</pre></bl
fa10: 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
fa20: 20 5e 28 54 68 65 72 65 20 69 73 20 6e 6f 72 6d   ^(There is norm
fa30: 61 6c 6c 79 20 6f 6e 65 20 72 6f 77 20 70 65 72  ally one row per
fa40: 20 69 6e 64 65 78 2c 20 77 69 74 68 20 74 68 65   index, with the
fa50: 20 69 6e 64 65 78 20 69 64 65 6e 74 69 66 69 65   index identifie
fa60: 64 20 62 79 20 74 68 65 0a 6e 61 6d 65 20 69 6e  d by the.name in
fa70: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
fa80: 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 2e 29 5e 20  1.idx column.)^ 
fa90: 20 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74   ^(The sqlite_st
faa0: 61 74 31 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 69  at1.tbl column i
fab0: 73 0a 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  s.the name of th
fac0: 65 20 74 61 62 6c 65 20 74 6f 20 77 68 69 63 68  e table to which
fad0: 20 74 68 65 20 69 6e 64 65 78 20 62 65 6c 6f 6e   the index belon
fae0: 67 73 2e 29 5e 20 20 5e 28 49 6e 20 65 61 63 68  gs.)^  ^(In each
faf0: 20 73 75 63 68 20 72 6f 77 2c 20 0a 74 68 65 20   such row, .the 
fb00: 73 71 6c 69 74 65 5f 73 74 61 74 2e 73 74 61 74  sqlite_stat.stat
fb10: 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20 62 65 0a   column will be.
fb20: 61 20 73 74 72 69 6e 67 20 63 6f 6e 73 69 73 74  a string consist
fb30: 69 6e 67 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  ing of a list of
fb40: 20 69 6e 74 65 67 65 72 73 20 66 6f 6c 6c 6f 77   integers follow
fb50: 65 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f  ed by zero or mo
fb60: 72 65 20 0a 61 72 67 75 6d 65 6e 74 73 2e 29 5e  re .arguments.)^
fb70: 20 20 5e 54 68 65 20 66 69 72 73 74 20 69 6e 74    ^The first int
fb80: 65 67 65 72 20 69 6e 20 74 68 69 73 0a 6c 69 73  eger in this.lis
fb90: 74 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69  t is the approxi
fba0: 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 72  mate number of r
fbb0: 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ows in the index
fbc0: 2e 20 20 28 54 68 65 20 6e 75 6d 62 65 72 20 6f  .  (The number o
fbd0: 66 0a 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f.rows in the in
fbe0: 64 65 78 20 69 73 20 74 68 65 20 73 61 6d 65 20  dex is the same 
fbf0: 61 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  as the number of
fc00: 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
fc10: 6c 65 2c 0a 65 78 63 65 70 74 20 66 6f 72 20 5b  le,.except for [
fc20: 70 61 72 74 69 61 6c 20 69 6e 64 65 78 65 73 5d  partial indexes]
fc30: 2e 29 0a 5e 54 68 65 20 73 65 63 6f 6e 64 20 69  .).^The second i
fc40: 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61 70  nteger is the ap
fc50: 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72  proximate number
fc60: 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
fc70: 69 6e 64 65 78 0a 74 68 61 74 20 68 61 76 65 20  index.that have 
fc80: 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 69  the same value i
fc90: 6e 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75  n the first colu
fca0: 6d 6e 20 6f 66 20 74 68 65 20 69 6e 64 65 78 2e  mn of the index.
fcb0: 20 20 5e 54 68 65 20 74 68 69 72 64 20 0a 69 6e    ^The third .in
fcc0: 74 65 67 65 72 20 69 73 20 74 68 65 20 6e 75 6d  teger is the num
fcd0: 62 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  ber number of ro
fce0: 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
fcf0: 74 68 61 74 20 68 61 76 65 20 0a 74 68 65 20 73  that have .the s
fd00: 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
fd10: 65 20 66 69 72 73 74 20 74 77 6f 20 63 6f 6c 75  e first two colu
fd20: 6d 6e 73 2e 20 20 5e 54 68 65 20 4e 2d 74 68 20  mns.  ^The N-th 
fd30: 69 6e 74 65 67 65 72 20 28 66 6f 72 20 4e 3e 31  integer (for N>1
fd40: 29 20 0a 69 73 20 74 68 65 20 65 73 74 69 6d 61  ) .is the estima
fd50: 74 65 64 20 61 76 65 72 61 67 65 20 6e 75 6d 62  ted average numb
fd60: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 0a 74  er of rows in .t
fd70: 68 65 20 69 6e 64 65 78 20 77 68 69 63 68 20 68  he index which h
fd80: 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
fd90: 75 65 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  ue for the first
fda0: 20 4e 2d 31 20 63 6f 6c 75 6d 6e 73 2e 20 20 5e   N-1 columns.  ^
fdb0: 46 6f 72 0a 61 20 4b 2d 63 6f 6c 75 6d 6e 20 69  For.a K-column i
fdc0: 6e 64 65 78 2c 20 74 68 65 72 65 20 77 69 6c 6c  ndex, there will
fdd0: 20 62 65 20 4b 2b 31 20 69 6e 74 65 67 65 72 73   be K+1 integers
fde0: 20 69 6e 20 74 68 65 20 73 74 61 74 20 63 6f 6c   in the stat col
fdf0: 75 6d 6e 2e 20 20 5e 49 66 0a 74 68 65 20 69 6e  umn.  ^If.the in
fe00: 64 65 78 20 69 73 20 75 6e 69 71 75 65 2c 20 74  dex is unique, t
fe10: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 69 6e 74  hen the last int
fe20: 65 67 65 72 20 77 69 6c 6c 20 62 65 20 31 2e 0a  eger will be 1..
fe30: 0a 3c 70 3e 5e 54 68 65 20 6c 69 73 74 20 6f 66  .<p>^The list of
fe40: 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 65   integers in the
fe50: 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 63 61 6e   stat column can
fe60: 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20 66   optionally be f
fe70: 6f 6c 6c 6f 77 65 64 0a 62 79 20 61 72 67 75 6d  ollowed.by argum
fe80: 65 6e 74 73 2c 20 65 61 63 68 20 6f 66 20 77 68  ents, each of wh
fe90: 69 63 68 20 69 73 20 61 20 73 65 71 75 65 6e 63  ich is a sequenc
fea0: 65 20 6f 66 20 6e 6f 6e 2d 73 70 61 63 65 20 63  e of non-space c
feb0: 68 61 72 61 63 74 65 72 73 2e 0a 5e 41 6c 6c 20  haracters..^All 
fec0: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 70 72  arguments are pr
fed0: 65 63 65 64 65 64 20 62 79 20 61 20 73 69 6e 67  eceded by a sing
fee0: 6c 65 20 73 70 61 63 65 2e 0a 5e 55 6e 72 65 63  le space..^Unrec
fef0: 6f 67 6e 69 7a 65 64 20 61 72 67 75 6d 65 6e 74  ognized argument
ff00: 73 20 61 72 65 20 73 69 6c 65 6e 74 6c 79 20 69  s are silently i
ff10: 67 6e 6f 72 65 64 2e 0a 0a 3c 70 3e 5e 49 66 20  gnored...<p>^If 
ff20: 74 68 65 20 22 75 6e 6f 72 64 65 72 65 64 22 20  the "unordered" 
ff30: 61 72 67 75 6d 65 6e 74 20 69 73 20 70 72 65 73  argument is pres
ff40: 65 6e 74 2c 20 74 68 65 6e 20 74 68 65 20 71 75  ent, then the qu
ff50: 65 72 79 20 70 6c 61 6e 6e 65 72 20 61 73 73 75  ery planner assu
ff60: 6d 65 73 0a 74 68 61 74 20 74 68 65 20 69 6e 64  mes.that the ind
ff70: 65 78 20 69 73 20 75 6e 6f 72 64 65 72 65 64 20  ex is unordered 
ff80: 61 6e 64 20 77 69 6c 6c 20 6e 6f 74 20 75 73 65  and will not use
ff90: 20 74 68 65 20 69 6e 64 65 78 20 66 6f 72 20 61   the index for a
ffa0: 20 72 61 6e 67 65 20 71 75 65 72 79 0a 6f 72 20   range query.or 
ffb0: 66 6f 72 20 73 6f 72 74 69 6e 67 2e 0a 0a 3c 70  for sorting...<p
ffc0: 3e 5e 54 68 65 20 22 73 7a 3d 4e 4e 4e 22 20 61  >^The "sz=NNN" a
ffd0: 72 67 75 6d 65 6e 74 20 28 77 68 65 72 65 20 4e  rgument (where N
ffe0: 4e 4e 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  NN represents a 
fff0: 73 65 71 75 65 6e 63 65 20 6f 66 20 31 20 6f 72  sequence of 1 or
10000 20 6d 6f 72 65 20 64 69 67 69 74 73 29 0a 6d 65   more digits).me
10010 61 6e 73 20 74 68 61 74 20 74 68 65 20 61 76 65  ans that the ave
10020 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 6f 76  rage row size ov
10030 65 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20 6f  er all records o
10040 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 0a 69  f the table or.i
10050 6e 64 65 78 20 69 73 20 4e 4e 4e 20 62 79 74 65  ndex is NNN byte
10060 73 20 70 65 72 20 72 6f 77 2e 20 20 5e 54 68 65  s per row.  ^The
10070 20 53 51 4c 69 74 65 20 71 75 65 72 79 20 70 6c   SQLite query pl
10080 61 6e 6e 65 72 20 6d 69 67 68 74 20 75 73 65 20  anner might use 
10090 74 68 65 0a 65 73 74 69 6d 61 74 65 64 20 72 6f  the.estimated ro
100a0 77 20 73 69 7a 65 20 69 6e 66 6f 72 6d 61 74 69  w size informati
100b0 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 79 20 74  on provided by t
100c0 68 65 20 22 73 7a 3d 4e 4e 4e 22 20 74 6f 6b 65  he "sz=NNN" toke
100d0 6e 0a 74 6f 20 68 65 6c 70 20 69 74 20 63 68 6f  n.to help it cho
100e0 6f 73 65 20 73 6d 61 6c 6c 65 72 20 74 61 62 6c  ose smaller tabl
100f0 65 73 20 61 6e 64 20 69 6e 64 65 78 65 73 20 74  es and indexes t
10100 68 61 74 20 72 65 71 75 69 72 65 20 6c 65 73 73  hat require less
10110 20 64 69 73 6b 20 49 2f 4f 2e 0a 0a 3c 70 3e 5e   disk I/O...<p>^
10120 28 54 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66  (The presence of
10130 20 74 68 65 20 22 6e 6f 73 6b 69 70 73 63 61 6e   the "noskipscan
10140 22 20 74 6f 6b 65 6e 20 6f 6e 20 74 68 65 20 73  " token on the s
10150 71 6c 69 74 65 5f 73 74 61 74 31 2e 73 74 61 74  qlite_stat1.stat
10160 20 66 69 65 6c 64 0a 6f 66 20 61 6e 20 69 6e 64   field.of an ind
10170 65 78 20 70 72 65 76 65 6e 74 73 20 74 68 61 74  ex prevents that
10180 20 69 6e 64 65 78 20 66 72 6f 6d 20 62 65 69 6e   index from bein
10190 67 20 75 73 65 64 20 77 69 74 68 20 74 68 65 0a  g used with the.
101a0 5b 73 6b 69 70 2d 73 63 61 6e 20 6f 70 74 69 6d  [skip-scan optim
101b0 69 7a 61 74 69 6f 6e 5d 2e 29 5e 0a 0a 3c 70 3e  ization].)^..<p>
101c0 4e 65 77 20 74 65 78 74 20 74 6f 6b 65 6e 73 20  New text tokens 
101d0 6d 61 79 20 62 65 20 61 64 64 65 64 20 74 6f 20  may be added to 
101e0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73  the end of the s
101f0 74 61 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 66 75  tat column in fu
10200 74 75 72 65 0a 65 6e 68 61 6e 63 65 6d 65 6e 74  ture.enhancement
10210 73 20 74 6f 20 53 51 4c 69 74 65 2e 20 20 46 6f  s to SQLite.  Fo
10220 72 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2c  r compatibility,
10230 20 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 74 6f   unrecognized to
10240 6b 65 6e 73 20 61 74 20 74 68 65 20 65 6e 64 0a  kens at the end.
10250 6f 66 20 74 68 65 20 73 74 61 74 20 63 6f 6c 75  of the stat colu
10260 6d 6e 20 61 72 65 20 73 69 6c 65 6e 74 6c 79 20  mn are silently 
10270 69 67 6e 6f 72 65 64 2e 0a 0a 3c 70 3e 5e 28 49  ignored...<p>^(I
10280 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
10290 74 31 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 69 73  t1.idx column is
102a0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20   NULL, then the 
102b0 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 73 74 61  sqlite_stat1.sta
102c0 74 0a 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  t.column contain
102d0 73 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67  s a single integ
102e0 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
102f0 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62  approximate numb
10300 65 72 20 6f 66 0a 72 6f 77 73 20 69 6e 20 74 68  er of.rows in th
10310 65 20 74 61 62 6c 65 20 69 64 65 6e 74 69 66 69  e table identifi
10320 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73 74 61  ed by sqlite_sta
10330 74 31 2e 74 62 6c 2e 29 5e 0a 5e 28 49 66 20 74  t1.tbl.)^.^(If t
10340 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e  he sqlite_stat1.
10350 69 64 78 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68  idx column is th
10360 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 73 71  e same as the sq
10370 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c 0a 63  lite_stat1.tbl.c
10380 6f 6c 75 6d 6e 2c 20 74 68 65 6e 20 74 68 65 20  olumn, then the 
10390 74 61 62 6c 65 20 69 73 20 61 20 5b 57 49 54 48  table is a [WITH
103a0 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
103b0 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 5f   and the sqlite_
103c0 73 74 61 74 31 2e 73 74 61 74 0a 66 69 65 6c 64  stat1.stat.field
103d0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
103e0 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
103f0 69 6e 64 65 78 20 62 74 72 65 65 20 74 68 61 74  index btree that
10400 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 0a   implements the.
10410 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
10420 62 6c 65 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f  ble.)^..<tcl>hd_
10430 66 72 61 67 6d 65 6e 74 20 73 74 61 74 32 74 61  fragment stat2ta
10440 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 32 7d  b {sqlite_stat2}
10450 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73  </tcl>.<h3>The s
10460 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c  qlite_stat2 tabl
10470 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73  e</h3>..<p>The s
10480 71 6c 69 74 65 5f 73 74 61 74 32 20 69 73 20 6f  qlite_stat2 is o
10490 6e 6c 79 20 63 72 65 61 74 65 64 20 61 6e 64 20  nly created and 
104a0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  is only used if 
104b0 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
104c0 65 64 0a 77 69 74 68 20 53 51 4c 49 54 45 5f 45  ed.with SQLITE_E
104d0 4e 41 42 4c 45 5f 53 54 41 54 32 20 61 6e 64 20  NABLE_STAT2 and 
104e0 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 76 65  if the SQLite ve
104f0 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20  rsion number is 
10500 62 65 74 77 65 65 6e 0a 33 2e 36 2e 31 38 20 28  between.3.6.18 (
10510 5b 64 61 74 65 6f 66 3a 33 2e 36 2e 31 38 5d 29  [dateof:3.6.18])
10520 20 61 6e 64 20 33 2e 37 2e 38 20 28 5b 64 61 74   and 3.7.8 ([dat
10530 65 6f 66 3a 33 2e 37 2e 38 5d 29 2e 0a 54 68 65  eof:3.7.8])..The
10540 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
10550 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20 72  ble is neither r
10560 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20  ead nor written 
10570 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f  by any.version o
10580 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20  f SQLite before 
10590 33 2e 36 2e 31 38 20 6e 6f 72 20 61 66 74 65 72  3.6.18 nor after
105a0 20 33 2e 37 2e 38 2e 0a 54 68 65 20 73 71 6c 69   3.7.8..The sqli
105b0 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20 63  te_stat2 table c
105c0 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69 6f 6e  ontains addition
105d0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61  al information.a
105e0 62 6f 75 74 20 74 68 65 20 64 69 73 74 72 69 62  bout the distrib
105f0 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69  ution of keys wi
10600 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 2e 0a 54  thin an index..T
10610 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65  he schema of the
10620 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74 61   sqlite_stat2 ta
10630 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ble is as follow
10640 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  s:..<blockquote>
10650 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41 42  <pre>.CREATE TAB
10660 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 32 28  LE sqlite_stat2(
10670 74 62 6c 2c 69 64 78 2c 73 61 6d 70 6c 65 6e 6f  tbl,idx,sampleno
10680 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e  ,sample);.</pre>
10690 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
106a0 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  p>The sqlite_sta
106b0 74 32 2e 69 64 78 20 63 6f 6c 75 6d 6e 20 61 6e  t2.idx column an
106c0 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
106d0 74 32 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 69 6e  t2.tbl column in
106e0 20 65 61 63 68 20 0a 72 6f 77 20 6f 66 20 74 68   each .row of th
106f0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 74  e sqlite_stat2 t
10700 61 62 6c 65 20 69 64 65 6e 74 69 66 79 20 61 6e  able identify an
10710 20 69 6e 64 65 78 20 64 65 73 63 72 69 62 65 64   index described
10720 20 62 79 20 74 68 61 74 20 72 6f 77 2e 0a 54 68   by that row..Th
10730 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c 79 20  ere are usually 
10740 31 30 20 72 6f 77 73 20 69 6e 20 74 68 65 20 73  10 rows in the s
10750 71 6c 69 74 65 5f 73 74 61 74 32 0a 74 61 62 6c  qlite_stat2.tabl
10760 65 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78  e for each index
10770 2e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65  ...<p>The sqlite
10780 5f 73 74 61 74 32 20 65 6e 74 72 69 65 73 20 66  _stat2 entries f
10790 6f 72 20 61 6e 20 69 6e 64 65 78 20 74 68 61 74  or an index that
107a0 20 68 61 76 65 20 73 71 6c 69 74 65 5f 73 74 61   have sqlite_sta
107b0 74 32 2e 73 61 6d 70 6c 65 6e 6f 0a 62 65 74 77  t2.sampleno.betw
107c0 65 65 6e 20 30 20 61 6e 64 20 39 20 69 6e 63 6c  een 0 and 9 incl
107d0 75 73 69 76 65 20 61 72 65 20 73 61 6d 70 6c 65  usive are sample
107e0 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f  s of the left-mo
107f0 73 74 20 6b 65 79 20 76 61 6c 75 65 20 69 6e 20  st key value in 
10800 74 68 65 0a 69 6e 64 65 78 20 74 61 6b 65 6e 20  the.index taken 
10810 61 74 20 65 76 65 6e 6c 79 20 73 70 61 63 65 64  at evenly spaced
10820 20 70 6f 69 6e 74 73 20 61 6c 6f 6e 67 20 74 68   points along th
10830 65 20 69 6e 64 65 78 2e 0a 4c 65 74 20 43 20 62  e index..Let C b
10840 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
10850 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
10860 78 2e 0a 54 68 65 6e 20 74 68 65 20 73 61 6d 70  x..Then the samp
10870 6c 65 64 20 72 6f 77 73 20 61 72 65 20 67 69 76  led rows are giv
10880 65 6e 20 62 79 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  en by..<blockquo
10890 74 65 3e 0a 20 20 20 20 20 72 6f 77 6e 75 6d 62  te>.     rownumb
108a0 65 72 20 3d 20 28 69 2a 43 2a 32 20 2b 20 43 29  er = (i*C*2 + C)
108b0 2f 32 30 0a 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  /20.</blockquote
108c0 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 72 69 61 62  >..<p>The variab
108d0 6c 65 20 69 20 69 6e 20 74 68 65 20 70 72 65 76  le i in the prev
108e0 69 6f 75 73 20 65 78 70 72 65 73 73 69 6f 6e 20  ious expression 
108f0 76 61 72 69 65 73 20 62 65 74 77 65 65 6e 20 30  varies between 0
10900 20 61 6e 64 20 39 2e 0a 43 6f 6e 63 65 70 74 75   and 9..Conceptu
10910 61 6c 6c 79 2c 20 74 68 65 20 69 6e 64 65 78 20  ally, the index 
10920 73 70 61 63 65 20 69 73 20 64 69 76 69 64 65 64  space is divided
10930 20 69 6e 74 6f 0a 31 30 20 75 6e 69 66 6f 72 6d   into.10 uniform
10940 20 62 75 63 6b 65 74 73 20 61 6e 64 20 74 68 65   buckets and the
10950 20 73 61 6d 70 6c 65 73 20 61 72 65 20 74 68 65   samples are the
10960 20 6d 69 64 64 6c 65 20 72 6f 77 20 66 72 6f 6d   middle row from
10970 20 65 61 63 68 20 62 75 63 6b 65 74 2e 0a 0a 3c   each bucket...<
10980 70 3e 54 68 65 20 66 6f 72 6d 61 74 20 66 6f 72  p>The format for
10990 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20 69 73   sqlite_stat2 is
109a0 20 72 65 63 6f 72 64 65 64 20 68 65 72 65 20 66   recorded here f
109b0 6f 72 20 6c 65 67 61 63 79 20 72 65 66 65 72 65  or legacy refere
109c0 6e 63 65 2e 20 20 0a 52 65 63 65 6e 74 20 76 65  nce.  .Recent ve
109d0 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
109e0 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f   no longer suppo
109f0 72 74 20 73 71 6c 69 74 65 5f 73 74 61 74 32 20  rt sqlite_stat2 
10a00 61 6e 64 20 74 68 65 0a 73 71 6c 69 74 65 5f 73  and the.sqlite_s
10a10 74 61 74 32 20 74 61 62 6c 65 2c 20 69 66 20 69  tat2 table, if i
10a20 73 20 65 78 69 73 74 73 2c 20 69 73 20 73 69 6d  s exists, is sim
10a30 70 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 0a 3c 74  ply ignored...<t
10a40 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73  cl>hd_fragment s
10a50 74 61 74 33 74 61 62 20 7b 73 71 6c 69 74 65 5f  tat3tab {sqlite_
10a60 73 74 61 74 33 7d 20 53 51 4c 49 54 45 5f 53 54  stat3} SQLITE_ST
10a70 41 54 33 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68  AT3</tcl>.<h3>Th
10a80 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
10a90 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  able</h3>..<p>Th
10aa0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 69  e sqlite_stat3 i
10ab0 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 53  s only used if S
10ac0 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65  QLite is compile
10ad0 64 0a 77 69 74 68 20 5b 53 51 4c 49 54 45 5f 45  d.with [SQLITE_E
10ae0 4e 41 42 4c 45 5f 53 54 41 54 33 5d 20 6f 72 20  NABLE_STAT3] or 
10af0 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  [SQLITE_ENABLE_S
10b00 54 41 54 34 5d 0a 61 6e 64 20 69 66 20 74 68 65  TAT4].and if the
10b10 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20   SQLite version 
10b20 6e 75 6d 62 65 72 20 69 73 20 33 2e 37 2e 39 20  number is 3.7.9 
10b30 28 5b 64 61 74 65 6f 66 3a 33 2e 37 2e 39 5d 29  ([dateof:3.7.9])
10b40 20 6f 72 20 67 72 65 61 74 65 72 2e 0a 54 68 65   or greater..The
10b50 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
10b60 62 6c 65 20 69 73 20 6e 65 69 74 68 65 72 20 72  ble is neither r
10b70 65 61 64 20 6e 6f 72 20 77 72 69 74 74 65 6e 20  ead nor written 
10b80 62 79 20 61 6e 79 0a 76 65 72 73 69 6f 6e 20 6f  by any.version o
10b90 66 20 53 51 4c 69 74 65 20 62 65 66 6f 72 65 20  f SQLite before 
10ba0 33 2e 37 2e 39 2e 0a 49 66 20 74 68 65 20 5b 53  3.7.9..If the [S
10bb0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
10bc0 54 34 5d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  T4] compile-time
10bd0 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 20   option is used 
10be0 61 6e 64 20 74 68 65 0a 53 51 4c 69 74 65 20 76  and the.SQLite v
10bf0 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 69 73  ersion number is
10c00 20 33 2e 38 2e 31 20 28 5b 64 61 74 65 6f 66 3a   3.8.1 ([dateof:
10c10 33 2e 38 2e 31 5d 29 20 6f 72 20 67 72 65 61 74  3.8.1]) or great
10c20 65 72 2c 0a 74 68 65 6e 20 73 71 6c 69 74 65 5f  er,.then sqlite_
10c30 73 74 61 74 33 20 6d 69 67 68 74 20 62 65 20 72  stat3 might be r
10c40 65 61 64 20 62 75 74 20 6e 6f 74 20 77 72 69 74  ead but not writ
10c50 74 65 6e 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f  ten..The sqlite_
10c60 73 74 61 74 33 20 74 61 62 6c 65 20 63 6f 6e 74  stat3 table cont
10c70 61 69 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c 20  ains additional 
10c80 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75  information.abou
10c90 74 20 74 68 65 20 64 69 73 74 72 69 62 75 74 69  t the distributi
10ca0 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69  on of keys withi
10cb0 6e 20 61 6e 20 69 6e 64 65 78 2c 20 69 6e 66 6f  n an index, info
10cc0 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65  rmation that the
10cd0 0a 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63  .query planner c
10ce0 61 6e 20 75 73 65 20 74 6f 20 64 65 76 69 73 65  an use to devise
10cf0 20 62 65 74 74 65 72 20 61 6e 64 20 66 61 73 74   better and fast
10d00 65 72 20 71 75 65 72 79 20 61 6c 67 6f 72 69 74  er query algorit
10d10 68 6d 73 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d  hms..^(The schem
10d20 61 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 5f  a of the sqlite_
10d30 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 61  stat3 table is a
10d40 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f  s follows:..<blo
10d50 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
10d60 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74  EATE TABLE sqlit
10d70 65 5f 73 74 61 74 33 28 74 62 6c 2c 69 64 78 2c  e_stat3(tbl,idx,
10d80 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d  nEq,nLt,nDLt,sam
10d90 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  ple);.</pre></bl
10da0 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
10db0 54 68 65 72 65 20 61 72 65 20 75 73 75 61 6c 6c  There are usuall
10dc0 79 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69  y multiple entri
10dd0 65 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  es in the sqlite
10de0 5f 73 74 61 74 33 20 74 61 62 6c 65 20 66 6f 72  _stat3 table for
10df0 20 65 61 63 68 20 69 6e 64 65 78 2e 0a 5e 28 54   each index..^(T
10e00 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 2e  he sqlite_stat3.
10e10 73 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f  sample column ho
10e20 6c 64 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  lds the value of
10e30 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 66   the left-most f
10e40 69 65 6c 64 20 6f 66 20 61 6e 0a 69 6e 64 65 78  ield of an.index
10e50 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 73   identified by s
10e60 71 6c 69 74 65 5f 73 74 61 74 33 2e 69 64 78 20  qlite_stat3.idx 
10e70 61 6e 64 20 73 71 6c 69 74 65 5f 73 74 61 74 33  and sqlite_stat3
10e80 2e 74 62 6c 2e 29 5e 0a 5e 28 54 68 65 20 73 71  .tbl.)^.^(The sq
10e90 6c 69 74 65 5f 73 74 61 74 33 2e 6e 45 71 20 63  lite_stat3.nEq c
10ea0 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20  olumn holds the 
10eb0 61 70 70 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62  approximate.numb
10ec0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
10ed0 20 74 68 65 20 69 6e 64 65 78 20 77 68 6f 73 65   the index whose
10ee0 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d   left-most colum
10ef0 6e 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 65  n exactly matche
10f00 73 0a 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a  s.the sample.)^.
10f10 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61  ^(The sqlite_sta
10f20 74 33 2e 6e 4c 74 20 68 6f 6c 64 73 20 74 68 65  t3.nLt holds the
10f30 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d   approximate num
10f40 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
10f50 6e 20 74 68 65 0a 69 6e 64 65 78 20 77 68 6f 73  n the.index whos
10f60 65 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  e left-most colu
10f70 6d 6e 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  mn is less than 
10f80 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 5e 28  the sample.)^.^(
10f90 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  The sqlite_stat3
10fa0 2e 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c  .nDLt column hol
10fb0 64 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  ds the approxima
10fc0 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 64 69 73  te.number of dis
10fd0 74 69 6e 63 74 20 6c 65 66 74 2d 6d 6f 73 74 20  tinct left-most 
10fe0 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69  entries in the i
10ff0 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 6c 65  ndex that are le
11000 73 73 20 74 68 61 6e 0a 74 68 65 20 73 61 6d 70  ss than.the samp
11010 6c 65 2e 29 5e 0a 0a 3c 70 3e 5e 54 68 65 72 65  le.)^..<p>^There
11020 20 63 61 6e 20 62 65 20 61 6e 20 61 72 62 69 74   can be an arbit
11030 72 61 72 79 20 6e 75 6d 62 65 72 20 6f 66 20 73  rary number of s
11040 71 6c 69 74 65 5f 73 74 61 74 33 20 65 6e 74 72  qlite_stat3 entr
11050 69 65 73 20 70 65 72 20 69 6e 64 65 78 2e 0a 54  ies per index..T
11060 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d  he [ANALYZE] com
11070 6d 61 6e 64 20 77 69 6c 6c 20 74 79 70 69 63 61  mand will typica
11080 6c 6c 79 20 67 65 6e 65 72 61 74 65 20 73 71 6c  lly generate sql
11090 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 73  ite_stat3 tables
110a0 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 62 65  .that contain be
110b0 74 77 65 65 6e 20 31 30 20 61 6e 64 20 34 30 20  tween 10 and 40 
110c0 73 61 6d 70 6c 65 73 20 74 68 61 74 20 61 72 65  samples that are
110d0 20 64 69 73 74 72 69 62 75 74 65 64 20 61 63 72   distributed acr
110e0 6f 73 73 0a 74 68 65 20 6b 65 79 20 73 70 61 63  oss.the key spac
110f0 65 20 61 6e 64 20 77 69 74 68 20 6c 61 72 67 65  e and with large
11100 20 6e 45 71 20 76 61 6c 75 65 73 2e 0a 0a 3c 70   nEq values...<p
11110 3e 5e 28 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72  >^(In a well-for
11120 6d 65 64 20 73 71 6c 69 74 65 5f 73 74 61 74 33  med sqlite_stat3
11130 20 74 61 62 6c 65 2c 20 74 68 65 20 73 61 6d 70   table, the samp
11140 6c 65 73 20 66 6f 72 20 61 6e 79 20 73 69 6e 67  les for any sing
11150 6c 65 0a 69 6e 64 65 78 20 6d 75 73 74 20 61 70  le.index must ap
11160 70 65 61 72 20 69 6e 20 74 68 65 20 73 61 6d 65  pear in the same
11170 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79   order that they
11180 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 69 6e   occur in the in
11190 64 65 78 2e 20 20 0a 49 6e 20 6f 74 68 65 72 20  dex.  .In other 
111a0 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 65 6e  words, if the en
111b0 74 72 79 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f  try with left-mo
111c0 73 74 20 63 6f 6c 75 6d 6e 20 53 31 20 69 73 20  st column S1 is 
111d0 65 61 72 6c 69 65 72 20 69 6e 0a 74 68 65 20 69  earlier in.the i
111e0 6e 64 65 78 20 62 2d 74 72 65 65 20 74 68 61 6e  ndex b-tree than
111f0 20 74 68 65 0a 65 6e 74 72 79 20 77 69 74 68 20   the.entry with 
11200 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e  left-most column
11210 20 53 32 2c 20 74 68 65 6e 20 69 6e 20 74 68 65   S2, then in the
11220 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61   sqlite_stat3 ta
11230 62 6c 65 2c 20 0a 73 61 6d 70 6c 65 20 53 31 20  ble, .sample S1 
11240 6d 75 73 74 20 68 61 76 65 20 61 20 73 6d 61 6c  must have a smal
11250 6c 65 72 20 72 6f 77 69 64 20 74 68 61 6e 20 73  ler rowid than s
11260 61 6d 70 6c 65 20 53 32 2e 29 5e 0a 0a 3c 74 63  ample S2.)^..<tc
11270 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 74  l>hd_fragment st
11280 61 74 34 74 61 62 20 7b 73 71 6c 69 74 65 5f 73  at4tab {sqlite_s
11290 74 61 74 34 7d 20 53 51 4c 49 54 45 5f 53 54 41  tat4} SQLITE_STA
112a0 54 34 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65  T4</tcl>.<h3>The
112b0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
112c0 62 6c 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  ble</h3>..<p>The
112d0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 69 73   sqlite_stat4 is
112e0 20 6f 6e 6c 79 20 63 72 65 61 74 65 64 20 61 6e   only created an
112f0 64 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  d is only used i
11300 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
11310 69 6c 65 64 0a 77 69 74 68 20 5b 53 51 4c 49 54  iled.with [SQLIT
11320 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20  E_ENABLE_STAT4] 
11330 61 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69 74  and if the SQLit
11340 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  e version number
11350 20 69 73 0a 33 2e 38 2e 31 20 28 5b 64 61 74 65   is.3.8.1 ([date
11360 6f 66 3a 33 2e 38 2e 31 5d 29 20 6f 72 20 67 72  of:3.8.1]) or gr
11370 65 61 74 65 72 2e 0a 54 68 65 20 73 71 6c 69 74  eater..The sqlit
11380 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 69 73  e_stat4 table is
11390 20 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f   neither read no
113a0 72 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79  r written by any
113b0 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69  .version of SQLi
113c0 74 65 20 62 65 66 6f 72 65 20 33 2e 38 2e 31 2e  te before 3.8.1.
113d0 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  .The sqlite_stat
113e0 34 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  4 table contains
113f0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
11400 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68  rmation.about th
11410 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 6f  e distribution o
11420 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20 61 6e  f keys within an
11430 20 69 6e 64 65 78 20 6f 72 20 74 68 65 20 64 69   index or the di
11440 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 0a 6b 65  stribution of.ke
11450 79 73 20 69 6e 20 74 68 65 20 70 72 69 6d 61 72  ys in the primar
11460 79 20 6b 65 79 20 6f 66 20 61 20 5b 57 49 54 48  y key of a [WITH
11470 4f 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65  OUT ROWID] table
11480 2e 0a 54 68 65 20 71 75 65 72 79 20 70 6c 61 6e  ..The query plan
11490 6e 65 72 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65  ner can sometime
114a0 73 20 75 73 65 20 74 68 65 20 61 64 64 69 74 69  s use the additi
114b0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
114c0 20 69 6e 0a 74 68 65 20 73 71 6c 69 74 65 5f 73   in.the sqlite_s
114d0 74 61 74 34 20 74 61 62 6c 65 20 74 6f 20 64 65  tat4 table to de
114e0 76 69 73 65 20 62 65 74 74 65 72 20 61 6e 64 20  vise better and 
114f0 66 61 73 74 65 72 20 71 75 65 72 79 20 61 6c 67  faster query alg
11500 6f 72 69 74 68 6d 73 2e 0a 5e 28 54 68 65 20 73  orithms..^(The s
11510 63 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c  chema of the sql
11520 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20  ite_stat4 table 
11530 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a  is as follows:..
11540 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65  <blockquote><pre
11550 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  >.CREATE TABLE s
11560 71 6c 69 74 65 5f 73 74 61 74 34 28 74 62 6c 2c  qlite_stat4(tbl,
11570 69 64 78 2c 6e 45 71 2c 6e 4c 74 2c 6e 44 4c 74  idx,nEq,nLt,nDLt
11580 2c 73 61 6d 70 6c 65 29 3b 0a 3c 2f 70 72 65 3e  ,sample);.</pre>
11590 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a  </blockquote>)^.
115a0 0a 3c 70 3e 54 68 65 72 65 20 61 72 65 20 74 79  .<p>There are ty
115b0 70 69 63 61 6c 6c 79 20 62 65 74 77 65 65 6e 20  pically between 
115c0 31 30 20 74 6f 20 34 30 20 65 6e 74 72 69 65 73  10 to 40 entries
115d0 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
115e0 74 61 74 34 20 74 61 62 6c 65 20 66 6f 72 0a 65  tat4 table for.e
115f0 61 63 68 20 69 6e 64 65 78 20 66 6f 72 20 77 68  ach index for wh
11600 69 63 68 20 73 74 61 74 69 73 74 69 63 73 20 61  ich statistics a
11610 72 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 68 6f  re available, ho
11620 77 65 76 65 72 20 74 68 65 73 65 20 6c 69 6d 69  wever these limi
11630 74 73 20 61 72 65 0a 6e 6f 74 20 68 61 72 64 20  ts are.not hard 
11640 62 6f 75 6e 64 73 2e 0a 54 68 65 20 6d 65 61 6e  bounds..The mean
11650 69 6e 67 73 20 6f 66 20 74 68 65 20 63 6f 6c 75  ings of the colu
11660 6d 6e 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74  mns in the sqlit
11670 65 5f 73 74 61 74 34 20 74 61 62 6c 65 20 61 72  e_stat4 table ar
11680 65 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  e as follows:..<
11690 63 65 6e 74 65 72 3e 0a 3c 74 61 62 6c 65 20 62  center>.<table b
116a0 6f 72 64 65 72 3d 22 30 22 20 77 69 64 74 68 3d  order="0" width=
116b0 22 31 30 30 25 22 20 63 65 6c 6c 70 61 64 64 69  "100%" cellpaddi
116c0 6e 67 3d 22 31 30 22 3e 0a 3c 74 72 3e 3c 74 64  ng="10">.<tr><td
116d0 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c   valign="top" al
116e0 69 67 6e 3d 22 72 69 67 68 74 22 3e 74 62 6c 3a  ign="right">tbl:
116f0 3c 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28  </td>.    <td>^(
11700 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
11710 2e 74 62 6c 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  .tbl column hold
11720 73 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  s name of the ta
11730 62 6c 65 20 74 68 61 74 20 6f 77 6e 73 0a 20 20  ble that owns.  
11740 20 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74    the index that
11750 20 74 68 65 20 72 6f 77 20 64 65 73 63 72 69 62   the row describ
11760 65 73 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61  es)^..<tr><td va
11770 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e  lign="top" align
11780 3d 22 72 69 67 68 74 22 3e 69 64 78 3a 3c 2f 74  ="right">idx:</t
11790 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65  d>.    <td>^(The
117a0 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 69 64   sqlite_stat4.id
117b0 78 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e  x column holds n
117c0 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  ame of the index
117d0 20 74 68 61 74 20 74 68 65 0a 20 20 20 20 72 6f   that the.    ro
117e0 77 20 64 65 73 63 72 69 62 65 73 2c 20 6f 72 20  w describes, or 
117f0 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 0a 20  in the case of. 
11800 20 20 20 61 6e 20 73 71 6c 69 74 65 5f 73 74 61     an sqlite_sta
11810 74 34 20 65 6e 74 72 79 20 66 6f 72 20 61 20 5b  t4 entry for a [
11820 57 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74  WITHOUT ROWID] t
11830 61 62 6c 65 2c 20 74 68 65 0a 20 20 20 20 6e 61  able, the.    na
11840 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
11850 69 74 73 65 6c 66 2e 29 5e 0a 0a 3c 74 72 3e 3c  itself.)^..<tr><
11860 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20  td valign="top" 
11870 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e 73 61  align="right">sa
11880 6d 70 6c 65 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c  mple:</td>.    <
11890 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  td>^(The sqlite_
118a0 73 74 61 74 34 2e 73 61 6d 70 6c 65 20 63 6f 6c  stat4.sample col
118b0 75 6d 6e 20 68 6f 6c 64 73 20 61 20 42 4c 4f 42  umn holds a BLOB
118c0 0a 20 20 20 20 69 6e 20 74 68 65 20 5b 72 65 63  .    in the [rec
118d0 6f 72 64 20 66 6f 72 6d 61 74 5d 20 74 68 61 74  ord format] that
118e0 20 65 6e 63 6f 64 65 73 20 74 68 65 20 69 6e 64   encodes the ind
118f0 65 78 65 64 20 63 6f 6c 75 6d 6e 73 20 66 6f 6c  exed columns fol
11900 6c 6f 77 65 64 20 62 79 0a 20 20 20 20 74 68 65  lowed by.    the
11910 20 72 6f 77 69 64 20 66 6f 72 20 61 20 72 6f 77   rowid for a row
11920 69 64 20 74 61 62 6c 65 20 6f 72 20 62 79 20 74  id table or by t
11930 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
11940 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 0a 20  e primary key . 
11950 20 20 20 66 6f 72 20 61 20 57 49 54 48 4f 55 54     for a WITHOUT
11960 20 52 4f 57 49 44 20 74 61 62 6c 65 2e 29 5e 0a   ROWID table.)^.
11970 20 20 20 20 5e 28 54 68 65 20 73 71 6c 69 74 65      ^(The sqlite
11980 5f 73 74 61 74 34 2e 73 61 6d 70 6c 65 20 42 4c  _stat4.sample BL
11990 4f 42 20 66 6f 72 20 74 68 65 20 57 49 54 48 4f  OB for the WITHO
119a0 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 20 69  UT ROWID table i
119b0 74 73 65 6c 66 20 0a 20 20 20 20 63 6f 6e 74 61  tself .    conta
119c0 69 6e 73 20 6a 75 73 74 20 74 68 65 20 63 6f 6c  ins just the col
119d0 75 6d 6e 73 20 6f 66 20 74 68 65 20 70 72 69 6d  umns of the prim
119e0 61 72 79 20 6b 65 79 2e 29 5e 0a 20 20 20 20 4c  ary key.)^.    L
119f0 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  et the number of
11a00 20 63 6f 6c 75 6d 6e 73 20 65 6e 63 6f 64 65 64   columns encoded
11a10 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 5f 73   by the sqlite_s
11a20 74 61 74 34 2e 73 61 6d 70 6c 65 20 62 6c 6f 62  tat4.sample blob
11a30 20 62 65 20 4e 2e 0a 20 20 20 20 5e 46 6f 72 20   be N..    ^For 
11a40 69 6e 64 65 78 65 73 20 6f 6e 20 61 6e 20 6f 72  indexes on an or
11a50 64 69 6e 61 72 79 20 72 6f 77 69 64 20 74 61 62  dinary rowid tab
11a60 6c 65 2c 20 4e 20 77 69 6c 6c 20 62 65 20 6f 6e  le, N will be on
11a70 65 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20  e more than the 
11a80 6e 75 6d 62 65 72 20 0a 20 20 20 20 6f 66 20 63  number .    of c
11a90 6f 6c 75 6d 6e 73 20 69 6e 64 65 78 65 64 2e 0a  olumns indexed..
11aa0 20 20 20 20 5e 46 6f 72 20 69 6e 64 65 78 65 73      ^For indexes
11ab0 20 6f 6e 20 57 49 54 48 4f 55 54 20 52 4f 57 49   on WITHOUT ROWI
11ac0 44 20 74 61 62 6c 65 73 2c 20 4e 20 77 69 6c 6c  D tables, N will
11ad0 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   be the number o
11ae0 66 20 63 6f 6c 75 6d 6e 73 0a 20 20 20 20 69 6e  f columns.    in
11af0 64 65 78 65 64 20 70 6c 75 73 20 74 68 65 20 6e  dexed plus the n
11b00 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
11b10 20 69 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20   in the primary 
11b20 6b 65 79 2e 0a 20 20 20 20 5e 46 6f 72 20 61 20  key..    ^For a 
11b30 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
11b40 62 6c 65 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74  ble, N will be t
11b50 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
11b60 75 6d 6e 73 20 69 6e 20 74 68 65 0a 20 20 20 20  umns in the.    
11b70 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 0a 3c 74  primary key...<t
11b80 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f  r><td valign="to
11b90 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22  p" align="right"
11ba0 3e 6e 45 71 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c  >nEq:</td>.    <
11bb0 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f  td>^(The sqlite_
11bc0 73 74 61 74 34 2e 6e 45 71 20 63 6f 6c 75 6d 6e  stat4.nEq column
11bd0 20 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66   holds a list of
11be0 20 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65 72   N integers wher
11bf0 65 20 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20  e .    the K-th 
11c00 69 6e 74 65 67 65 72 20 69 73 20 74 68 65 20 61  integer is the a
11c10 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65  pproximate numbe
11c20 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
11c30 74 68 65 20 69 6e 64 65 78 0a 20 20 20 20 77 68  the index.    wh
11c40 6f 73 65 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20  ose left-most K 
11c50 63 6f 6c 75 6d 6e 73 20 65 78 61 63 74 6c 79 20  columns exactly 
11c60 6d 61 74 63 68 20 74 68 65 20 4b 20 6c 65 66 74  match the K left
11c70 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 0a 20 20  -most columns.  
11c80 20 20 6f 66 20 74 68 65 20 73 61 6d 70 6c 65 2e    of the sample.
11c90 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  )^..<tr><td vali
11ca0 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
11cb0 72 69 67 68 74 22 3e 6e 4c 74 3a 3c 2f 74 64 3e  right">nLt:</td>
11cc0 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73  .    <td>^(The s
11cd0 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e 4c 74 20  qlite_stat4.nLt 
11ce0 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c  column holds a l
11cf0 69 73 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72  ist of N integer
11d00 73 20 77 68 65 72 65 0a 20 20 20 20 74 68 65 20  s where.    the 
11d10 4b 2d 74 68 20 69 6e 74 65 67 65 72 20 69 73 20  K-th integer is 
11d20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20  the approximate 
11d30 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
11d40 73 20 69 6e 20 74 68 65 0a 20 20 20 20 69 6e 64  s in the.    ind
11d50 65 78 20 77 68 6f 73 65 20 4b 20 6c 65 66 74 2d  ex whose K left-
11d60 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 20 61 72 65  most columns are
11d70 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79 20 6c 65   collectively le
11d80 73 73 20 74 68 61 6e 20 74 68 65 20 0a 20 20 20  ss than the .   
11d90 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c   K left-most col
11da0 75 6d 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 70  umns of the samp
11db0 6c 65 2e 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76  le.)^..<tr><td v
11dc0 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
11dd0 6e 3d 22 72 69 67 68 74 22 3e 6e 44 4c 74 3a 3c  n="right">nDLt:<
11de0 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54  /td>.    <td>^(T
11df0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
11e00 6e 44 4c 74 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64  nDLt column hold
11e10 73 20 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e  s a list of N in
11e20 74 65 67 65 72 73 20 77 68 65 72 65 0a 20 20 20  tegers where.   
11e30 20 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65   the K-th intege
11e40 72 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69  r is the approxi
11e50 6d 61 74 65 0a 20 20 20 20 6e 75 6d 62 65 72 20  mate.    number 
11e60 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  of entries in th
11e70 65 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65  e index that are
11e80 20 64 69 73 74 69 6e 63 74 20 69 6e 20 74 68 65   distinct in the
11e90 20 66 69 72 73 74 20 4b 20 63 6f 6c 75 6d 6e 73   first K columns
11ea0 20 61 6e 64 0a 20 20 20 20 77 68 65 72 65 20 74   and.    where t
11eb0 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 4b 20 63  he left-most K c
11ec0 6f 6c 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c 65  olumns are colle
11ed0 63 74 69 76 65 6c 79 20 6c 65 73 73 20 74 68 61  ctively less tha
11ee0 6e 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 0a  n the left-most.
11ef0 20 20 20 20 4b 20 63 6f 6c 75 6d 6e 73 20 6f 66      K columns of
11f00 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 3c   the sample.)^.<
11f10 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
11f20 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65  >..<p>The sqlite
11f30 5f 73 74 61 74 34 20 69 73 20 61 20 67 65 6e 65  _stat4 is a gene
11f40 72 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68  ralization of th
11f50 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
11f60 61 62 6c 65 2e 20 20 54 68 65 0a 73 71 6c 69 74  able.  The.sqlit
11f70 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 70 72  e_stat3 table pr
11f80 6f 76 69 64 65 73 20 69 6e 66 6f 72 6d 61 74 69  ovides informati
11f90 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 6c 65 66  on about the lef
11fa0 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 6f 66  t-most column of
11fb0 20 61 6e 0a 69 6e 64 65 78 20 77 68 65 72 65 61   an.index wherea
11fc0 73 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  s the sqlite_sta
11fd0 74 34 20 74 61 62 6c 65 20 70 72 6f 76 69 64 65  t4 table provide
11fe0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
11ff0 6f 75 74 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 0a  out all columns.
12000 6f 66 20 74 68 65 20 69 6e 64 65 78 2e 0a 0a 3c  of the index...<
12010 70 3e 5e 54 68 65 72 65 20 63 61 6e 20 62 65 20  p>^There can be 
12020 61 6e 20 61 72 62 69 74 72 61 72 79 20 6e 75 6d  an arbitrary num
12030 62 65 72 20 6f 66 20 73 71 6c 69 74 65 5f 73 74  ber of sqlite_st
12040 61 74 34 20 65 6e 74 72 69 65 73 20 70 65 72 20  at4 entries per 
12050 69 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41 4c  index..The [ANAL
12060 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69 6c  YZE] command wil
12070 6c 20 74 79 70 69 63 61 6c 6c 79 20 67 65 6e 65  l typically gene
12080 72 61 74 65 20 73 71 6c 69 74 65 5f 73 74 61 74  rate sqlite_stat
12090 34 20 74 61 62 6c 65 73 0a 74 68 61 74 20 63 6f  4 tables.that co
120a0 6e 74 61 69 6e 20 62 65 74 77 65 65 6e 20 31 30  ntain between 10
120b0 20 61 6e 64 20 34 30 20 73 61 6d 70 6c 65 73 20   and 40 samples 
120c0 74 68 61 74 20 61 72 65 20 64 69 73 74 72 69 62  that are distrib
120d0 75 74 65 64 20 61 63 72 6f 73 73 0a 74 68 65 20  uted across.the 
120e0 6b 65 79 20 73 70 61 63 65 20 61 6e 64 20 77 69  key space and wi
120f0 74 68 20 6c 61 72 67 65 20 6e 45 71 20 76 61 6c  th large nEq val
12100 75 65 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61 20  ues...<p>^(In a 
12110 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c 69  well-formed sqli
12120 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65 2c 20  te_stat4 table, 
12130 74 68 65 20 73 61 6d 70 6c 65 73 20 66 6f 72 20  the samples for 
12140 61 6e 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65 78  any single.index
12150 20 6d 75 73 74 20 61 70 70 65 61 72 20 69 6e 20   must appear in 
12160 74 68 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74  the same order t
12170 68 61 74 20 74 68 65 79 20 6f 63 63 75 72 20 69  hat they occur i
12180 6e 20 74 68 65 20 69 6e 64 65 78 2e 20 20 0a 49  n the index.  .I
12190 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
121a0 66 20 65 6e 74 72 79 20 53 31 20 69 73 20 65 61  f entry S1 is ea
121b0 72 6c 69 65 72 20 69 6e 20 74 68 65 20 69 6e 64  rlier in the ind
121c0 65 78 20 62 2d 74 72 65 65 20 74 68 61 6e 20 0a  ex b-tree than .
121d0 65 6e 74 72 79 20 53 32 2c 20 74 68 65 6e 20 69  entry S2, then i
121e0 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
121f0 74 34 20 74 61 62 6c 65 2c 20 73 61 6d 70 6c 65  t4 table, sample
12200 20 53 31 20 6d 75 73 74 20 68 61 76 65 20 61 0a   S1 must have a.
12210 73 6d 61 6c 6c 65 72 20 72 6f 77 69 64 20 74 68  smaller rowid th
12220 61 6e 20 73 61 6d 70 6c 65 20 53 32 2e 29 5e 0a  an sample S2.)^.
12230 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
12240 74 20 72 6f 6c 6c 62 61 63 6b 6a 6f 75 72 6e 61  t rollbackjourna
12250 6c 20 7b 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  l {rollback jour
12260 6e 61 6c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c  nal format}</tcl
12270 3e 0a 3c 68 31 3e 54 68 65 20 52 6f 6c 6c 62 61  >.<h1>The Rollba
12280 63 6b 20 4a 6f 75 72 6e 61 6c 3c 2f 68 31 3e 0a  ck Journal</h1>.
12290 0a 3c 70 3e 54 68 65 20 72 6f 6c 6c 62 61 63 6b  .<p>The rollback
122a0 20 6a 6f 75 72 6e 61 6c 20 69 73 20 61 20 66 69   journal is a fi
122b0 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  le associated wi
122c0 74 68 20 65 61 63 68 20 53 51 4c 69 74 65 20 64  th each SQLite d
122d0 61 74 61 62 61 73 65 0a 66 69 6c 65 20 74 68 61  atabase.file tha
122e0 74 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  t holds informat
122f0 69 6f 6e 20 75 73 65 64 20 74 6f 20 72 65 73 74  ion used to rest
12300 6f 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ore the database
12310 20 66 69 6c 65 20 74 6f 20 69 74 73 20 69 6e 69   file to its ini
12320 74 69 61 6c 0a 73 74 61 74 65 20 64 75 72 69 6e  tial.state durin
12330 67 20 74 68 65 20 63 6f 75 72 73 65 20 6f 66 20  g the course of 
12340 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 5e  a transaction..^
12350 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  The rollback jou
12360 72 6e 61 6c 20 66 69 6c 65 20 69 73 20 61 6c 77  rnal file is alw
12370 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e 20 74  ays located in t
12380 68 65 20 73 61 6d 65 20 0a 64 69 72 65 63 74 6f  he same .directo
12390 72 79 20 61 73 20 74 68 65 20 64 61 74 61 62 61  ry as the databa
123a0 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61 73 20  se.file and has 
123b0 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73  the same name as
123c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
123d0 6c 65 20 62 75 74 20 77 69 74 68 20 74 68 65 20  le but with the 
123e0 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 6a 6f 75  string."<tt>-jou
123f0 72 6e 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e  rnal</tt>" appen
12400 64 65 64 2e 20 20 54 68 65 72 65 20 63 61 6e 20  ded.  There can 
12410 6f 6e 6c 79 20 62 65 20 61 20 73 69 6e 67 6c 65  only be a single
12420 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
12430 6c 0a 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  l.associated wit
12440 68 20 61 20 67 69 76 65 20 64 61 74 61 62 61 73  h a give databas
12450 65 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65 72  e and hence ther
12460 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 6f 6e  e can only be on
12470 65 20 77 72 69 74 65 0a 74 72 61 6e 73 61 63 74  e write.transact
12480 69 6f 6e 20 6f 70 65 6e 20 61 67 61 69 6e 73 74  ion open against
12490 20 61 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61   a single databa
124a0 73 65 20 61 74 20 6f 6e 65 20 74 69 6d 65 2e 3c  se at one time.<
124b0 2f 70 3e 0a 0a 3c 70 3e 49 66 20 61 20 74 72 61  /p>..<p>If a tra
124c0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 62 6f 72  nsaction is abor
124d0 74 65 64 20 64 75 65 20 74 6f 20 61 6e 20 61 70  ted due to an ap
124e0 70 6c 69 63 61 74 69 6f 6e 20 63 72 61 73 68 2c  plication crash,
124f0 20 61 6e 20 6f 70 65 72 61 74 69 6e 67 0a 73 79   an operating.sy
12500 73 74 65 6d 20 63 72 61 73 68 2c 20 6f 72 20 61  stem crash, or a
12510 20 68 61 72 64 77 61 72 65 20 70 6f 77 65 72 20   hardware power 
12520 66 61 69 6c 75 72 65 20 6f 72 20 63 72 61 73 68  failure or crash
12530 2c 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62  , then the datab
12540 61 73 65 20 6d 61 79 0a 62 65 20 6c 65 66 74 20  ase may.be left 
12550 69 6e 20 61 6e 20 69 6e 63 6f 6e 73 69 73 74 65  in an inconsiste
12560 6e 74 20 73 74 61 74 65 2e 20 20 5e 54 68 65 20  nt state.  ^The 
12570 6e 65 78 74 20 74 69 6d 65 20 53 51 4c 69 74 65  next time SQLite
12580 20 61 74 74 65 6d 70 74 73 20 74 6f 20 6f 70 65   attempts to ope
12590 6e 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n.the database f
125a0 69 6c 65 2c 20 74 68 65 20 70 72 65 73 65 6e 63  ile, the presenc
125b0 65 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61 63  e of the rollbac
125c0 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 77  k journal file w
125d0 69 6c 6c 20 62 65 20 0a 64 65 74 65 63 74 65 64  ill be .detected
125e0 20 61 6e 64 20 74 68 65 20 6a 6f 75 72 6e 61 6c   and the journal
125f0 20 77 69 6c 6c 20 62 65 20 61 75 74 6f 6d 61 74   will be automat
12600 69 63 61 6c 6c 79 20 70 6c 61 79 65 64 20 62 61  ically played ba
12610 63 6b 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68  ck to restore th
12620 65 0a 64 61 74 61 62 61 73 65 20 74 6f 20 69 74  e.database to it
12630 73 20 73 74 61 74 65 20 61 74 20 74 68 65 20 73  s state at the s
12640 74 61 72 74 20 6f 66 20 74 68 65 20 69 6e 63 6f  tart of the inco
12650 6d 70 6c 65 74 65 20 74 72 61 6e 73 61 63 74 69  mplete transacti
12660 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 20 72  on.</p>..<p>^A r
12670 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
12680 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69 64 65 72  is only consider
12690 65 64 20 74 6f 20 62 65 20 76 61 6c 69 64 20 69  ed to be valid i
126a0 66 20 69 74 20 65 78 69 73 74 73 20 61 6e 64 0a  f it exists and.
126b0 63 6f 6e 74 61 69 6e 73 20 61 20 76 61 6c 69 64  contains a valid
126c0 20 68 65 61 64 65 72 2e 20 20 48 65 6e 63 65 20   header.  Hence 
126d0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61  a transaction ca
126e0 6e 20 62 65 20 63 6f 6d 6d 69 74 74 65 64 20 69  n be committed i
126f0 6e 20 6f 6e 65 0a 6f 66 20 74 68 72 65 65 20 77  n one.of three w
12700 61 79 73 3a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e 28  ays:.<ol>.<li>^(
12710 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  The rollback jou
12720 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20 62 65  rnal file can be
12730 20 64 65 6c 65 74 65 64 29 5e 2c 0a 3c 6c 69 3e   deleted)^,.<li>
12740 5e 28 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  ^(The rollback j
12750 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61 6e 20  ournal file can 
12760 62 65 20 74 72 75 6e 63 61 74 65 64 20 74 6f 20  be truncated to 
12770 7a 65 72 6f 20 6c 65 6e 67 74 68 29 5e 2c 20 6f  zero length)^, o
12780 72 0a 3c 6c 69 3e 5e 28 54 68 65 20 68 65 61 64  r.<li>^(The head
12790 65 72 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61  er of the rollba
127a0 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 62  ck journal can b
127b0 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 69  e overwritten wi
127c0 74 68 0a 69 6e 76 61 6c 69 64 20 68 65 61 64 65  th.invalid heade
127d0 72 20 74 65 78 74 20 28 66 6f 72 20 65 78 61 6d  r text (for exam
127e0 70 6c 65 2c 20 61 6c 6c 20 7a 65 72 6f 73 29 2e  ple, all zeros).
127f0 29 5e 0a 3c 2f 6f 6c 3e 0a 3c 70 3e 0a 5e 54 68  )^.</ol>.<p>.^Th
12800 65 73 65 20 74 68 72 65 65 20 77 61 79 73 20 6f  ese three ways o
12810 66 20 63 6f 6d 6d 69 74 74 69 6e 67 20 61 20 74  f committing a t
12820 72 61 6e 73 61 63 74 69 6f 6e 20 63 6f 72 72 65  ransaction corre
12830 73 70 6f 6e 64 20 74 6f 20 74 68 65 20 44 45 4c  spond to the DEL
12840 45 54 45 2c 0a 54 52 55 4e 43 41 54 45 2c 20 61  ETE,.TRUNCATE, a
12850 6e 64 20 50 45 52 53 49 53 54 20 73 65 74 74 69  nd PERSIST setti
12860 6e 67 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ngs, respectivel
12870 79 2c 20 6f 66 20 74 68 65 20 5b 6a 6f 75 72 6e  y, of the [journ
12880 61 6c 5f 6d 6f 64 65 20 70 72 61 67 6d 61 5d 2e  al_mode pragma].
12890 0a 3c 2f 70 3e 0a 0a 0a 3c 70 3e 41 20 76 61 6c  .</p>...<p>A val
128a0 69 64 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  id rollback jour
128b0 6e 61 6c 20 62 65 67 69 6e 73 20 77 69 74 68 20  nal begins with 
128c0 61 20 68 65 61 64 65 72 20 69 6e 20 74 68 65 20  a header in the 
128d0 66 6f 6c 6c 6f 77 69 6e 67 20 66 6f 72 6d 61 74  following format
128e0 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a  :</p>..<center>.
128f0 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72  <i>Rollback Jour
12900 6e 61 6c 20 48 65 61 64 65 72 20 46 6f 72 6d 61  nal Header Forma
12910 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65  t</i><br>.<table
12920 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72   width="80%" bor
12930 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f  der=1>.<tr><th>O
12940 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68  ffset<th>Size<th
12950 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72  >Description.<tr
12960 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
12970 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 0a 20  align=center>0. 
12980 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
12990 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
129a0 0a 20 20 20 20 3c 74 64 3e 48 65 61 64 65 72 20  .    <td>Header 
129b0 73 74 72 69 6e 67 3a 20 20 30 78 64 39 2c 20 30  string:  0xd9, 0
129c0 78 64 35 2c 20 30 78 30 35 2c 20 30 78 66 39 2c  xd5, 0x05, 0xf9,
129d0 20 30 78 32 30 2c 20 30 78 61 31 2c 20 30 78 36   0x20, 0xa1, 0x6
129e0 33 2c 20 30 78 64 37 0a 3c 74 72 3e 3c 74 64 20  3, 0xd7.<tr><td 
129f0 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12a00 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74  =center>8.    <t
12a10 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12a20 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
12a30 3c 74 64 3e 54 68 65 20 22 50 61 67 65 20 43 6f  <td>The "Page Co
12a40 75 6e 74 22 20 2d 20 54 68 65 20 6e 75 6d 62 65  unt" - The numbe
12a50 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
12a60 65 20 6e 65 78 74 20 73 65 67 6d 65 6e 74 20 6f  e next segment o
12a70 66 20 74 68 65 20 0a 20 20 20 20 20 20 20 20 6a  f the .        j
12a80 6f 75 72 6e 61 6c 2c 20 6f 72 20 2d 31 20 74 6f  ournal, or -1 to
12a90 0a 20 20 20 20 20 20 20 20 6d 65 61 6e 20 61 6c  .        mean al
12aa0 6c 20 63 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65  l content to the
12ab0 20 65 6e 64 20 6f 66 20 74 68 65 20 66 69 6c 65   end of the file
12ac0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
12ad0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12ae0 3e 31 32 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >12.    <td vali
12af0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12b00 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 41 20  ter>4.    <td>A 
12b10 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 20 66 6f 72  random nonce for
12b20 20 74 68 65 20 63 68 65 63 6b 73 75 6d 0a 3c 74   the checksum.<t
12b30 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12b40 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36   align=center>16
12b50 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
12b60 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12b70 3e 34 0a 20 20 20 20 3c 74 64 3e 49 6e 69 74 69  >4.    <td>Initi
12b80 61 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 64  al size of the d
12b90 61 74 61 62 61 73 65 20 69 6e 20 70 61 67 65 73  atabase in pages
12ba0 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
12bb0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
12bc0 3e 32 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  >20.    <td vali
12bd0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
12be0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 69  ter>4.    <td>Si
12bf0 7a 65 20 6f 66 20 61 20 64 69 73 6b 20 73 65 63  ze of a disk sec
12c00 74 6f 72 20 61 73 73 75 6d 65 64 20 62 79 20 74  tor assumed by t
12c10 68 65 20 70 72 6f 63 65 73 73 20 74 68 61 74 20  he process that 
12c20 77 72 6f 74 65 20 74 68 69 73 0a 20 20 20 20 20  wrote this.     
12c30 20 20 20 6a 6f 75 72 6e 61 6c 2e 0a 3c 74 72 3e     journal..<tr>
12c40 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12c50 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 34 0a 20  lign=center>24. 
12c60 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
12c70 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
12c80 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66  .    <td>Size of
12c90 20 70 61 67 65 73 20 69 6e 20 74 68 69 73 20 6a   pages in this j
12ca0 6f 75 72 6e 61 6c 2e 0a 3c 2f 74 61 62 6c 65 3e  ournal..</table>
12cb0 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 5e  .</center>..<p>^
12cc0 41 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  A rollback journ
12cd0 61 6c 20 68 65 61 64 65 72 20 69 73 20 70 61 64  al header is pad
12ce0 64 65 64 20 77 69 74 68 20 7a 65 72 6f 73 20 6f  ded with zeros o
12cf0 75 74 20 74 6f 20 74 68 65 20 73 69 7a 65 20 6f  ut to the size o
12d00 66 20 61 20 0a 73 69 6e 67 6c 65 20 73 65 63 74  f a .single sect
12d10 6f 72 20 28 61 73 20 64 65 66 69 6e 65 64 20 62  or (as defined b
12d20 79 20 74 68 65 20 73 65 63 74 6f 72 20 73 69 7a  y the sector siz
12d30 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
12d40 73 65 74 20 32 30 29 2e 0a 54 68 65 20 68 65 61  set 20)..The hea
12d50 64 65 72 20 69 73 20 69 6e 20 61 20 73 65 63 74  der is in a sect
12d60 6f 72 20 62 79 20 69 74 73 65 6c 66 20 73 6f 20  or by itself so 
12d70 74 68 61 74 20 69 66 20 61 20 70 6f 77 65 72 20  that if a power 
12d80 6c 6f 73 73 20 6f 63 63 75 72 73 20 77 68 69 6c  loss occurs whil
12d90 65 0a 77 72 69 74 69 6e 67 20 74 68 65 20 73 65  e.writing the se
12da0 63 74 6f 72 2c 20 69 6e 66 6f 72 6d 61 74 69 6f  ctor, informatio
12db0 6e 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 74  n that follows t
12dc0 68 65 20 68 65 61 64 65 72 20 77 69 6c 6c 20 62  he header will b
12dd0 65 0a 28 68 6f 70 65 66 75 6c 6c 79 29 20 75 6e  e.(hopefully) un
12de0 64 61 6d 61 67 65 64 2e 3c 2f 70 3e 0a 0a 3c 70  damaged.</p>..<p
12df0 3e 5e 41 66 74 65 72 20 74 68 65 20 68 65 61 64  >^After the head
12e00 65 72 20 61 6e 64 20 7a 65 72 6f 20 70 61 64 64  er and zero padd
12e10 69 6e 67 20 61 72 65 20 7a 65 72 6f 20 6f 72 20  ing are zero or 
12e20 6d 6f 72 65 20 70 61 67 65 20 72 65 63 6f 72 64  more page record
12e30 73 2e 20 20 5e 45 61 63 68 0a 70 61 67 65 20 72  s.  ^Each.page r
12e40 65 63 6f 72 64 20 73 74 6f 72 65 73 20 61 20 63  ecord stores a c
12e50 6f 70 79 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  opy of the conte
12e60 6e 74 20 6f 66 20 61 20 70 61 67 65 20 66 72 6f  nt of a page fro
12e70 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
12e80 69 6c 65 0a 62 65 66 6f 72 65 20 69 74 20 77 61  ile.before it wa
12e90 73 20 63 68 61 6e 67 65 64 2e 20 20 5e 54 68 65  s changed.  ^The
12ea0 20 73 61 6d 65 20 70 61 67 65 20 6d 61 79 20 6e   same page may n
12eb0 6f 74 20 61 70 70 65 61 72 20 6d 6f 72 65 20 74  ot appear more t
12ec0 68 61 6e 20 6f 6e 63 65 0a 77 69 74 68 69 6e 20  han once.within 
12ed0 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63  a single rollbac
12ee0 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 54 6f 20 72 6f  k journal..To ro
12ef0 6c 6c 62 61 63 6b 20 61 6e 20 69 6e 63 6f 6d 70  llback an incomp
12f00 6c 65 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  lete transaction
12f10 2c 20 61 20 70 72 6f 63 65 73 73 0a 68 61 73 20  , a process.has 
12f20 6d 65 72 65 6c 79 20 74 6f 20 72 65 61 64 20 74  merely to read t
12f30 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  he rollback jour
12f40 6e 61 6c 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69  nal from beginni
12f50 6e 67 20 74 6f 20 65 6e 64 20 61 6e 64 0a 77 72  ng to end and.wr
12f60 69 74 65 20 70 61 67 65 73 20 66 6f 75 6e 64 20  ite pages found 
12f70 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 62  in the journal b
12f80 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 64 61 74  ack into the dat
12f90 61 62 61 73 65 20 66 69 6c 65 20 61 74 20 74 68  abase file at th
12fa0 65 0a 61 70 70 72 6f 70 72 69 61 74 65 20 6c 6f  e.appropriate lo
12fb0 63 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  cation.</p>..<p>
12fc0 4c 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Let the database
12fd0 20 70 61 67 65 20 73 69 7a 65 20 28 74 68 65 20   page size (the 
12fe0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74  value of the int
12ff0 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32  eger at offset 2
13000 34 20 0a 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61  4 .in the journa
13010 6c 20 68 65 61 64 65 72 29 20 62 65 20 4e 2e 0a  l header) be N..
13020 54 68 65 6e 20 74 68 65 20 66 6f 72 6d 61 74 20  Then the format 
13030 6f 66 20 61 20 70 61 67 65 20 72 65 63 6f 72 64  of a page record
13040 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c   is as follows:<
13050 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  /p>..<center>.<i
13060 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61  >Rollback Journa
13070 6c 20 50 61 67 65 20 52 65 63 6f 72 64 20 46 6f  l Page Record Fo
13080 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
13090 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
130a0 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
130b0 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
130c0 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
130d0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
130e0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
130f0 30 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  0.    <td valign
13100 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13110 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20  r>4.    <td>The 
13120 70 61 67 65 20 6e 75 6d 62 65 72 20 69 6e 20 74  page number in t
13130 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
13140 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13150 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13160 3e 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  >4.    <td valig
13170 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13180 65 72 3e 4e 0a 20 20 20 20 3c 74 64 3e 4f 72 69  er>N.    <td>Ori
13190 67 69 6e 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66  ginal content of
131a0 20 74 68 65 20 70 61 67 65 20 70 72 69 6f 72 20   the page prior 
131b0 74 6f 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  to the start of 
131c0 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  the transaction.
131d0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
131e0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
131f0 4e 2b 34 0a 20 20 20 20 3c 74 64 20 76 61 6c 69  N+4.    <td vali
13200 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13210 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68  ter>4.    <td>Ch
13220 65 63 6b 73 75 6d 0a 3c 2f 74 61 62 6c 65 3e 0a  ecksum.</table>.
13230 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 5e  </center>...<p>^
13240 28 54 68 65 20 63 68 65 63 6b 73 75 6d 20 69 73  (The checksum is
13250 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 33 32 2d   an unsigned 32-
13260 62 69 74 20 69 6e 74 65 67 65 72 20 63 6f 6d 70  bit integer comp
13270 75 74 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  uted as follows:
13280 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 49  </p>..<ol>.<li>I
13290 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 63 68  nitialize the ch
132a0 65 63 6b 73 75 6d 20 74 6f 20 74 68 65 20 63 68  ecksum to the ch
132b0 65 63 6b 73 75 6d 20 6e 6f 6e 63 65 20 76 61 6c  ecksum nonce val
132c0 75 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a  ue found in the.
132d0 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 61  journal header a
132e0 74 20 6f 66 66 73 65 74 20 31 32 2e 0a 3c 6c 69  t offset 12..<li
132f0 3e 49 6e 69 74 69 61 6c 69 7a 65 20 69 6e 64 65  >Initialize inde
13300 78 20 58 20 74 6f 20 62 65 20 4e 2d 32 30 30 20  x X to be N-200 
13310 28 77 68 65 72 65 20 4e 20 69 73 20 74 68 65 20  (where N is the 
13320 73 69 7a 65 20 6f 66 20 61 20 64 61 74 61 62 61  size of a databa
13330 73 65 20 70 61 67 65 0a 69 6e 20 62 79 74 65 73  se page.in bytes
13340 2e 0a 3c 6c 69 3e 49 6e 74 65 72 70 72 65 74 20  ..<li>Interpret 
13350 74 68 65 20 62 79 74 65 20 61 74 20 6f 66 66 73  the byte at offs
13360 65 74 20 58 20 69 6e 74 6f 20 74 68 65 20 70 61  et X into the pa
13370 67 65 20 61 73 20 61 6e 20 38 2d 62 69 74 20 75  ge as an 8-bit u
13380 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 0a  nsigned integer.
13390 20 61 6e 64 20 61 64 64 20 74 68 65 20 76 61 6c   and add the val
133a0 75 65 20 6f 66 20 74 68 61 74 20 69 6e 74 65 67  ue of that integ
133b0 65 72 20 74 6f 20 74 68 65 20 63 68 65 63 6b 73  er to the checks
133c0 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72 61 63 74  um..<li>Subtract
133d0 20 32 30 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c 69   200 from X..<li
133e0 3e 49 66 20 58 20 69 73 20 67 72 65 61 74 65 72  >If X is greater
133f0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
13400 6f 20 7a 65 72 6f 2c 20 67 6f 20 62 61 63 6b 20  o zero, go back 
13410 74 6f 20 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c 3e  to step 3..</ol>
13420 29 5e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b  )^..<p>The check
13430 73 75 6d 20 76 61 6c 75 65 20 69 73 20 75 73 65  sum value is use
13440 64 20 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e  d to guard again
13450 73 74 20 69 6e 63 6f 6d 70 6c 65 74 65 20 77 72  st incomplete wr
13460 69 74 65 73 20 6f 66 0a 61 20 6a 6f 75 72 6e 61  ites of.a journa
13470 6c 20 70 61 67 65 20 72 65 63 6f 72 64 20 66 6f  l page record fo
13480 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77 65 72 20  llowing a power 
13490 66 61 69 6c 75 72 65 2e 20 20 41 20 64 69 66 66  failure.  A diff
134a0 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f 6e  erent random non
134b0 63 65 0a 69 73 20 75 73 65 64 20 65 61 63 68 20  ce.is used each 
134c0 74 69 6d 65 20 61 20 74 72 61 6e 73 61 63 74 69  time a transacti
134d0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 69 6e  on is started in
134e0 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e 69 6d 69   order to minimi
134f0 7a 65 20 74 68 65 20 72 69 73 6b 0a 74 68 61 74  ze the risk.that
13500 20 75 6e 77 72 69 74 74 65 6e 20 73 65 63 74 6f   unwritten secto
13510 72 73 20 6d 69 67 68 74 20 62 79 20 63 68 61 6e  rs might by chan
13520 63 65 20 63 6f 6e 74 61 69 6e 20 64 61 74 61 20  ce contain data 
13530 66 72 6f 6d 20 74 68 65 20 73 61 6d 65 20 70 61  from the same pa
13540 67 65 0a 74 68 61 74 20 77 61 73 20 61 20 70 61  ge.that was a pa
13550 72 74 20 6f 66 20 70 72 69 6f 72 20 6a 6f 75 72  rt of prior jour
13560 6e 61 6c 73 2e 20 20 42 79 20 63 68 61 6e 67 69  nals.  By changi
13570 6e 67 20 74 68 65 20 6e 6f 6e 63 65 20 66 6f 72  ng the nonce for
13580 20 65 61 63 68 0a 74 72 61 6e 73 61 63 74 69 6f   each.transactio
13590 6e 2c 20 73 74 61 6c 65 20 64 61 74 61 20 6f 6e  n, stale data on
135a0 20 64 69 73 6b 20 77 69 6c 6c 20 73 74 69 6c 6c   disk will still
135b0 20 67 65 6e 65 72 61 74 65 20 61 6e 20 69 6e 63   generate an inc
135c0 6f 72 72 65 63 74 20 63 68 65 63 6b 73 75 6d 0a  orrect checksum.
135d0 61 6e 64 20 62 65 20 64 65 74 65 63 74 65 64 20  and be detected 
135e0 77 69 74 68 20 68 69 67 68 20 70 72 6f 62 61 62  with high probab
135f0 69 6c 69 74 79 2e 20 20 54 68 65 20 63 68 65 63  ility.  The chec
13600 6b 73 75 6d 20 6f 6e 6c 79 20 75 73 65 73 20 61  ksum only uses a
13610 20 73 70 61 72 73 65 20 73 61 6d 70 6c 65 0a 6f   sparse sample.o
13620 66 20 33 32 2d 62 69 74 20 77 6f 72 64 73 20 66  f 32-bit words f
13630 72 6f 6d 20 74 68 65 20 64 61 74 61 20 72 65 63  rom the data rec
13640 6f 72 64 20 66 6f 72 20 70 65 72 66 6f 72 6d 61  ord for performa
13650 6e 63 65 20 72 65 61 73 6f 6e 73 20 2d 20 64 65  nce reasons - de
13660 73 69 67 6e 20 73 74 75 64 69 65 73 20 0a 64 75  sign studies .du
13670 72 69 6e 67 20 74 68 65 20 70 6c 61 6e 6e 69 6e  ring the plannin
13680 67 20 70 68 61 73 65 73 20 6f 66 20 53 51 4c 69  g phases of SQLi
13690 74 65 20 33 2e 30 2e 30 20 73 68 6f 77 65 64 0a  te 3.0.0 showed.
136a0 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
136b0 72 66 6f 72 6d 61 6e 63 65 20 68 69 74 20 69 6e  rformance hit in
136c0 20 63 68 65 63 6b 73 75 6d 6d 69 6e 67 20 74 68   checksumming th
136d0 65 20 65 6e 74 69 72 65 20 70 61 67 65 2e 3c 2f  e entire page.</
136e0 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 70  p>..<p>Let the p
136f0 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20  age count value 
13700 61 74 20 6f 66 66 73 65 74 20 38 20 69 6e 20 74  at offset 8 in t
13710 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  he journal heade
13720 72 20 62 65 20 4d 2e 0a 5e 49 66 20 4d 20 69 73  r be M..^If M is
13730 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
13740 72 6f 20 74 68 65 6e 20 61 66 74 65 72 20 4d 20  ro then after M 
13750 70 61 67 65 20 72 65 63 6f 72 64 73 20 74 68 65  page records the
13760 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 6d 61   journal file.ma
13770 79 20 62 65 20 7a 65 72 6f 20 70 61 64 64 65 64  y be zero padded
13780 20 6f 75 74 20 74 6f 20 74 68 65 20 6e 65 78 74   out to the next
13790 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74 68 65   multiple of the
137a0 20 73 65 63 74 6f 72 20 73 69 7a 65 20 61 6e 64   sector size and
137b0 20 61 6e 6f 74 68 65 72 0a 6a 6f 75 72 6e 61 6c   another.journal
137c0 20 68 65 61 64 65 72 20 6d 61 79 20 62 65 20 69   header may be i
137d0 6e 73 65 72 74 65 64 2e 20 20 5e 41 6c 6c 20 6a  nserted.  ^All j
137e0 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 73 20 77  ournal headers w
137f0 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 6a  ithin the same.j
13800 6f 75 72 6e 61 6c 20 6d 75 73 74 20 63 6f 6e 74  ournal must cont
13810 61 69 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74  ain the same dat
13820 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20  abase page size 
13830 61 6e 64 20 73 65 63 74 6f 72 20 73 69 7a 65 2e  and sector size.
13840 3c 2f 70 3e 0a 0a 3c 70 3e 5e 49 66 20 4d 20 69  </p>..<p>^If M i
13850 73 20 2d 31 20 69 6e 20 74 68 65 20 69 6e 69 74  s -1 in the init
13860 69 61 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64  ial journal head
13870 65 72 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d  er, then the num
13880 62 65 72 20 6f 66 20 70 61 67 65 20 72 65 63 6f  ber of page reco
13890 72 64 73 0a 74 68 61 74 20 66 6f 6c 6c 6f 77 20  rds.that follow 
138a0 69 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 63  is computed by c
138b0 6f 6d 70 75 74 69 6e 67 20 68 6f 77 20 6d 61 6e  omputing how man
138c0 79 20 70 61 67 65 20 72 65 63 6f 72 64 73 20 77  y page records w
138d0 69 6c 6c 20 66 69 74 20 69 6e 0a 74 68 65 20 61  ill fit in.the a
138e0 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 6f  vailable space o
138f0 66 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20  f the remainder 
13900 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66  of the journal f
13910 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ile.</p>..<tcl>h
13920 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 66 6f  d_fragment walfo
13930 72 6d 61 74 20 7b 57 41 4c 20 66 6f 72 6d 61 74  rmat {WAL format
13940 7d 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 54 68 65 20  }</tcl>.<h1>The 
13950 57 72 69 74 65 2d 41 68 65 61 64 20 4c 6f 67 3c  Write-Ahead Log<
13960 2f 68 31 3e 0a 0a 3c 70 3e 42 65 67 69 6e 6e 69  /h1>..<p>Beginni
13970 6e 67 20 77 69 74 68 20 5b 76 65 72 73 69 6f 6e  ng with [version
13980 20 33 2e 37 2e 30 5d 20 28 5b 64 61 74 65 6f 66   3.7.0] ([dateof
13990 3a 33 2e 37 2e 30 5d 29 2c 20 0a 53 51 4c 69 74  :3.7.0]), .SQLit
139a0 65 20 73 75 70 70 6f 72 74 73 20 61 20 6e 65 77  e supports a new
139b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 63 6f 6e   transaction.con
139c0 74 72 6f 6c 20 6d 65 63 68 61 6e 69 73 6d 20 63  trol mechanism c
139d0 61 6c 6c 65 64 20 22 5b 57 41 4c 20 7c 20 77 72  alled "[WAL | wr
139e0 69 74 65 2d 61 68 65 61 64 20 6c 6f 67 5d 22 20  ite-ahead log]" 
139f0 6f 72 20 22 5b 57 41 4c 5d 22 2e 0a 5e 57 68 65  or "[WAL]"..^Whe
13a00 6e 20 61 20 64 61 74 61 62 61 73 65 20 69 73 20  n a database is 
13a10 69 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 61 6c 6c  in WAL mode, all
13a20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 6f 20   connections to 
13a30 74 68 61 74 20 64 61 74 61 62 61 73 65 20 6d 75  that database mu
13a40 73 74 0a 75 73 65 20 74 68 65 20 57 41 4c 2e 20  st.use the WAL. 
13a50 20 5e 41 20 70 61 72 74 69 63 75 6c 61 72 20 64   ^A particular d
13a60 61 74 61 62 61 73 65 20 77 69 6c 6c 20 75 73 65  atabase will use
13a70 20 65 69 74 68 65 72 20 61 20 72 6f 6c 6c 62 61   either a rollba
13a80 63 6b 20 6a 6f 75 72 6e 61 6c 0a 6f 72 20 61 20  ck journal.or a 
13a90 57 41 4c 2c 20 62 75 74 20 6e 6f 74 20 62 6f 74  WAL, but not bot
13aa0 68 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  h at the same ti
13ab0 6d 65 2e 0a 5e 54 68 65 20 57 41 4c 20 69 73 20  me..^The WAL is 
13ac0 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20 69  always located i
13ad0 6e 20 74 68 65 20 73 61 6d 65 20 64 69 72 65 63  n the same direc
13ae0 74 6f 72 79 20 61 73 20 74 68 65 20 64 61 74 61  tory as the data
13af0 62 61 73 65 0a 66 69 6c 65 20 61 6e 64 20 68 61  base.file and ha
13b00 73 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  s the same name 
13b10 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  as the database 
13b20 66 69 6c 65 20 62 75 74 20 77 69 74 68 20 74 68  file but with th
13b30 65 20 73 74 72 69 6e 67 0a 22 3c 74 74 3e 2d 77  e string."<tt>-w
13b40 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65  al</tt>" appende
13b50 64 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 57 41 4c 20  d.</p>..<h2>WAL 
13b60 46 69 6c 65 20 46 6f 72 6d 61 74 3c 2f 68 32 3e  File Format</h2>
13b70 0a 0a 3c 70 3e 41 20 57 41 4c 20 66 69 6c 65 20  ..<p>A WAL file 
13b80 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 68 65  consists of a he
13b90 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ader followed by
13ba0 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 22 66   zero or more "f
13bb0 72 61 6d 65 73 22 2e 0a 45 61 63 68 20 66 72 61  rames"..Each fra
13bc0 6d 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 72  me records the r
13bd0 65 76 69 73 65 64 20 63 6f 6e 74 65 6e 74 20 6f  evised content o
13be0 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20  f a single page 
13bf0 66 72 6f 6d 20 74 68 65 0a 64 61 74 61 62 61 73  from the.databas
13c00 65 20 66 69 6c 65 2e 20 20 41 6c 6c 20 63 68 61  e file.  All cha
13c10 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61  nges to the data
13c20 62 61 73 65 20 61 72 65 20 72 65 63 6f 72 64 65  base are recorde
13c30 64 20 62 79 20 77 72 69 74 69 6e 67 0a 66 72 61  d by writing.fra
13c40 6d 65 73 20 69 6e 74 6f 20 74 68 65 20 57 41 4c  mes into the WAL
13c50 2e 20 20 54 72 61 6e 73 61 63 74 69 6f 6e 73 20  .  Transactions 
13c60 63 6f 6d 6d 69 74 20 77 68 65 6e 20 61 20 66 72  commit when a fr
13c70 61 6d 65 20 69 73 20 77 72 69 74 74 65 6e 20 74  ame is written t
13c80 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 61 20 63  hat.contains a c
13c90 6f 6d 6d 69 74 20 6d 61 72 6b 65 72 2e 20 20 5e  ommit marker.  ^
13ca0 41 20 73 69 6e 67 6c 65 20 57 41 4c 20 63 61 6e  A single WAL can
13cb0 20 61 6e 64 20 75 73 75 61 6c 6c 79 20 64 6f 65   and usually doe
13cc0 73 20 72 65 63 6f 72 64 20 0a 6d 75 6c 74 69 70  s record .multip
13cd0 6c 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  le transactions.
13ce0 20 20 50 65 72 69 6f 64 69 63 61 6c 6c 79 2c 20    Periodically, 
13cf0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
13d00 68 65 20 57 41 4c 20 69 73 0a 74 72 61 6e 73 66  he WAL is.transf
13d10 65 72 72 65 64 20 62 61 63 6b 20 69 6e 74 6f 20  erred back into 
13d20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
13d30 65 20 69 6e 20 61 6e 20 6f 70 65 72 61 74 69 6f  e in an operatio
13d40 6e 20 63 61 6c 6c 65 64 20 61 0a 22 63 68 65 63  n called a."chec
13d50 6b 70 6f 69 6e 74 22 2e 3c 2f 70 3e 0a 0a 3c 70  kpoint".</p>..<p
13d60 3e 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c 20 66  >^A single WAL f
13d70 69 6c 65 20 63 61 6e 20 62 65 20 72 65 75 73 65  ile can be reuse
13d80 64 20 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73  d multiple times
13d90 2e 20 20 5e 49 6e 20 6f 74 68 65 72 20 77 6f 72  .  ^In other wor
13da0 64 73 2c 20 74 68 65 0a 57 41 4c 20 63 61 6e 20  ds, the.WAL can 
13db0 66 69 6c 6c 20 75 70 20 77 69 74 68 20 66 72 61  fill up with fra
13dc0 6d 65 73 20 61 6e 64 20 74 68 65 6e 20 62 65 20  mes and then be 
13dd0 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 6e 64  checkpointed and
13de0 20 74 68 65 6e 20 6e 65 77 0a 66 72 61 6d 65 73   then new.frames
13df0 20 63 61 6e 20 6f 76 65 72 77 72 69 74 65 20 74   can overwrite t
13e00 68 65 20 6f 6c 64 20 6f 6e 65 73 2e 20 20 5e 41  he old ones.  ^A
13e10 20 57 41 4c 20 61 6c 77 61 79 73 20 67 72 6f 77   WAL always grow
13e20 73 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  s from beginning
13e30 0a 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e  .toward the end.
13e40 20 20 43 68 65 63 6b 73 75 6d 73 20 61 6e 64 20    Checksums and 
13e50 63 6f 75 6e 74 65 72 73 20 61 74 74 61 63 68 65  counters attache
13e60 64 20 74 6f 20 65 61 63 68 20 66 72 61 6d 65 20  d to each frame 
13e70 61 72 65 0a 75 73 65 64 20 74 6f 20 64 65 74 65  are.used to dete
13e80 72 6d 69 6e 65 20 77 68 69 63 68 20 66 72 61 6d  rmine which fram
13e90 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 57 41  es within the WA
13ea0 4c 20 61 72 65 20 76 61 6c 69 64 20 61 6e 64 20  L are valid and 
13eb0 77 68 69 63 68 0a 61 72 65 20 6c 65 66 74 6f 76  which.are leftov
13ec0 65 72 73 20 66 72 6f 6d 20 70 72 69 6f 72 20 63  ers from prior c
13ed0 68 65 63 6b 70 6f 69 6e 74 73 2e 3c 2f 70 3e 0a  heckpoints.</p>.
13ee0 0a 3c 70 3e 5e 28 54 68 65 20 57 41 4c 20 68 65  .<p>^(The WAL he
13ef0 61 64 65 72 20 69 73 20 33 32 20 62 79 74 65 73  ader is 32 bytes
13f00 20 69 6e 20 73 69 7a 65 20 61 6e 64 20 63 6f 6e   in size and con
13f10 73 69 73 74 73 20 6f 66 20 74 68 65 20 66 6f 6c  sists of the fol
13f20 6c 6f 77 69 6e 67 20 65 69 67 68 74 0a 62 69 67  lowing eight.big
13f30 2d 65 6e 64 69 61 6e 20 33 32 2d 62 69 74 20 75  -endian 32-bit u
13f40 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
13f50 76 61 6c 75 65 73 3a 3c 2f 70 3e 0a 0a 3c 63 65  values:</p>..<ce
13f60 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 48 65 61  nter>.<i>WAL Hea
13f70 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62  der Format</i><b
13f80 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d  r>.<table width=
13f90 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a  "80%" border=1>.
13fa0 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74  <tr><th>Offset<t
13fb0 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69  h>Size<th>Descri
13fc0 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61  ption.<tr><td va
13fd0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13fe0 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67  enter>0<td valig
13ff0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
14000 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 4d 61 67  er>4.    <td>Mag
14010 69 63 20 6e 75 6d 62 65 72 2e 20 20 30 78 33 37  ic number.  0x37
14020 37 66 30 36 38 32 20 6f 72 20 30 78 33 37 37 66  7f0682 or 0x377f
14030 30 36 38 33 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  0683.<tr><td val
14040 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
14050 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e  nter>4<td valign
14060 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
14070 72 3e 34 0a 20 20 20 20 3c 74 64 3e 46 69 6c 65  r>4.    <td>File
14080 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 2e   format version.
14090 20 20 43 75 72 72 65 6e 74 6c 79 20 33 30 30 37    Currently 3007
140a0 30 30 30 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  000..<tr><td val
140b0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
140c0 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e  nter>8<td valign
140d0 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
140e0 72 3e 34 0a 20 20 20 20 3c 74 64 3e 44 61 74 61  r>4.    <td>Data
140f0 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 2e 20  base page size. 
14100 20 45 78 61 6d 70 6c 65 3a 20 31 30 32 34 0a 3c   Example: 1024.<
14110 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
14120 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
14130 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  2<td valign=top 
14140 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
14150 20 20 20 3c 74 64 3e 43 68 65 63 6b 70 6f 69 6e     <td>Checkpoin
14160 74 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  t sequence numbe
14170 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  r.<tr><td valign
14180 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
14190 72 3e 31 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>16<td valign=t
141a0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
141b0 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 31  4.    <td>Salt-1
141c0 3a 20 72 61 6e 64 6f 6d 20 69 6e 74 65 67 65 72  : random integer
141d0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   incremented wit
141e0 68 20 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e  h each checkpoin
141f0 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  t.<tr><td valign
14200 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
14210 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>20<td valign=t
14220 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
14230 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32  4.    <td>Salt-2
14240 3a 20 61 20 64 69 66 66 65 72 65 6e 74 20 72 61  : a different ra
14250 6e 64 6f 6d 20 6e 75 6d 62 65 72 20 66 6f 72 20  ndom number for 
14260 65 61 63 68 20 63 68 65 63 6b 70 6f 69 6e 74 0a  each checkpoint.
14270 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
14280 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
14290 32 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  24<td valign=top
142a0 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a   align=center>4.
142b0 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d      <td>Checksum
142c0 2d 31 3a 20 46 69 72 73 74 20 70 61 72 74 20 6f  -1: First part o
142d0 66 20 61 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20  f a checksum on 
142e0 74 68 65 20 66 69 72 73 74 20 32 34 20 62 79 74  the first 24 byt
142f0 65 73 20 6f 66 20 68 65 61 64 65 72 0a 3c 74 72  es of header.<tr
14300 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
14310 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 38 3c  align=center>28<
14320 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
14330 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
14340 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 32 3a   <td>Checksum-2:
14350 20 53 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20   Second part of 
14360 74 68 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e 20  the checksum on 
14370 74 68 65 20 66 69 72 73 74 20 32 34 20 62 79 74  the first 24 byt
14380 65 73 20 6f 66 20 68 65 61 64 65 72 0a 3c 2f 74  es of header.</t
14390 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 29  able>.</center>)
143a0 5e 0a 0a 3c 70 3e 5e 49 6d 6d 65 64 69 61 74 65  ^..<p>^Immediate
143b0 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  ly following the
143c0 20 77 61 6c 2d 68 65 61 64 65 72 20 61 72 65 20   wal-header are 
143d0 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 66 72 61  zero or more fra
143e0 6d 65 73 2e 20 5e 45 61 63 68 0a 66 72 61 6d 65  mes. ^Each.frame
143f0 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 32   consists of a 2
14400 34 2d 62 79 74 65 20 66 72 61 6d 65 2d 68 65 61  4-byte frame-hea
14410 64 65 72 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  der followed by 
14420 61 20 3c 69 3e 70 61 67 65 2d 73 69 7a 65 3c 2f  a <i>page-size</
14430 69 3e 20 62 79 74 65 73 0a 6f 66 20 70 61 67 65  i> bytes.of page
14440 20 64 61 74 61 2e 20 5e 28 54 68 65 20 66 72 61   data. ^(The fra
14450 6d 65 2d 68 65 61 64 65 72 20 69 73 20 73 69 78  me-header is six
14460 20 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62   big-endian 32-b
14470 69 74 20 75 6e 73 69 67 6e 65 64 20 0a 69 6e 74  it unsigned .int
14480 65 67 65 72 20 76 61 6c 75 65 73 2c 20 61 73 20  eger values, as 
14490 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65  follows:..<cente
144a0 72 3e 0a 3c 69 3e 57 41 4c 20 46 72 61 6d 65 20  r>.<i>WAL Frame 
144b0 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69  Header Format</i
144c0 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64  ><br>.<table wid
144d0 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d  th="80%" border=
144e0 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65  1>.<tr><th>Offse
144f0 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73  t<th>Size<th>Des
14500 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64  cription.<tr><td
14510 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
14520 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61  n=center>0<td va
14530 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
14540 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
14550 50 61 67 65 20 6e 75 6d 62 65 72 0a 3c 74 72 3e  Page number.<tr>
14560 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
14570 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
14580 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
14590 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
145a0 74 64 3e 46 6f 72 20 63 6f 6d 6d 69 74 20 72 65  td>For commit re
145b0 63 6f 72 64 73 2c 20 74 68 65 20 73 69 7a 65 20  cords, the size 
145c0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
145d0 66 69 6c 65 20 69 6e 20 70 61 67 65 73 0a 20 20  file in pages.  
145e0 20 20 20 20 20 20 61 66 74 65 72 20 74 68 65 20        after the 
145f0 63 6f 6d 6d 69 74 2e 20 20 46 6f 72 20 61 6c 6c  commit.  For all
14600 20 6f 74 68 65 72 20 72 65 63 6f 72 64 73 2c 20   other records, 
14610 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  zero..<tr><td va
14620 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
14630 65 6e 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67  enter>8<td valig
14640 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
14650 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c  er>4.    <td>Sal
14660 74 2d 31 20 63 6f 70 69 65 64 20 66 72 6f 6d 20  t-1 copied from 
14670 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 0a 3c  the WAL header.<
14680 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
14690 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
146a0 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  2<td valign=top 
146b0 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
146c0 20 20 20 3c 74 64 3e 53 61 6c 74 2d 32 20 63 6f     <td>Salt-2 co
146d0 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 57 41  pied from the WA
146e0 4c 20 68 65 61 64 65 72 0a 3c 74 72 3e 3c 74 64  L header.<tr><td
146f0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
14700 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76  n=center>16<td v
14710 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
14720 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
14730 3e 43 68 65 63 6b 73 75 6d 2d 31 3a 20 20 43 75  >Checksum-1:  Cu
14740 6d 75 6c 61 74 69 76 65 20 63 68 65 63 6b 73 75  mulative checksu
14750 6d 20 75 70 20 74 68 72 6f 75 67 68 20 61 6e 64  m up through and
14760 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 69 73 20   including this 
14770 70 61 67 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  page.<tr><td val
14780 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
14790 6e 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67  nter>20<td valig
147a0 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
147b0 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65  er>4.    <td>Che
147c0 63 6b 73 75 6d 2d 32 3a 20 20 53 65 63 6f 6e 64  cksum-2:  Second
147d0 20 68 61 6c 66 20 6f 66 20 74 68 65 20 63 75 6d   half of the cum
147e0 75 6c 61 74 69 76 65 20 63 68 65 63 6b 73 75 6d  ulative checksum
147f0 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e  ..</table>.</cen
14800 74 65 72 3e 29 5e 0a 0a 5e 28 3c 70 3e 41 20 66  ter>)^..^(<p>A f
14810 72 61 6d 65 20 69 73 20 63 6f 6e 73 69 64 65 72  rame is consider
14820 65 64 20 76 61 6c 69 64 20 69 66 20 61 6e 64 20  ed valid if and 
14830 6f 6e 6c 79 20 69 66 20 74 68 65 20 66 6f 6c 6c  only if the foll
14840 6f 77 69 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 73  owing conditions
14850 20 61 72 65 0a 74 72 75 65 3a 3c 2f 70 3e 0a 0a   are.true:</p>..
14860 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20  <ol>.<li><p>The 
14870 73 61 6c 74 2d 31 20 61 6e 64 20 73 61 6c 74 2d  salt-1 and salt-
14880 32 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  2 values in the 
14890 66 72 61 6d 65 2d 68 65 61 64 65 72 20 6d 61 74  frame-header mat
148a0 63 68 0a 20 20 20 20 20 20 20 73 61 6c 74 20 76  ch.       salt v
148b0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 77 61 6c  alues in the wal
148c0 2d 68 65 61 64 65 72 3c 2f 70 3e 3c 2f 6c 69 3e  -header</p></li>
148d0 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65 20 63 68 65  ..<li><p>The che
148e0 63 6b 73 75 6d 20 76 61 6c 75 65 73 20 69 6e 20  cksum values in 
148f0 74 68 65 20 66 69 6e 61 6c 20 38 20 62 79 74 65  the final 8 byte
14900 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 2d 68  s of the frame-h
14910 65 61 64 65 72 0a 20 20 20 20 20 20 20 65 78 61  eader.       exa
14920 63 74 6c 79 20 6d 61 74 63 68 20 74 68 65 20 63  ctly match the c
14930 68 65 63 6b 73 75 6d 20 63 6f 6d 70 75 74 65 64  hecksum computed
14940 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 20 6f   consecutively o
14950 6e 20 74 68 65 0a 20 20 20 20 20 20 20 66 69 72  n the.       fir
14960 73 74 20 32 34 20 62 79 74 65 73 20 6f 66 20 74  st 24 bytes of t
14970 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 61 6e  he WAL header an
14980 64 20 74 68 65 20 66 69 72 73 74 20 38 20 62 79  d the first 8 by
14990 74 65 73 20 61 6e 64 0a 20 20 20 20 20 20 20 74  tes and.       t
149a0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 6c  he content of al
149b0 6c 20 66 72 61 6d 65 73 0a 20 20 20 20 20 20 20  l frames.       
149c0 75 70 20 74 6f 20 61 6e 64 20 69 6e 63 6c 75 64  up to and includ
149d0 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20  ing the current 
149e0 66 72 61 6d 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 3c  frame.</p></li><
149f0 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 74  /li>.</ol>)^..<t
14a00 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77  cl>hd_fragment w
14a10 61 6c 63 6b 73 6d 20 7b 57 41 4c 20 63 68 65 63  alcksm {WAL chec
14a20 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 7d 3c  ksum algorithm}<
14a30 2f 74 63 6c 3e 0a 3c 68 32 3e 43 68 65 63 6b 73  /tcl>.<h2>Checks
14a40 75 6d 20 41 6c 67 6f 72 69 74 68 6d 3c 2f 68 32  um Algorithm</h2
14a50 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73  >..<p>The checks
14a60 75 6d 20 69 73 20 63 6f 6d 70 75 74 65 64 20 62  um is computed b
14a70 79 20 69 6e 74 65 72 70 72 65 74 69 6e 67 20 74  y interpreting t
14a80 68 65 20 69 6e 70 75 74 20 61 73 0a 61 6e 20 65  he input as.an e
14a90 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e  ven number of un
14aa0 73 69 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e  signed 32-bit in
14ab0 74 65 67 65 72 73 3a 20 78 28 30 29 20 74 68 72  tegers: x(0) thr
14ac0 6f 75 67 68 20 78 28 4e 29 2e 0a 5e 54 68 65 20  ough x(N)..^The 
14ad0 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 73 20  32-bit integers 
14ae0 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  are big-endian i
14af0 66 20 74 68 65 0a 6d 61 67 69 63 20 6e 75 6d 62  f the.magic numb
14b00 65 72 20 69 6e 20 74 68 65 20 66 69 72 73 74 20  er in the first 
14b10 34 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 57  4 bytes of the W
14b20 41 4c 20 68 65 61 64 65 72 20 69 73 20 30 78 33  AL header is 0x3
14b30 37 37 66 30 36 38 33 20 61 6e 64 0a 74 68 65 20  77f0683 and.the 
14b40 69 6e 74 65 67 65 72 73 20 61 72 65 20 6c 69 74  integers are lit
14b50 74 6c 65 2d 65 6e 64 69 61 6e 20 69 66 20 74 68  tle-endian if th
14b60 65 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20 69  e magic number i
14b70 73 20 30 78 33 37 37 66 30 36 38 32 2e 0a 5e 54  s 0x377f0682..^T
14b80 68 65 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75  he checksum valu
14b90 65 73 20 61 72 65 20 61 6c 77 61 79 73 20 73 74  es are always st
14ba0 6f 72 65 64 20 69 6e 20 74 68 65 20 66 72 61 6d  ored in the fram
14bb0 65 20 68 65 61 64 65 72 20 69 6e 20 61 0a 62 69  e header in a.bi
14bc0 67 2d 65 6e 64 69 61 6e 20 66 6f 72 6d 61 74 20  g-endian format 
14bd0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
14be0 69 63 68 20 62 79 74 65 20 6f 72 64 65 72 20 69  ich byte order i
14bf0 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 75 74  s used to comput
14c00 65 0a 74 68 65 20 63 68 65 63 6b 73 75 6d 2e 3c  e.the checksum.<
14c10 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63  /p>..<p>The chec
14c20 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68 6d 20 6f  ksum algorithm o
14c30 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 6f  nly works for co
14c40 6e 74 65 6e 74 20 77 68 69 63 68 20 69 73 20 61  ntent which is a
14c50 20 6d 75 6c 74 69 70 6c 65 20 6f 66 0a 38 20 62   multiple of.8 b
14c60 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20  ytes in length. 
14c70 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
14c80 20 69 66 20 74 68 65 20 69 6e 70 75 74 73 20 61   if the inputs a
14c90 72 65 20 78 28 30 29 20 74 68 72 6f 75 67 68 20  re x(0) through 
14ca0 78 28 4e 29 0a 74 68 65 6e 20 4e 20 6d 75 73 74  x(N).then N must
14cb0 20 62 65 20 6f 64 64 2e 0a 5e 28 54 68 65 20 63   be odd..^(The c
14cc0 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74 68  hecksum algorith
14cd0 6d 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  m is as follows:
14ce0 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70  ..<blockquote><p
14cf0 72 65 3e 20 0a 73 30 20 3d 20 73 31 20 3d 20 30  re> .s0 = s1 = 0
14d00 0a 66 6f 72 20 69 20 66 72 6f 6d 20 30 20 74 6f  .for i from 0 to
14d10 20 6e 2d 31 20 73 74 65 70 20 32 3a 0a 20 20 20   n-1 step 2:.   
14d20 73 30 20 2b 3d 20 78 28 69 29 20 2b 20 73 31 3b  s0 += x(i) + s1;
14d30 0a 20 20 20 73 31 20 2b 3d 20 78 28 69 2b 31 29  .   s1 += x(i+1)
14d40 20 2b 20 73 30 3b 0a 65 6e 64 66 6f 72 0a 23 20   + s0;.endfor.# 
14d50 72 65 73 75 6c 74 20 69 6e 20 73 30 20 61 6e 64  result in s0 and
14d60 20 73 31 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63   s1.</pre></bloc
14d70 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 5e 54  kquote>)^..<p>^T
14d80 68 65 20 6f 75 74 70 75 74 73 20 73 30 20 61 6e  he outputs s0 an
14d90 64 20 73 31 20 61 72 65 20 62 6f 74 68 20 77 65  d s1 are both we
14da0 69 67 68 74 65 64 20 63 68 65 63 6b 73 75 6d 73  ighted checksums
14db0 20 75 73 69 6e 67 20 46 69 62 6f 6e 61 63 63 69   using Fibonacci
14dc0 20 77 65 69 67 68 74 73 0a 69 6e 20 72 65 76 65   weights.in reve
14dd0 72 73 65 20 6f 72 64 65 72 2e 20 20 28 5e 54 68  rse order.  (^Th
14de0 65 20 6c 61 72 67 65 73 74 20 46 69 62 6f 6e 61  e largest Fibona
14df0 63 63 69 20 77 65 69 67 68 74 20 6f 63 63 75 72  cci weight occur
14e00 73 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 65  s on the first e
14e10 6c 65 6d 65 6e 74 0a 6f 66 20 74 68 65 20 73 65  lement.of the se
14e20 71 75 65 6e 63 65 20 62 65 69 6e 67 20 73 75 6d  quence being sum
14e30 6d 65 64 2e 29 20 20 5e 54 68 65 20 73 31 20 76  med.)  ^The s1 v
14e40 61 6c 75 65 20 73 70 61 6e 73 20 61 6c 6c 20 33  alue spans all 3
14e50 32 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 74 65  2-bit integer.te
14e60 72 6d 73 20 6f 66 20 74 68 65 20 73 65 71 75 65  rms of the seque
14e70 6e 63 65 20 77 68 65 72 65 61 73 20 73 30 20 6f  nce whereas s0 o
14e80 6d 69 74 73 20 74 68 65 20 66 69 6e 61 6c 20 74  mits the final t
14e90 65 72 6d 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 43 68  erm.</p>..<h2>Ch
14ea0 65 63 6b 70 6f 69 6e 74 20 41 6c 67 6f 72 69 74  eckpoint Algorit
14eb0 68 6d 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 4f 6e 20  hm</h2>..<p>^On 
14ec0 61 20 5b 63 68 65 63 6b 70 6f 69 6e 74 5d 2c 20  a [checkpoint], 
14ed0 74 68 65 20 57 41 4c 20 69 73 20 66 69 72 73 74  the WAL is first
14ee0 20 66 6c 75 73 68 65 64 20 74 6f 20 70 65 72 73   flushed to pers
14ef0 69 73 74 65 6e 74 20 73 74 6f 72 61 67 65 20 75  istent storage u
14f00 73 69 6e 67 0a 74 68 65 20 78 53 79 6e 63 20 6d  sing.the xSync m
14f10 65 74 68 6f 64 20 6f 66 20 74 68 65 20 5b 73 71  ethod of the [sq
14f20 6c 69 74 65 33 5f 69 6f 5f 6d 65 74 68 6f 64 73  lite3_io_methods
14f30 20 7c 20 56 46 53 5d 2e 20 0a 5e 54 68 65 6e 20   | VFS]. .^Then 
14f40 76 61 6c 69 64 20 63 6f 6e 74 65 6e 74 20 6f 66  valid content of
14f50 20 74 68 65 20 57 41 4c 20 69 73 20 74 72 61 6e   the WAL is tran
14f60 73 66 65 72 72 65 64 20 69 6e 74 6f 20 74 68 65  sferred into the
14f70 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
14f80 5e 46 69 6e 61 6c 6c 79 2c 20 74 68 65 20 64 61  ^Finally, the da
14f90 74 61 62 61 73 65 20 69 73 20 66 6c 75 73 68 65  tabase is flushe
14fa0 64 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74 20  d to persistent 
14fb0 73 74 6f 72 61 67 65 20 75 73 69 6e 67 20 61 6e  storage using an
14fc0 6f 74 68 65 72 0a 78 53 79 6e 63 20 6d 65 74 68  other.xSync meth
14fd0 6f 64 20 63 61 6c 6c 2e 0a 54 68 65 20 78 53 79  od call..The xSy
14fe0 6e 63 20 6f 70 65 72 61 74 69 6f 6e 73 20 73 65  nc operations se
14ff0 72 76 65 20 61 73 20 77 72 69 74 65 20 62 61 72  rve as write bar
15000 72 69 65 72 73 20 2d 20 61 6c 6c 20 77 72 69 74  riers - all writ
15010 65 73 20 6c 61 75 6e 63 68 65 64 0a 62 65 66 6f  es launched.befo
15020 72 65 20 74 68 65 20 78 53 79 6e 63 20 6d 75 73  re the xSync mus
15030 74 20 63 6f 6d 70 6c 65 74 65 20 62 65 66 6f 72  t complete befor
15040 65 20 61 6e 79 20 77 72 69 74 65 20 74 68 61 74  e any write that
15050 20 6c 61 75 6e 63 68 65 73 20 61 66 74 65 72 20   launches after 
15060 74 68 65 0a 78 53 79 6e 63 20 62 65 67 69 6e 73  the.xSync begins
15070 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 63 68 65 63  .</p>..<p>A chec
15080 6b 70 6f 69 6e 74 20 6e 65 65 64 20 6e 6f 74 20  kpoint need not 
15090 72 75 6e 20 74 6f 20 63 6f 6d 70 6c 65 74 69 6f  run to completio
150a0 6e 2e 20 20 49 74 20 6d 69 67 68 74 20 62 65 20  n.  It might be 
150b0 74 68 61 74 20 73 6f 6d 65 0a 72 65 61 64 65 72  that some.reader
150c0 73 20 61 72 65 20 73 74 69 6c 6c 20 75 73 69 6e  s are still usin
150d0 67 20 6f 6c 64 65 72 20 74 72 61 6e 73 61 63 74  g older transact
150e0 69 6f 6e 73 20 77 69 74 68 20 64 61 74 61 20 74  ions with data t
150f0 68 61 74 20 69 73 20 63 6f 6e 74 61 69 6e 65 64  hat is contained
15100 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  .in the database
15110 20 66 69 6c 65 2e 20 20 49 6e 20 74 68 61 74 20   file.  In that 
15120 63 61 73 65 2c 20 74 72 61 6e 73 66 65 72 72 69  case, transferri
15130 6e 67 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 6e  ng content for n
15140 65 77 65 72 0a 74 72 61 6e 73 61 63 74 69 6f 6e  ewer.transaction
15150 73 20 66 72 6f 6d 20 74 68 65 20 57 41 4c 20 66  s from the WAL f
15160 69 6c 65 20 69 6e 74 6f 20 74 68 65 20 64 61 74  ile into the dat
15170 61 62 61 73 65 20 77 6f 75 6c 64 20 64 65 6c 65  abase would dele
15180 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 6f  te the content.o
15190 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 72 65  ut from under re
151a0 61 64 65 72 73 20 73 74 69 6c 6c 20 75 73 69 6e  aders still usin
151b0 67 20 74 68 65 20 6f 6c 64 65 72 20 74 72 61 6e  g the older tran
151c0 73 61 63 74 69 6f 6e 73 2e 20 20 54 6f 20 61 76  sactions.  To av
151d0 6f 69 64 20 74 68 61 74 2c 0a 63 68 65 63 6b 70  oid that,.checkp
151e0 6f 69 6e 74 73 20 6f 6e 6c 79 20 72 75 6e 20 74  oints only run t
151f0 6f 20 63 6f 6d 70 6c 65 74 69 6f 6e 20 69 66 20  o completion if 
15200 61 6c 6c 20 72 65 61 64 65 72 20 61 72 65 20 75  all reader are u
15210 73 69 6e 67 20 74 68 65 0a 6c 61 73 74 20 74 72  sing the.last tr
15220 61 6e 73 61 63 74 69 6f 6e 20 69 6e 20 74 68 65  ansaction in the
15230 20 57 41 4c 2e 0a 0a 3c 74 63 6c 3e 68 64 5f 66   WAL...<tcl>hd_f
15240 72 61 67 6d 65 6e 74 20 77 61 6c 72 65 73 65 74  ragment walreset
15250 20 7b 72 65 73 65 74 20 74 68 65 20 57 41 4c 7d   {reset the WAL}
15260 20 7b 57 41 4c 20 72 65 73 65 74 7d 3c 2f 74 63   {WAL reset}</tc
15270 6c 3e 0a 3c 68 32 3e 57 41 4c 20 52 65 73 65 74  l>.<h2>WAL Reset
15280 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72  </h2>..<p>^After
15290 20 61 20 63 6f 6d 70 6c 65 74 65 20 63 68 65 63   a complete chec
152a0 6b 70 6f 69 6e 74 2c 20 69 66 20 6e 6f 20 6f 74  kpoint, if no ot
152b0 68 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  her connections 
152c0 61 72 65 20 69 6e 20 74 72 61 6e 73 61 63 74 69  are in transacti
152d0 6f 6e 73 0a 74 68 61 74 20 75 73 65 20 74 68 65  ons.that use the
152e0 20 57 41 4c 2c 20 74 68 65 6e 20 73 75 62 73 65   WAL, then subse
152f0 71 75 65 6e 74 20 77 72 69 74 65 20 74 72 61 6e  quent write tran
15300 73 61 63 74 69 6f 6e 73 20 63 61 6e 0a 6f 76 65  sactions can.ove
15310 72 77 72 69 74 65 20 74 68 65 20 57 41 4c 20 66  rwrite the WAL f
15320 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 62 65 67  ile from the beg
15330 69 6e 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73  inning.  This is
15340 20 63 61 6c 6c 65 64 20 22 72 65 73 65 74 74 69   called "resetti
15350 6e 67 20 74 68 65 0a 57 41 4c 22 2e 20 20 5e 41  ng the.WAL".  ^A
15360 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74  t the start of t
15370 68 65 20 66 69 72 73 74 20 6e 65 77 0a 77 72 69  he first new.wri
15380 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  te transaction, 
15390 74 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 73  the WAL header s
153a0 61 6c 74 2d 31 20 76 61 6c 75 65 20 69 73 20 69  alt-1 value is i
153b0 6e 63 72 65 6d 65 6e 74 65 64 0a 61 6e 64 20 74  ncremented.and t
153c0 68 65 20 73 61 6c 74 2d 32 20 76 61 6c 75 65 20  he salt-2 value 
153d0 69 73 20 72 61 6e 64 6f 6d 69 7a 65 64 2e 20 20  is randomized.  
153e0 54 68 65 73 65 20 63 68 61 6e 67 65 73 20 74 6f  These changes to
153f0 20 74 68 65 20 73 61 6c 74 73 20 69 6e 76 61 6c   the salts inval
15400 69 64 61 74 65 0a 6f 6c 64 20 66 72 61 6d 65 73  idate.old frames
15410 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
15420 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 62 65   have already be
15430 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
15440 62 75 74 20 6e 6f 74 20 79 65 74 0a 6f 76 65 72  but not yet.over
15450 77 72 69 74 74 65 6e 2c 20 61 6e 64 20 70 72 65  written, and pre
15460 76 65 6e 74 20 74 68 65 6d 20 66 72 6f 6d 20 62  vent them from b
15470 65 69 6e 67 20 63 68 65 63 6b 70 6f 69 6e 74 65  eing checkpointe
15480 64 20 61 67 61 69 6e 2e 3c 2f 70 3e 0a 0a 3c 70  d again.</p>..<p
15490 3e 54 68 65 20 57 41 4c 20 66 69 6c 65 20 63 61  >The WAL file ca
154a0 6e 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 62 65 20  n optionally be 
154b0 74 72 75 6e 63 61 74 65 64 20 6f 6e 20 61 20 72  truncated on a r
154c0 65 73 65 74 2c 20 62 75 74 20 69 74 20 6e 65 65  eset, but it nee
154d0 64 20 6e 6f 74 20 62 65 2e 0a 50 65 72 66 6f 72  d not be..Perfor
154e0 6d 61 6e 63 65 20 69 73 20 75 73 75 61 6c 6c 79  mance is usually
154f0 20 61 20 6c 69 74 74 6c 65 20 62 65 74 74 65 72   a little better
15500 20 69 66 20 74 68 65 20 57 41 4c 20 69 73 20 6e   if the WAL is n
15510 6f 74 20 74 72 75 6e 63 61 74 65 2c 20 73 69 6e  ot truncate, sin
15520 63 65 0a 66 69 6c 65 73 79 73 74 65 6d 73 20 67  ce.filesystems g
15530 65 6e 65 72 61 6c 6c 79 20 77 69 6c 6c 20 6f 76  enerally will ov
15540 65 72 77 72 69 74 65 20 61 6e 20 65 78 69 73 74  erwrite an exist
15550 69 6e 67 20 66 69 6c 65 20 66 61 73 74 65 72 20  ing file faster 
15560 74 68 61 6e 20 74 68 65 79 0a 77 69 6c 6c 20 67  than they.will g
15570 72 6f 77 20 61 20 66 69 6c 65 2e 0a 0a 3c 74 63  row a file...<tc
15580 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 77 61  l>hd_fragment wa
15590 6c 72 65 61 64 20 7b 57 41 4c 20 72 65 61 64 20  lread {WAL read 
155a0 61 6c 67 6f 72 69 74 68 6d 7d 3c 2f 74 63 6c 3e  algorithm}</tcl>
155b0 0a 3c 68 32 3e 52 65 61 64 65 72 20 41 6c 67 6f  .<h2>Reader Algo
155c0 72 69 74 68 6d 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e  rithm</h2>..<p>^
155d0 28 54 6f 20 72 65 61 64 20 61 20 70 61 67 65 20  (To read a page 
155e0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
155f0 65 20 28 63 61 6c 6c 20 69 74 20 70 61 67 65 20  e (call it page 
15600 6e 75 6d 62 65 72 20 50 29 2c 20 61 20 72 65 61  number P), a rea
15610 64 65 72 0a 66 69 72 73 74 20 63 68 65 63 6b 73  der.first checks
15620 20 74 68 65 20 57 41 4c 20 74 6f 20 73 65 65 20   the WAL to see 
15630 69 66 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 70  if it contains p
15640 61 67 65 20 50 2e 20 20 49 66 20 73 6f 2c 20 74  age P.  If so, t
15650 68 65 6e 20 74 68 65 0a 6c 61 73 74 20 76 61 6c  hen the.last val
15660 69 64 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 70  id instance of p
15670 61 67 65 20 50 20 74 68 61 74 20 69 73 20 66 6f  age P that is fo
15680 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d  llowed by a comm
15690 69 74 20 66 72 61 6d 65 0a 6f 72 20 69 73 20 61  it frame.or is a
156a0 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 20 69 74   commit frame it
156b0 73 65 6c 66 20 62 65 63 6f 6d 65 73 20 74 68 65  self becomes the
156c0 20 76 61 6c 75 65 20 72 65 61 64 2e 29 5e 20 20   value read.)^  
156d0 5e 49 66 20 74 68 65 20 57 41 4c 0a 63 6f 6e 74  ^If the WAL.cont
156e0 61 69 6e 73 20 6e 6f 20 63 6f 70 69 65 73 20 6f  ains no copies o
156f0 66 20 70 61 67 65 20 50 20 74 68 61 74 20 61 72  f page P that ar
15700 65 20 76 61 6c 69 64 20 61 6e 64 20 77 68 69 63  e valid and whic
15710 68 20 61 72 65 20 61 20 63 6f 6d 6d 69 74 0a 66  h are a commit.f
15720 72 61 6d 65 20 6f 72 20 61 72 65 20 66 6f 6c 6c  rame or are foll
15730 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 69 74  owed by a commit
15740 20 66 72 61 6d 65 2c 20 74 68 65 6e 20 70 61 67   frame, then pag
15750 65 20 50 20 69 73 20 72 65 61 64 20 66 72 6f 6d  e P is read from
15760 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69  .the database fi
15770 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20 73  le.</p>..<p>To s
15780 74 61 72 74 20 61 20 72 65 61 64 20 74 72 61 6e  tart a read tran
15790 73 61 63 74 69 6f 6e 2c 20 74 68 65 20 72 65 61  saction, the rea
157a0 64 65 72 20 72 65 63 6f 72 64 73 20 74 68 65 20  der records the 
157b0 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65 0a  number of value.
157c0 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 57 41  frames in the WA
157d0 4c 20 61 73 20 22 6d 78 46 72 61 6d 65 22 2e 20  L as "mxFrame". 
157e0 20 28 5b 6d 78 46 72 61 6d 65 7c 4d 6f 72 65 20   ([mxFrame|More 
157f0 64 65 74 61 69 6c 5d 29 0a 54 68 65 20 72 65 61  detail]).The rea
15800 64 65 72 20 75 73 65 73 20 74 68 69 73 20 72 65  der uses this re
15810 63 6f 72 64 65 64 20 6d 78 46 72 61 6d 65 20 76  corded mxFrame v
15820 61 6c 75 65 0a 66 6f 72 20 61 6c 6c 20 73 75 62  alue.for all sub
15830 73 65 71 75 65 6e 74 20 72 65 61 64 20 6f 70 65  sequent read ope
15840 72 61 74 69 6f 6e 73 2e 20 20 4e 65 77 20 74 72  rations.  New tr
15850 61 6e 73 61 63 74 69 6f 6e 73 20 63 61 6e 20 62  ansactions can b
15860 65 20 61 70 70 65 6e 64 65 64 0a 74 6f 20 74 68  e appended.to th
15870 65 20 57 41 4c 2c 20 62 75 74 20 61 73 20 6c 6f  e WAL, but as lo
15880 6e 67 20 61 73 20 74 68 65 20 72 65 61 64 65 72  ng as the reader
15890 20 75 73 65 73 20 69 74 73 20 6f 72 69 67 69 6e   uses its origin
158a0 61 6c 20 6d 78 46 72 61 6d 65 20 76 61 6c 75 65  al mxFrame value
158b0 0a 61 6e 64 20 69 67 6e 6f 72 65 73 20 73 75 62  .and ignores sub
158c0 73 65 71 75 65 6e 74 6c 79 20 61 70 70 65 6e 64  sequently append
158d0 65 64 20 63 6f 6e 74 65 6e 74 2c 20 74 68 65 20  ed content, the 
158e0 72 65 61 64 65 72 20 77 69 6c 6c 20 73 65 65 20  reader will see 
158f0 61 20 0a 63 6f 6e 73 69 73 74 65 6e 74 20 73 6e  a .consistent sn
15900 61 70 73 68 6f 74 20 6f 66 20 74 68 65 20 64 61  apshot of the da
15910 74 61 62 61 73 65 20 66 72 6f 6d 20 61 20 73 69  tabase from a si
15920 6e 67 6c 65 20 70 6f 69 6e 74 20 69 6e 20 74 69  ngle point in ti
15930 6d 65 2e 20 20 0a 5e 54 68 69 73 20 74 65 63 68  me.  .^This tech
15940 6e 69 71 75 65 20 61 6c 6c 6f 77 73 20 6d 75 6c  nique allows mul
15950 74 69 70 6c 65 20 63 6f 6e 63 75 72 72 65 6e 74  tiple concurrent
15960 20 72 65 61 64 65 72 73 20 74 6f 20 76 69 65 77   readers to view
15970 20 64 69 66 66 65 72 65 6e 74 20 0a 76 65 72 73   different .vers
15980 69 6f 6e 73 20 6f 66 20 74 68 65 20 64 61 74 61  ions of the data
15990 62 61 73 65 20 63 6f 6e 74 65 6e 74 20 73 69 6d  base content sim
159a0 75 6c 74 61 6e 65 6f 75 73 6c 79 2e 3c 2f 70 3e  ultaneously.</p>
159b0 0a 0a 3c 70 3e 54 68 65 20 72 65 61 64 65 72 20  ..<p>The reader 
159c0 61 6c 67 6f 72 69 74 68 6d 20 69 6e 20 74 68 65  algorithm in the
159d0 20 70 72 65 76 69 6f 75 73 20 70 61 72 61 67 72   previous paragr
159e0 61 70 68 73 20 77 6f 72 6b 73 20 63 6f 72 72 65  aphs works corre
159f0 63 74 6c 79 2c 20 62 75 74 20 0a 62 65 63 61 75  ctly, but .becau
15a00 73 65 20 66 72 61 6d 65 73 20 66 6f 72 20 70 61  se frames for pa
15a10 67 65 20 50 20 63 61 6e 20 61 70 70 65 61 72 20  ge P can appear 
15a20 61 6e 79 77 68 65 72 65 20 77 69 74 68 69 6e 20  anywhere within 
15a30 74 68 65 20 57 41 4c 2c 20 74 68 65 0a 72 65 61  the WAL, the.rea
15a40 64 65 72 20 68 61 73 20 74 6f 20 73 63 61 6e 20  der has to scan 
15a50 74 68 65 20 65 6e 74 69 72 65 20 57 41 4c 20 6c  the entire WAL l
15a60 6f 6f 6b 69 6e 67 20 66 6f 72 20 70 61 67 65 20  ooking for page 
15a70 50 20 66 72 61 6d 65 73 2e 20 20 49 66 20 74 68  P frames.  If th
15a80 65 0a 57 41 4c 20 69 73 20 6c 61 72 67 65 20 28  e.WAL is large (
15a90 6d 75 6c 74 69 70 6c 65 20 6d 65 67 61 62 79 74  multiple megabyt
15aa0 65 73 20 69 73 20 74 79 70 69 63 61 6c 29 20 74  es is typical) t
15ab0 68 61 74 20 73 63 61 6e 20 63 61 6e 20 62 65 20  hat scan can be 
15ac0 73 6c 6f 77 2c 0a 61 6e 64 20 72 65 61 64 20 70  slow,.and read p
15ad0 65 72 66 6f 72 6d 61 6e 63 65 20 73 75 66 66 65  erformance suffe
15ae0 72 73 2e 20 20 5e 54 6f 20 6f 76 65 72 63 6f 6d  rs.  ^To overcom
15af0 65 20 74 68 69 73 20 70 72 6f 62 6c 65 6d 2c 20  e this problem, 
15b00 61 20 73 65 70 61 72 61 74 65 0a 64 61 74 61 20  a separate.data 
15b10 73 74 72 75 63 74 75 72 65 20 63 61 6c 6c 65 64  structure called
15b20 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69   the wal-index i
15b30 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 74 6f 20  s maintained to 
15b40 65 78 70 65 64 69 74 65 20 74 68 65 0a 73 65 61  expedite the.sea
15b50 72 63 68 20 66 6f 72 20 66 72 61 6d 65 73 20 6f  rch for frames o
15b60 66 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 70  f a particular p
15b70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  age.</p>..<tcl>h
15b80 64 5f 66 72 61 67 6d 65 6e 74 20 77 61 6c 69 6e  d_fragment walin
15b90 64 65 78 66 6f 72 6d 61 74 3c 2f 74 63 6c 3e 0a  dexformat</tcl>.
15ba0 3c 68 32 3e 57 41 4c 2d 49 6e 64 65 78 20 46 6f  <h2>WAL-Index Fo
15bb0 72 6d 61 74 3c 2f 68 32 3e 0a 0a 3c 70 3e 43 6f  rmat</h2>..<p>Co
15bc0 6e 63 65 70 74 75 61 6c 6c 79 2c 20 74 68 65 20  nceptually, the 
15bd0 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 73 68 61  wal-index is sha
15be0 72 65 64 20 6d 65 6d 6f 72 79 2c 20 74 68 6f 75  red memory, thou
15bf0 67 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a 56  gh the current.V
15c00 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  FS implementatio
15c10 6e 73 20 75 73 65 20 61 20 6d 65 6d 6f 72 79 2d  ns use a memory-
15c20 6d 61 70 70 65 64 20 66 69 6c 65 20 66 6f 72 20  mapped file for 
15c30 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d  operating-system
15c40 0a 70 6f 72 74 61 62 69 6c 69 74 79 2e 20 20 5e  .portability.  ^
15c50 54 68 65 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65  The memory-mappe
15c60 64 0a 66 69 6c 65 20 69 73 20 69 6e 20 74 68 65  d.file is in the
15c70 20 73 61 6d 65 20 64 69 72 65 63 74 6f 72 79 20   same directory 
15c80 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  as the database 
15c90 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65  and has the same
15ca0 20 6e 61 6d 65 0a 61 73 20 74 68 65 20 64 61 74   name.as the dat
15cb0 61 62 61 73 65 20 77 69 74 68 20 61 20 22 3c 74  abase with a "<t
15cc0 74 3e 2d 73 68 6d 3c 2f 74 74 3e 22 20 73 75 66  t>-shm</tt>" suf
15cd0 66 69 78 20 61 70 70 65 6e 64 65 64 2e 20 20 42  fix appended.  B
15ce0 65 63 61 75 73 65 0a 74 68 65 20 77 61 6c 2d 69  ecause.the wal-i
15cf0 6e 64 65 78 20 69 73 20 73 68 61 72 65 64 20 6d  ndex is shared m
15d00 65 6d 6f 72 79 2c 20 53 51 4c 69 74 65 20 64 6f  emory, SQLite do
15d10 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 0a  es not support .
15d20 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f  [PRAGMA journal_
15d30 6d 6f 64 65 20 7c 20 6a 6f 75 72 6e 61 6c 5f 6d  mode | journal_m
15d40 6f 64 65 3d 57 41 4c 5d 20 0a 6f 6e 20 61 20 6e  ode=WAL] .on a n
15d50 65 74 77 6f 72 6b 20 66 69 6c 65 73 79 73 74 65  etwork filesyste
15d60 6d 20 77 68 65 6e 20 63 6c 69 65 6e 74 73 20 61  m when clients a
15d70 72 65 20 6f 6e 20 64 69 66 66 65 72 65 6e 74 20  re on different 
15d80 6d 61 63 68 69 6e 65 73 2c 20 61 73 0a 61 6c 6c  machines, as.all
15d90 20 63 6c 69 65 6e 74 73 20 6f 66 20 74 68 65 20   clients of the 
15da0 64 61 74 61 62 61 73 65 20 6d 75 73 74 20 62 65  database must be
15db0 20 61 62 6c 65 20 74 6f 20 73 68 61 72 65 20 74   able to share t
15dc0 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 2e 3c  he same memory.<
15dd0 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 70 75 72 70  /p>..<p>The purp
15de0 6f 73 65 20 6f 66 20 74 68 65 20 77 61 6c 2d 69  ose of the wal-i
15df0 6e 64 65 78 20 69 73 20 74 6f 20 61 6e 73 77 65  ndex is to answe
15e00 72 20 74 68 69 73 20 71 75 65 73 74 69 6f 6e 20  r this question 
15e10 71 75 69 63 6b 6c 79 3a 3c 2f 70 3e 0a 0a 3c 62  quickly:</p>..<b
15e20 6c 6f 63 6b 71 75 6f 74 65 3e 3c 69 3e 0a 47 69  lockquote><i>.Gi
15e30 76 65 6e 20 61 20 70 61 67 65 20 6e 75 6d 62 65  ven a page numbe
15e40 72 20 50 20 61 6e 64 20 61 20 6d 61 78 69 6d 75  r P and a maximu
15e50 6d 20 57 41 4c 20 66 72 61 6d 65 20 69 6e 64 65  m WAL frame inde
15e60 78 20 4d 2c 0a 72 65 74 75 72 6e 20 74 68 65 20  x M,.return the 
15e70 6c 61 72 67 65 73 74 20 57 41 4c 20 66 72 61 6d  largest WAL fram
15e80 65 20 69 6e 64 65 78 20 66 6f 72 20 70 61 67 65  e index for page
15e90 20 50 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74   P that does not
15ea0 20 65 78 63 65 65 64 20 4d 2c 20 0a 6f 72 20 72   exceed M, .or r
15eb0 65 74 75 72 6e 20 4e 55 4c 4c 20 69 66 20 74 68  eturn NULL if th
15ec0 65 72 65 20 61 72 65 20 6e 6f 20 66 72 61 6d 65  ere are no frame
15ed0 73 20 66 6f 72 20 70 61 67 65 20 50 20 74 68 61  s for page P tha
15ee0 74 20 64 6f 20 6e 6f 74 20 65 78 63 65 65 64 20  t do not exceed 
15ef0 4d 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75  M..</i></blockqu
15f00 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 3c 69 3e  ote>..<p>The <i>
15f10 4d 3c 2f 69 3e 20 76 61 6c 75 65 20 69 6e 20 74  M</i> value in t
15f20 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
15f30 67 72 61 70 68 20 69 73 20 74 68 65 20 22 6d 78  graph is the "mx
15f40 46 72 61 6d 65 22 20 76 61 6c 75 65 0a 64 65 66  Frame" value.def
15f50 69 6e 65 64 20 69 6e 20 5b 57 41 4c 20 72 65 61  ined in [WAL rea
15f60 64 20 61 6c 67 6f 72 69 74 68 6d 20 7c 20 73 65  d algorithm | se
15f70 63 74 69 6f 6e 20 34 2e 34 5d 20 74 68 61 74 20  ction 4.4] that 
15f80 69 73 20 72 65 61 64 20 61 74 20 74 68 65 20 73  is read at the s
15f90 74 61 72 74 20 0a 6f 66 20 61 20 74 72 61 6e 73  tart .of a trans
15fa0 61 63 74 69 6f 6e 20 61 6e 64 20 77 68 69 63 68  action and which
15fb0 20 64 65 66 69 6e 65 73 20 74 68 65 20 6d 61 78   defines the max
15fc0 69 6d 75 6d 20 66 72 61 6d 65 20 66 72 6f 6d 20  imum frame from 
15fd0 74 68 65 20 57 41 4c 20 74 68 61 74 20 0a 74 68  the WAL that .th
15fe0 65 20 72 65 61 64 65 72 20 77 69 6c 6c 20 75 73  e reader will us
15ff0 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 77  e.</p>..<p>The w
16000 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72 61 6e  al-index is tran
16010 73 69 65 6e 74 2e 20 20 41 66 74 65 72 20 61 20  sient.  After a 
16020 63 72 61 73 68 2c 20 74 68 65 20 77 61 6c 2d 69  crash, the wal-i
16030 6e 64 65 78 20 69 73 0a 72 65 63 6f 6e 73 74 72  ndex is.reconstr
16040 75 63 74 65 64 20 66 72 6f 6d 20 74 68 65 20 6f  ucted from the o
16050 72 69 67 69 6e 61 6c 20 57 41 4c 20 66 69 6c 65  riginal WAL file
16060 2e 20 20 5e 54 68 65 20 56 46 53 20 69 73 20 72  .  ^The VFS is r
16070 65 71 75 69 72 65 64 0a 74 6f 20 65 69 74 68 65  equired.to eithe
16080 72 20 74 72 75 6e 63 61 74 65 20 6f 72 20 7a 65  r truncate or ze
16090 72 6f 20 74 68 65 20 68 65 61 64 65 72 20 6f 66  ro the header of
160a0 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 77   the wal-index w
160b0 68 65 6e 20 74 68 65 20 6c 61 73 74 0a 63 6f 6e  hen the last.con
160c0 6e 65 63 74 69 6f 6e 20 74 6f 20 69 74 20 63 6c  nection to it cl
160d0 6f 73 65 73 2e 20 20 42 65 63 61 75 73 65 20 74  oses.  Because t
160e0 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20  he wal-index is 
160f0 74 72 61 6e 73 69 65 6e 74 2c 20 69 74 20 63 61  transient, it ca
16100 6e 0a 75 73 65 20 61 6e 20 61 72 63 68 69 74 65  n.use an archite
16110 63 74 75 72 65 2d 73 70 65 63 69 66 69 63 20 66  cture-specific f
16120 6f 72 6d 61 74 3b 20 69 74 20 64 6f 65 73 20 6e  ormat; it does n
16130 6f 74 20 68 61 76 65 20 74 6f 20 62 65 20 63 72  ot have to be cr
16140 6f 73 73 2d 70 6c 61 74 66 6f 72 6d 2e 0a 48 65  oss-platform..He
16150 6e 63 65 2c 20 75 6e 6c 69 6b 65 20 74 68 65 20  nce, unlike the 
16160 64 61 74 61 62 61 73 65 20 61 6e 64 20 57 41 4c  database and WAL
16170 20 66 69 6c 65 20 66 6f 72 6d 61 74 73 20 77 68   file formats wh
16180 69 63 68 20 73 74 6f 72 65 20 61 6c 6c 20 76 61  ich store all va
16190 6c 75 65 73 0a 61 73 20 62 69 67 20 65 6e 64 69  lues.as big endi
161a0 61 6e 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65  an, the wal-inde
161b0 78 20 73 74 6f 72 65 73 20 6d 75 6c 74 69 2d 62  x stores multi-b
161c0 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68  yte values in th
161d0 65 20 6e 61 74 69 76 65 0a 62 79 74 65 20 6f 72  e native.byte or
161e0 64 65 72 20 6f 66 20 74 68 65 20 68 6f 73 74 20  der of the host 
161f0 63 6f 6d 70 75 74 65 72 2e 3c 2f 70 3e 0a 0a 3c  computer.</p>..<
16200 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20  p>This document 
16210 69 73 20 63 6f 6e 63 65 72 6e 65 64 20 77 69 74  is concerned wit
16220 68 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74  h the persistent
16230 20 73 74 61 74 65 20 6f 66 20 74 68 65 20 64 61   state of the da
16240 74 61 62 61 73 65 0a 66 69 6c 65 2c 20 61 6e 64  tabase.file, and
16250 20 73 69 6e 63 65 20 74 68 65 20 77 61 6c 2d 69   since the wal-i
16260 6e 64 65 78 20 69 73 20 61 20 74 72 61 6e 73 69  ndex is a transi
16270 65 6e 74 20 73 74 72 75 63 74 75 72 65 2c 20 6e  ent structure, n
16280 6f 20 66 75 72 74 68 65 72 20 0a 69 6e 66 6f 72  o further .infor
16290 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
162a0 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 77   format of the w
162b0 61 6c 2d 69 6e 64 65 78 20 77 69 6c 6c 20 62 65  al-index will be
162c0 20 70 72 6f 76 69 64 65 64 20 68 65 72 65 2e 0a   provided here..
162d0 41 64 64 69 74 69 6f 6e 61 6c 20 64 65 74 61 69  Additional detai
162e0 6c 73 20 6f 6e 20 74 68 65 20 66 6f 72 6d 61 74  ls on the format
162f0 20 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65   of the wal-inde
16300 78 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  x are contained 
16310 69 6e 0a 74 68 65 20 73 65 70 61 72 61 74 65 20  in.the separate 
16320 5b 57 41 4c 2d 69 6e 64 65 78 20 46 69 6c 65 20  [WAL-index File 
16330 46 6f 72 6d 61 74 5d 20 64 6f 63 75 6d 65 6e 74  Format] document
16340 2e 3c 2f 70 3e 0a                                .</p>.