Documentation Source Text

Hex Artifact Content
Login

Artifact 7613426b04d0471bd467e69c0f50fceb7f7ef7b7:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 20 72 65   {file format re
0050: 64 75 78 7d 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 20  dux}</tcl>..<h1 
0060: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 0a 54 68  align=center>.Th
0070: 65 20 53 51 4c 69 74 65 20 44 61 74 61 62 61 73  e SQLite Databas
0080: 65 20 46 69 6c 65 20 46 6f 72 6d 61 74 0a 3c 2f  e File Format.</
0090: 68 31 3e 0a 0a 3c 70 3e 54 68 69 73 20 64 6f 63  h1>..<p>This doc
00a0: 75 6d 65 6e 74 20 64 65 73 63 72 69 62 65 73 20  ument describes 
00b0: 61 6e 64 20 64 65 66 69 6e 65 73 20 74 68 65 20  and defines the 
00c0: 6f 6e 2d 64 69 73 6b 20 64 61 74 61 62 61 73 65  on-disk database
00d0: 20 66 69 6c 65 0a 66 6f 72 6d 61 74 20 75 73 65   file.format use
00e0: 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  d by SQLite.</p>
00f0: 0a 0a 3c 70 3e 54 68 69 73 20 69 73 20 74 68 65  ..<p>This is the
0100: 20 73 65 63 6f 6e 64 20 64 6f 63 75 6d 65 6e 74   second document
0110: 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20 53   to define the S
0120: 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 66  QLite database f
0130: 69 6c 65 20 66 6f 72 6d 61 74 2e 0a 54 68 65 20  ile format..The 
0140: 5b 66 69 6c 65 20 66 6f 72 6d 61 74 7c 20 66 69  [file format| fi
0150: 72 73 74 20 64 6f 63 75 6d 65 6e 74 5d 20 64 69  rst document] di
0160: 66 66 65 72 73 20 66 72 6f 6d 20 74 68 69 73 20  ffers from this 
0170: 6f 6e 65 20 69 6e 20 74 68 61 74 20 69 74 20 69  one in that it i
0180: 73 0a 77 72 69 74 74 65 6e 20 69 6e 20 61 20 66  s.written in a f
0190: 6f 72 6d 61 6c 20 73 74 79 6c 65 20 77 68 65 72  ormal style wher
01a0: 65 61 73 20 74 68 69 73 20 64 6f 63 75 6d 65 6e  eas this documen
01b0: 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 62 65  t attempts to be
01c0: 20 6d 6f 72 65 0a 63 6f 6e 76 65 72 73 61 74 69   more.conversati
01d0: 6f 6e 61 6c 2e 20 20 54 68 65 20 74 77 6f 20 64  onal.  The two d
01e0: 6f 63 75 6d 65 6e 74 73 20 77 65 72 65 20 69 6e  ocuments were in
01f0: 64 65 70 65 6e 64 65 6e 74 6c 79 20 77 72 69 74  dependently writ
0200: 74 65 6e 20 28 74 68 65 79 20 68 61 76 65 0a 64  ten (they have.d
0210: 69 66 66 65 72 65 6e 74 20 61 75 74 68 6f 72 73  ifferent authors
0220: 29 20 61 6e 64 20 68 65 6e 63 65 20 73 65 72 76  ) and hence serv
0230: 65 20 61 73 20 63 72 6f 73 73 2d 63 68 65 63 6b  e as cross-check
0240: 73 20 66 6f 72 20 6f 6e 65 20 61 6e 6f 74 68 65  s for one anothe
0250: 72 2e 0a 42 6f 74 68 20 64 6f 63 75 6d 65 6e 74  r..Both document
0260: 73 20 73 68 6f 75 6c 64 20 64 65 73 63 72 69 62  s should describ
0270: 65 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  e exactly the sa
0280: 6d 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20  me file format. 
0290: 20 0a 41 6e 79 20 64 69 73 63 72 65 70 65 6e 63   .Any discrepenc
02a0: 69 65 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  ies between the 
02b0: 74 77 6f 20 64 6f 63 75 6d 65 6e 74 73 20 73 68  two documents sh
02c0: 6f 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65 72  ould be consider
02d0: 65 64 20 61 20 62 75 67 2e 3c 2f 70 3e 0a 0a 3c  ed a bug.</p>..<
02e0: 68 32 3e 31 2e 30 20 54 68 65 20 44 61 74 61 62  h2>1.0 The Datab
02f0: 61 73 65 20 46 69 6c 65 3c 2f 68 32 3e 0a 0a 3c  ase File</h2>..<
0300: 70 3e 4d 6f 73 74 20 6f 66 20 74 68 65 20 74 69  p>Most of the ti
0310: 6d 65 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  me the complete 
0320: 73 74 61 74 65 20 6f 66 20 61 6e 20 53 51 4c 69  state of an SQLi
0330: 74 65 20 64 61 74 61 62 61 73 65 20 0a 69 73 20  te database .is 
0340: 63 6f 6e 74 61 69 6e 65 64 20 61 20 73 69 6e 67  contained a sing
0350: 6c 65 20 66 69 6c 65 20 6f 6e 20 64 69 73 6b 20  le file on disk 
0360: 63 61 6c 6c 65 64 20 74 68 65 20 22 6d 61 69 6e  called the "main
0370: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 22 2e   database file".
0380: 3c 2f 70 3e 0a 0a 3c 70 3e 57 68 69 6c 65 20 70  </p>..<p>While p
0390: 65 72 66 6f 72 6d 69 6e 67 20 61 20 74 72 61 6e  erforming a tran
03a0: 73 61 63 74 69 6f 6e 2c 20 53 51 4c 69 74 65 20  saction, SQLite 
03b0: 73 74 6f 72 65 73 20 73 6f 6d 65 20 74 65 6d 70  stores some temp
03c0: 6f 72 61 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f  orary informatio
03d0: 6e 0a 69 6e 20 61 20 73 65 63 6f 6e 64 20 66 69  n.in a second fi
03e0: 6c 65 20 63 61 6c 6c 65 64 20 74 68 65 20 22 72  le called the "r
03f0: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 22  ollback journal"
0400: 2e 20 20 49 66 20 74 68 65 20 61 70 70 6c 69 63  .  If the applic
0410: 61 74 69 6f 6e 20 6f 72 0a 68 6f 73 74 20 63 6f  ation or.host co
0420: 6d 70 75 74 65 72 20 63 72 61 73 68 65 73 20 62  mputer crashes b
0430: 65 66 6f 72 65 20 63 6f 6d 70 6c 65 74 69 6e 67  efore completing
0440: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
0450: 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 6c 6c 62  , then the rollb
0460: 61 63 6b 0a 6a 6f 75 72 6e 61 6c 20 63 6f 6e 74  ack.journal cont
0470: 61 69 6e 73 20 63 72 69 74 69 63 61 6c 20 73 74  ains critical st
0480: 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ate information 
0490: 6e 65 65 64 65 64 20 74 6f 20 72 65 73 74 6f 72  needed to restor
04a0: 65 20 74 68 65 0a 63 6f 6e 74 65 6e 74 20 6f 66  e the.content of
04b0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
04c0: 73 65 20 66 69 6c 65 2e 20 20 57 68 65 6e 20 61  se file.  When a
04d0: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
04e0: 6c 20 63 6f 6e 74 61 69 6e 73 0a 69 6e 66 6f 72  l contains.infor
04f0: 6d 61 74 69 6f 6e 20 6e 65 63 65 73 73 61 72 79  mation necessary
0500: 20 66 6f 72 20 72 65 63 6f 76 65 72 69 6e 67 20   for recovering 
0510: 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
0520: 20 64 61 74 61 62 61 73 65 2c 20 77 65 20 73 61   database, we sa
0530: 79 0a 74 68 61 74 20 69 74 20 69 73 20 61 20 22  y.that it is a "
0540: 68 6f 74 20 6a 6f 75 72 6e 61 6c 22 2e 20 20 48  hot journal".  H
0550: 6f 74 20 6a 6f 75 72 6e 61 6c 73 20 6f 6e 6c 79  ot journals only
0560: 20 63 6f 6d 65 20 75 70 20 69 6e 20 61 6e 20 65   come up in an e
0570: 72 72 6f 72 20 72 65 63 6f 76 65 72 79 0a 73 63  rror recovery.sc
0580: 65 6e 61 72 69 6f 20 61 6e 64 20 73 6f 20 61 72  enario and so ar
0590: 65 20 75 6e 63 6f 6d 6d 6f 6e 2c 20 62 75 74 20  e uncommon, but 
05a0: 74 68 65 79 20 61 72 65 20 70 61 72 74 20 6f 66  they are part of
05b0: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 61 6e   the state of an
05c0: 20 53 51 4c 69 74 65 0a 64 61 74 61 62 61 73 65   SQLite.database
05d0: 20 61 6e 64 20 73 6f 20 73 68 6f 75 6c 64 20 6e   and so should n
05e0: 6f 74 20 62 65 20 69 67 6e 6f 72 65 64 2e 20 20  ot be ignored.  
05f0: 54 68 69 73 20 64 6f 63 75 6d 65 6e 74 20 77 69  This document wi
0600: 6c 6c 20 64 65 66 69 6e 65 20 74 68 65 20 66 6f  ll define the fo
0610: 72 6d 61 74 0a 6f 66 20 61 20 72 6f 6c 6c 62 61  rmat.of a rollba
0620: 63 6b 20 6a 6f 75 72 6e 61 6c 2c 20 62 75 74 20  ck journal, but 
0630: 6d 6f 73 74 20 6f 66 20 74 68 65 20 63 6f 6e 74  most of the cont
0640: 65 6e 74 20 6f 66 20 74 68 69 73 20 64 6f 63 75  ent of this docu
0650: 6d 65 6e 74 20 77 69 6c 6c 20 66 6f 63 75 73 0a  ment will focus.
0660: 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  on the main data
0670: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
0680: 3c 68 33 3e 31 2e 31 20 50 61 67 65 73 3c 2f 68  <h3>1.1 Pages</h
0690: 33 3e 0a 0a 3c 70 3e 54 68 65 20 6d 61 69 6e 20  3>..<p>The main 
06a0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 63 6f  database file co
06b0: 6e 73 69 73 74 73 20 6f 66 20 6f 6e 65 20 6f 72  nsists of one or
06c0: 20 6d 6f 72 65 20 70 61 67 65 73 2e 20 20 54 68   more pages.  Th
06d0: 65 20 73 69 7a 65 20 6f 66 20 61 0a 70 61 67 65  e size of a.page
06e0: 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74   is a power of t
06f0: 77 6f 20 62 65 74 77 65 65 6e 20 35 31 32 20 61  wo between 512 a
0700: 6e 64 20 33 32 37 36 38 20 69 6e 63 6c 75 73 69  nd 32768 inclusi
0710: 76 65 2e 20 20 41 6c 6c 20 70 61 67 65 73 20 77  ve.  All pages w
0720: 69 74 68 69 6e 0a 74 68 65 20 73 61 6d 65 20 64  ithin.the same d
0730: 61 74 61 62 61 73 65 20 61 72 65 20 74 68 65 20  atabase are the 
0740: 73 61 6d 65 20 73 69 7a 65 2e 20 20 54 68 65 20  same size.  The 
0750: 70 61 67 65 20 73 69 7a 65 20 66 6f 72 20 61 20  page size for a 
0760: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 69 73  database file.is
0770: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
0780: 68 65 20 32 2d 62 79 74 65 20 62 69 67 2d 65 6e  he 2-byte big-en
0790: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 6c 6f 63  dian integer loc
07a0: 61 74 65 64 20 61 74 20 61 6e 20 6f 66 66 73 65  ated at an offse
07b0: 74 20 6f 66 0a 31 36 20 62 79 74 65 73 20 66 72  t of.16 bytes fr
07c0: 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
07d0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
07e0: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50   file.</p>..<p>P
07f0: 61 67 65 73 20 61 72 65 20 6e 75 6d 62 65 72 65  ages are numbere
0800: 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
0810: 20 31 2e 20 20 54 68 65 20 6d 61 78 69 6d 75 6d   1.  The maximum
0820: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 0a   page number is.
0830: 32 31 34 37 34 38 33 36 34 36 20 28 32 3c 73 75  2147483646 (2<su
0840: 70 3e 3c 73 6d 61 6c 6c 3e 33 31 3c 2f 73 6d 61  p><small>31</sma
0850: 6c 6c 3e 3c 2f 73 75 70 3e 20 2d 20 32 29 2e 20  ll></sup> - 2). 
0860: 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 73 69 7a   The minimum siz
0870: 65 0a 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  e.SQLite databas
0880: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 35 31  e is a single 51
0890: 32 2d 62 79 74 65 20 70 61 67 65 2e 0a 54 68 65  2-byte page..The
08a0: 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 64 61   maximum size da
08b0: 74 61 62 61 73 65 20 77 6f 75 6c 64 20 62 65 20  tabase would be 
08c0: 32 31 34 37 34 38 33 36 34 36 20 70 61 67 65 73  2147483646 pages
08d0: 20 61 74 20 33 32 37 36 38 20 62 79 74 65 73 20   at 32768 bytes 
08e0: 70 65 72 0a 70 61 67 65 20 6f 72 20 37 30 2c 33  per.page or 70,3
08f0: 36 38 2c 37 34 34 2c 31 31 32 2c 31 32 38 20 62  68,744,112,128 b
0900: 79 74 65 73 20 28 61 62 6f 75 74 20 37 30 20 74  ytes (about 70 t
0910: 65 72 61 62 79 74 65 73 29 2e 20 20 55 73 75 61  erabytes).  Usua
0920: 6c 6c 79 20 53 51 4c 69 74 65 20 77 69 6c 6c 0a  lly SQLite will.
0930: 68 69 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  hit the maximum 
0940: 66 69 6c 65 20 73 69 7a 65 20 6c 69 6d 69 74 20  file size limit 
0950: 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  of the underlyin
0960: 67 20 66 69 6c 65 73 79 73 74 65 6d 20 6f 72 20  g filesystem or 
0970: 64 69 73 6b 0a 68 61 72 64 77 61 72 65 20 73 69  disk.hardware si
0980: 7a 65 20 6c 69 6d 69 74 20 6c 6f 6e 67 20 62 65  ze limit long be
0990: 66 6f 72 65 20 69 74 20 68 69 74 73 20 69 74 73  fore it hits its
09a0: 20 6f 77 6e 20 69 6e 74 65 72 6e 61 6c 20 73 69   own internal si
09b0: 7a 65 20 6c 69 6d 69 74 2e 3c 2f 70 3e 0a 0a 3c  ze limit.</p>..<
09c0: 70 3e 49 6e 20 63 6f 6d 6d 6f 6e 20 75 73 65 2c  p>In common use,
09d0: 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
09e0: 73 20 74 65 6e 64 20 74 6f 20 72 61 6e 67 65 20  s tend to range 
09f0: 69 6e 20 73 69 7a 65 20 66 72 6f 6d 20 61 20 66  in size from a f
0a00: 65 77 20 6b 69 6c 6f 62 79 74 65 73 0a 74 6f 20  ew kilobytes.to 
0a10: 61 20 66 65 77 20 67 69 67 61 62 79 74 65 73 2e  a few gigabytes.
0a20: 3c 2f 70 3e 0a 0a 3c 70 3e 41 74 20 61 6e 79 20  </p>..<p>At any 
0a30: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 65  point in time, e
0a40: 76 65 72 79 20 70 61 67 65 20 69 6e 20 74 68 65  very page in the
0a50: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68   main database h
0a60: 61 73 20 61 20 73 69 6e 67 6c 65 0a 75 73 65 20  as a single.use 
0a70: 77 68 69 63 68 20 69 73 20 6f 6e 65 20 6f 66 20  which is one of 
0a80: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 3a 0a 3c  the following:.<
0a90: 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 6c 6f 63 6b  ul>.<li>The lock
0aa0: 2d 62 79 74 65 20 70 61 67 65 0a 3c 6c 69 3e 41  -byte page.<li>A
0ab0: 20 66 72 65 65 6c 69 73 74 20 70 61 67 65 0a 3c   freelist page.<
0ac0: 75 6c 3e 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69  ul>.<li>A freeli
0ad0: 73 74 20 74 72 75 6e 6b 20 70 61 67 65 0a 3c 6c  st trunk page.<l
0ae0: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 6c 65 61  i>A freelist lea
0af0: 66 20 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69  f page.</ul>.<li
0b00: 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 0a 3c  >A b-tree page.<
0b10: 75 6c 3e 0a 3c 6c 69 3e 41 20 74 61 62 6c 65 20  ul>.<li>A table 
0b20: 62 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20  b-tree interior 
0b30: 70 61 67 65 0a 3c 6c 69 3e 41 20 74 61 62 6c 65  page.<li>A table
0b40: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
0b50: 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78 20 62  e.<li>An index b
0b60: 2d 74 72 65 65 20 69 6e 74 65 72 69 6f 72 20 70  -tree interior p
0b70: 61 67 65 0a 3c 6c 69 3e 41 6e 20 69 6e 64 65 78  age.<li>An index
0b80: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
0b90: 65 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 70 61  e.</ul>.<li>A pa
0ba0: 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77 20 70  yload overflow p
0bb0: 61 67 65 0a 3c 6c 69 3e 41 20 70 6f 69 6e 74 65  age.<li>A pointe
0bc0: 72 20 6d 61 70 20 70 61 67 65 0a 3c 2f 75 6c 3e  r map page.</ul>
0bd0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 72 65  .</p>..<p>All re
0be0: 61 64 73 20 66 72 6f 6d 20 61 6e 64 20 77 72 69  ads from and wri
0bf0: 74 65 73 20 74 6f 20 74 68 65 20 6d 61 69 6e 20  tes to the main 
0c00: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 65  database file be
0c10: 67 69 6e 20 61 74 20 61 20 70 61 67 65 0a 62 6f  gin at a page.bo
0c20: 75 6e 64 61 72 79 20 61 6e 64 20 61 6c 6c 20 77  undary and all w
0c30: 72 69 74 65 73 20 61 72 65 20 61 6e 20 69 6e 74  rites are an int
0c40: 65 67 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 70  eger number of p
0c50: 61 67 65 73 20 69 6e 20 73 69 7a 65 2e 20 20 52  ages in size.  R
0c60: 65 61 64 73 0a 61 72 65 20 61 6c 73 6f 20 75 73  eads.are also us
0c70: 75 61 6c 6c 79 20 61 6e 20 69 6e 74 65 67 65 72  ually an integer
0c80: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
0c90: 20 69 6e 20 73 69 7a 65 2c 20 77 69 74 68 20 74   in size, with t
0ca0: 68 65 20 6f 6e 65 20 65 78 63 65 70 74 69 6f 6e  he one exception
0cb0: 0a 74 68 61 74 20 77 68 65 6e 20 74 68 65 20 64  .that when the d
0cc0: 61 74 61 62 61 73 65 20 69 73 20 66 69 72 73 74  atabase is first
0cd0: 20 6f 70 65 6e 65 64 2c 20 74 68 65 20 66 69 72   opened, the fir
0ce0: 73 74 20 31 30 30 20 62 79 74 65 73 20 6f 66 20  st 100 bytes of 
0cf0: 74 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c  the.database fil
0d00: 65 20 28 74 68 65 20 64 61 74 61 62 61 73 65 20  e (the database 
0d10: 66 69 6c 65 20 68 65 61 64 65 72 29 20 61 72 65  file header) are
0d20: 20 72 65 61 64 20 61 73 20 61 20 73 75 62 2d 70   read as a sub-p
0d30: 61 67 65 20 73 69 7a 65 20 75 6e 69 74 2e 3c 2f  age size unit.</
0d40: 70 3e 0a 0a 3c 70 3e 42 65 66 6f 72 65 20 61 6e  p>..<p>Before an
0d50: 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2d 62 65  y information-be
0d60: 61 72 69 6e 67 20 70 61 67 65 20 6f 66 20 74 68  aring page of th
0d70: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6d 6f  e database is mo
0d80: 64 69 66 69 65 64 2c 20 0a 74 68 65 20 6f 72 69  dified, .the ori
0d90: 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66 69 65 64  ginal unmodified
0da0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74   content of that
0db0: 20 70 61 67 65 20 69 73 20 77 72 69 74 74 65 6e   page is written
0dc0: 20 69 6e 74 6f 20 74 68 65 20 0a 72 6f 6c 6c 62   into the .rollb
0dd0: 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 20 20 49 66  ack journal.  If
0de0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
0df0: 73 20 69 6e 74 65 72 72 75 70 74 65 64 20 61 6e  s interrupted an
0e00: 64 20 6e 65 65 64 73 20 74 6f 20 62 65 20 0a 72  d needs to be .r
0e10: 6f 6c 6c 65 64 20 62 61 63 6b 2c 20 74 68 65 20  olled back, the 
0e20: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
0e30: 20 63 61 6e 20 74 68 65 6e 20 62 65 20 75 73 65   can then be use
0e40: 64 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65  d to restore the
0e50: 0a 64 61 74 61 62 61 73 65 20 74 6f 20 69 74 73  .database to its
0e60: 20 6f 72 69 67 69 6e 61 6c 20 73 74 61 74 65 2e   original state.
0e70: 20 20 46 72 65 65 6c 69 73 74 20 6c 65 61 66 20    Freelist leaf 
0e80: 70 61 67 65 73 20 62 65 61 72 20 6e 6f 0a 69 6e  pages bear no.in
0e90: 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 77  formation that w
0ea0: 6f 75 6c 64 20 6e 65 65 64 20 74 6f 20 62 65 20  ould need to be 
0eb0: 72 65 73 74 6f 72 65 64 20 6f 6e 20 61 20 72 6f  restored on a ro
0ec0: 6c 6c 62 61 63 6b 20 61 6e 64 20 73 6f 20 74 68  llback and so th
0ed0: 65 79 0a 61 72 65 20 6e 6f 74 20 77 72 69 74 74  ey.are not writt
0ee0: 65 6e 20 74 6f 20 74 68 65 20 6a 6f 75 72 6e 61  en to the journa
0ef0: 6c 20 70 72 69 6f 72 20 74 6f 20 6d 6f 64 69 66  l prior to modif
0f00: 69 63 61 74 69 6f 6e 2c 20 69 6e 20 6f 72 64 65  ication, in orde
0f10: 72 20 74 6f 0a 72 65 64 75 63 65 20 64 69 73 6b  r to.reduce disk
0f20: 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e   I/O.</p>..<tcl>
0f30: 68 64 5f 66 72 61 67 6d 65 6e 74 20 64 61 74 61  hd_fragment data
0f40: 62 61 73 65 5f 68 65 61 64 65 72 20 7b 64 61 74  base_header {dat
0f50: 61 62 61 73 65 20 68 65 61 64 65 72 7d 3c 2f 74  abase header}</t
0f60: 63 6c 3e 0a 3c 68 33 3e 31 2e 32 20 54 68 65 20  cl>.<h3>1.2 The 
0f70: 44 61 74 61 62 61 73 65 20 48 65 61 64 65 72 3c  Database Header<
0f80: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 72  /h3>..<p>The fir
0f90: 73 74 20 31 30 30 20 62 79 74 65 73 20 6f 66 20  st 100 bytes of 
0fa0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
0fb0: 65 20 63 6f 6d 70 72 69 73 65 20 74 68 65 20 64  e comprise the d
0fc0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 68 65  atabase file .he
0fd0: 61 64 65 72 2e 20 20 54 68 65 20 64 61 74 61 62  ader.  The datab
0fe0: 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20  ase file header 
0ff0: 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
1000: 66 69 65 6c 64 73 20 61 73 20 73 68 6f 77 6e 20  fields as shown 
1010: 62 79 0a 74 68 65 20 74 61 62 6c 65 20 62 65 6c  by.the table bel
1020: 6f 77 2e 20 20 41 6c 6c 20 6d 75 6c 74 69 62 79  ow.  All multiby
1030: 74 65 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65  te fields in the
1040: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68   database file h
1050: 65 61 64 65 72 20 61 72 65 0a 73 74 6f 72 65 64  eader are.stored
1060: 20 77 69 74 68 20 74 68 65 20 6d 75 73 74 20 73   with the must s
1070: 69 67 6e 69 66 69 63 61 6e 74 20 62 79 74 65 20  ignificant byte 
1080: 66 69 72 73 74 20 28 62 69 67 2d 65 6e 64 69 61  first (big-endia
1090: 6e 29 2e 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72  n).</p>..<center
10a0: 3e 0a 3c 69 3e 44 61 74 61 62 61 73 65 20 48 65  >.<i>Database He
10b0: 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  ader Format</i><
10c0: 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
10d0: 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
10e0: 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
10f0: 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
1100: 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76  iption.<tr><td v
1110: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1120: 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69  center>0<td vali
1130: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1140: 74 65 72 3e 31 36 3c 74 64 20 61 6c 69 67 6e 3d  ter>16<td align=
1150: 6c 65 66 74 3e 0a 54 68 65 20 68 65 61 64 65 72  left>.The header
1160: 20 73 74 72 69 6e 67 3a 20 22 53 51 4c 69 74 65   string: "SQLite
1170: 20 66 6f 72 6d 61 74 20 33 5c 30 30 30 22 0a 3c   format 3\000".<
1180: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1190: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31  p align=center>1
11a0: 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  6<td valign=top 
11b0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 3c 74  align=center>2<t
11c0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68  d align=left>.Th
11d0: 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
11e0: 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e 20 20  size in bytes.  
11f0: 4d 75 73 74 20 62 65 20 61 20 70 6f 77 65 72 20  Must be a power 
1200: 6f 66 20 74 77 6f 20 62 65 74 77 65 65 6e 20 35  of two between 5
1210: 31 32 0a 61 6e 64 20 33 32 37 36 38 20 69 6e 63  12.and 32768 inc
1220: 6c 75 73 69 76 65 2e 0a 3c 74 72 3e 3c 74 64 20  lusive..<tr><td 
1230: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1240: 3d 63 65 6e 74 65 72 3e 31 38 3c 74 64 20 76 61  =center>18<td va
1250: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1260: 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e  enter>1<td align
1270: 3d 6c 65 66 74 3e 0a 46 69 6c 65 20 66 6f 72 6d  =left>.File form
1280: 61 74 20 77 72 69 74 65 20 76 65 72 73 69 6f 6e  at write version
1290: 2e 20 20 31 20 66 6f 72 20 6c 65 67 61 63 79 3b  .  1 for legacy;
12a0: 20 32 20 66 6f 72 20 5b 57 41 4c 5d 2e 0a 3c 74   2 for [WAL]..<t
12b0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
12c0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 39   align=center>19
12d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12e0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
12f0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c   align=left>.Fil
1300: 65 20 66 6f 72 6d 61 74 20 72 65 61 64 20 76 65  e format read ve
1310: 72 73 69 6f 6e 2e 20 20 31 20 66 6f 72 20 6c 65  rsion.  1 for le
1320: 67 61 63 79 3b 20 32 20 66 6f 72 20 5b 57 41 4c  gacy; 2 for [WAL
1330: 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  ]..<tr><td valig
1340: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1350: 65 72 3e 32 30 3c 74 64 20 76 61 6c 69 67 6e 3d  er>20<td valign=
1360: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1370: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
1380: 3e 0a 42 79 74 65 73 20 6f 66 20 75 6e 75 73 65  >.Bytes of unuse
1390: 64 20 22 72 65 73 65 72 76 65 64 22 20 73 70 61  d "reserved" spa
13a0: 63 65 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ce at the end of
13b0: 20 65 61 63 68 20 70 61 67 65 2e 20 20 55 73 75   each page.  Usu
13c0: 61 6c 6c 79 20 30 2e 0a 3c 74 72 3e 3c 74 64 20  ally 0..<tr><td 
13d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
13e0: 3d 63 65 6e 74 65 72 3e 32 31 3c 74 64 20 76 61  =center>21<td va
13f0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1400: 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e  enter>1<td align
1410: 3d 6c 65 66 74 3e 0a 4d 61 78 69 6d 75 6d 20 65  =left>.Maximum e
1420: 6d 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20  mbedded payload 
1430: 66 72 61 63 74 69 6f 6e 2e 20 20 4d 75 73 74 20  fraction.  Must 
1440: 62 65 20 36 34 2e 0a 3c 74 72 3e 3c 74 64 20 76  be 64..<tr><td v
1450: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1460: 63 65 6e 74 65 72 3e 32 32 3c 74 64 20 76 61 6c  center>22<td val
1470: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1480: 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d  nter>1<td align=
1490: 6c 65 66 74 3e 0a 4d 69 6e 69 6d 75 6d 20 65 6d  left>.Minimum em
14a0: 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64 20 66  bedded payload f
14b0: 72 61 63 74 69 6f 6e 2e 20 20 4d 75 73 74 20 62  raction.  Must b
14c0: 65 20 33 32 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  e 32..<tr><td va
14d0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
14e0: 65 6e 74 65 72 3e 32 33 3c 74 64 20 76 61 6c 69  enter>23<td vali
14f0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1500: 74 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c  ter>1<td align=l
1510: 65 66 74 3e 0a 4c 65 61 66 20 70 61 79 6c 6f 61  eft>.Leaf payloa
1520: 64 20 66 72 61 63 74 69 6f 6e 2e 20 20 4d 75 73  d fraction.  Mus
1530: 74 20 62 65 20 33 32 2e 0a 3c 74 72 3e 3c 74 64  t be 32..<tr><td
1540: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1550: 6e 3d 63 65 6e 74 65 72 3e 32 34 3c 74 64 20 76  n=center>24<td v
1560: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1570: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1580: 6e 3d 6c 65 66 74 3e 0a 46 69 6c 65 20 63 68 61  n=left>.File cha
1590: 6e 67 65 20 63 6f 75 6e 74 65 72 2e 0a 3c 74 72  nge counter..<tr
15a0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
15b0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 38 3c  align=center>28<
15c0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
15d0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
15e0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 53 69 7a 65  align=left>.Size
15f0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
1600: 20 66 69 6c 65 20 69 6e 20 70 61 67 65 73 2e 20   file in pages. 
1610: 20 54 68 65 20 22 69 6e 2d 68 65 61 64 65 72 20   The "in-header 
1620: 64 61 74 61 62 61 73 65 20 73 69 7a 65 22 2e 0a  database size"..
1630: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
1640: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1650: 33 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  32<td valign=top
1660: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
1670: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 50  td align=left>.P
1680: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
1690: 65 20 66 69 72 73 74 20 66 72 65 65 6c 69 73 74  e first freelist
16a0: 20 74 72 75 6e 6b 20 70 61 67 65 2e 0a 3c 74 72   trunk page..<tr
16b0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
16c0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 36 3c  align=center>36<
16d0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
16e0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
16f0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 6f 74 61  align=left>.Tota
1700: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 65 65  l number of free
1710: 6c 69 73 74 20 70 61 67 65 73 2e 0a 3c 74 72 3e  list pages..<tr>
1720: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1730: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 30 3c 74  lign=center>40<t
1740: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1750: 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61  gn=center>4<td a
1760: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 73  lign=left>.The s
1770: 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 0a 3c 74  chema cookie..<t
1780: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1790: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 34   align=center>44
17a0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
17b0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
17c0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65   align=left>.The
17d0: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e   schema format n
17e0: 75 6d 62 65 72 2e 20 20 53 75 70 70 6f 72 74 65  umber.  Supporte
17f0: 64 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 73  d schema formats
1800: 20 61 72 65 20 31 2c 20 32 2c 20 33 2c 20 61 6e   are 1, 2, 3, an
1810: 64 20 34 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  d 4..<tr><td val
1820: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1830: 6e 74 65 72 3e 34 38 3c 74 64 20 76 61 6c 69 67  nter>48<td valig
1840: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
1850: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
1860: 66 74 3e 0a 44 65 66 61 75 6c 74 20 70 61 67 65  ft>.Default page
1870: 20 63 61 63 68 65 20 73 69 7a 65 2e 0a 3c 74 72   cache size..<tr
1880: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1890: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 32 3c  align=center>52<
18a0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
18b0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
18c0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20  align=left>.The 
18d0: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
18e0: 68 65 20 6c 61 72 67 65 73 74 20 72 6f 6f 74 20  he largest root 
18f0: 62 2d 74 72 65 65 20 70 61 67 65 20 77 68 65 6e  b-tree page when
1900: 20 69 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   in auto-vacuum 
1910: 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c 2d 76  or.incremental-v
1920: 61 63 75 75 6d 20 6d 6f 64 65 73 2c 20 6f 72 20  acuum modes, or 
1930: 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65 2e 0a  zero otherwise..
1940: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
1950: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1960: 35 36 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  56<td valign=top
1970: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
1980: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54  td align=left>.T
1990: 68 65 20 64 61 74 61 62 61 73 65 20 74 65 78 74  he database text
19a0: 20 65 6e 63 6f 64 69 6e 67 2e 20 20 41 20 76 61   encoding.  A va
19b0: 6c 75 65 20 6f 66 20 31 20 6d 65 61 6e 73 20 55  lue of 1 means U
19c0: 54 46 2d 38 2e 20 20 41 20 76 61 6c 75 65 20 6f  TF-8.  A value o
19d0: 66 20 32 0a 6d 65 61 6e 73 20 55 54 46 2d 31 36  f 2.means UTF-16
19e0: 6c 65 2e 20 20 41 20 76 61 6c 75 65 20 6f 66 20  le.  A value of 
19f0: 33 20 6d 65 61 6e 73 20 55 54 46 2d 31 36 62 65  3 means UTF-16be
1a00: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
1a10: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1a20: 72 3e 36 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>60<td valign=t
1a30: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1a40: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1a50: 0a 54 68 65 20 22 75 73 65 72 20 76 65 72 73 69  .The "user versi
1a60: 6f 6e 22 20 61 73 20 72 65 61 64 20 61 6e 64 20  on" as read and 
1a70: 73 65 74 20 62 79 20 74 68 65 20 5b 75 73 65 72  set by the [user
1a80: 5f 76 65 72 73 69 6f 6e 20 70 72 61 67 6d 61 5d  _version pragma]
1a90: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
1aa0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1ab0: 72 3e 36 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>64<td valign=t
1ac0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1ad0: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
1ae0: 0a 54 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29  .True (non-zero)
1af0: 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c   for incremental
1b00: 2d 76 61 63 75 75 6d 20 6d 6f 64 65 2e 20 20 46  -vacuum mode.  F
1b10: 61 6c 73 65 20 28 7a 65 72 6f 29 20 6f 74 68 65  alse (zero) othe
1b20: 72 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20 76  rwise..<tr><td v
1b30: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1b40: 63 65 6e 74 65 72 3e 36 38 3c 74 64 20 76 61 6c  center>68<td val
1b50: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1b60: 6e 74 65 72 3e 32 34 3c 74 64 20 61 6c 69 67 6e  nter>24<td align
1b70: 3d 6c 65 66 74 3e 0a 52 65 73 65 72 76 65 64 20  =left>.Reserved 
1b80: 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e 2e 20 20  for expansion.  
1b90: 4d 75 73 74 20 62 65 20 7a 65 72 6f 2e 0a 3c 74  Must be zero..<t
1ba0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1bb0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 39 32   align=center>92
1bc0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1bd0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
1be0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65   align=left>.The
1bf0: 20 22 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d   "version-valid-
1c00: 66 6f 72 22 20 69 6e 74 65 67 65 72 2e 0a 3c 74  for" integer..<t
1c10: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1c20: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 39 36   align=center>96
1c30: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1c40: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
1c50: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5b 53 51   align=left>.[SQ
1c60: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d  LITE_VERSION_NUM
1c70: 42 45 52 5d 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63  BER].</table></c
1c80: 65 6e 74 65 72 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  enter>..<h4>1.2.
1c90: 31 20 4d 61 67 69 63 20 48 65 61 64 65 72 20 53  1 Magic Header S
1ca0: 74 72 69 6e 67 3c 2f 68 34 3e 0a 0a 3c 70 3e 45  tring</h4>..<p>E
1cb0: 76 65 72 79 20 53 51 4c 69 74 65 20 64 61 74 61  very SQLite data
1cc0: 62 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 73  base file begins
1cd0: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
1ce0: 69 6e 67 20 31 36 20 62 79 74 65 73 20 28 69 6e  ing 16 bytes (in
1cf0: 20 68 65 78 29 3a 0a 35 33 20 35 31 20 34 63 20   hex):.53 51 4c 
1d00: 36 39 20 37 34 20 36 35 20 32 30 20 36 36 20 36  69 74 65 20 66 6
1d10: 66 20 37 32 20 36 64 20 36 31 20 37 34 20 32 30  f 72 6d 61 74 20
1d20: 20 33 33 20 30 30 2e 20 20 54 68 69 73 20 62 79   33 00.  This by
1d30: 74 65 20 73 65 71 75 65 6e 63 65 0a 63 6f 72 72  te sequence.corr
1d40: 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 55  esponds to the U
1d50: 54 46 2d 38 20 73 74 72 69 6e 67 20 22 53 51 4c  TF-8 string "SQL
1d60: 69 74 65 20 66 6f 72 6d 61 74 20 33 22 20 69 6e  ite format 3" in
1d70: 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 75 6c 0a  cluding the nul.
1d80: 74 65 72 6d 69 6e 61 74 6f 72 20 63 68 61 72 61  terminator chara
1d90: 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64 2e  cter at the end.
1da0: 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 32 20  </p>..<h4>1.2.2 
1db0: 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73  File format vers
1dc0: 69 6f 6e 20 6e 75 6d 62 65 72 73 3c 2f 68 34 3e  ion numbers</h4>
1dd0: 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 66 6f  ..<p>The file fo
1de0: 72 6d 61 74 20 77 72 69 74 65 20 76 65 72 73 69  rmat write versi
1df0: 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66 6f 72 6d  on and file form
1e00: 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e 20  at read version 
1e10: 61 74 20 6f 66 66 73 65 74 73 0a 31 38 20 61 6e  at offsets.18 an
1e20: 64 20 31 39 20 61 72 65 20 69 6e 74 65 6e 64 65  d 19 are intende
1e30: 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20 65  d to allow for e
1e40: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20 74  nhancements of t
1e50: 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 69  he file format.i
1e60: 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f 6e  n future version
1e70: 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 49 6e  s of SQLite.  In
1e80: 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e   current version
1e90: 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f 74  s of SQLite, bot
1ea0: 68 20 6f 66 0a 74 68 65 73 65 20 76 61 6c 75 65  h of.these value
1eb0: 73 20 61 72 65 20 31 20 66 6f 72 20 72 6f 6c 6c  s are 1 for roll
1ec0: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 6c 69 6e 67  back journalling
1ed0: 20 6d 6f 64 65 73 20 61 6e 64 20 32 20 66 6f 72   modes and 2 for
1ee0: 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e 61 6c 6c 69   [WAL].journalli
1ef0: 6e 67 20 6d 6f 64 65 2e 20 20 49 66 20 61 20 76  ng mode.  If a v
1f00: 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65  ersion of SQLite
1f10: 20 63 6f 64 65 64 20 74 6f 20 74 68 65 20 63 75   coded to the cu
1f20: 72 72 65 6e 74 0a 66 69 6c 65 20 66 6f 72 6d 61  rrent.file forma
1f30: 74 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e 20  t specification 
1f40: 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 64 61 74  encounters a dat
1f50: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 72 65  abase file where
1f60: 20 74 68 65 20 72 65 61 64 0a 76 65 72 73 69 6f   the read.versio
1f70: 6e 20 69 73 20 31 20 6f 72 20 32 20 62 75 74 20  n is 1 or 2 but 
1f80: 74 68 65 20 77 72 69 74 65 20 76 65 72 73 69 6f  the write versio
1f90: 6e 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  n is greater tha
1fa0: 6e 20 32 2c 20 74 68 65 6e 20 74 68 65 20 64 61  n 2, then the da
1fb0: 74 61 62 61 73 65 0a 66 69 6c 65 20 6d 75 73 74  tabase.file must
1fc0: 20 62 65 20 74 72 65 61 74 65 64 20 61 73 20 72   be treated as r
1fd0: 65 61 64 2d 6f 6e 6c 79 2e 20 20 49 66 20 61 20  ead-only.  If a 
1fe0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69  database file wi
1ff0: 74 68 20 61 20 72 65 61 64 20 76 65 72 73 69 6f  th a read versio
2000: 6e 0a 67 72 65 61 74 65 72 20 74 68 61 6e 20 32  n.greater than 2
2010: 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 2c 20 74   is encounter, t
2020: 68 65 6e 20 74 68 61 74 20 64 61 74 61 62 61 73  hen that databas
2030: 65 20 63 61 6e 6e 6f 74 20 62 65 20 72 65 61 64  e cannot be read
2040: 20 6f 72 20 77 72 69 74 74 65 6e 2e 3c 2f 70 3e   or written.</p>
2050: 0a 0a 3c 68 34 3e 31 2e 32 2e 33 20 52 65 73 65  ..<h4>1.2.3 Rese
2060: 72 76 65 64 20 62 79 74 65 73 20 70 65 72 20 70  rved bytes per p
2070: 61 67 65 3c 2f 68 34 3e 0a 0a 3c 70 3e 53 51 4c  age</h4>..<p>SQL
2080: 69 74 65 20 68 61 73 20 74 68 65 20 61 62 69 6c  ite has the abil
2090: 69 74 79 20 74 6f 20 73 65 74 20 61 73 69 64 65  ity to set aside
20a0: 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65 72 20   a small number 
20b0: 6f 66 20 65 78 74 72 61 20 62 79 74 65 73 20 61  of extra bytes a
20c0: 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65  t.the end of eve
20d0: 72 79 20 70 61 67 65 20 66 6f 72 20 75 73 65 20  ry page for use 
20e0: 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e 20 20  by extensions.  
20f0: 54 68 65 73 65 20 65 78 74 72 61 20 62 79 74 65  These extra byte
2100: 73 20 61 72 65 0a 75 73 65 64 2c 20 66 6f 72 20  s are.used, for 
2110: 65 78 61 6d 70 6c 65 2c 20 62 79 20 74 68 65 20  example, by the 
2120: 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74 69 6f  SQLite Encryptio
2130: 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f 20 73  n Extension to s
2140: 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61 6e 64  tore a nonce.and
2150: 2f 6f 72 20 63 72 79 70 74 6f 67 72 61 70 68 69  /or cryptographi
2160: 63 20 63 68 65 63 6b 73 75 6d 20 61 73 73 6f 63  c checksum assoc
2170: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
2180: 70 61 67 65 2e 20 20 54 68 65 20 0a 22 72 65 73  page.  The ."res
2190: 65 72 76 65 64 20 73 70 61 63 65 22 20 73 69 7a  erved space" siz
21a0: 65 20 69 6e 20 74 68 65 20 31 2d 62 79 74 65 20  e in the 1-byte 
21b0: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
21c0: 74 20 32 30 20 69 73 20 74 68 65 20 6e 75 6d 62  t 20 is the numb
21d0: 65 72 0a 6f 66 20 62 79 74 65 73 20 6f 66 20 73  er.of bytes of s
21e0: 70 61 63 65 20 61 74 20 74 68 65 20 65 6e 64 20  pace at the end 
21f0: 6f 66 20 65 61 63 68 20 70 61 67 65 20 74 6f 20  of each page to 
2200: 72 65 73 65 72 76 65 20 66 6f 72 20 65 78 74 65  reserve for exte
2210: 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20 76 61 6c  nsions..This val
2220: 75 65 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  ue is usually 0.
2230: 20 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e 20    The value can 
2240: 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a 3c 74 63  be odd.</p>..<tc
2250: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75 73  l>hd_fragment us
2260: 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73 61 62 6c  able_size {usabl
2270: 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70  e size}</tcl>.<p
2280: 3e 54 68 65 20 22 75 73 61 62 6c 65 20 73 69 7a  >The "usable siz
2290: 65 22 20 6f 66 20 61 20 64 61 74 61 62 61 73 65  e" of a database
22a0: 20 70 61 67 65 20 69 73 20 74 68 65 20 70 61 67   page is the pag
22b0: 65 20 73 69 7a 65 20 73 70 65 63 69 66 79 20 62  e size specify b
22c0: 79 20 74 68 65 0a 32 2d 62 79 74 65 20 69 6e 74  y the.2-byte int
22d0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 31  eger at offset 1
22e0: 36 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 20  6 in the header 
22f0: 6c 65 73 73 20 74 68 65 20 22 72 65 73 65 72 76  less the "reserv
2300: 65 64 22 20 73 70 61 63 65 20 73 69 7a 65 0a 72  ed" space size.r
2310: 65 63 6f 72 64 65 64 20 69 6e 20 74 68 65 20 31  ecorded in the 1
2320: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74  -byte integer at
2330: 20 6f 66 66 73 65 74 20 32 30 20 69 6e 20 74 68   offset 20 in th
2340: 65 20 68 65 61 64 65 72 2e 20 20 54 68 65 20 75  e header.  The u
2350: 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66 20 61 20  sable.size of a 
2360: 70 61 67 65 20 6d 69 67 68 74 20 62 65 20 61 6e  page might be an
2370: 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20 20 48 6f   odd number.  Ho
2380: 77 65 76 65 72 2c 20 74 68 65 20 75 73 61 62 6c  wever, the usabl
2390: 65 20 73 69 7a 65 20 69 73 20 6e 6f 74 0a 61 6c  e size is not.al
23a0: 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73  lowed to be less
23b0: 20 74 68 61 6e 20 34 38 30 2e 20 20 49 6e 20 6f   than 480.  In o
23c0: 74 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74  ther words, if t
23d0: 68 65 20 70 61 67 65 20 73 69 7a 65 20 69 73 20  he page size is 
23e0: 35 31 32 2c 0a 74 68 65 6e 20 74 68 65 20 72 65  512,.then the re
23f0: 73 65 72 76 65 64 20 73 70 61 63 65 20 73 69 7a  served space siz
2400: 65 20 63 61 6e 6e 6f 74 20 65 78 63 65 65 64 20  e cannot exceed 
2410: 33 32 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32  32.</p>..<h4>1.2
2420: 2e 34 20 50 61 79 6c 6f 61 64 20 66 72 61 63 74  .4 Payload fract
2430: 69 6f 6e 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68  ions</h4>..<p>Th
2440: 65 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 6d 69  e maximum and mi
2450: 6e 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70  nimum embedded p
2460: 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 73  ayload fractions
2470: 20 61 6e 64 20 74 68 65 20 6c 65 61 66 0a 70 61   and the leaf.pa
2480: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 20 76  yload fraction v
2490: 61 6c 75 65 73 20 6d 75 73 74 20 62 65 20 36 34  alues must be 64
24a0: 2c 20 33 32 2c 20 61 6e 64 20 33 32 2e 20 20 54  , 32, and 32.  T
24b0: 68 65 73 65 20 76 61 6c 75 65 73 20 77 65 72 65  hese values were
24c0: 0a 6f 72 67 69 6e 61 6c 6c 79 20 69 6e 74 65 6e  .orginally inten
24d0: 64 65 64 20 74 6f 20 61 73 20 74 75 6e 61 62 6c  ded to as tunabl
24e0: 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61  e parameters tha
24f0: 74 20 63 6f 75 6c 64 20 62 65 20 75 73 65 64 20  t could be used 
2500: 74 6f 0a 6d 6f 64 69 66 79 20 74 68 65 20 73 74  to.modify the st
2510: 6f 72 61 67 65 20 66 6f 72 6d 61 74 20 6f 66 20  orage format of 
2520: 74 68 65 20 62 2d 74 72 65 65 20 61 6c 67 6f 72  the b-tree algor
2530: 69 74 68 6d 2e 20 20 48 6f 77 65 76 65 72 2c 20  ithm.  However, 
2540: 74 68 61 74 0a 66 75 6e 63 74 69 6f 6e 61 6c 69  that.functionali
2550: 74 79 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72  ty is not suppor
2560: 74 65 64 20 61 6e 64 20 74 68 65 72 65 20 61 72  ted and there ar
2570: 65 20 6e 6f 20 63 75 72 72 65 6e 74 20 70 6c 61  e no current pla
2580: 6e 73 20 74 6f 20 61 64 64 0a 73 75 70 70 6f 72  ns to add.suppor
2590: 74 20 69 6e 20 74 68 65 20 66 75 74 75 72 65 2e  t in the future.
25a0: 20 20 48 65 6e 63 65 2c 20 74 68 65 73 65 20 74    Hence, these t
25b0: 68 72 65 65 20 62 79 74 65 73 20 61 72 65 20 66  hree bytes are f
25c0: 69 78 65 64 20 61 74 20 74 68 65 0a 76 61 6c 75  ixed at the.valu
25d0: 65 73 20 73 70 65 63 69 66 69 65 64 2e 3c 2f 70  es specified.</p
25e0: 3e 0a 0a 3c 68 34 3e 31 2e 32 2e 35 20 46 69 6c  >..<h4>1.2.5 Fil
25f0: 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
2600: 3c 2f 68 34 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  </h4>..<tcl>hd_f
2610: 72 61 67 6d 65 6e 74 20 63 68 6e 67 63 74 72 20  ragment chngctr 
2620: 7b 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 7d  {change counter}
2630: 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65 20 66 69  </tcl>.<p>The fi
2640: 6c 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  le change counte
2650: 72 20 69 73 20 61 20 34 2d 62 79 74 65 20 62 69  r is a 4-byte bi
2660: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
2670: 20 77 68 69 63 68 20 69 73 0a 69 6e 63 72 65 6d   which is.increm
2680: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 20 74  ented whenever t
2690: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
26a0: 20 69 73 20 63 68 61 6e 67 65 64 20 69 6e 20 72   is changed in r
26b0: 6f 6c 6c 62 61 63 6b 20 6d 6f 64 65 2e 20 20 0a  ollback mode.  .
26c0: 57 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72 65  When two or more
26d0: 20 70 72 6f 63 65 73 73 65 73 20 61 72 65 20 72   processes are r
26e0: 65 61 64 69 6e 67 20 74 68 65 20 73 61 6d 65 20  eading the same 
26f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 65  database file, e
2700: 61 63 68 20 0a 70 72 6f 63 65 73 73 20 63 61 6e  ach .process can
2710: 20 64 65 74 65 63 74 20 64 61 74 61 62 61 73 65   detect database
2720: 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f 74   changes from ot
2730: 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 62 79  her processes by
2740: 20 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68 65   monitoring .the
2750: 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 2e   change counter.
2760: 0a 41 20 70 72 6f 63 65 73 73 20 77 69 6c 6c 20  .A process will 
2770: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74 6f  normally want to
2780: 20 66 6c 75 73 68 20 69 74 73 20 64 61 74 61 62   flush its datab
2790: 61 73 65 20 70 61 67 65 20 63 61 63 68 65 20 77  ase page cache w
27a0: 68 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f 63  hen.another proc
27b0: 65 73 73 20 6d 6f 64 69 66 69 65 64 20 74 68 65  ess modified the
27c0: 20 64 61 74 61 62 61 73 65 2c 20 73 69 6e 63 65   database, since
27d0: 20 74 68 65 20 63 61 63 68 65 20 68 61 73 20 62   the cache has b
27e0: 65 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68 65  ecome stale..The
27f0: 20 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f 75   file change cou
2800: 6e 74 65 72 20 66 61 63 69 6c 69 74 61 74 65 73  nter facilitates
2810: 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49   this.</p>..<p>I
2820: 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61 6e  n WAL mode, chan
2830: 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61 62  ges to the datab
2840: 61 73 65 20 61 72 65 20 64 65 74 65 63 74 65 64  ase are detected
2850: 20 75 73 69 6e 67 20 74 68 65 20 77 61 6c 2d 69   using the wal-i
2860: 6e 64 65 78 0a 61 6e 64 20 73 6f 20 74 68 65 20  ndex.and so the 
2870: 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2880: 73 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20 48  s not needed.  H
2890: 65 6e 63 65 2c 20 74 68 65 20 63 68 61 6e 67 65  ence, the change
28a0: 20 63 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a 6e   counter might.n
28b0: 6f 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65  ot be incremente
28c0: 64 20 6f 6e 20 65 61 63 68 20 74 72 61 6e 73 61  d on each transa
28d0: 63 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f 64  ction in WAL mod
28e0: 65 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  e.</p>..<h4>1.2.
28f0: 36 20 49 6e 2d 68 65 61 64 65 72 20 64 61 74 61  6 In-header data
2900: 62 61 73 65 20 73 69 7a 65 3c 2f 68 34 3e 0a 0a  base size</h4>..
2910: 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
2920: 20 66 69 6c 65 73 69 7a 65 20 7b 69 6e 2d 68 65   filesize {in-he
2930: 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69  ader database si
2940: 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65  ze}</tcl>.<p>The
2950: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
2960: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
2970: 66 73 65 74 20 32 38 20 69 6e 74 6f 20 74 68 65  fset 28 into the
2980: 20 68 65 61 64 65 72 20 0a 73 74 6f 72 65 73 20   header .stores 
2990: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
29a0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 6e  database file in
29b0: 20 70 61 67 65 73 2e 20 20 49 66 20 74 68 69 73   pages.  If this
29c0: 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61 73   in-header.datas
29d0: 69 7a 65 20 73 69 7a 65 20 69 73 20 6e 6f 74 20  ize size is not 
29e0: 76 61 6c 69 64 20 28 73 65 65 20 74 68 65 20 6e  valid (see the n
29f0: 65 78 74 20 70 61 72 61 67 72 61 70 68 29 2c 20  ext paragraph), 
2a00: 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
2a10: 65 20 0a 73 69 7a 65 20 69 73 20 63 6f 6d 70 75  e .size is compu
2a20: 74 65 64 20 62 79 20 6c 6f 6f 6b 69 6e 67 0a 61  ted by looking.a
2a30: 74 20 74 68 65 20 61 63 74 75 61 6c 20 73 69 7a  t the actual siz
2a40: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
2a50: 65 20 66 69 6c 65 2e 20 4f 6c 64 65 72 20 76 65  e file. Older ve
2a60: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
2a70: 0a 69 67 6e 6f 72 65 64 20 74 68 65 20 69 6e 2d  .ignored the in-
2a80: 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20  header database 
2a90: 73 69 7a 65 20 61 6e 64 20 75 73 65 64 20 74 68  size and used th
2aa0: 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20 73 69  e actual file si
2ab0: 7a 65 0a 65 78 63 6c 75 73 69 76 65 6c 79 2e 20  ze.exclusively. 
2ac0: 20 4e 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20   Newer versions 
2ad0: 6f 66 20 53 51 4c 69 74 65 20 75 73 65 20 74 68  of SQLite use th
2ae0: 65 20 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61  e in-header data
2af0: 62 61 73 65 0a 73 69 7a 65 20 69 66 20 69 74 20  base.size if it 
2b00: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 62 75 74  is available but
2b10: 20 66 61 6c 6c 20 62 61 63 6b 20 74 6f 20 74 68   fall back to th
2b20: 65 20 61 63 74 75 61 6c 20 66 69 6c 65 20 73 69  e actual file si
2b30: 7a 65 20 69 66 0a 74 68 65 20 69 6e 2d 68 65 61  ze if.the in-hea
2b40: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2b50: 65 20 69 73 20 6e 6f 74 20 76 61 6c 69 64 2e 3c  e is not valid.<
2b60: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 2d 68  /p>..<p>The in-h
2b70: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
2b80: 69 7a 65 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73  ize is only cons
2b90: 69 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c  idered to be val
2ba0: 69 64 20 69 66 0a 69 74 20 69 73 20 6e 6f 6e 2d  id if.it is non-
2bb0: 7a 65 72 6f 20 61 6e 64 20 69 66 20 74 68 65 20  zero and if the 
2bc0: 34 2d 62 79 74 65 20 5b 63 68 61 6e 67 65 20 63  4-byte [change c
2bd0: 6f 75 6e 74 65 72 5d 20 61 74 20 6f 66 66 73 65  ounter] at offse
2be0: 74 20 32 34 0a 65 78 61 63 74 6c 79 20 6d 61 74  t 24.exactly mat
2bf0: 63 68 65 73 20 74 68 65 20 34 2d 62 79 74 65 20  ches the 4-byte 
2c00: 5b 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66  [version-valid-f
2c10: 6f 72 20 76 61 6c 75 65 5d 20 61 74 20 6f 66 66  or value] at off
2c20: 73 65 74 20 39 32 2e 0a 54 68 65 20 69 6e 2d 68  set 92..The in-h
2c30: 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73  eader database s
2c40: 69 7a 65 20 73 68 6f 75 6c 64 20 61 6c 77 61 79  ize should alway
2c50: 73 20 62 65 20 76 61 6c 69 64 20 0a 77 68 65 6e  s be valid .when
2c60: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
2c70: 20 6f 6e 6c 79 20 6d 6f 64 69 66 69 65 64 20 75   only modified u
2c80: 73 69 6e 67 20 72 65 63 65 6e 74 20 76 65 72 73  sing recent vers
2c90: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 28  ions of SQLite.(
2ca0: 76 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30 20 61  versions 3.7.0 a
2cb0: 6e 64 20 6c 61 74 65 72 29 2e 0a 49 66 20 61 20  nd later)..If a 
2cc0: 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e 20 6f  legacy version o
2cd0: 66 20 53 51 4c 69 74 65 20 77 72 69 74 65 73 20  f SQLite writes 
2ce0: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  to the database,
2cf0: 20 69 74 20 77 69 6c 6c 20 6e 6f 74 0a 6b 6e 6f   it will not.kno
2d00: 77 20 74 6f 20 75 70 64 61 74 65 20 74 68 65 20  w to update the 
2d10: 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61  in-header databa
2d20: 73 65 20 73 69 7a 65 20 61 6e 64 20 73 6f 20 74  se size and so t
2d30: 68 65 20 69 6e 2d 68 65 61 64 65 72 0a 64 61 74  he in-header.dat
2d40: 61 62 61 73 65 20 73 69 7a 65 20 63 6f 75 6c 64  abase size could
2d50: 20 62 65 20 69 6e 63 6f 72 72 65 63 74 2e 20 20   be incorrect.  
2d60: 42 75 74 20 6c 65 67 61 63 79 20 76 65 72 73 69  But legacy versi
2d70: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 77 69  ons of SQLite.wi
2d80: 6c 6c 20 61 6c 73 6f 20 6c 65 61 76 65 20 74 68  ll also leave th
2d90: 65 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d  e version-valid-
2da0: 66 6f 72 20 76 61 6c 75 65 20 61 74 20 6f 66 66  for value at off
2db0: 73 65 74 20 39 32 20 75 6e 63 68 61 6e 67 65 64  set 92 unchanged
2dc0: 0a 73 6f 20 69 74 20 77 69 6c 6c 20 6e 6f 74 20  .so it will not 
2dd0: 6d 61 74 63 68 20 74 68 65 20 63 68 61 6e 67 65  match the change
2de0: 2d 63 6f 75 6e 74 65 72 2e 20 20 48 65 6e 63 65  -counter.  Hence
2df0: 2c 20 69 6e 76 61 6c 69 64 20 69 6e 2d 68 65 61  , invalid in-hea
2e00: 64 65 72 0a 64 61 74 61 62 61 73 65 20 73 69 7a  der.database siz
2e10: 65 73 20 63 61 6e 20 62 65 20 64 65 74 65 63 74  es can be detect
2e20: 65 64 20 28 61 6e 64 20 69 67 6e 6f 72 65 64 29  ed (and ignored)
2e30: 20 62 79 20 6f 62 73 65 72 76 69 6e 67 20 77 68   by observing wh
2e40: 65 6e 0a 74 68 65 20 63 68 61 6e 67 65 2d 63 6f  en.the change-co
2e50: 75 6e 74 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d  unter does not m
2e60: 61 74 63 68 20 74 68 65 20 76 65 72 73 69 6f 6e  atch the version
2e70: 2d 76 61 6c 69 64 2d 66 6f 72 20 69 6e 74 65 67  -valid-for integ
2e80: 65 72 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32  er.</p>..<h4>1.2
2e90: 2e 37 20 46 72 65 65 20 70 61 67 65 20 6c 69 73  .7 Free page lis
2ea0: 74 3c 2f 68 34 3e 0a 0a 3c 70 3e 55 6e 75 73 65  t</h4>..<p>Unuse
2eb0: 64 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64  d pages in the d
2ec0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 72 65  atabase file are
2ed0: 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 66 72 65   stored on a fre
2ee0: 65 6c 69 73 74 2e 20 20 54 68 65 0a 34 2d 62 79  elist.  The.4-by
2ef0: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
2f00: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
2f10: 33 32 20 73 74 6f 72 65 73 20 74 68 65 20 70 61  32 stores the pa
2f20: 67 65 20 6e 75 6d 62 65 72 20 6f 66 0a 74 68 65  ge number of.the
2f30: 20 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74   first page of t
2f40: 68 65 20 66 72 65 65 6c 69 73 74 2c 20 6f 72 20  he freelist, or 
2f50: 7a 65 72 6f 20 69 66 20 74 68 65 20 66 72 65 65  zero if the free
2f60: 6c 69 73 74 20 69 73 20 65 6d 70 74 79 2e 0a 54  list is empty..T
2f70: 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e  he 4-byte big-en
2f80: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20  dian integer at 
2f90: 6f 66 66 73 65 74 20 33 36 20 73 74 6f 72 65 73  offset 36 stores
2fa0: 20 73 74 6f 72 65 73 20 74 68 65 20 74 6f 74 61   stores the tota
2fb0: 6c 20 0a 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  l .number of pag
2fc0: 65 73 20 6f 6e 20 74 68 65 20 66 72 65 65 6c 69  es on the freeli
2fd0: 73 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32  st.</p>..<h4>1.2
2fe0: 2e 38 20 53 63 68 65 6d 61 20 63 6f 6f 6b 69 65  .8 Schema cookie
2ff0: 3c 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 73 63  </h4>..<p>The sc
3000: 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 73 20 61  hema cookie is a
3010: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
3020: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
3030: 66 73 65 74 20 34 30 0a 74 68 61 74 20 69 73 20  fset 40.that is 
3040: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
3050: 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
3060: 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
3070: 2e 20 20 41 20 0a 70 72 65 70 61 72 65 64 20 73  .  A .prepared s
3080: 74 61 74 65 6d 65 6e 74 20 69 73 20 63 6f 6d 70  tatement is comp
3090: 69 6c 65 64 20 61 67 61 69 6e 73 74 20 61 20 73  iled against a s
30a0: 70 65 63 69 66 69 63 20 76 65 72 73 69 6f 6e 20  pecific version 
30b0: 6f 66 20 74 68 65 0a 64 61 74 61 62 61 73 65 20  of the.database 
30c0: 73 63 68 65 6d 61 2e 20 20 57 68 65 6e 65 76 65  schema.  Wheneve
30d0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
30e0: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
30f0: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 6d 75 73  he statement.mus
3100: 74 20 62 65 20 72 65 70 72 65 70 61 72 65 64 2e  t be reprepared.
3110: 20 20 57 68 65 6e 65 76 65 72 20 61 20 70 72 65    Whenever a pre
3120: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
3130: 72 75 6e 73 2c 20 69 74 20 66 69 72 73 74 20 63  runs, it first c
3140: 68 65 63 6b 73 0a 74 68 65 20 73 63 68 65 6d 61  hecks.the schema
3150: 20 63 6f 6f 6b 69 65 20 74 6f 20 6d 61 6b 65 20   cookie to make 
3160: 73 75 72 65 20 74 68 65 20 76 61 6c 75 65 20 69  sure the value i
3170: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 77 68  s the same as wh
3180: 65 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  en the statement
3190: 0a 77 61 73 20 70 72 65 70 61 72 65 64 20 61 6e  .was prepared an
31a0: 64 20 69 66 20 6e 6f 74 20 69 74 20 61 62 6f 72  d if not it abor
31b0: 74 73 20 74 6f 20 66 6f 72 63 65 20 74 68 65 20  ts to force the 
31c0: 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 62 65 20  statement to be 
31d0: 72 65 70 72 65 70 61 72 65 64 2e 3c 2f 70 3e 0a  reprepared.</p>.
31e0: 0a 3c 68 34 3e 31 2e 32 2e 39 20 53 63 68 65 6d  .<h4>1.2.9 Schem
31f0: 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 3c  a format number<
3200: 2f 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 73 63 68  /h4>..<p>The sch
3210: 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65  ema format numbe
3220: 72 20 69 73 20 61 20 34 2d 62 79 74 65 20 62 69  r is a 4-byte bi
3230: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
3240: 20 61 74 20 6f 66 66 73 65 74 20 34 34 2e 0a 54   at offset 44..T
3250: 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74  he schema format
3260: 20 6e 75 6d 62 65 72 20 69 73 20 73 69 6d 69 6c   number is simil
3270: 61 72 20 74 6f 20 74 68 65 20 66 69 6c 65 20 66  ar to the file f
3280: 6f 72 6d 61 74 20 72 65 61 64 20 61 6e 64 20 77  ormat read and w
3290: 72 69 74 65 0a 76 65 72 73 69 6f 6e 20 6e 75 6d  rite.version num
32a0: 62 65 72 73 20 61 74 20 6f 66 66 73 65 74 73 20  bers at offsets 
32b0: 31 38 20 61 6e 64 20 31 39 20 65 78 63 65 70 74  18 and 19 except
32c0: 20 74 68 61 74 20 74 68 65 20 73 63 68 65 6d 61   that the schema
32d0: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 0a 72   format number.r
32e0: 65 66 65 72 73 20 74 6f 20 74 68 65 20 68 69 67  efers to the hig
32f0: 68 2d 6c 65 76 65 6c 20 53 51 4c 20 66 6f 72 6d  h-level SQL form
3300: 61 74 74 69 6e 67 20 72 61 74 68 65 72 20 74 68  atting rather th
3310: 61 6e 20 74 68 65 20 6c 6f 77 2d 6c 65 76 65 6c  an the low-level
3320: 20 62 2d 74 72 65 65 0a 66 6f 72 6d 61 74 74 69   b-tree.formatti
3330: 6e 67 2e 20 20 46 6f 75 72 20 73 63 68 65 6d 61  ng.  Four schema
3340: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 73 20   format numbers 
3350: 61 72 65 20 63 75 72 72 65 6e 74 6c 79 20 64 65  are currently de
3360: 66 69 6e 65 64 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e  fined:</p>..<ol>
3370: 0a 3c 6c 69 20 76 61 6c 75 65 3d 31 3e 46 6f 72  .<li value=1>For
3380: 6d 61 74 20 31 20 69 73 20 75 6e 64 65 72 73 74  mat 1 is underst
3390: 6f 6f 64 20 62 79 20 61 6c 6c 20 76 65 72 73 69  ood by all versi
33a0: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62 61  ons of SQLite ba
33b0: 63 6b 20 74 6f 0a 76 65 72 73 69 6f 6e 20 33 2e  ck to.version 3.
33c0: 30 2e 30 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61  0.0.</li>.<li va
33d0: 6c 75 65 3d 32 3e 46 6f 72 6d 61 74 20 32 20 61  lue=2>Format 2 a
33e0: 64 64 73 20 74 68 65 20 61 62 69 6c 69 74 79 20  dds the ability 
33f0: 6f 66 20 72 6f 77 73 20 77 69 74 68 69 6e 20 74  of rows within t
3400: 68 65 20 73 61 6d 65 20 74 61 62 6c 65 0a 74 6f  he same table.to
3410: 20 68 61 76 65 20 61 20 76 61 72 69 6e 67 20 6e   have a varing n
3420: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
3430: 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 75  , in order to su
3440: 70 70 6f 72 74 20 74 68 65 0a 5b 41 4c 54 45 52  pport the.[ALTER
3450: 20 54 41 42 4c 45 20 7c 20 41 4c 54 45 52 20 54   TABLE | ALTER T
3460: 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43 4f 4c  ABLE ... ADD COL
3470: 55 4d 4e 5d 20 66 75 6e 63 74 69 6f 6e 61 6c 69  UMN] functionali
3480: 74 79 2e 20 20 53 75 70 70 6f 72 74 20 66 6f 72  ty.  Support for
3490: 0a 72 65 61 64 69 6e 67 20 61 6e 64 20 77 72 69  .reading and wri
34a0: 74 69 6e 67 20 66 6f 72 6d 61 74 20 32 20 77 61  ting format 2 wa
34b0: 73 20 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74  s added in SQLit
34c0: 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20  e version 3.1.3 
34d0: 0a 6f 6e 20 32 30 30 35 2d 30 32 2d 31 39 2e 3c  .on 2005-02-19.<
34e0: 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 33  /li>.<li value=3
34f0: 3e 46 6f 72 6d 61 74 20 33 20 61 64 64 73 20 74  >Format 3 adds t
3500: 68 65 20 61 62 69 6c 69 74 79 20 6f 66 20 65 78  he ability of ex
3510: 74 72 61 20 63 6f 6c 75 6d 6e 73 20 61 64 64 65  tra columns adde
3520: 64 20 62 79 0a 5b 41 4c 54 45 52 20 54 41 42 4c  d by.[ALTER TABL
3530: 45 20 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20  E | ALTER TABLE 
3540: 2e 2e 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20  ... ADD COLUMN] 
3550: 74 6f 20 68 61 76 65 20 6e 6f 6e 2d 4e 55 4c 4c  to have non-NULL
3560: 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 73 2e   default.values.
3570: 20 20 54 68 69 73 20 63 61 70 61 62 69 6c 69 74    This capabilit
3580: 79 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53  y was added in S
3590: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
35a0: 31 2e 34 20 0a 6f 6e 20 32 30 30 35 2d 30 33 2d  1.4 .on 2005-03-
35b0: 31 31 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c  11.</li>.<li val
35c0: 75 65 3d 34 3e 46 6f 72 6d 61 74 20 34 20 63 61  ue=4>Format 4 ca
35d0: 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20 72  uses SQLite to r
35e0: 65 73 70 65 63 74 20 74 68 65 20 44 45 53 43 20  espect the DESC 
35f0: 6b 65 79 77 6f 72 64 20 6f 6e 0a 69 6e 64 65 78  keyword on.index
3600: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 2e 20 20   declarations.  
3610: 28 54 68 65 20 44 45 53 43 20 6b 65 79 77 6f 72  (The DESC keywor
3620: 64 20 69 73 20 69 67 6e 6f 72 65 64 20 69 6e 20  d is ignored in 
3630: 69 6e 64 69 63 65 73 20 66 6f 72 20 0a 66 6f 72  indices for .for
3640: 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e 64 20 33  mats 1, 2, and 3
3650: 2e 29 0a 46 6f 72 6d 61 74 20 34 20 61 6c 73 6f  .).Format 4 also
3660: 20 61 64 64 73 20 74 77 6f 20 6e 65 77 20 62 6f   adds two new bo
3670: 6f 6c 65 61 6e 20 72 65 63 6f 72 64 20 74 79 70  olean record typ
3680: 65 20 76 61 6c 75 65 73 20 28 5b 73 65 72 69 61  e values ([seria
3690: 6c 20 74 79 70 65 73 5d 0a 38 20 61 6e 64 20 39  l types].8 and 9
36a0: 2e 29 20 20 53 75 70 70 6f 72 74 20 66 6f 72 20  .)  Support for 
36b0: 66 6f 72 6d 61 74 20 34 20 77 61 73 20 61 64 64  format 4 was add
36c0: 65 64 20 69 6e 20 53 51 4c 69 74 65 20 33 2e 33  ed in SQLite 3.3
36d0: 2e 30 20 6f 6e 0a 32 30 30 36 2d 30 31 2d 31 30  .0 on.2006-01-10
36e0: 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70  .</li>.</ol>..<p
36f0: 3e 4e 65 77 20 64 61 74 61 62 61 73 65 20 66 69  >New database fi
3700: 6c 65 73 20 63 72 65 61 74 65 64 20 62 79 20 53  les created by S
3710: 51 4c 69 74 65 20 75 73 65 20 66 6f 72 6d 61 74  QLite use format
3720: 20 31 20 62 79 20 64 65 66 61 75 6c 74 2c 20 73   1 by default, s
3730: 6f 0a 74 68 61 74 20 64 61 74 61 62 61 73 65 20  o.that database 
3740: 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 62 79  files created by
3750: 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20   newer versions 
3760: 6f 66 20 53 51 4c 69 74 65 20 63 61 6e 20 73 74  of SQLite can st
3770: 69 6c 6c 0a 62 65 20 72 65 61 64 20 62 79 20 6f  ill.be read by o
3780: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
3790: 20 53 51 4c 69 74 65 2e 0a 54 68 65 20 5b 6c 65   SQLite..The [le
37a0: 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74  gacy_file_format
37b0: 20 70 72 61 67 6d 61 5d 20 63 61 6e 20 62 65 20   pragma] can be 
37c0: 75 73 65 64 20 74 6f 20 63 61 75 73 65 20 53 51  used to cause SQ
37d0: 4c 69 74 65 0a 74 6f 20 63 72 65 61 74 65 20 6e  Lite.to create n
37e0: 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ew database file
37f0: 73 20 75 73 69 6e 67 20 66 6f 72 6d 61 74 20 34  s using format 4
3800: 2e 20 20 46 75 74 75 72 65 20 76 65 72 73 69 6f  .  Future versio
3810: 6e 73 20 6f 66 20 0a 53 51 4c 69 74 65 20 6d 61  ns of .SQLite ma
3820: 79 20 62 65 67 69 6e 20 74 6f 20 63 72 65 61 74  y begin to creat
3830: 65 20 66 69 6c 65 73 20 75 73 69 6e 67 20 66 6f  e files using fo
3840: 72 6d 61 74 20 34 20 62 79 20 64 65 66 61 75 6c  rmat 4 by defaul
3850: 74 2e 3c 2f 70 3e 0a 0a 3c 68 34 3e 31 2e 32 2e  t.</p>..<h4>1.2.
3860: 31 30 20 53 75 67 67 65 73 74 65 64 20 63 61 63  10 Suggested cac
3870: 68 65 20 73 69 7a 65 3c 2f 68 34 3e 0a 0a 3c 70  he size</h4>..<p
3880: 3e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67 2d  >The 4-byte big-
3890: 65 6e 64 69 61 6e 20 73 69 67 6e 65 64 20 69 6e  endian signed in
38a0: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
38b0: 34 38 20 69 73 20 74 68 65 20 73 75 67 67 65 73  48 is the sugges
38c0: 74 0a 63 61 63 68 65 20 73 69 7a 65 20 69 6e 20  t.cache size in 
38d0: 70 61 67 65 73 20 66 6f 72 20 74 68 65 20 64 61  pages for the da
38e0: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
38f0: 65 20 76 61 6c 75 65 20 69 73 20 61 20 73 75 67  e value is a sug
3900: 67 65 73 74 69 6f 6e 0a 6f 6e 6c 79 20 61 6e 64  gestion.only and
3910: 20 53 51 4c 69 74 65 20 69 73 20 75 6e 64 65 72   SQLite is under
3920: 20 6e 6f 20 6f 62 6c 69 67 61 74 69 6f 6e 20 74   no obligation t
3930: 6f 20 68 6f 6e 6f 72 20 69 74 2e 20 20 54 68 65  o honor it.  The
3940: 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 0a   absolute value.
3950: 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  of the integer i
3960: 73 20 75 73 65 64 20 61 73 20 74 68 65 20 73 75  s used as the su
3970: 67 67 65 73 74 65 64 20 73 69 7a 65 2e 20 20 54  ggested size.  T
3980: 68 65 20 73 75 67 67 65 73 74 65 64 20 63 61 63  he suggested cac
3990: 68 65 20 73 69 7a 65 0a 63 61 6e 20 62 65 20 73  he size.can be s
39a0: 65 74 20 75 73 69 6e 67 20 74 68 65 20 5b 64 65  et using the [de
39b0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
39c0: 20 70 72 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c   pragma].</p>..<
39d0: 68 34 3e 31 2e 32 2e 31 31 20 49 6e 63 72 65 6d  h4>1.2.11 Increm
39e0: 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 73 65 74  ental vacuum set
39f0: 74 69 6e 67 73 3c 2f 68 34 3e 0a 0a 3c 70 3e 54  tings</h4>..<p>T
3a00: 68 65 20 74 77 6f 20 34 2d 62 79 74 65 20 62 69  he two 4-byte bi
3a10: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
3a20: 73 20 61 74 20 6f 66 66 73 65 74 73 20 35 32 20  s at offsets 52 
3a30: 61 6e 64 20 36 34 20 61 72 65 20 75 73 65 64 0a  and 64 are used.
3a40: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 5b 61  to manage the [a
3a50: 75 74 6f 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20  uto_vacuum] and 
3a60: 5b 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63  [incremental_vac
3a70: 75 75 6d 5d 20 6d 6f 64 65 73 2e 20 20 49 66 0a  uum] modes.  If.
3a80: 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  the integer at o
3a90: 66 66 73 65 74 20 35 32 20 69 73 20 7a 65 72 6f  ffset 52 is zero
3aa0: 20 74 68 65 6e 20 70 6f 69 6e 74 65 72 2d 6d 61   then pointer-ma
3ab0: 70 20 28 70 74 72 6d 61 70 29 20 70 61 67 65 73  p (ptrmap) pages
3ac0: 20 61 72 65 0a 6f 6d 69 74 74 65 64 20 66 72 6f   are.omitted fro
3ad0: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
3ae0: 69 6c 65 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ile and neither 
3af0: 61 75 74 6f 5f 76 61 63 75 75 6d 20 6e 6f 72 0a  auto_vacuum nor.
3b00: 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75  incremental_vacu
3b10: 75 6d 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  um are supported
3b20: 2e 20 20 49 66 20 74 68 65 20 69 6e 74 65 67 65  .  If the intege
3b30: 72 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69  r at offset 52 i
3b40: 73 0a 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s.non-zero then 
3b50: 69 74 20 69 73 20 74 68 65 20 70 61 67 65 20 6e  it is the page n
3b60: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6c 61 72  umber of the lar
3b70: 67 65 73 74 20 72 6f 6f 74 20 70 61 67 65 20 69  gest root page i
3b80: 6e 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  n the.database f
3b90: 69 6c 65 2c 20 74 68 65 20 64 61 74 61 62 61 73  ile, the databas
3ba0: 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 20 70  e file contain p
3bb0: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6e 64  trmap pages, and
3bc0: 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62   the.mode must b
3bd0: 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61  e either auto_va
3be0: 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e  cuum or incremen
3bf0: 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 49 6e 20  tal_vacuum.  In 
3c00: 74 68 69 73 20 6c 61 74 74 65 72 0a 63 61 73 65  this latter.case
3c10: 2c 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74  , the integer at
3c20: 20 6f 66 66 73 65 74 20 36 34 20 69 73 20 74 72   offset 64 is tr
3c30: 75 65 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e 74  ue for increment
3c40: 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66 61  al_vacuum and.fa
3c50: 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f 76 61 63  lse for auto_vac
3c60: 75 75 6d 2e 20 20 49 66 20 74 68 65 20 69 6e 74  uum.  If the int
3c70: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35  eger at offset 5
3c80: 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e 0a 74  2 is zero then.t
3c90: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
3ca0: 66 73 65 74 20 36 34 20 6d 75 73 74 20 61 6c 73  fset 64 must als
3cb0: 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a  o be zero.</p>..
3cc0: 3c 68 34 3e 31 2e 32 2e 31 32 20 54 65 78 74 20  <h4>1.2.12 Text 
3cd0: 65 6e 63 6f 64 69 6e 67 3c 2f 68 34 3e 0a 0a 3c  encoding</h4>..<
3ce0: 70 3e 54 68 65 20 34 2d 62 79 74 65 20 62 69 67  p>The 4-byte big
3cf0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
3d00: 61 74 20 6f 66 66 73 65 74 20 35 36 20 64 65 74  at offset 56 det
3d10: 65 72 6d 69 6e 65 73 20 74 68 65 20 65 6e 63 6f  ermines the enco
3d20: 64 69 6e 67 0a 75 73 65 64 20 66 6f 72 20 61 6c  ding.used for al
3d30: 6c 20 74 65 78 74 20 73 74 72 69 6e 67 73 20 73  l text strings s
3d40: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
3d50: 61 62 61 73 65 2e 20 20 41 20 76 61 6c 75 65 20  abase.  A value 
3d60: 6f 66 20 31 20 6d 65 61 6e 73 0a 55 54 46 2d 38  of 1 means.UTF-8
3d70: 2e 20 20 41 20 76 61 6c 75 65 20 6f 66 20 32 20  .  A value of 2 
3d80: 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e 20  means UTF-16le. 
3d90: 20 41 20 76 61 6c 75 65 20 6f 66 20 33 20 6d 65   A value of 3 me
3da0: 61 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a 4e 6f  ans UTF-16be..No
3db0: 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61 72   other values ar
3dc0: 65 20 61 6c 6c 6f 77 65 64 2e 3c 2f 70 3e 0a 0a  e allowed.</p>..
3dd0: 3c 68 34 3e 31 2e 32 2e 31 33 20 55 73 65 72 20  <h4>1.2.13 User 
3de0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 3c 2f  version number</
3df0: 68 34 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79  h4>..<p>The 4-by
3e00: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
3e10: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
3e20: 36 30 20 69 73 20 74 68 65 20 75 73 65 72 20 76  60 is the user v
3e30: 65 72 73 69 6f 6e 20 77 68 69 63 68 0a 69 73 20  ersion which.is 
3e40: 73 65 74 20 61 6e 64 20 71 75 65 72 69 65 64 20  set and queried 
3e50: 62 79 20 74 68 65 20 5b 75 73 65 72 5f 76 65 72  by the [user_ver
3e60: 73 69 6f 6e 20 70 72 61 67 6d 61 5d 2e 20 20 54  sion pragma].  T
3e70: 68 65 20 75 73 65 72 20 76 65 72 73 69 6f 6e 20  he user version 
3e80: 69 73 0a 6e 6f 74 20 75 73 65 64 20 62 79 20 53  is.not used by S
3e90: 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c  QLite.</p>..<tcl
3ea0: 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 6c  >hd_fragment val
3eb0: 69 64 66 6f 72 20 7b 76 65 72 73 69 6f 6e 2d 76  idfor {version-v
3ec0: 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 7d  alid-for number}
3ed0: 3c 2f 74 63 6c 3e 0a 3c 68 34 3e 31 2e 32 2e 31  </tcl>.<h4>1.2.1
3ee0: 34 20 57 72 69 74 65 20 6c 69 62 72 61 72 79 20  4 Write library 
3ef0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 61  version number a
3f00: 6e 64 20 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64  nd version-valid
3f10: 2d 66 6f 72 20 6e 75 6d 62 65 72 3c 2f 68 34 3e  -for number</h4>
3f20: 0a 0a 3c 70 3e 54 68 65 20 34 2d 62 79 74 65 20  ..<p>The 4-byte 
3f30: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
3f40: 65 72 20 61 74 20 6f 66 66 73 65 74 20 39 36 20  er at offset 96 
3f50: 73 74 6f 72 65 73 20 74 68 65 20 0a 5b 53 51 4c  stores the .[SQL
3f60: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
3f70: 45 52 5d 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ER] value.  The 
3f80: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 6e  4-byte big-endin
3f90: 67 20 69 6e 74 65 67 65 72 20 61 74 0a 6f 66 66  g integer at.off
3fa0: 73 65 74 20 39 32 20 69 73 20 74 68 65 20 76 61  set 92 is the va
3fb0: 6c 75 65 20 6f 66 20 74 68 65 20 5b 63 68 61 6e  lue of the [chan
3fc0: 67 65 20 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e  ge counter] when
3fd0: 20 74 68 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d   the version num
3fe0: 62 65 72 0a 77 61 73 20 73 74 6f 72 65 64 2e 20  ber.was stored. 
3ff0: 20 54 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   The integer at 
4000: 6f 66 66 73 65 74 20 39 32 20 69 6e 64 69 63 61  offset 92 indica
4010: 74 65 73 20 77 68 69 63 68 20 74 72 61 6e 73 61  tes which transa
4020: 63 74 69 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f  ction.the versio
4030: 6e 20 6e 75 6d 62 65 72 20 69 73 20 76 61 6c 69  n number is vali
4040: 64 20 66 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d  d for and is som
4050: 65 74 69 6d 65 73 20 63 61 6c 6c 65 20 74 68 65  etimes calle the
4060: 20 22 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d   "version-valid-
4070: 66 6f 72 22 0a 69 6e 74 65 67 65 72 2e 0a 0a 3c  for".integer...<
4080: 68 34 3e 31 2e 32 2e 31 35 20 48 65 61 64 65 72  h4>1.2.15 Header
4090: 20 73 70 61 63 65 20 72 65 73 65 72 76 65 64 20   space reserved 
40a0: 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e 3c 2f 68  for expansion</h
40b0: 34 3e 0a 0a 3c 70 3e 41 6c 6c 20 6f 74 68 65 72  4>..<p>All other
40c0: 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 64 61   bytes of the da
40d0: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
40e0: 65 72 20 61 72 65 20 72 65 73 65 72 76 65 64 20  er are reserved 
40f0: 66 6f 72 0a 66 75 74 75 72 65 20 65 78 70 61 6e  for.future expan
4100: 73 69 6f 6e 20 61 6e 64 20 6d 75 73 74 20 62 65  sion and must be
4110: 20 73 65 74 20 74 6f 20 7a 65 72 6f 2e 3c 2f 70   set to zero.</p
4120: 3e 0a 0a 3c 68 33 3e 31 2e 33 20 54 68 65 20 4c  >..<h3>1.3 The L
4130: 6f 63 6b 2d 42 79 74 65 20 50 61 67 65 3c 2f 68  ock-Byte Page</h
4140: 33 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63 6b 2d  3>..<p>The lock-
4150: 62 79 74 65 20 70 61 67 65 20 69 73 20 74 68 65  byte page is the
4160: 20 73 69 6e 67 6c 65 20 70 61 67 65 20 6f 66 20   single page of 
4170: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
4180: 65 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e.that contains 
4190: 74 68 65 20 62 79 74 65 73 20 61 74 20 6f 66 66  the bytes at off
41a0: 73 65 74 73 20 62 65 74 77 65 65 6e 20 31 30 37  sets between 107
41b0: 33 37 34 31 38 32 34 20 61 6e 64 20 31 30 37 33  3741824 and 1073
41c0: 37 34 32 33 33 35 2c 0a 69 6e 63 6c 75 73 69 76  742335,.inclusiv
41d0: 65 2e 20 20 41 20 64 61 74 61 62 61 73 65 20 66  e.  A database f
41e0: 69 6c 65 20 74 68 61 74 20 69 73 20 6c 65 73 73  ile that is less
41f0: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
4200: 6f 20 31 30 37 33 37 34 31 38 32 34 20 62 79 74  o 1073741824 byt
4210: 65 73 20 0a 69 6e 20 73 69 7a 65 20 63 6f 6e 74  es .in size cont
4220: 61 69 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62 79 74  ains no lock-byt
4230: 65 20 70 61 67 65 2e 20 20 41 20 64 61 74 61 62  e page.  A datab
4240: 61 73 65 20 66 69 6c 65 20 6c 61 72 67 65 72 20  ase file larger 
4250: 74 68 61 6e 0a 31 30 37 33 37 34 31 38 32 34 20  than.1073741824 
4260: 63 6f 6e 74 61 69 6e 73 20 65 78 61 63 74 6c 79  contains exactly
4270: 20 6f 6e 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70   one lock-byte p
4280: 61 67 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  age..</p>..<p>Th
4290: 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65  e lock-byte page
42a0: 20 69 73 20 73 65 74 20 61 73 69 64 65 20 66 6f   is set aside fo
42b0: 72 20 75 73 65 20 62 79 20 74 68 65 20 6f 70 65  r use by the ope
42c0: 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20 73 70  rating-system sp
42d0: 65 63 69 66 69 63 0a 56 46 53 20 69 6d 70 6c 65  ecific.VFS imple
42e0: 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 69 6d 70  mentation in imp
42f0: 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 20 64 61  lementing the da
4300: 74 61 62 61 73 65 20 66 69 6c 65 20 6c 6f 63 6b  tabase file lock
4310: 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 2e 0a  ing primitives..
4320: 53 51 4c 69 74 65 20 77 69 6c 6c 20 6e 6f 74 20  SQLite will not 
4330: 75 73 65 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74  use the lock-byt
4340: 65 20 70 61 67 65 3b 20 69 74 20 77 69 6c 6c 20  e page; it will 
4350: 6e 65 76 65 72 20 62 65 20 72 65 61 64 20 6f 72  never be read or
4360: 20 77 72 69 74 74 65 6e 0a 62 79 20 74 68 65 20   written.by the 
4370: 53 51 4c 69 74 65 20 63 6f 72 65 2c 20 74 68 6f  SQLite core, tho
4380: 75 67 68 20 6f 70 65 72 61 74 69 6e 67 2d 73 79  ugh operating-sy
4390: 73 74 65 6d 20 73 70 65 63 69 66 69 63 20 56 46  stem specific VF
43a0: 53 20 69 6d 70 6c 65 6d 65 6e 74 69 6f 6e 73 20  S implementions 
43b0: 6d 61 79 0a 63 68 6f 6f 73 65 20 74 6f 20 72 65  may.choose to re
43c0: 61 64 20 6f 72 20 77 72 69 74 65 20 62 79 74 65  ad or write byte
43d0: 73 20 6f 6e 20 74 68 65 20 6c 6f 63 6b 2d 62 79  s on the lock-by
43e0: 74 65 20 70 61 67 65 20 61 63 63 6f 72 64 69 6e  te page accordin
43f0: 67 20 74 6f 20 74 68 65 20 0a 6e 65 65 64 73 20  g to the .needs 
4400: 61 6e 64 20 70 72 6f 63 6c 61 76 69 74 69 65 73  and proclavities
4410: 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69   of the underlyi
4420: 6e 67 20 73 79 73 74 65 6d 2e 20 20 54 68 65 20  ng system.  The 
4430: 75 6e 69 78 20 61 6e 64 20 77 69 6e 33 32 0a 56  unix and win32.V
4440: 46 53 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  FS implementatio
4450: 6e 73 20 74 68 61 74 20 63 6f 6d 65 20 62 75 69  ns that come bui
4460: 6c 74 20 69 6e 74 6f 20 53 51 4c 69 74 65 20 64  lt into SQLite d
4470: 6f 20 6e 6f 74 20 77 72 69 74 65 20 74 6f 20 74  o not write to t
4480: 68 65 0a 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67  he.lock-byte pag
4490: 65 2c 20 62 75 74 20 77 65 20 61 72 65 20 61 77  e, but we are aw
44a0: 61 72 65 20 6f 66 20 74 68 69 72 64 2d 70 61 72  are of third-par
44b0: 74 79 20 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74  ty VFS implement
44c0: 61 74 69 6f 6e 73 20 66 6f 72 0a 6f 74 68 65 72  ations for.other
44d0: 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65   operating syste
44e0: 6d 73 20 74 68 61 74 20 64 6f 20 73 6f 6d 65 74  ms that do somet
44f0: 69 6d 65 73 20 77 72 69 74 65 20 74 6f 20 74 68  imes write to th
4500: 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65  e lock-byte page
4510: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 34 20 54  .</p>..<h3>1.4 T
4520: 68 65 20 46 72 65 65 6c 69 73 74 3c 2f 68 33 3e  he Freelist</h3>
4530: 0a 0a 3c 70 3e 41 20 64 61 74 61 62 61 73 65 20  ..<p>A database 
4540: 66 69 6c 65 20 6d 69 67 68 74 20 63 6f 6e 74 61  file might conta
4550: 69 6e 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 70  in one or more p
4560: 61 67 65 73 20 74 68 61 74 20 61 72 65 20 6e 6f  ages that are no
4570: 74 20 69 6e 0a 61 63 74 69 76 65 20 75 73 65 2e  t in.active use.
4580: 20 20 55 6e 75 73 65 64 20 70 61 67 65 73 20 63    Unused pages c
4590: 61 6e 20 63 6f 6d 65 20 61 62 6f 75 74 2c 20 66  an come about, f
45a0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 77 68 65 6e  or example, when
45b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 69 73 20   information.is 
45c0: 64 65 6c 65 74 65 64 20 66 72 6f 6d 20 74 68 65  deleted from the
45d0: 20 64 61 74 61 62 61 73 65 2e 20 20 55 6e 75 73   database.  Unus
45e0: 65 64 20 70 61 67 65 73 20 61 72 65 20 73 74 6f  ed pages are sto
45f0: 72 65 64 20 6f 6e 20 74 68 65 20 66 72 65 65 6c  red on the freel
4600: 69 73 74 0a 61 6e 64 20 61 72 65 20 72 65 75 73  ist.and are reus
4610: 65 64 20 77 68 65 6e 20 61 64 64 69 74 69 6f 6e  ed when addition
4620: 61 6c 20 70 61 67 65 73 20 61 72 65 20 72 65 71  al pages are req
4630: 75 69 72 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  uired.</p>..<p>T
4640: 68 65 20 66 72 65 65 6c 69 73 74 20 69 73 20 6f  he freelist is o
4650: 72 67 61 6e 69 7a 65 64 20 61 73 20 61 20 6c 69  rganized as a li
4660: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 66 72 65  nked list of fre
4670: 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65  elist trunk page
4680: 73 0a 77 69 74 68 20 65 61 63 68 20 74 72 75 6e  s.with each trun
4690: 6b 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 69  k pages containi
46a0: 6e 67 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ng page numbers 
46b0: 66 6f 72 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  for zero or more
46c0: 20 66 72 65 65 6c 69 73 74 0a 6c 65 61 66 20 70   freelist.leaf p
46d0: 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20  ages.</p>..<p>A 
46e0: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70  freelist trunk p
46f0: 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  age consists of 
4700: 61 6e 20 61 72 72 61 79 20 6f 66 20 34 2d 62 79  an array of 4-by
4710: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
4720: 74 65 67 65 72 73 2e 0a 54 68 65 20 73 69 7a 65  tegers..The size
4730: 20 6f 66 20 74 68 65 20 61 72 72 61 79 20 69 73   of the array is
4740: 20 61 73 20 6d 61 6e 79 20 69 6e 74 65 67 65 72   as many integer
4750: 73 20 61 73 20 77 69 6c 6c 20 66 69 74 20 69 6e  s as will fit in
4760: 20 74 68 65 20 75 73 61 62 6c 65 20 73 70 61 63   the usable spac
4770: 65 0a 6f 66 20 61 20 70 61 67 65 2e 20 20 54 68  e.of a page.  Th
4780: 65 20 6d 69 6e 69 6d 75 6d 20 75 73 61 62 6c 65  e minimum usable
4790: 20 73 70 61 63 65 20 69 73 20 34 38 30 20 62 79   space is 480 by
47a0: 74 65 73 20 73 6f 20 74 68 65 20 61 72 72 61 79  tes so the array
47b0: 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 62 65 20   will always.be 
47c0: 61 74 20 6c 65 61 73 74 20 31 32 30 20 65 6e 74  at least 120 ent
47d0: 72 69 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 20  ries in length. 
47e0: 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65 67   The first integ
47f0: 65 72 20 69 6e 20 74 68 65 20 61 72 72 61 79 20  er in the array 
4800: 0a 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d  .is the page num
4810: 62 65 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20  ber of the next 
4820: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70  freelist trunk p
4830: 61 67 65 20 69 6e 20 74 68 65 20 6c 69 73 74 20  age in the list 
4840: 6f 72 20 7a 65 72 6f 20 0a 69 66 20 74 68 69 73  or zero .if this
4850: 20 69 73 20 74 68 65 20 6c 61 73 74 20 66 72 65   is the last fre
4860: 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65  elist trunk page
4870: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 69 6e  .  The second in
4880: 74 65 67 65 72 20 69 6e 20 74 68 65 20 61 72 72  teger in the arr
4890: 61 79 0a 69 73 20 74 68 65 20 6e 75 6d 62 65 72  ay.is the number
48a0: 20 6f 66 20 6c 65 61 66 20 70 61 67 65 20 70 6f   of leaf page po
48b0: 69 6e 74 65 72 73 20 74 6f 20 66 6f 6c 6c 6f 77  inters to follow
48c0: 2e 20 20 43 61 6c 6c 20 74 68 65 20 73 65 63 6f  .  Call the seco
48d0: 6e 64 20 69 6e 74 65 67 65 72 20 4c 2e 0a 49 66  nd integer L..If
48e0: 20 4c 20 69 73 20 67 72 65 61 74 65 72 20 74 68   L is greater th
48f0: 61 6e 20 7a 65 72 6f 20 74 68 65 6e 20 69 6e 74  an zero then int
4900: 65 67 65 72 73 20 77 69 74 68 20 61 72 72 61 79  egers with array
4910: 20 69 6e 64 65 78 65 73 20 62 65 74 77 65 65 6e   indexes between
4920: 20 32 20 61 6e 64 0a 4c 2b 31 20 69 6e 63 6c 75   2 and.L+1 inclu
4930: 73 69 76 65 20 63 6f 6e 74 61 69 6e 20 70 61 67  sive contain pag
4940: 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 66 72  e numbers for fr
4950: 65 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65  eelist leaf page
4960: 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46 72 65 65 6c  s.</p>..<p>Freel
4970: 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20 63  ist leaf pages c
4980: 6f 6e 74 61 69 6e 20 6e 6f 20 69 6e 66 6f 72 6d  ontain no inform
4990: 61 74 69 6f 6e 2e 20 20 53 51 4c 69 74 65 20 61  ation.  SQLite a
49a0: 76 6f 69 64 20 72 65 61 64 69 6e 67 20 6f 72 0a  void reading or.
49b0: 77 72 69 74 69 6e 67 20 66 72 65 65 6c 69 73 74  writing freelist
49c0: 20 6c 65 61 66 20 70 61 67 65 73 20 69 6e 20 6f   leaf pages in o
49d0: 72 64 65 72 20 74 6f 20 72 65 64 75 63 65 20 64  rder to reduce d
49e0: 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70  isk I/O.</p>..<p
49f0: 3e 41 20 62 75 67 20 69 6e 20 53 51 4c 69 74 65  >A bug in SQLite
4a00: 20 76 65 72 73 69 6f 6e 73 20 70 72 69 6f 72 20   versions prior 
4a10: 74 6f 20 33 2e 36 2e 30 20 63 61 75 73 65 64 20  to 3.6.0 caused 
4a20: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
4a30: 62 65 0a 72 65 70 6f 72 74 65 64 20 61 73 20 63  be.reported as c
4a40: 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6c 61  orrupt if any la
4a50: 73 74 20 36 20 65 6e 74 72 69 65 73 20 69 6e 20  st 6 entries in 
4a60: 74 68 65 20 66 72 65 65 6c 69 73 74 20 74 72 75  the freelist tru
4a70: 6e 6b 20 70 61 67 65 20 0a 61 72 72 61 79 20 63  nk page .array c
4a80: 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e 2d 7a 65 72  ontained non-zer
4a90: 6f 20 76 61 6c 75 65 73 2e 20 20 4e 65 77 65 72  o values.  Newer
4aa0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
4ab0: 69 74 65 20 64 6f 20 6e 6f 74 20 68 61 76 65 0a  ite do not have.
4ac0: 74 68 69 73 20 70 72 6f 62 6c 65 6d 2e 20 20 48  this problem.  H
4ad0: 6f 77 65 76 65 72 2c 20 6e 65 77 65 72 20 76 65  owever, newer ve
4ae0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
4af0: 20 73 74 69 6c 6c 20 61 76 6f 69 64 20 75 73 69   still avoid usi
4b00: 6e 67 20 74 68 65 20 0a 6c 61 73 74 20 73 69 78  ng the .last six
4b10: 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
4b20: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70  freelist trunk p
4b30: 61 67 65 20 61 72 72 61 79 20 69 6e 20 6f 72 64  age array in ord
4b40: 65 72 20 74 68 61 74 20 64 61 74 61 62 61 73 65  er that database
4b50: 0a 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 62  .files created b
4b60: 79 20 6e 65 77 65 72 20 76 65 72 73 69 6f 6e 73  y newer versions
4b70: 20 6f 66 20 53 51 4c 69 74 65 20 63 61 6e 20 62   of SQLite can b
4b80: 65 20 72 65 61 64 20 62 79 20 6f 6c 64 65 72 20  e read by older 
4b90: 76 65 72 73 69 6f 6e 73 0a 6f 66 20 53 51 4c 69  versions.of SQLi
4ba0: 74 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  te.</p>..<p>The 
4bb0: 6e 75 6d 62 65 72 20 6f 66 20 66 72 65 65 6c 69  number of freeli
4bc0: 73 74 20 70 61 67 65 73 20 69 73 20 73 74 6f 72  st pages is stor
4bd0: 65 64 20 61 73 20 61 20 34 2d 62 79 74 65 20 62  ed as a 4-byte b
4be0: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
4bf0: 72 0a 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  r.in the databas
4c00: 65 20 68 65 61 64 65 72 20 61 74 20 61 6e 20 6f  e header at an o
4c10: 66 66 73 65 74 20 6f 66 20 33 36 20 66 72 6f 6d  ffset of 36 from
4c20: 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
4c30: 66 20 74 68 65 20 66 69 6c 65 2e 0a 54 68 65 20  f the file..The 
4c40: 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20  database header 
4c50: 61 6c 73 6f 20 73 74 6f 72 65 73 20 74 68 65 20  also stores the 
4c60: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
4c70: 68 65 20 66 69 72 73 74 20 66 72 65 65 6c 69 73  he first freelis
4c80: 74 20 74 72 75 6e 6b 0a 70 61 67 65 20 61 73 20  t trunk.page as 
4c90: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
4ca0: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 61  ian integer at a
4cb0: 6e 20 6f 66 66 73 65 74 20 6f 66 20 33 32 20 66  n offset of 32 f
4cc0: 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
4cd0: 67 0a 6f 66 20 74 68 65 20 66 69 6c 65 2e 3c 2f  g.of the file.</
4ce0: 70 3e 0a 0a 3c 68 33 3e 31 2e 35 20 42 2d 74 72  p>..<h3>1.5 B-tr
4cf0: 65 65 20 50 61 67 65 73 3c 2f 68 33 3e 0a 0a 3c  ee Pages</h3>..<
4d00: 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  p>A b-tree page 
4d10: 69 73 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  is either an int
4d20: 65 72 69 6f 72 20 70 61 67 65 20 6f 72 20 61 20  erior page or a 
4d30: 6c 65 61 66 20 70 61 67 65 2e 0a 41 20 6c 65 61  leaf page..A lea
4d40: 66 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20  f page contains 
4d50: 6b 65 79 73 20 61 6e 64 20 69 6e 20 74 68 65 20  keys and in the 
4d60: 63 61 73 65 20 6f 66 20 61 20 74 61 62 6c 65 20  case of a table 
4d70: 62 2d 74 72 65 65 20 65 61 63 68 0a 6b 65 79 20  b-tree each.key 
4d80: 68 61 73 20 61 73 73 6f 63 69 61 74 65 64 20 63  has associated c
4d90: 6f 6e 74 65 6e 74 2e 20 20 41 6e 20 69 6e 74 65  ontent.  An inte
4da0: 72 69 6f 72 20 70 61 67 65 20 63 6f 6e 74 61 69  rior page contai
4db0: 6e 73 0a 4b 20 6b 65 79 73 20 77 69 74 68 6f 75  ns.K keys withou
4dc0: 74 20 63 6f 6e 74 65 6e 74 20 62 75 74 20 77 69  t content but wi
4dd0: 74 68 20 4b 2b 31 20 70 6f 69 6e 74 65 72 73 20  th K+1 pointers 
4de0: 74 6f 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20  to child b-tree 
4df0: 70 61 67 65 73 2e 0a 41 20 22 70 6f 69 6e 74 65  pages..A "pointe
4e00: 72 22 20 69 6e 20 61 6e 20 69 6e 74 65 72 69 6f  r" in an interio
4e10: 72 20 62 2d 74 72 65 65 20 70 61 67 65 20 69 73  r b-tree page is
4e20: 20 6a 75 73 74 20 74 68 65 20 33 31 2d 62 69 74   just the 31-bit
4e30: 20 69 6e 74 65 67 65 72 0a 70 61 67 65 20 6e 75   integer.page nu
4e40: 6d 62 65 72 20 6f 66 20 74 68 65 20 63 68 69 6c  mber of the chil
4e50: 64 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 0a 3c 70  d page.</p>...<p
4e60: 3e 44 65 66 69 6e 65 20 74 68 65 20 64 65 70 74  >Define the dept
4e70: 68 0a 6f 66 20 61 20 6c 65 61 66 20 62 2d 74 72  h.of a leaf b-tr
4e80: 65 65 20 74 6f 20 62 65 20 31 20 61 6e 64 20 74  ee to be 1 and t
4e90: 68 61 74 20 74 68 65 20 64 65 70 74 68 20 6f 66  hat the depth of
4ea0: 20 61 6e 79 20 69 6e 74 65 72 69 6f 72 20 62 2d   any interior b-
4eb0: 74 72 65 65 20 74 6f 20 62 65 20 6f 6e 65 0a 6d  tree to be one.m
4ec0: 6f 72 65 20 74 68 61 6e 20 74 68 65 20 6d 61 78  ore than the max
4ed0: 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 61 6e  imum depth of an
4ee0: 79 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65  y of its childre
4ef0: 6e 2e 20 20 49 6e 20 61 20 77 65 6c 6c 2d 66 6f  n.  In a well-fo
4f00: 72 6d 65 64 0a 64 61 74 61 62 61 73 65 2c 20 61  rmed.database, a
4f10: 6c 6c 20 63 68 69 6c 64 72 65 6e 20 6f 66 20 61  ll children of a
4f20: 6e 79 20 6f 6e 65 20 69 6e 74 65 72 69 6f 72 20  ny one interior 
4f30: 62 2d 74 72 65 65 20 68 61 76 65 20 74 68 65 20  b-tree have the 
4f40: 73 61 6d 65 20 64 65 70 74 68 2e 3c 2f 70 3e 0a  same depth.</p>.
4f50: 0a 3c 70 3e 49 6e 20 61 6e 20 69 6e 74 65 72 69  .<p>In an interi
4f60: 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20  or b-tree page, 
4f70: 74 68 65 20 70 6f 69 6e 74 65 72 73 20 61 6e 64  the pointers and
4f80: 20 6b 65 79 73 20 6c 6f 67 69 63 61 6c 6c 79 20   keys logically 
4f90: 61 6c 74 65 72 6e 61 74 65 20 0a 77 69 74 68 20  alternate .with 
4fa0: 61 20 70 6f 69 6e 74 65 72 20 6f 6e 20 62 6f 74  a pointer on bot
4fb0: 68 20 65 6e 64 73 2e 20 28 54 68 65 20 70 72 65  h ends. (The pre
4fc0: 76 69 6f 75 73 20 73 65 6e 74 65 6e 63 65 20 69  vious sentence i
4fd0: 73 20 74 6f 20 62 65 20 75 6e 64 65 72 73 74 6f  s to be understo
4fe0: 6f 64 0a 63 6f 6e 63 65 70 74 75 61 6c 6c 79 20  od.conceptually 
4ff0: 2d 20 74 68 65 20 61 63 74 75 61 6c 20 6c 61 79  - the actual lay
5000: 6f 75 74 20 6f 66 20 74 68 65 20 6b 65 79 73 20  out of the keys 
5010: 61 6e 64 0a 70 6f 69 6e 74 65 72 73 20 77 69 74  and.pointers wit
5020: 68 69 6e 20 74 68 65 20 70 61 67 65 20 69 73 20  hin the page is 
5030: 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64  more complicated
5040: 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 64 65 73   and will be des
5050: 63 72 69 62 65 64 20 69 6e 0a 74 68 65 20 73 65  cribed in.the se
5060: 71 75 65 6c 2e 29 20 20 41 6c 6c 20 6b 65 79 73  quel.)  All keys
5070: 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65   within the same
5080: 20 70 61 67 65 20 61 72 65 20 75 6e 69 71 75 65   page are unique
5090: 20 61 6e 64 20 61 72 65 20 6f 72 67 61 6e 69 7a   and are organiz
50a0: 65 64 0a 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  ed.in ascending 
50b0: 6f 72 64 65 72 20 66 72 6f 6d 20 6c 65 66 74 20  order from left 
50c0: 74 6f 20 72 69 67 68 74 2e 20 20 46 6f 72 20 61  to right.  For a
50d0: 6e 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e 74 65  ny key X, pointe
50e0: 72 73 20 74 6f 20 74 68 65 20 6c 65 66 74 0a 6f  rs to the left.o
50f0: 66 20 61 20 58 20 72 65 66 65 72 20 74 6f 20 62  f a X refer to b
5100: 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e 20 77  -tree pages on w
5110: 68 69 63 68 20 61 6c 6c 73 20 6b 65 79 73 20 61  hich alls keys a
5120: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  re less than or 
5130: 65 71 75 61 6c 20 74 6f 20 58 2e 0a 50 6f 69 6e  equal to X..Poin
5140: 74 65 72 73 20 74 6f 20 74 68 65 20 72 69 67 68  ters to the righ
5150: 74 20 6f 66 20 58 20 72 65 66 65 72 20 74 6f 20  t of X refer to 
5160: 70 61 67 65 73 20 77 68 65 72 65 20 61 6c 6c 20  pages where all 
5170: 6b 65 79 73 20 61 72 65 20 67 72 65 61 74 65 72  keys are greater
5180: 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a 0a 3c 70   than X.</p>..<p
5190: 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e 74 65 72  >Within an inter
51a0: 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67 65 2c  ior b-tree page,
51b0: 20 65 61 63 68 20 6b 65 79 20 61 6e 64 20 74 68   each key and th
51c0: 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74 73  e pointer to its
51d0: 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65 66 74 20  .immediate left 
51e0: 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74  are combined int
51f0: 6f 20 61 20 73 74 72 75 63 74 75 72 65 20 63 61  o a structure ca
5200: 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22 2e 20 20  lled a "cell".  
5210: 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73 74 20 70  The.right-most p
5220: 6f 69 6e 74 65 72 20 69 73 20 68 65 6c 64 20 73  ointer is held s
5230: 65 70 61 72 61 74 65 6c 79 2e 20 20 41 20 6c 65  eparately.  A le
5240: 61 66 20 62 2d 74 72 65 65 20 70 61 67 65 20 68  af b-tree page h
5250: 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72 73 2c 20  as no.pointers, 
5260: 62 75 74 20 69 74 20 73 74 69 6c 6c 20 75 73 65  but it still use
5270: 73 20 74 68 65 20 63 65 6c 6c 20 73 74 72 75 63  s the cell struc
5280: 74 75 72 65 20 74 6f 20 68 6f 6c 64 20 6b 65 79  ture to hold key
5290: 73 20 66 6f 72 0a 69 6e 64 65 78 20 62 2d 74 72  s for.index b-tr
52a0: 65 65 73 20 6f 72 20 6b 65 79 73 20 61 6e 64 20  ees or keys and 
52b0: 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 61 62 6c  content for tabl
52c0: 65 20 62 2d 74 72 65 65 73 2e 3c 2f 70 3e 0a 3c  e b-trees.</p>.<
52d0: 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72 79 20 62 2d  /p>..<p>Every b-
52e0: 74 72 65 65 20 70 61 67 65 20 68 61 73 20 61 74  tree page has at
52f0: 20 6d 6f 73 74 20 6f 6e 65 20 70 61 72 65 6e 74   most one parent
5300: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 20   b-tree page..A 
5310: 62 2d 74 72 65 65 20 70 61 67 65 20 77 69 74 68  b-tree page with
5320: 6f 75 74 20 61 20 70 61 72 65 6e 74 20 69 73 20  out a parent is 
5330: 63 61 6c 6c 65 64 20 61 20 72 6f 6f 74 20 70 61  called a root pa
5340: 67 65 2e 20 20 41 20 72 6f 6f 74 20 62 2d 74 72  ge.  A root b-tr
5350: 65 65 20 70 61 67 65 0a 74 6f 67 65 74 68 65 72  ee page.together
5360: 20 77 69 74 68 20 74 68 65 20 63 6c 6f 73 75 72   with the closur
5370: 65 20 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65  e of its childre
5380: 6e 20 66 6f 72 6d 20 61 20 63 6f 6d 70 6c 65 74  n form a complet
5390: 65 20 62 2d 74 72 65 65 2e 0a 49 74 20 69 73 20  e b-tree..It is 
53a0: 70 6f 73 73 69 62 6c 65 20 28 61 6e 64 20 69 6e  possible (and in
53b0: 20 66 61 63 74 20 72 61 74 68 65 72 20 63 6f 6d   fact rather com
53c0: 6d 6f 6e 29 20 74 6f 20 68 61 76 65 20 61 20 63  mon) to have a c
53d0: 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65 0a 74  omplete b-tree.t
53e0: 68 61 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  hat consists of 
53f0: 61 20 73 69 6e 67 6c 65 20 70 61 67 65 20 74 68  a single page th
5400: 61 74 20 69 73 20 62 6f 74 68 20 61 20 6c 65 61  at is both a lea
5410: 66 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 2e 0a  f and the root..
5420: 42 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  Because there ar
5430: 65 20 70 6f 69 6e 74 65 72 73 20 66 72 6f 6d 20  e pointers from 
5440: 70 61 72 65 6e 74 73 20 74 6f 20 63 68 69 6c 64  parents to child
5450: 72 65 6e 2c 20 65 76 65 72 79 20 70 61 67 65 20  ren, every page 
5460: 6f 66 20 61 0a 63 6f 6d 70 6c 65 74 65 20 62 2d  of a.complete b-
5470: 74 72 65 65 20 63 61 6e 20 62 65 20 6c 6f 63 61  tree can be loca
5480: 74 65 64 20 69 66 20 6f 6e 6c 79 20 74 68 65 20  ted if only the 
5490: 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6b 6e 6f  root page is kno
54a0: 77 6e 2e 20 20 48 65 6e 63 65 2c 0a 62 2d 74 72  wn.  Hence,.b-tr
54b0: 65 65 73 20 61 72 65 20 69 64 65 6e 74 69 66 69  ees are identifi
54c0: 65 64 20 62 79 20 74 68 65 69 72 20 72 6f 6f 74  ed by their root
54d0: 20 70 61 67 65 20 6e 75 6d 62 65 72 2e 3c 2f 70   page number.</p
54e0: 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70  >..<p>A b-tree p
54f0: 61 67 65 20 69 73 20 65 69 74 68 65 72 20 61 20  age is either a 
5500: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67  table b-tree pag
5510: 65 20 6f 72 20 61 6e 20 69 6e 64 65 78 20 62 2d  e or an index b-
5520: 74 72 65 65 20 70 61 67 65 2e 0a 41 6c 6c 20 70  tree page..All p
5530: 61 67 65 73 20 77 69 74 68 69 6e 20 65 61 63 68  ages within each
5540: 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65 65   complete b-tree
5550: 20 61 72 65 20 6f 66 20 74 68 65 20 73 61 6d 65   are of the same
5560: 20 74 79 70 65 3a 20 65 69 74 68 65 72 20 74 61   type: either ta
5570: 62 6c 65 0a 6f 72 20 69 6e 64 65 78 2e 20 20 54  ble.or index.  T
5580: 68 65 72 65 20 69 73 20 61 20 6f 6e 65 2d 74 6f  here is a one-to
5590: 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20 66 72 6f  -one mapping fro
55a0: 6d 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20  m table b-trees 
55b0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
55c0: 0a 66 69 6c 65 20 74 6f 20 28 6e 6f 6e 2d 76 69  .file to (non-vi
55d0: 72 74 75 61 6c 29 20 74 61 62 6c 65 73 20 69 6e  rtual) tables in
55e0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
55f0: 68 65 6d 61 2c 20 69 6e 63 6c 75 64 69 6e 67 20  hema, including 
5600: 73 79 73 74 65 6d 20 74 61 62 6c 65 73 0a 73 75  system tables.su
5610: 63 68 20 61 73 20 73 71 6c 69 74 65 5f 6d 61 73  ch as sqlite_mas
5620: 74 65 72 2e 20 20 54 68 65 72 65 20 69 73 20 6f  ter.  There is o
5630: 6e 65 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e  ne-to-one mappin
5640: 67 20 62 65 74 77 65 65 6e 20 69 6e 64 65 78 20  g between index 
5650: 62 2d 74 72 65 65 73 0a 69 6e 20 74 68 65 20 64  b-trees.in the d
5660: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
5670: 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20   indices in the 
5680: 73 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64 69 6e  schema, includin
5690: 67 20 69 6d 70 6c 69 65 64 20 69 6e 64 69 63 65  g implied indice
56a0: 73 0a 63 72 65 61 74 65 64 20 62 79 20 75 6e 69  s.created by uni
56b0: 71 75 65 6e 65 73 73 20 63 6f 6e 73 74 72 61 69  queness constrai
56c0: 6e 74 73 2e 20 20 54 68 65 20 62 2d 74 72 65 65  nts.  The b-tree
56d0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
56e0: 6f 20 74 68 65 0a 73 71 6c 69 74 65 5f 6d 61 73  o the.sqlite_mas
56f0: 74 65 72 20 74 61 62 6c 65 20 61 6c 77 61 79 73  ter table always
5700: 20 68 61 73 20 69 74 73 20 72 6f 6f 74 20 70 61   has its root pa
5710: 67 65 20 6f 6e 20 61 20 70 61 67 65 20 6e 75 6d  ge on a page num
5720: 62 65 72 20 6f 66 20 31 2e 0a 54 68 65 20 73 71  ber of 1..The sq
5730: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
5740: 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  e contains the r
5750: 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
5760: 66 6f 72 20 65 76 65 72 79 20 6f 74 68 65 72 20  for every other 
5770: 0a 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78  .table and index
5780: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
5790: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45   file.</p>..<p>E
57a0: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 20 74  ach entry in a t
57b0: 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e 73  able b-tree cons
57c0: 69 73 74 73 20 6f 66 20 61 20 36 34 2d 62 69 74  ists of a 64-bit
57d0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
57e0: 6b 65 79 0a 61 6e 64 20 75 70 20 74 6f 20 32 31  key.and up to 21
57f0: 34 37 34 38 33 36 34 37 20 62 79 74 65 73 20 6f  47483647 bytes o
5800: 66 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  f arbitrary data
5810: 2e 20 20 49 6e 74 65 72 69 6f 72 20 74 61 62 6c  .  Interior tabl
5820: 65 20 62 2d 74 72 65 65 73 0a 68 6f 6c 64 20 6f  e b-trees.hold o
5830: 6e 6c 79 20 6b 65 79 73 20 61 6e 64 20 70 6f 69  nly keys and poi
5840: 6e 74 65 72 73 20 74 6f 20 63 68 69 6c 64 72 65  nters to childre
5850: 6e 2e 20 20 41 6c 6c 20 64 61 74 61 20 69 73 20  n.  All data is 
5860: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
5870: 0a 74 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65  .table b-tree le
5880: 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61  aves.</p>..<p>Ea
5890: 63 68 20 65 6e 74 72 79 20 69 6e 20 61 6e 20 69  ch entry in an i
58a0: 6e 64 65 78 20 62 2d 74 72 65 65 20 63 6f 6e 73  ndex b-tree cons
58b0: 69 73 74 73 20 6f 66 20 61 6e 20 61 72 62 69 74  ists of an arbit
58c0: 72 61 72 79 20 6b 65 79 20 6f 66 20 75 70 0a 74  rary key of up.t
58d0: 6f 20 32 31 34 37 34 38 33 36 34 37 20 62 79 74  o 2147483647 byt
58e0: 65 73 20 69 6e 20 6c 65 6e 67 74 68 20 61 6e 64  es in length and
58f0: 20 6e 6f 20 64 61 74 61 2e 3c 2f 70 3e 0a 0a 3c   no data.</p>..<
5900: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
5910: 63 65 6c 6c 5f 70 61 79 6c 6f 61 64 20 7b 63 65  cell_payload {ce
5920: 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c 2f 74 63 6c  ll payload}</tcl
5930: 3e 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20  >.<p>Define the 
5940: 22 70 61 79 6c 6f 61 64 22 20 6f 66 20 61 20 63  "payload" of a c
5950: 65 6c 6c 20 74 6f 20 62 65 20 74 68 65 20 61 72  ell to be the ar
5960: 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20 73  bitrary length s
5970: 65 63 74 69 6f 6e 0a 6f 66 20 74 68 65 20 63 65  ection.of the ce
5980: 6c 6c 2e 20 20 46 6f 72 20 61 6e 20 69 6e 64 65  ll.  For an inde
5990: 78 20 62 2d 74 72 65 65 2c 20 74 68 65 20 6b 65  x b-tree, the ke
59a0: 79 20 69 73 20 61 6c 77 61 79 73 20 61 72 62 69  y is always arbi
59b0: 74 72 61 72 79 20 69 6e 20 6c 65 6e 67 74 68 0a  trary in length.
59c0: 61 6e 64 20 68 65 6e 63 65 20 74 68 65 20 70 61  and hence the pa
59d0: 79 6c 6f 61 64 20 69 73 20 74 68 65 20 6b 65 79  yload is the key
59e0: 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 20  .  There are no 
59f0: 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68  arbitrary length
5a00: 20 65 6c 65 6d 65 6e 74 73 0a 69 6e 20 74 68 65   elements.in the
5a10: 20 63 65 6c 6c 73 20 6f 66 20 69 6e 74 65 72 69   cells of interi
5a20: 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  or table b-tree 
5a30: 70 61 67 65 73 20 61 6e 64 20 73 6f 20 74 68 6f  pages and so tho
5a40: 73 65 20 63 65 6c 6c 73 20 68 61 76 65 20 6e 6f  se cells have no
5a50: 0a 70 61 79 6c 6f 61 64 2e 20 20 54 61 62 6c 65  .payload.  Table
5a60: 20 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67   b-tree leaf pag
5a70: 65 73 20 63 6f 6e 74 61 69 6e 20 61 72 62 69 74  es contain arbit
5a80: 72 61 72 79 20 6c 65 6e 67 74 68 20 63 6f 6e 74  rary length cont
5a90: 65 6e 74 20 61 6e 64 0a 73 6f 20 66 6f 72 20 63  ent and.so for c
5aa0: 65 6c 6c 73 20 6f 6e 20 74 68 6f 73 65 20 70 61  ells on those pa
5ab0: 67 65 73 20 74 68 65 20 70 61 79 6c 6f 61 64 20  ges the payload 
5ac0: 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 2e 0a  is the content..
5ad0: 3c 70 3e 57 68 65 6e 20 74 68 65 20 73 69 7a 65  <p>When the size
5ae0: 20 6f 66 20 70 61 79 6c 6f 61 64 20 66 6f 72 20   of payload for 
5af0: 61 20 63 65 6c 6c 20 65 78 63 65 65 64 73 20 61  a cell exceeds a
5b00: 20 63 65 72 74 61 69 6e 20 74 68 72 65 73 68 6f   certain thresho
5b10: 6c 64 20 28 74 6f 0a 62 65 20 64 65 66 69 6e 65  ld (to.be define
5b20: 64 20 6c 61 74 65 72 29 20 74 68 65 6e 20 6f 6e  d later) then on
5b30: 6c 79 20 74 68 65 20 66 69 72 73 74 20 66 65 77  ly the first few
5b40: 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 70 61   bytes of the pa
5b50: 79 6c 6f 61 64 0a 61 72 65 20 73 74 6f 72 65 64  yload.are stored
5b60: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
5b70: 61 67 65 20 61 6e 64 20 74 68 65 20 62 61 6c 61  age and the bala
5b80: 6e 63 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e  nce is stored in
5b90: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 6f   a linked list.o
5ba0: 66 20 63 6f 6e 74 65 6e 74 20 6f 76 65 72 66 6c  f content overfl
5bb0: 6f 77 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c  ow pages.</p>..<
5bc0: 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  p>A b-tree page 
5bd0: 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20  is divided into 
5be0: 72 65 67 69 6f 6e 73 20 69 6e 20 74 68 65 20 66  regions in the f
5bf0: 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64 65 72 3a 0a  ollowing order:.
5c00: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68 65 20 31 30  .<ol>.<li>The 10
5c10: 30 2d 62 79 74 65 20 64 61 74 61 62 61 73 65 20  0-byte database 
5c20: 66 69 6c 65 20 68 65 61 64 65 72 20 28 66 6f 75  file header (fou
5c30: 6e 64 20 6f 6e 20 70 61 67 65 20 31 20 6f 6e 6c  nd on page 1 onl
5c40: 79 29 0a 3c 6c 69 3e 54 68 65 20 38 20 6f 72 20  y).<li>The 8 or 
5c50: 31 32 20 62 79 74 65 20 62 2d 74 72 65 65 20 70  12 byte b-tree p
5c60: 61 67 65 20 68 65 61 64 65 72 0a 3c 6c 69 3e 54  age header.<li>T
5c70: 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20  he cell pointer 
5c80: 61 72 72 61 79 0a 3c 6c 69 3e 55 6e 61 6c 6c 6f  array.<li>Unallo
5c90: 63 61 74 65 64 20 73 70 61 63 65 0a 3c 6c 69 3e  cated space.<li>
5ca0: 54 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74  The cell content
5cb0: 20 61 72 65 61 0a 3c 6c 69 3e 54 68 65 20 72 65   area.<li>The re
5cc0: 73 65 72 76 65 64 20 72 65 67 69 6f 6e 2e 0a 3c  served region..<
5cd0: 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  /ol>.</p>..<p>Th
5ce0: 65 20 31 30 30 2d 62 79 74 65 20 64 61 74 61 62  e 100-byte datab
5cf0: 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20  ase file header 
5d00: 69 73 20 66 6f 75 6e 64 20 6f 6e 6c 79 20 6f 6e  is found only on
5d10: 20 70 61 67 65 20 31 2c 20 77 68 69 63 68 20 69   page 1, which i
5d20: 73 0a 61 6c 77 61 79 73 20 61 20 74 61 62 6c 65  s.always a table
5d30: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 41   b-tree page.  A
5d40: 6c 6c 20 6f 74 68 65 72 20 62 2d 74 72 65 65 20  ll other b-tree 
5d50: 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74  pages in the dat
5d60: 61 62 61 73 65 20 66 69 6c 65 0a 6f 6d 69 74 20  abase file.omit 
5d70: 74 68 69 73 20 31 30 30 2d 62 79 74 65 20 68 65  this 100-byte he
5d80: 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ader.</p>..<p>Th
5d90: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
5da0: 6e 20 69 73 20 61 6e 20 61 72 65 61 20 6f 66 20  n is an area of 
5db0: 75 6e 75 73 65 64 20 73 70 61 63 65 20 61 74 20  unused space at 
5dc0: 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65 72 79  the end of every
5dd0: 0a 70 61 67 65 20 28 65 78 63 65 70 74 20 74 68  .page (except th
5de0: 65 20 6c 6f 63 6b 69 6e 67 20 70 61 67 65 29 20  e locking page) 
5df0: 74 68 61 74 20 65 78 74 65 6e 73 69 6f 6e 73 20  that extensions 
5e00: 63 61 6e 20 75 73 65 20 74 6f 20 68 6f 6c 64 20  can use to hold 
5e10: 70 65 72 2d 70 61 67 65 0a 69 6e 66 6f 72 6d 61  per-page.informa
5e20: 74 69 6f 6e 2e 20 20 54 68 65 20 73 69 7a 65 20  tion.  The size 
5e30: 6f 66 20 74 68 65 20 72 65 73 65 72 76 65 64 20  of the reserved 
5e40: 72 65 67 69 6f 6e 20 69 73 20 64 65 74 65 72 6d  region is determ
5e50: 69 6e 65 64 20 62 79 20 74 68 65 20 6f 6e 65 2d  ined by the one-
5e60: 62 79 74 65 0a 75 6e 73 69 67 6e 65 64 20 69 6e  byte.unsigned in
5e70: 74 65 67 65 72 20 66 6f 75 6e 64 20 61 74 20 61  teger found at a
5e80: 6e 20 6f 66 66 73 65 74 20 6f 66 20 32 30 20 69  n offset of 20 i
5e90: 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
5ea0: 20 66 69 6c 65 20 68 65 61 64 65 72 2e 0a 54 68   file header..Th
5eb0: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65  e size of the re
5ec0: 73 65 72 76 65 64 20 72 65 67 69 6f 6e 20 69 73  served region is
5ed0: 20 75 73 75 61 6c 6c 79 20 7a 65 72 6f 2e 3c 2f   usually zero.</
5ee0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65  p>..<p>The b-tre
5ef0: 65 20 70 61 67 65 20 68 65 61 64 65 72 20 69 73  e page header is
5f00: 20 38 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65   8 bytes in size
5f10: 20 66 6f 72 20 6c 65 61 66 20 70 61 67 65 73 20   for leaf pages 
5f20: 61 6e 64 20 31 32 0a 62 79 74 65 73 20 66 6f 72  and 12.bytes for
5f30: 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65 73 2e   interior pages.
5f40: 20 20 41 6c 6c 20 6d 75 6c 74 69 62 79 74 65 20    All multibyte 
5f50: 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 70 61  values in the pa
5f60: 67 65 20 68 65 61 64 65 72 0a 61 72 65 20 62 69  ge header.are bi
5f70: 67 2d 65 6e 64 69 61 6e 2e 0a 54 68 65 20 62 2d  g-endian..The b-
5f80: 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72  tree page header
5f90: 20 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20   is composed of 
5fa0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 69  the following fi
5fb0: 65 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74  elds:</p>..<cent
5fc0: 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 50 61  er>.<i>B-tree Pa
5fd0: 67 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74  ge Header Format
5fe0: 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
5ff0: 62 6f 72 64 65 72 3d 31 20 77 69 64 74 68 3d 22  border=1 width="
6000: 38 30 25 22 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66  80%">.<tr><th>Of
6010: 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e  fset<th>Size<th>
6020: 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e  Description.<tr>
6030: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
6040: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 30 3c 74 64   valign=top>0<td
6050: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6060: 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c  lign=top>1<td al
6070: 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 66 6c 61 67  ign=left>.A flag
6080: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
6090: 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65  b-tree page type
60a0: 0a 41 20 76 61 6c 75 65 20 6f 66 20 32 20 6d 65  .A value of 2 me
60b0: 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73 20  ans the page is 
60c0: 61 6e 20 69 6e 74 65 72 69 6f 72 20 69 6e 64 65  an interior inde
60d0: 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41  x b-tree page..A
60e0: 20 76 61 6c 75 65 20 6f 66 20 35 20 6d 65 61 6e   value of 5 mean
60f0: 73 20 74 68 65 20 70 61 67 65 20 69 73 20 61 6e  s the page is an
6100: 20 69 6e 74 65 72 69 6f 72 20 74 61 62 6c 65 20   interior table 
6110: 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 20 76  b-tree page..A v
6120: 61 6c 75 65 20 6f 66 20 31 30 20 6d 65 61 6e 73  alue of 10 means
6130: 20 74 68 65 20 70 61 67 65 20 69 73 20 61 20 6c   the page is a l
6140: 65 61 66 20 69 6e 64 65 78 20 62 2d 74 72 65 65  eaf index b-tree
6150: 20 70 61 67 65 2e 0a 41 20 76 61 6c 75 65 20 6f   page..A value o
6160: 66 20 31 33 20 6d 65 61 6e 73 20 74 68 65 20 70  f 13 means the p
6170: 61 67 65 20 69 73 20 61 20 6c 65 61 66 20 74 61  age is a leaf ta
6180: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ble b-tree page.
6190: 0a 41 6e 79 20 6f 74 68 65 72 20 76 61 6c 75 65  .Any other value
61a0: 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 74   is an error..<t
61b0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
61c0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c  er valign=top>1<
61d0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
61e0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20  valign=top>2<td 
61f0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 79 74 65  align=left>.Byte
6200: 20 6f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   offset into the
6210: 20 70 61 67 65 20 6f 66 20 74 68 65 20 66 69 72   page of the fir
6220: 73 74 20 66 72 65 65 62 6c 6f 63 6b 0a 3c 74 72  st freeblock.<tr
6230: 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  ><td align=cente
6240: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 33 3c 74  r valign=top>3<t
6250: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
6260: 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61  align=top>2<td a
6270: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e 75 6d 62 65  lign=left>.Numbe
6280: 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74 68  r of cells on th
6290: 69 73 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64 20  is page.<tr><td 
62a0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
62b0: 69 67 6e 3d 74 6f 70 3e 35 3c 74 64 20 61 6c 69  ign=top>5<td ali
62c0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
62d0: 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e 3d  =top>2<td align=
62e0: 6c 65 66 74 3e 0a 4f 66 66 73 65 74 20 74 6f 20  left>.Offset to 
62f0: 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
6300: 66 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  f the cell conte
6310: 6e 74 20 61 72 65 61 0a 3c 74 72 3e 3c 74 64 20  nt area.<tr><td 
6320: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c  align=center val
6330: 69 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61 6c 69  ign=top>7<td ali
6340: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6350: 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d  =top>1<td align=
6360: 6c 65 66 74 3e 0a 4e 75 6d 62 65 72 20 6f 66 20  left>.Number of 
6370: 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65 65 20  fragmented free 
6380: 62 79 74 65 73 20 77 69 74 68 69 6e 20 74 68 65  bytes within the
6390: 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72   cell content ar
63a0: 65 61 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  ea.<tr><td align
63b0: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
63c0: 6f 70 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 63 65  op>8<td align=ce
63d0: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
63e0: 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  4<td align=left>
63f0: 0a 54 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20  .The right-most 
6400: 70 6f 69 6e 74 65 72 20 28 69 6e 74 65 72 69 6f  pointer (interio
6410: 72 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f  r b-tree pages o
6420: 6e 6c 79 29 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 62  nly).</table></b
6430: 6c 6f 63 6b 71 75 6f 74 65 3e 3c 2f 63 65 6e 74  lockquote></cent
6440: 65 72 3e 0a 0a 3c 70 3e 54 68 65 20 63 65 6c 6c  er>..<p>The cell
6450: 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 20 6f   pointer array o
6460: 66 20 61 20 62 2d 74 72 65 65 20 70 61 67 65 20  f a b-tree page 
6470: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
6480: 6f 77 73 20 74 68 65 20 62 2d 74 72 65 65 0a 70  ows the b-tree.p
6490: 61 67 65 20 68 65 61 64 65 72 2e 20 20 4c 65 74  age header.  Let
64a0: 20 4b 20 62 65 20 74 68 65 20 6e 75 6d 62 65 72   K be the number
64b0: 20 6f 66 20 63 65 6c 6c 73 20 6f 6e 20 74 68 65   of cells on the
64c0: 20 62 74 72 65 65 2e 20 20 54 68 65 20 63 65 6c   btree.  The cel
64d0: 6c 20 70 6f 69 6e 74 65 72 0a 61 72 72 61 79 20  l pointer.array 
64e0: 63 6f 6e 73 69 73 74 73 20 6f 66 20 4b 20 32 2d  consists of K 2-
64f0: 62 79 74 65 20 69 6e 74 65 67 65 72 20 6f 66 66  byte integer off
6500: 73 65 74 73 20 74 6f 20 74 68 65 20 63 65 6c 6c  sets to the cell
6510: 20 63 6f 6e 74 65 6e 74 73 2e 20 20 54 68 65 0a   contents.  The.
6520: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 73 20 61 72  cell pointers ar
6530: 65 20 61 72 72 61 6e 67 65 64 20 69 6e 20 6b 65  e arranged in ke
6540: 79 20 6f 72 64 65 72 20 77 69 74 68 20 6c 65 66  y order with lef
6550: 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68 65  t-most cell (the
6560: 20 63 65 6c 6c 20 77 69 74 68 20 74 68 65 0a 73   cell with the.s
6570: 6d 61 6c 6c 65 73 74 20 6b 65 79 29 20 66 69 72  mallest key) fir
6580: 73 74 20 61 6e 64 20 74 68 65 20 72 69 67 68 74  st and the right
6590: 2d 6d 6f 73 74 20 63 65 6c 6c 20 28 74 68 65 20  -most cell (the 
65a0: 63 65 6c 6c 20 77 69 74 68 20 74 68 65 20 6c 61  cell with the la
65b0: 72 67 65 73 74 0a 6b 65 79 29 20 6c 61 73 74 2e  rgest.key) last.
65c0: 3c 2f 70 3e 0a 0a 3c 70 3e 43 65 6c 6c 20 63 6f  </p>..<p>Cell co
65d0: 6e 74 65 6e 74 20 69 73 20 73 74 6f 72 65 64 20  ntent is stored 
65e0: 69 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74  in the cell cont
65f0: 65 6e 74 20 72 65 67 69 6f 6e 20 6f 66 20 74 68  ent region of th
6600: 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 53  e b-tree page..S
6610: 51 4c 69 74 65 20 73 74 72 69 76 65 73 20 74 6f  QLite strives to
6620: 20 70 6c 61 63 65 20 63 65 6c 6c 73 20 61 73 20   place cells as 
6630: 66 61 72 20 74 6f 77 61 72 64 20 74 68 65 20 65  far toward the e
6640: 6e 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65  nd of the b-tree
6650: 20 70 61 67 65 20 61 73 0a 69 74 20 63 61 6e 2c   page as.it can,
6660: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6c 65 61   in order to lea
6670: 76 65 20 73 70 61 63 65 20 66 6f 72 20 66 75 74  ve space for fut
6680: 75 72 65 20 67 72 6f 77 74 68 20 6f 66 20 74 68  ure growth of th
6690: 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61  e cell pointer a
66a0: 72 72 61 79 2e 0a 54 68 65 20 61 72 65 61 20 69  rray..The area i
66b0: 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 6c 61  n between the la
66c0: 73 74 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20  st cell pointer 
66d0: 61 72 72 61 79 20 65 6e 74 72 79 20 61 6e 64 20  array entry and 
66e0: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
66f0: 0a 74 68 65 20 66 69 72 73 74 20 63 65 6c 6c 20  .the first cell 
6700: 69 73 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74  is the unallocat
6710: 65 64 20 72 65 67 69 6f 6e 2e 0a 3c 2f 70 3e 0a  ed region..</p>.
6720: 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20  .<p>A freeblock 
6730: 69 73 20 61 20 73 74 72 75 63 74 75 72 65 20 75  is a structure u
6740: 73 65 64 20 74 6f 20 69 64 65 6e 74 69 66 79 20  sed to identify 
6750: 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63  unallocated spac
6760: 65 20 77 69 74 68 69 6e 0a 61 20 62 2d 74 72 65  e within.a b-tre
6770: 65 20 70 61 67 65 2e 20 20 46 72 65 65 62 6c 6f  e page.  Freeblo
6780: 63 6b 73 20 61 72 65 20 6f 72 67 61 6e 69 7a 65  cks are organize
6790: 64 20 6f 6e 20 61 20 63 68 61 69 6e 2e 20 20 54  d on a chain.  T
67a0: 68 65 20 66 69 72 73 74 20 32 20 62 79 74 65 73  he first 2 bytes
67b0: 20 6f 66 0a 61 20 66 72 65 65 62 6c 6f 63 6b 20   of.a freeblock 
67c0: 61 72 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e  are a big-endian
67d0: 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
67e0: 73 20 74 68 65 20 6f 66 66 73 65 74 20 69 6e 20  s the offset in 
67f0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 0a  the b-tree page.
6800: 6f 66 20 74 68 65 20 6e 65 78 74 20 66 72 65 65  of the next free
6810: 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 63 68 61  block in the cha
6820: 69 6e 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74  in, or zero if t
6830: 68 65 20 66 72 65 65 62 6c 6f 63 6b 20 69 73 20  he freeblock is 
6840: 74 68 65 20 6c 61 73 74 20 6f 6e 0a 74 68 65 20  the last on.the 
6850: 63 68 61 69 6e 2e 20 20 54 68 65 20 74 68 69 72  chain.  The thir
6860: 64 20 61 6e 64 20 66 6f 75 72 74 68 20 62 79 74  d and fourth byt
6870: 65 73 20 6f 66 20 65 61 63 68 20 66 72 65 65 62  es of each freeb
6880: 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20 62 69 74 2d  lock form.a bit-
6890: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 73 20  endian integers 
68a0: 77 68 69 63 68 20 69 73 20 74 68 65 20 73 69 7a  which is the siz
68b0: 65 20 6f 66 20 74 68 65 20 66 72 65 65 62 6c 6f  e of the freeblo
68c0: 63 6b 20 69 6e 20 62 79 74 65 73 2c 20 69 6e 63  ck in bytes, inc
68d0: 6c 75 64 69 6e 67 0a 74 68 65 20 34 2d 62 79 74  luding.the 4-byt
68e0: 65 20 68 65 61 64 65 72 2e 20 20 46 72 65 65 62  e header.  Freeb
68f0: 6c 6f 63 6b 73 20 61 72 65 20 61 6c 77 61 79 73  locks are always
6900: 20 63 6f 6e 6e 65 63 74 65 64 20 69 6e 20 6f 72   connected in or
6910: 64 65 72 20 0a 6f 66 20 69 6e 63 72 65 61 73 69  der .of increasi
6920: 6e 67 20 6f 66 66 73 65 74 2e 20 20 54 68 65 20  ng offset.  The 
6930: 73 65 63 6f 6e 64 20 66 69 65 6c 64 20 6f 66 20  second field of 
6940: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
6950: 68 65 61 64 65 72 20 69 73 20 74 68 65 0a 6f 66  header is the.of
6960: 66 73 65 74 20 6f 66 20 74 68 65 20 66 69 72 73  fset of the firs
6970: 74 20 66 72 65 65 62 6c 6f 63 6b 2c 20 6f 72 20  t freeblock, or 
6980: 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20 61 72  zero if there ar
6990: 65 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73 20  e no freeblocks 
69a0: 6f 6e 20 74 68 65 0a 70 61 67 65 2e 20 20 49 6e  on the.page.  In
69b0: 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 62   a well-formed b
69c0: 2d 74 72 65 65 20 70 61 67 65 2c 20 74 68 65 72  -tree page, ther
69d0: 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 62 65  e will always be
69e0: 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 63 65   at least one ce
69f0: 6c 6c 0a 62 65 66 6f 72 65 20 74 68 65 20 66 69  ll.before the fi
6a00: 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2e 3c 2f  rst freeblock.</
6a10: 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c 6f  p>..<p>A freeblo
6a20: 63 6b 20 72 65 71 75 69 72 65 73 20 61 74 20 6c  ck requires at l
6a30: 65 61 73 74 20 34 20 62 79 74 65 73 20 6f 66 20  east 4 bytes of 
6a40: 73 70 61 63 65 2e 20 20 49 66 20 74 68 65 72 65  space.  If there
6a50: 20 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 0a   is an isolated.
6a60: 67 72 6f 75 70 20 6f 66 20 31 2c 20 32 2c 20 6f  group of 1, 2, o
6a70: 72 20 33 20 75 6e 75 73 65 64 20 62 79 74 65 73  r 3 unused bytes
6a80: 20 77 69 74 68 69 6e 20 74 68 65 20 63 65 6c 6c   within the cell
6a90: 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74   content area, t
6aa0: 68 6f 73 65 20 62 79 74 65 73 0a 63 6f 6d 70 72  hose bytes.compr
6ab0: 69 73 65 20 61 20 66 72 61 67 6d 65 6e 74 2e 20  ise a fragment. 
6ac0: 20 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   The total numbe
6ad0: 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 6c  r of bytes in al
6ae0: 6c 20 66 72 61 67 6d 65 6e 74 73 20 69 73 20 73  l fragments is s
6af0: 74 6f 72 65 64 0a 69 6e 20 74 68 65 20 66 69 66  tored.in the fif
6b00: 74 68 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  th field of the 
6b10: 62 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64  b-tree page head
6b20: 65 72 2e 20 20 49 6e 20 61 20 77 65 6c 6c 2d 66  er.  In a well-f
6b30: 6f 72 6d 65 64 20 62 2d 74 72 65 65 20 70 61 67  ormed b-tree pag
6b40: 65 2c 0a 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  e,.the total num
6b50: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
6b60: 66 72 61 67 6d 65 6e 74 73 20 6d 61 79 20 6e 6f  fragments may no
6b70: 74 20 65 78 63 65 65 64 20 36 30 2e 3c 2f 70 3e  t exceed 60.</p>
6b80: 0a 0a 3c 70 3e 54 68 65 20 74 6f 74 61 6c 20 61  ..<p>The total a
6b90: 6d 6f 75 6e 74 20 6f 66 20 66 72 65 65 20 73 70  mount of free sp
6ba0: 61 63 65 20 6f 6e 20 61 20 62 2d 74 72 65 65 20  ace on a b-tree 
6bb0: 70 61 67 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  page consists of
6bc0: 20 74 68 65 20 73 69 7a 65 0a 6f 66 20 74 68 65   the size.of the
6bd0: 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65 67   unallocated reg
6be0: 69 6f 6e 20 70 6c 75 73 20 74 68 65 20 74 6f 74  ion plus the tot
6bf0: 61 6c 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20 66  al size of all f
6c00: 72 65 65 62 6c 6f 63 6b 73 20 70 6c 75 73 20 74  reeblocks plus t
6c10: 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 66 72 61  he.number of fra
6c20: 67 6d 65 6e 74 65 64 20 66 72 65 65 20 62 79 74  gmented free byt
6c30: 65 73 2e 20 20 53 51 4c 69 74 65 20 6d 61 79 20  es.  SQLite may 
6c40: 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d  from time to tim
6c50: 65 20 72 65 6f 72 67 61 6e 69 7a 65 0a 61 20 62  e reorganize.a b
6c60: 2d 74 72 65 65 20 70 61 67 65 20 73 6f 20 74 68  -tree page so th
6c70: 61 74 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  at there are no 
6c80: 66 72 65 65 62 6c 6f 63 6b 73 20 6f 72 20 66 72  freeblocks or fr
6c90: 61 67 6d 65 6e 74 20 62 79 74 65 73 2c 20 61 6c  agment bytes, al
6ca0: 6c 0a 75 6e 75 73 65 64 20 62 79 74 65 73 20 61  l.unused bytes a
6cb0: 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
6cc0: 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20  the unallocated 
6cd0: 73 70 61 63 65 20 72 65 67 69 6f 6e 2c 20 61 6e  space region, an
6ce0: 64 20 61 6c 6c 0a 63 65 6c 6c 73 20 61 72 65 20  d all.cells are 
6cf0: 70 61 63 6b 65 64 20 74 69 67 68 74 6c 79 20 61  packed tightly a
6d00: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
6d10: 20 70 61 67 65 2e 20 20 54 68 69 73 20 69 73 20   page.  This is 
6d20: 63 61 6c 6c 65 64 20 0a 22 64 65 66 72 61 67 6d  called ."defragm
6d30: 65 6e 74 69 6e 67 22 20 74 68 65 20 62 2d 74 72  enting" the b-tr
6d40: 65 65 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74  ee page.</p>..<t
6d50: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 76  cl>hd_fragment v
6d60: 61 72 69 6e 74 20 7b 76 61 72 69 61 62 6c 65 2d  arint {variable-
6d70: 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 7d 20  length integer} 
6d80: 7b 76 61 72 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a  {varint}</tcl>..
6d90: 3c 70 3e 41 20 76 61 72 69 61 62 6c 65 2d 6c 65  <p>A variable-le
6da0: 6e 67 74 68 20 69 6e 74 65 67 65 72 20 6f 72 20  ngth integer or 
6db0: 22 76 61 72 69 6e 74 22 20 69 73 20 61 20 73 74  "varint" is a st
6dc0: 61 74 69 63 20 48 75 66 66 6d 61 6e 20 65 6e 63  atic Huffman enc
6dd0: 6f 64 69 6e 67 0a 6f 66 20 36 34 2d 62 69 74 20  oding.of 64-bit 
6de0: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
6df0: 69 6e 74 65 67 65 72 73 20 74 68 61 74 20 75 73  integers that us
6e00: 65 73 20 6c 65 73 73 20 73 70 61 63 65 20 66 6f  es less space fo
6e10: 72 20 73 6d 61 6c 6c 20 70 6f 73 69 74 69 76 65  r small positive
6e20: 20 0a 76 61 6c 75 65 73 2e 20 0a 41 20 76 61 72   .values. .A var
6e30: 69 6e 74 20 69 73 20 62 65 74 77 65 65 6e 20 31  int is between 1
6e40: 20 61 6e 64 20 39 20 62 79 74 65 73 20 69 6e 20   and 9 bytes in 
6e50: 6c 65 6e 67 74 68 2e 20 20 54 68 65 20 76 61 72  length.  The var
6e60: 69 6e 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  int consists of 
6e70: 65 69 74 68 65 72 0a 7a 65 72 6f 20 6f 72 20 6d  either.zero or m
6e80: 6f 72 65 20 62 79 74 65 20 77 68 69 63 68 20 68  ore byte which h
6e90: 61 76 65 20 74 68 65 20 68 69 67 68 2d 6f 72 64  ave the high-ord
6ea0: 65 72 20 62 69 74 20 73 65 74 20 66 6f 6c 6c 6f  er bit set follo
6eb0: 77 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20  wed by a single 
6ec0: 62 79 74 65 0a 77 69 74 68 20 74 68 65 20 68 69  byte.with the hi
6ed0: 67 68 2d 6f 72 64 65 72 20 62 69 74 20 63 6c 65  gh-order bit cle
6ee0: 61 72 2c 20 6f 72 20 6e 69 6e 65 20 62 79 74 65  ar, or nine byte
6ef0: 73 2c 20 77 68 69 63 68 65 76 65 72 20 69 73 20  s, whichever is 
6f00: 73 68 6f 72 74 65 72 2e 0a 54 68 65 20 6c 6f 77  shorter..The low
6f10: 65 72 20 73 65 76 65 6e 20 62 69 74 73 20 6f 66  er seven bits of
6f20: 20 65 61 63 68 20 6f 66 20 74 68 65 20 66 69 72   each of the fir
6f30: 73 74 20 65 69 67 68 74 20 62 79 74 65 73 20 61  st eight bytes a
6f40: 6e 64 20 61 6c 6c 20 38 20 62 69 74 73 20 6f 66  nd all 8 bits of
6f50: 0a 74 68 65 20 6e 69 6e 74 68 20 62 79 74 65 20  .the ninth byte 
6f60: 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
6f70: 6e 73 74 72 75 63 74 20 74 68 65 20 36 34 2d 62  nstruct the 64-b
6f80: 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65  it twos-compleme
6f90: 6e 74 20 69 6e 74 65 67 65 72 2e 0a 56 61 72 69  nt integer..Vari
6fa0: 6e 74 73 20 61 72 65 20 62 69 67 2d 65 6e 64 69  nts are big-endi
6fb0: 61 6e 3a 20 62 69 74 73 20 74 61 6b 65 6e 20 66  an: bits taken f
6fc0: 72 6f 6d 20 74 68 65 20 65 61 72 6c 69 65 72 20  rom the earlier 
6fd0: 62 79 74 65 20 6f 66 20 74 68 65 20 76 61 72 69  byte of the vari
6fe0: 6e 74 0a 61 72 65 20 74 68 65 20 6d 6f 72 65 20  nt.are the more 
6ff0: 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20  significant and 
7000: 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  bits taken from 
7010: 74 68 65 20 6c 61 74 65 72 20 62 79 74 65 73 2e  the later bytes.
7020: 20 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f   </p>..<p>The fo
7030: 72 6d 61 74 20 6f 66 20 61 20 63 65 6c 6c 20 64  rmat of a cell d
7040: 65 70 65 6e 64 73 20 6f 6e 20 77 68 69 63 68 20  epends on which 
7050: 6b 69 6e 64 20 6f 66 20 62 2d 74 72 65 65 20 70  kind of b-tree p
7060: 61 67 65 20 74 68 65 20 63 65 6c 6c 0a 61 70 70  age the cell.app
7070: 65 61 72 73 20 6f 6e 2e 20 20 54 68 65 20 66 6f  ears on.  The fo
7080: 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 73 68  llowing table sh
7090: 6f 77 73 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ows the elements
70a0: 20 6f 66 20 61 20 63 65 6c 6c 2c 20 69 6e 0a 6f   of a cell, in.o
70b0: 72 64 65 72 20 6f 66 20 61 70 70 65 61 72 61 6e  rder of appearan
70c0: 63 65 2c 20 66 6f 72 20 74 68 65 20 76 61 72 69  ce, for the vari
70d0: 6f 75 73 20 62 2d 74 72 65 65 20 70 61 67 65 20  ous b-tree page 
70e0: 74 79 70 65 73 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f  types.</p>..<blo
70f0: 63 6b 71 75 6f 74 65 3e 3c 64 6c 3e 0a 3c 64 74  ckquote><dl>.<dt
7100: 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65  ><p>Table B-Tree
7110: 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 70 3e 3c   Leaf Cell:</p><
7120: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e  /dt>.<dd><p><ul>
7130: 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68  .<li>A varint wh
7140: 69 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c  ich is the total
7150: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
7160: 20 6f 66 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63   of payload, inc
7170: 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66  luding any.overf
7180: 6c 6f 77 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74  low.<li>A varint
7190: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 69 6e   which is the in
71a0: 74 65 67 65 72 20 6b 65 79 2c 20 61 2e 6b 2e 61  teger key, a.k.a
71b0: 2e 20 22 72 6f 77 69 64 22 0a 3c 6c 69 3e 54 68  . "rowid".<li>Th
71c0: 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f  e initial portio
71d0: 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64  n of the payload
71e0: 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73   that does not s
71f0: 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77  pill to overflow
7200: 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d  .pages..<li>A 4-
7210: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
7220: 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d  integer page num
7230: 62 65 72 20 66 6f 72 20 74 68 65 20 66 69 72 73  ber for the firs
7240: 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76  t page of the.ov
7250: 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74  erflow page list
7260: 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c   - omitted if al
7270: 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f  l payload fits o
7280: 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  n the b-tree pag
7290: 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64  e..</ul></p></dd
72a0: 3e 0a 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20  >..<dt><p>Table 
72b0: 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20  B-Tree Interior 
72c0: 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c  Cell:</p></dt>.<
72d0: 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41  dd><p><ul>.<li>A
72e0: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
72f0: 6e 67 20 70 61 67 65 20 6e 75 6d 62 65 72 20 77  ng page number w
7300: 68 69 63 68 20 69 73 20 74 68 65 20 6c 65 66 74  hich is the left
7310: 20 63 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a   child pointer..
7320: 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69  <li>A varint whi
7330: 63 68 20 69 73 20 74 68 65 20 69 6e 74 65 67 65  ch is the intege
7340: 72 20 6b 65 79 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c  r key.</ul></p><
7350: 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64  /dd>..<dt><p>Ind
7360: 65 78 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43  ex B-Tree Leaf C
7370: 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64  ell:</p></dt>.<d
7380: 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20  d><p><ul>.<li>A 
7390: 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20  varint which is 
73a0: 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
73b0: 20 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65 79   of bytes of key
73c0: 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64   payload, includ
73d0: 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77  ing any.overflow
73e0: 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61 6c  .<li>The initial
73f0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20   portion of the 
7400: 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f 65  payload that doe
7410: 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f  s not spill to o
7420: 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c  verflow.pages..<
7430: 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d  li>A 4-byte big-
7440: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 70  endian integer p
7450: 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  age number for t
7460: 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f 66  he first page of
7470: 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61   the.overflow pa
7480: 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65  ge list - omitte
7490: 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64  d if all payload
74a0: 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d 74   fits on the b-t
74b0: 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c  ree page..</ul><
74c0: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70  /p></dd>..<dt><p
74d0: 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20 49 6e  >Index B-Tree In
74e0: 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 70 3e  terior Cell:</p>
74f0: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c  </dt>.<dd><p><ul
7500: 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62  >.<li>A 4-byte b
7510: 69 67 2d 65 6e 64 69 6e 67 20 70 61 67 65 20 6e  ig-ending page n
7520: 75 6d 62 65 72 20 77 68 69 63 68 20 69 73 20 74  umber which is t
7530: 68 65 20 6c 65 66 74 20 63 68 69 6c 64 20 70 6f  he left child po
7540: 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72  inter..<li>A var
7550: 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65  int which is the
7560: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
7570: 20 62 79 74 65 73 20 6f 66 20 6b 65 79 20 70 61   bytes of key pa
7580: 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67  yload, including
7590: 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c   any.overflow.<l
75a0: 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f  i>The initial po
75b0: 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79  rtion of the pay
75c0: 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e  load that does n
75d0: 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72  ot spill to over
75e0: 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e  flow.pages..<li>
75f0: 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  A 4-byte big-end
7600: 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65  ian integer page
7610: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
7620: 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74 68  first page of th
7630: 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  e.overflow page 
7640: 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69  list - omitted i
7650: 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69  f all payload fi
7660: 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ts on the b-tree
7670: 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e   page..</ul></p>
7680: 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f  </dd>.</dl></blo
7690: 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
76a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
76b0: 76 65 20 63 61 6e 20 62 65 20 72 65 63 61 73 74  ve can be recast
76c0: 20 69 6e 74 6f 20 61 20 74 61 62 6c 65 20 66 6f   into a table fo
76d0: 72 6d 61 74 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  rmat as follows:
76e0: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
76f0: 61 67 6d 65 6e 74 20 63 65 6c 6c 66 6f 72 6d 61  agment cellforma
7700: 74 20 7b 63 65 6c 6c 20 66 6f 72 6d 61 74 20 73  t {cell format s
7710: 75 6d 6d 61 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 63  ummary}</tcl>.<c
7720: 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65 65  enter>.<i>B-tree
7730: 20 43 65 6c 6c 20 46 6f 72 6d 61 74 3c 2f 69 3e   Cell Format</i>
7740: 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31  .<table border=1
7750: 20 77 69 64 74 68 3d 22 38 30 25 22 3e 0a 3c 74   width="80%">.<t
7760: 72 3e 3c 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e  r><th rowspan=2>
7770: 44 61 74 61 74 79 70 65 0a 20 20 20 20 3c 74 68  Datatype.    <th
7780: 20 63 6f 6c 73 70 61 6e 3d 34 3e 41 70 70 65 61   colspan=4>Appea
7790: 72 73 20 69 6e 2e 2e 2e 0a 20 20 20 20 3c 74 68  rs in....    <th
77a0: 20 72 6f 77 73 70 61 6e 3d 32 3e 44 65 73 63 72   rowspan=2>Descr
77b0: 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 68 3e 54  iption.<tr><th>T
77c0: 61 62 6c 65 20 4c 65 61 66 0a 20 20 20 20 3c 74  able Leaf.    <t
77d0: 68 3e 54 61 62 6c 65 20 49 6e 74 65 72 69 6f 72  h>Table Interior
77e0: 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65 78 20 4c  .    <th>Index L
77f0: 65 61 66 0a 20 20 20 20 3c 74 68 3e 49 6e 64 65  eaf.    <th>Inde
7800: 78 20 49 6e 74 65 72 69 6f 72 0a 3c 74 72 3e 3c  x Interior.<tr><
7810: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
7820: 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74  valign=top>4-byt
7830: 65 20 69 6e 74 65 67 65 72 0a 20 20 20 20 3c 74  e integer.    <t
7840: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
7850: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
7860: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
7870: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
7880: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
7890: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
78a0: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
78b0: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
78c0: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
78d0: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
78e0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67  d align=left>Pag
78f0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6c 65 66 74  e number of left
7900: 20 63 68 69 6c 64 0a 3c 74 72 3e 3c 74 64 20 61   child.<tr><td a
7910: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7920: 67 6e 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20  gn=top>varint.  
7930: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7940: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
7950: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
7960: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7970: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
7980: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7990: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
79a0: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
79b0: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
79c0: 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a  gn=top>&#x2714;.
79d0: 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65      <td align=le
79e0: 66 74 3e 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  ft>Number of byt
79f0: 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 0a 3c 74  es of payload.<t
7a00: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
7a10: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61  er valign=top>va
7a20: 72 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c 69  rint.    <td ali
7a30: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7a40: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
7a50: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7a60: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
7a70: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
7a80: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7a90: 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20  gn=top>&nbsp;.  
7aa0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7ab0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
7ac0: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
7ad0: 67 6e 3d 6c 65 66 74 3e 52 6f 77 69 64 0a 3c 74  gn=left>Rowid.<t
7ae0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
7af0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 62 79  er valign=top>by
7b00: 74 65 20 61 72 72 61 79 0a 20 20 20 20 3c 74 64  te array.    <td
7b10: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7b20: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
7b30: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
7b40: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7b50: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
7b60: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7b70: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
7b80: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
7b90: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7ba0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
7bb0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61  td align=left>Pa
7bc0: 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c  yload.<tr><td al
7bd0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
7be0: 6e 3d 74 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74  n=top>4-byte int
7bf0: 65 67 65 72 0a 20 20 20 20 3c 74 64 20 61 6c 69  eger.    <td ali
7c00: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7c10: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
7c20: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7c30: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
7c40: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
7c50: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
7c60: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
7c70: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
7c80: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23  er valign=top>&#
7c90: 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61  x2714;.    <td a
7ca0: 6c 69 67 6e 3d 6c 65 66 74 3e 50 61 67 65 20 6e  lign=left>Page n
7cb0: 75 6d 62 65 72 20 6f 66 20 66 69 72 73 74 20 6f  umber of first o
7cc0: 76 65 72 66 6c 6f 77 20 70 61 67 65 0a 3c 2f 74  verflow page.</t
7cd0: 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a  able></center>..
7ce0: 0a 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  ..<tr><td align=
7cf0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7d00: 70 3e 0a 0a 3c 70 3e 54 68 65 20 61 6d 6f 75 6e  p>..<p>The amoun
7d10: 74 20 6f 66 20 70 61 79 6c 6f 61 64 20 74 68 61  t of payload tha
7d20: 74 20 73 70 69 6c 6c 73 20 6f 6e 74 6f 20 6f 76  t spills onto ov
7d30: 65 72 66 6c 6f 77 20 70 61 67 65 73 20 61 6c 73  erflow pages als
7d40: 6f 20 64 65 70 65 6e 64 73 20 6f 6e 0a 74 68 65  o depends on.the
7d50: 20 70 61 67 65 20 74 79 70 65 2e 20 20 46 6f 72   page type.  For
7d60: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
7d70: 6f 6d 70 75 74 61 74 69 6f 6e 73 2c 20 6c 65 74  omputations, let
7d80: 20 55 20 62 65 20 74 68 65 20 75 73 61 62 6c 65   U be the usable
7d90: 20 73 69 7a 65 0a 6f 66 20 61 20 64 61 74 61 62   size.of a datab
7da0: 61 73 65 20 70 61 67 65 2c 20 74 68 65 20 74 6f  ase page, the to
7db0: 74 61 6c 20 70 61 67 65 20 73 69 7a 65 20 6c 65  tal page size le
7dc0: 73 73 20 74 68 65 20 72 65 73 65 72 76 65 64 20  ss the reserved 
7dd0: 73 70 61 63 65 20 61 74 20 74 68 65 0a 65 6e 64  space at the.end
7de0: 20 6f 66 20 65 61 63 68 20 70 61 67 65 2e 20 20   of each page.  
7df0: 41 6e 64 20 6c 65 74 20 50 20 62 65 20 74 68 65  And let P be the
7e00: 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 2e 3c 2f   payload size.</
7e10: 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e  p>..<blockquote>
7e20: 3c 64 6c 3e 0a 3c 64 74 3e 54 61 62 6c 65 20 42  <dl>.<dt>Table B
7e30: 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a  -Tree Leaf Cell:
7e40: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 49 66  </dt>.<dd><p>.If
7e50: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a   the payload siz
7e60: 65 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e  e P is less than
7e70: 20 55 2d 33 36 20 74 68 65 6e 20 74 68 65 20 65   U-36 then the e
7e80: 6e 74 69 72 65 20 70 61 79 6c 6f 61 64 20 69 73  ntire payload is
7e90: 20 73 74 6f 72 65 64 0a 6f 6e 20 74 68 65 20 62   stored.on the b
7ea0: 2d 74 72 65 65 20 70 61 67 65 2e 20 20 4c 65 74  -tree page.  Let
7eb0: 20 4d 20 62 65 20 28 28 55 2d 31 32 29 2a 33 32   M be ((U-12)*32
7ec0: 2f 32 35 35 29 2d 32 33 2e 20 20 49 66 20 50 20  /255)-23.  If P 
7ed0: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
7ee0: 55 2d 33 35 0a 74 68 65 6e 20 74 68 65 20 6e 75  U-35.then the nu
7ef0: 6d 62 65 72 20 6f 66 20 62 79 74 65 20 73 74 6f  mber of byte sto
7f00: 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65  red on the b-tre
7f10: 65 20 70 61 67 65 20 69 73 20 74 68 65 20 6c 65  e page is the le
7f20: 73 73 6f 72 20 6f 66 0a 4d 2b 28 28 50 2d 4d 29  ssor of.M+((P-M)
7f30: 25 28 55 2d 34 29 29 20 61 6e 64 20 55 2d 33 35  %(U-4)) and U-35
7f40: 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  ..</p></dd>..<dt
7f50: 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20 49 6e  >Table B-Tree In
7f60: 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74  terior Cell:</dt
7f70: 3e 0a 3c 64 64 3e 3c 70 3e 0a 49 6e 74 65 72 69  >.<dd><p>.Interi
7f80: 6f 72 20 70 61 67 65 73 20 6f 66 20 74 61 62 6c  or pages of tabl
7f90: 65 20 62 2d 74 72 65 65 73 20 68 61 76 65 20 6e  e b-trees have n
7fa0: 6f 20 70 61 79 6c 6f 61 64 20 61 6e 64 20 73 6f  o payload and so
7fb0: 20 74 68 65 72 65 20 69 73 20 6e 65 76 65 72 0a   there is never.
7fc0: 61 6e 79 20 70 61 79 6c 6f 61 64 20 74 6f 20 73  any payload to s
7fd0: 70 69 6c 6c 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a  pill..</p></dd>.
7fe0: 0a 3c 64 74 3e 49 6e 64 65 78 20 42 2d 54 72 65  .<dt>Index B-Tre
7ff0: 65 20 4c 65 61 66 20 4f 72 20 49 6e 74 65 72 69  e Leaf Or Interi
8000: 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64  or Cell:</dt>.<d
8010: 64 3e 3c 70 3e 0a 49 66 20 74 68 65 20 70 61 79  d><p>.If the pay
8020: 6c 6f 61 64 20 73 69 7a 65 20 50 20 69 73 20 6c  load size P is l
8030: 65 73 73 20 74 68 61 6e 20 28 28 55 2d 31 32 29  ess than ((U-12)
8040: 2a 36 34 2f 32 35 35 29 2d 32 32 20 74 68 65 6e  *64/255)-22 then
8050: 20 74 68 65 20 65 6e 74 69 72 65 0a 70 61 79 6c   the entire.payl
8060: 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  oad is stored on
8070: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
8080: 2e 20 20 0a 4c 65 74 20 4d 20 62 65 20 28 28 55  .  .Let M be ((U
8090: 2d 31 32 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e  -12)*32/255)-23.
80a0: 20 20 49 66 20 50 20 69 73 20 67 72 65 61 74 65    If P is greate
80b0: 72 20 74 68 61 6e 20 28 28 55 2d 31 32 29 2a 36  r than ((U-12)*6
80c0: 34 2f 32 35 35 29 2d 32 33 0a 74 68 65 6e 20 74  4/255)-23.then t
80d0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
80e0: 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  e stored on the 
80f0: 62 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 74  b-tree page is t
8100: 68 65 20 6c 65 73 73 6f 72 20 6f 66 0a 4d 2b 28  he lessor of.M+(
8110: 28 50 2d 4d 29 25 28 55 2d 34 29 29 20 61 6e 64  (P-M)%(U-4)) and
8120: 20 28 28 55 2d 31 32 29 2a 36 34 2f 32 35 35 29   ((U-12)*64/255)
8130: 2d 32 33 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c  -23..</p></dd>.<
8140: 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  /dl></blockquote
8150: 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76 65 72 66 6c  >..<p>The overfl
8160: 6f 77 20 74 68 72 65 73 68 6f 6c 64 73 20 61 72  ow thresholds ar
8170: 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 67 69  e designed to gi
8180: 76 65 20 61 20 6d 69 6e 69 6d 75 6d 20 66 61 6e  ve a minimum fan
8190: 6f 75 74 20 6f 66 0a 34 20 66 6f 72 20 69 6e 64  out of.4 for ind
81a0: 65 78 20 62 2d 74 72 65 65 73 20 61 6e 64 20 74  ex b-trees and t
81b0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 6e 6f 75  o make sure enou
81c0: 67 68 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  gh of the payloa
81d0: 64 0a 69 73 20 6f 6e 20 74 68 65 20 62 2d 74 72  d.is on the b-tr
81e0: 65 65 20 70 61 67 65 20 74 68 61 74 20 74 68 65  ee page that the
81f0: 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 63   record header c
8200: 61 6e 20 75 73 75 61 6c 6c 79 20 62 65 20 61 63  an usually be ac
8210: 63 65 73 73 65 64 0a 77 69 74 68 6f 75 74 20 63  cessed.without c
8220: 6f 6e 73 75 6c 74 69 6e 67 20 61 6e 20 6f 76 65  onsulting an ove
8230: 72 66 6c 6f 77 20 70 61 67 65 2e 20 20 49 6e 20  rflow page.  In 
8240: 68 69 6e 64 73 69 67 68 74 2c 20 74 68 65 20 64  hindsight, the d
8250: 65 73 69 67 6e 65 72 73 20 6f 66 0a 74 68 65 20  esigners of.the 
8260: 53 51 4c 69 74 65 20 62 2d 74 72 65 65 20 6c 6f  SQLite b-tree lo
8270: 67 69 63 20 72 65 61 6c 69 7a 65 20 74 68 61 74  gic realize that
8280: 20 74 68 65 73 65 20 74 68 72 65 73 68 6f 6c 64   these threshold
8290: 73 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65  s could have bee
82a0: 6e 0a 6d 61 64 65 20 6d 75 63 68 20 73 69 6d 70  n.made much simp
82b0: 6c 65 72 2e 20 20 48 6f 77 65 76 65 72 2c 20 74  ler.  However, t
82c0: 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20  he computations 
82d0: 63 61 6e 6e 6f 74 20 62 65 20 6e 6f 77 20 62 65  cannot be now be
82e0: 20 63 68 61 6e 67 65 64 0a 77 69 74 68 6f 75 74   changed.without
82f0: 20 72 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 6e   resulting in an
8300: 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 66 69   incompatible fi
8310: 6c 65 20 66 6f 72 6d 61 74 2e 20 20 41 6e 64 20  le format.  And 
8320: 74 68 65 20 63 75 72 72 65 6e 74 20 63 6f 6d 70  the current comp
8330: 75 74 61 74 69 6f 6e 73 0a 77 6f 72 6b 20 77 65  utations.work we
8340: 6c 6c 2c 20 65 76 65 6e 20 69 66 20 74 68 65 79  ll, even if they
8350: 20 61 72 65 20 61 20 6c 69 74 74 6c 65 20 63 6f   are a little co
8360: 6d 70 6c 65 78 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  mplex.</p>..<h3>
8370: 31 2e 36 20 43 65 6c 6c 20 50 61 79 6c 6f 61 64  1.6 Cell Payload
8380: 20 4f 76 65 72 66 6c 6f 77 20 50 61 67 65 73 3c   Overflow Pages<
8390: 2f 68 33 3e 0a 0a 3c 70 3e 57 68 65 6e 20 74 68  /h3>..<p>When th
83a0: 65 20 70 61 79 6c 6f 61 64 20 6f 66 20 61 20 62  e payload of a b
83b0: 2d 74 72 65 65 20 63 65 6c 6c 20 69 73 20 74 6f  -tree cell is to
83c0: 6f 20 6c 61 72 67 65 20 66 6f 72 20 74 68 65 20  o large for the 
83d0: 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74 68 65  b-tree page,.the
83e0: 20 73 75 72 70 6c 75 73 20 69 73 20 73 70 69 6c   surplus is spil
83f0: 6c 65 64 20 6f 6e 74 6f 20 6f 76 65 72 66 6c 6f  led onto overflo
8400: 77 20 70 61 67 65 73 2e 20 20 4f 76 65 72 66 6c  w pages.  Overfl
8410: 6f 77 20 70 61 67 65 73 20 66 6f 72 6d 20 61 20  ow pages form a 
8420: 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e 20 20 54 68  linked.list.  Th
8430: 65 20 66 69 72 73 74 20 66 6f 75 72 20 62 79 74  e first four byt
8440: 65 73 20 6f 66 20 65 61 63 68 20 6f 76 65 72 66  es of each overf
8450: 6c 6f 77 20 70 61 67 65 20 61 72 65 20 61 20 62  low page are a b
8460: 69 67 2d 65 6e 64 69 61 6e 0a 69 6e 74 65 67 65  ig-endian.intege
8470: 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 70  r which is the p
8480: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
8490: 65 20 6e 65 78 74 20 70 61 67 65 20 69 6e 20 74  e next page in t
84a0: 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72  he chain, or zer
84b0: 6f 0a 66 6f 72 20 74 68 65 20 66 69 6e 61 6c 20  o.for the final 
84c0: 70 61 67 65 20 69 6e 20 74 68 65 20 63 68 61 69  page in the chai
84d0: 6e 2e 20 20 54 68 65 20 66 69 66 74 68 20 62 79  n.  The fifth by
84e0: 74 65 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c  te through the l
84f0: 61 73 74 20 75 73 61 62 6c 65 0a 62 79 74 65 20  ast usable.byte 
8500: 61 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64  are used to hold
8510: 20 6f 76 65 72 66 6c 6f 77 20 63 6f 6e 74 65 6e   overflow conten
8520: 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 37 20  t.</p>..<h3>1.7 
8530: 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72 20 50  Pointer Map or P
8540: 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68 33 3e  trmap Pages</h3>
8550: 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d 61 70  ..<p>Pointer map
8560: 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67 65 73   or ptrmap pages
8570: 20 61 72 65 20 65 78 74 72 61 20 70 61 67 65 73   are extra pages
8580: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
8590: 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f 20 6d  he database.to m
85a0: 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ake the operatio
85b0: 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63 75 75  n of [auto_vacuu
85c0: 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e  m] and [incremen
85d0: 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65  tal_vacuum] mode
85e0: 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74  s.more efficient
85f0: 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20 74 79  .  Other page ty
8600: 70 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  pes in the datab
8610: 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20 68 61  ase typically ha
8620: 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72 6f 6d  ve pointers.from
8630: 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69 6c 64   parent to child
8640: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
8650: 61 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65  a interior b-tre
8660: 65 20 70 61 67 65 20 63 6f 6e 74 61 69 6e 73 20  e page contains 
8670: 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69 74 73 20  pointers.to its 
8680: 63 68 69 6c 64 20 62 2d 74 72 65 65 20 70 61 67  child b-tree pag
8690: 65 73 20 61 6e 64 20 61 6e 20 6f 76 65 72 66 6c  es and an overfl
86a0: 6f 77 20 63 68 61 69 6e 20 68 61 73 20 61 20 70  ow chain has a p
86b0: 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65 61 72 6c  ointer.from earl
86c0: 69 65 72 20 74 6f 20 6c 61 74 65 72 20 6c 69 6e  ier to later lin
86d0: 6b 73 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2e  ks in the chain.
86e0: 20 20 41 20 70 74 72 6d 61 70 20 70 61 67 65 20    A ptrmap page 
86f0: 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b 61 67 65  contains linkage
8700: 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 6f 69  .information goi
8710: 6e 67 20 69 6e 20 74 68 65 20 6f 70 70 6f 73 69  ng in the opposi
8720: 74 65 20 64 69 72 65 63 74 69 6f 6e 2c 20 66 72  te direction, fr
8730: 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65  om child to pare
8740: 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 74 72 6d  nt.</p>..<p>Ptrm
8750: 61 70 20 70 61 67 65 73 20 6d 75 73 74 20 65 78  ap pages must ex
8760: 69 73 74 20 69 6e 20 61 6e 79 20 64 61 74 61 62  ist in any datab
8770: 61 73 65 20 66 69 6c 65 20 77 68 69 63 68 20 68  ase file which h
8780: 61 73 20 61 20 6e 6f 6e 2d 7a 65 72 6f 0a 6c 61  as a non-zero.la
8790: 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65  rgest root b-tre
87a0: 65 20 70 61 67 65 20 76 61 6c 75 65 20 61 74 20  e page value at 
87b0: 6f 66 66 73 65 74 20 35 32 20 69 6e 20 74 68 65  offset 52 in the
87c0: 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72   database header
87d0: 2e 0a 49 66 20 74 68 65 20 6c 61 72 67 65 73 74  ..If the largest
87e0: 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67   root b-tree pag
87f0: 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2c  e value is zero,
8800: 20 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61   then the databa
8810: 73 65 20 6d 75 73 74 20 6e 6f 74 0a 63 6f 6e 74  se must not.cont
8820: 61 69 6e 20 70 74 72 6d 61 70 20 70 61 67 65 73  ain ptrmap pages
8830: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 20 64  .</p>..<p>In a d
8840: 61 74 61 62 61 73 65 20 77 69 74 68 20 70 74 72  atabase with ptr
8850: 6d 61 70 20 70 61 67 65 73 2c 20 74 68 65 20 66  map pages, the f
8860: 69 72 73 74 20 70 74 72 6d 61 70 20 70 61 67 65  irst ptrmap page
8870: 20 69 73 20 70 61 67 65 20 32 2e 0a 41 20 70 74   is page 2..A pt
8880: 72 6d 61 70 20 70 61 67 65 20 63 6f 6e 73 69 73  rmap page consis
8890: 74 73 20 6f 66 20 61 6e 20 61 72 72 61 79 20 6f  ts of an array o
88a0: 66 20 35 2d 62 79 74 65 20 65 6e 74 72 69 65 73  f 5-byte entries
88b0: 2e 20 20 4c 65 74 20 4a 20 62 65 20 74 68 65 0a  .  Let J be the.
88c0: 6e 75 6d 62 65 72 20 6f 66 20 35 2d 62 79 74 65  number of 5-byte
88d0: 20 65 6e 74 72 69 65 73 20 74 68 61 74 20 77 69   entries that wi
88e0: 6c 6c 20 66 69 74 20 69 6e 20 74 68 65 20 75 73  ll fit in the us
88f0: 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20 61 20  able space of a 
8900: 70 61 67 65 2e 0a 28 49 6e 20 6f 74 68 65 72 20  page..(In other 
8910: 77 6f 72 64 73 2c 20 4a 3d 55 2f 35 2e 29 20 20  words, J=U/5.)  
8920: 54 68 65 20 66 69 72 73 74 20 70 74 72 6d 61 70  The first ptrmap
8930: 20 70 61 67 65 20 77 69 6c 6c 20 63 6f 6e 74 61   page will conta
8940: 69 6e 20 62 61 63 6b 20 70 6f 69 6e 74 65 72 0a  in back pointer.
8950: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20  information for 
8960: 70 61 67 65 73 20 33 20 74 68 72 6f 75 67 68 20  pages 3 through 
8970: 4a 2b 32 2c 20 69 6e 63 6c 75 73 69 76 65 2e 20  J+2, inclusive. 
8980: 20 54 68 65 20 6e 65 78 74 20 70 6f 69 6e 74 65   The next pointe
8990: 72 20 6d 61 70 0a 70 61 67 65 20 77 69 6c 6c 20  r map.page will 
89a0: 62 65 20 6f 6e 20 70 61 67 65 20 4a 2b 33 20 61  be on page J+3 a
89b0: 6e 64 20 74 68 61 74 20 70 74 72 6d 61 70 20 70  nd that ptrmap p
89c0: 61 67 65 20 77 69 6c 6c 20 70 72 6f 76 69 64 65  age will provide
89d0: 20 62 61 63 6b 20 70 6f 69 6e 74 65 72 0a 69 6e   back pointer.in
89e0: 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 70 61  formation for pa
89f0: 67 65 73 20 4a 2b 34 20 74 68 72 6f 75 67 68 20  ges J+4 through 
8a00: 32 2a 4a 2b 33 20 69 6e 63 6c 75 73 69 76 65 2e  2*J+3 inclusive.
8a10: 20 20 41 6e 20 73 6f 20 66 6f 72 74 68 20 66 6f    An so forth fo
8a20: 72 0a 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  r.the entire dat
8a30: 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a  abase file.</p>.
8a40: 0a 3c 70 3e 49 6e 20 61 20 64 61 74 61 62 61 73  .<p>In a databas
8a50: 65 20 74 68 61 74 20 75 73 65 73 20 70 74 72 6d  e that uses ptrm
8a60: 61 70 20 70 61 67 65 73 2c 20 61 6c 6c 20 70 61  ap pages, all pa
8a70: 67 65 73 20 61 74 20 6c 6f 63 61 74 69 6f 6e 73  ges at locations
8a80: 20 69 64 65 6e 74 69 66 69 65 64 0a 62 79 20 74   identified.by t
8a90: 68 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69  he computation i
8aa0: 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 70  n the previous p
8ab0: 61 72 61 67 72 61 70 68 20 6d 75 73 74 20 62 65  aragraph must be
8ac0: 20 70 74 72 6d 61 70 20 70 61 67 65 20 61 6e 64   ptrmap page and
8ad0: 20 6e 6f 0a 6f 74 68 65 72 20 70 61 67 65 20 6d   no.other page m
8ae0: 61 79 20 62 65 20 61 20 70 74 72 6d 61 70 20 70  ay be a ptrmap p
8af0: 61 67 65 2e 20 20 45 78 63 65 70 74 2c 20 69 66  age.  Except, if
8b00: 20 74 68 65 20 62 79 74 65 2d 6c 6f 63 6b 20 70   the byte-lock p
8b10: 61 67 65 20 68 61 70 70 65 6e 73 20 74 6f 0a 66  age happens to.f
8b20: 61 6c 6c 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  all on the same 
8b30: 70 61 67 65 20 6e 75 6d 62 65 72 20 61 73 20 61  page number as a
8b40: 20 70 74 72 6d 61 70 20 70 61 67 65 2c 20 74 68   ptrmap page, th
8b50: 65 6e 20 74 68 65 20 70 74 72 6d 61 70 20 69 73  en the ptrmap is
8b60: 20 6d 6f 76 65 64 0a 74 6f 20 74 68 65 20 66 6f   moved.to the fo
8b70: 6c 6c 6f 77 69 6e 67 20 70 61 67 65 20 66 6f 72  llowing page for
8b80: 20 74 68 61 74 20 6f 6e 65 20 63 61 73 65 2e 3c   that one case.<
8b90: 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62  /p>..<p>Each 5-b
8ba0: 79 74 65 20 65 6e 74 72 79 20 6f 6e 20 61 20 70  yte entry on a p
8bb0: 74 72 6d 61 70 20 70 61 67 65 20 70 72 6f 76 69  trmap page provi
8bc0: 64 65 73 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e  des back-link in
8bd0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
8be0: 0a 6f 6e 65 20 6f 66 20 70 61 67 65 73 20 74 68  .one of pages th
8bf0: 61 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66  at immediately f
8c00: 6f 6c 6c 6f 77 20 74 68 65 20 70 6f 69 6e 74 65  ollow the pointe
8c10: 72 20 6d 61 70 2e 20 20 49 66 20 70 61 67 65 20  r map.  If page 
8c20: 42 20 69 73 0a 70 74 72 6d 61 70 20 70 61 67 65  B is.ptrmap page
8c30: 20 74 68 65 6e 20 62 61 63 6b 2d 6c 69 6e 6b 20   then back-link 
8c40: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
8c50: 74 20 70 61 67 65 20 42 2b 31 20 69 73 20 70 72  t page B+1 is pr
8c60: 6f 76 69 64 65 64 20 62 79 0a 74 68 65 20 66 69  ovided by.the fi
8c70: 72 73 74 20 65 6e 74 72 79 20 6f 6e 20 74 68 65  rst entry on the
8c80: 20 70 6f 69 6e 74 65 72 20 6d 61 70 2e 20 20 49   pointer map.  I
8c90: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
8ca0: 20 70 61 67 65 20 42 2b 32 20 69 73 0a 70 72 6f   page B+2 is.pro
8cb0: 76 69 64 65 64 20 62 79 20 74 68 65 20 73 65 63  vided by the sec
8cc0: 6f 6e 64 20 65 6e 74 72 79 2e 20 20 41 6e 64 20  ond entry.  And 
8cd0: 73 6f 20 66 6f 72 74 68 2e 3c 2f 70 3e 0a 0a 3c  so forth.</p>..<
8ce0: 70 3e 45 61 63 68 20 35 2d 62 79 74 65 20 70 74  p>Each 5-byte pt
8cf0: 72 6d 61 70 20 65 6e 74 72 79 20 63 6f 6e 73 69  rmap entry consi
8d00: 73 74 73 20 6f 66 20 6f 6e 65 20 62 79 74 65 20  sts of one byte 
8d10: 6f 66 20 22 70 61 67 65 20 74 79 70 65 22 20 69  of "page type" i
8d20: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 66 6f 6c 6c 6f  nformation.follo
8d30: 77 65 64 20 62 79 20 61 20 34 2d 62 79 74 65 20  wed by a 4-byte 
8d40: 62 69 67 2d 65 6e 64 69 61 6e 20 70 61 67 65 20  big-endian page 
8d50: 6e 75 6d 62 65 72 2e 20 20 46 69 76 65 20 70 61  number.  Five pa
8d60: 67 65 20 74 79 70 65 73 20 61 72 65 20 72 65 63  ge types are rec
8d70: 6f 67 6e 69 7a 65 64 3a 0a 3c 2f 70 3e 0a 0a 3c  ognized:.</p>..<
8d80: 6f 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74 72 65 65  ol>.<li>A b-tree
8d90: 20 72 6f 6f 74 20 70 61 67 65 2e 20 20 54 68 65   root page.  The
8da0: 0a 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68 6f  .page number sho
8db0: 75 6c 64 20 62 65 20 7a 65 72 6f 2e 0a 3c 6c 69  uld be zero..<li
8dc0: 3e 41 20 66 72 65 65 6c 69 73 74 20 70 61 67 65  >A freelist page
8dd0: 2e 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62  .  The page numb
8de0: 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 7a 65 72  er should be.zer
8df0: 6f 2e 0a 3c 6c 69 3e 54 68 65 20 66 69 72 73 74  o..<li>The first
8e00: 20 70 61 67 65 20 6f 66 20 61 0a 63 65 6c 6c 20   page of a.cell 
8e10: 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77  payload overflow
8e20: 20 63 68 61 69 6e 2e 20 20 54 68 65 20 70 61 67   chain.  The pag
8e30: 65 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20  e number is the 
8e40: 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 61 74  b-tree page that
8e50: 0a 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63 65  .contains the ce
8e60: 6c 6c 20 77 68 6f 73 65 20 63 6f 6e 74 65 6e 74  ll whose content
8e70: 20 68 61 73 20 6f 76 65 72 66 6c 6f 77 65 64 2e   has overflowed.
8e80: 0a 3c 6c 69 3e 41 20 70 61 67 65 20 69 6e 20 61  .<li>A page in a
8e90: 6e 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e  n overflow chain
8ea0: 0a 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 20  .other than the 
8eb0: 66 69 72 73 74 20 70 61 67 65 2e 20 20 54 68 65  first page.  The
8ec0: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20   page number is 
8ed0: 74 68 65 20 70 72 69 6f 72 20 70 61 67 65 20 6f  the prior page o
8ee0: 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 63  f the.overflow c
8ef0: 68 61 69 6e 2e 0a 3c 6c 69 3e 41 20 6e 6f 6e 2d  hain..<li>A non-
8f00: 72 6f 6f 74 20 62 2d 74 72 65 65 20 70 61 67 65  root b-tree page
8f10: 2e 20 20 54 68 65 0a 70 61 67 65 20 6e 75 6d 62  .  The.page numb
8f20: 65 72 20 69 73 20 74 68 65 20 70 61 72 65 6e 74  er is the parent
8f30: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
8f40: 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 79 20 64  ol>..<p>In any d
8f50: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 68 61  atabase file tha
8f60: 74 20 63 6f 6e 74 61 69 6e 73 20 70 74 72 6d 61  t contains ptrma
8f70: 70 20 70 61 67 65 73 2c 20 61 6c 6c 20 62 2d 74  p pages, all b-t
8f80: 72 65 65 20 72 6f 6f 74 20 70 61 67 65 73 20 0a  ree root pages .
8f90: 6d 75 73 74 20 63 6f 6d 65 20 62 65 66 6f 72 65  must come before
8fa0: 20 61 6e 79 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d   any non-root b-
8fb0: 74 72 65 65 20 70 61 67 65 2c 20 63 65 6c 6c 20  tree page, cell 
8fc0: 70 61 79 6c 6f 61 64 20 6f 76 65 72 66 6c 6f 77  payload overflow
8fd0: 20 70 61 67 65 2c 20 6f 72 0a 66 72 65 65 6c 69   page, or.freeli
8fe0: 73 74 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 68  st page.</p>..<h
8ff0: 32 3e 32 2e 30 20 53 63 68 65 6d 61 20 4c 61 79  2>2.0 Schema Lay
9000: 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20  er</h2>..<p>The 
9010: 66 6f 72 65 67 6f 69 6e 67 20 74 65 78 74 20 64  foregoing text d
9020: 65 73 63 72 69 62 65 73 20 6c 6f 77 2d 6c 65 76  escribes low-lev
9030: 65 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68  el aspects of th
9040: 65 20 53 51 4c 69 74 65 20 66 69 6c 65 0a 66 6f  e SQLite file.fo
9050: 72 6d 61 74 2e 20 20 54 68 65 20 62 2d 74 72 65  rmat.  The b-tre
9060: 65 20 6d 65 63 68 61 6e 69 73 6d 20 70 72 6f 76  e mechanism prov
9070: 69 64 65 73 20 70 6f 77 65 72 66 75 6c 20 61 6e  ides powerful an
9080: 64 20 65 66 66 69 63 69 65 6e 74 20 6d 65 61 6e  d efficient mean
9090: 73 20 6f 66 0a 61 63 63 65 73 73 69 6e 67 20 61  s of.accessing a
90a0: 20 6c 61 72 67 65 20 64 61 74 61 20 73 65 74 2e   large data set.
90b0: 20 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 77    This section w
90c0: 69 6c 6c 20 64 65 73 63 72 69 62 65 20 68 6f 77  ill describe how
90d0: 20 74 68 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62   the.low-level b
90e0: 2d 74 72 65 65 20 6c 61 79 65 72 20 69 73 20 75  -tree layer is u
90f0: 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
9100: 20 68 69 67 68 65 72 2d 6c 65 76 65 6c 20 53 51   higher-level SQ
9110: 4c 0a 63 61 70 61 62 69 6c 69 74 69 65 73 2e 3c  L.capabilities.<
9120: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
9130: 67 6d 65 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72  gment record_for
9140: 6d 61 74 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d  mat {record form
9150: 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 32 2e  at}</tcl>.<h3>2.
9160: 31 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c  1 Record Format<
9170: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6e  /h3>..<p>The con
9180: 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20  tent of a table 
9190: 62 2d 74 72 65 65 20 6c 65 61 66 20 70 61 67 65  b-tree leaf page
91a0: 20 61 6e 64 20 74 68 65 20 6b 65 79 0a 6f 66 20   and the key.of 
91b0: 61 6e 79 20 69 6e 64 65 78 20 62 2d 74 72 65 65  any index b-tree
91c0: 20 70 61 67 65 20 77 61 73 20 63 68 61 72 61 63   page was charac
91d0: 74 65 72 69 7a 65 64 20 61 62 6f 76 65 0a 61 73  terized above.as
91e0: 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 73 65   an arbitrary se
91f0: 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2e  quence of bytes.
9200: 0a 54 68 65 20 70 72 69 6f 72 20 64 69 73 63 75  .The prior discu
9210: 73 73 69 6f 6e 20 6d 65 6e 74 69 6f 6e 65 64 20  ssion mentioned 
9220: 6f 6e 65 20 6b 65 79 20 62 65 69 6e 67 20 6c 65  one key being le
9230: 73 73 20 74 68 61 6e 20 61 6e 6f 74 68 65 72 2c  ss than another,
9240: 20 62 75 74 0a 64 69 64 20 6e 6f 74 20 64 65 66   but.did not def
9250: 69 6e 65 20 77 68 61 74 20 22 6c 65 73 73 20 74  ine what "less t
9260: 68 61 6e 22 20 6d 65 61 6e 74 2e 20 20 54 68 65  han" meant.  The
9270: 20 63 75 72 72 65 6e 74 20 73 65 63 74 69 6f 6e   current section
9280: 20 77 69 6c 6c 20 61 64 64 72 65 73 73 0a 74 68   will address.th
9290: 65 73 65 20 64 65 66 69 63 69 65 6e 63 69 65 73  ese deficiencies
92a0: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61 79 6c 6f 61  .</p>..<p>Payloa
92b0: 64 2c 20 62 65 20 69 74 20 74 61 62 6c 65 20 63  d, be it table c
92c0: 6f 6e 74 65 6e 74 20 6f 72 20 69 6e 64 65 78 20  ontent or index 
92d0: 6b 65 79 73 2c 20 69 73 20 61 6c 77 61 79 73 20  keys, is always 
92e0: 69 6e 20 74 68 65 20 22 72 65 63 6f 72 64 0a 66  in the "record.f
92f0: 6f 72 6d 61 74 22 2e 20 20 54 68 65 20 72 65 63  ormat".  The rec
9300: 6f 72 64 20 66 6f 72 6d 61 74 20 64 65 66 69 6e  ord format defin
9310: 65 73 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66  es a sequence of
9320: 20 76 61 6c 75 65 73 20 63 6f 72 72 65 73 70 6f   values correspo
9330: 6e 64 69 6e 67 20 74 6f 0a 74 6f 20 63 6f 6c 75  nding to.to colu
9340: 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20 6f  mns in a table o
9350: 72 20 69 6e 64 65 78 2e 20 20 54 68 65 20 72 65  r index.  The re
9360: 63 6f 72 64 20 66 6f 72 6d 61 74 20 73 70 65 63  cord format spec
9370: 69 66 69 65 73 20 74 68 65 20 6e 75 6d 62 65 72  ifies the number
9380: 0a 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65  .of columns, the
9390: 20 64 61 74 61 74 79 70 65 20 6f 66 20 65 61 63   datatype of eac
93a0: 68 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  h column, and th
93b0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63  e content of eac
93c0: 68 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c  h column.</p>..<
93d0: 70 3e 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72  p>The record for
93e0: 6d 61 74 20 6d 61 6b 65 73 20 65 78 74 65 6e 73  mat makes extens
93f0: 69 76 65 20 75 73 65 20 6f 66 20 74 68 65 20 0a  ive use of the .
9400: 5b 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68  [variable-length
9410: 20 69 6e 74 65 67 65 72 5d 20 6f 72 20 5b 76 61   integer] or [va
9420: 72 69 6e 74 5d 0a 72 65 70 72 65 73 65 6e 74 61  rint].representa
9430: 74 69 6f 6e 20 6f 66 20 36 34 2d 62 69 74 20 73  tion of 64-bit s
9440: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 20 64  igned integers d
9450: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 3c 2f 70  efined above.</p
9460: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
9470: 65 6e 74 20 73 65 72 69 61 6c 74 79 70 65 20 7b  ent serialtype {
9480: 73 65 72 69 61 6c 20 74 79 70 65 7d 20 7b 73 65  serial type} {se
9490: 72 69 61 6c 20 74 79 70 65 73 7d 3c 2f 74 63 6c  rial types}</tcl
94a0: 3e 0a 3c 70 3e 41 20 72 65 63 6f 72 64 20 63 6f  >.<p>A record co
94b0: 6e 74 61 69 6e 73 20 61 20 68 65 61 64 65 72 20  ntains a header 
94c0: 61 6e 64 20 61 20 62 6f 64 79 2c 20 69 6e 20 74  and a body, in t
94d0: 68 61 74 20 6f 72 64 65 72 2e 20 20 0a 54 68 65  hat order.  .The
94e0: 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77   header begins w
94f0: 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72  ith a single var
9500: 69 6e 74 20 77 68 69 63 68 20 64 65 74 65 72 6d  int which determ
9510: 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  ines the total n
9520: 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20 69  umber.of bytes i
9530: 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 20 54  n the header.  T
9540: 68 65 20 76 61 72 69 6e 74 20 76 61 6c 75 65 20  he varint value 
9550: 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  is the size of t
9560: 68 65 20 68 65 61 64 65 72 20 69 6e 0a 62 79 74  he header in.byt
9570: 65 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  e including the 
9580: 73 69 7a 65 20 76 61 72 69 6e 74 20 69 74 73 65  size varint itse
9590: 6c 66 2e 20 20 46 6f 6c 6c 6f 77 69 6e 67 20 74  lf.  Following t
95a0: 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61  he size varint a
95b0: 72 65 0a 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  re.one or more a
95c0: 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
95d0: 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d  s, one per colum
95e0: 6e 2e 20 20 54 68 65 73 65 20 61 64 64 69 74 69  n.  These additi
95f0: 6f 6e 61 6c 20 76 61 72 69 6e 74 73 0a 61 72 65  onal varints.are
9600: 20 63 61 6c 6c 65 64 20 22 73 65 72 69 61 6c 20   called "serial 
9610: 74 79 70 65 22 20 6e 75 6d 62 65 72 73 20 61 6e  type" numbers an
9620: 64 0a 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  d.determine the 
9630: 64 61 74 61 74 79 70 65 20 6f 66 20 65 61 63 68  datatype of each
9640: 20 63 6f 6c 75 6d 6e 2c 20 61 63 63 6f 72 64 69   column, accordi
9650: 6e 67 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ng to the follow
9660: 69 6e 67 20 6b 65 79 3a 3c 2f 70 3e 0a 0a 3c 63  ing key:</p>..<c
9670: 65 6e 74 65 72 3e 0a 3c 69 3e 53 65 72 69 61 6c  enter>.<i>Serial
9680: 20 54 79 70 65 20 43 6f 64 65 73 20 4f 66 20 54   Type Codes Of T
9690: 68 65 20 52 65 63 6f 72 64 20 46 6f 72 6d 61 74  he Record Format
96a0: 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20  </i><br>.<table 
96b0: 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64  width="80%" bord
96c0: 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 53 65  er=1>.<tr><th>Se
96d0: 72 69 61 6c 20 54 79 70 65 3c 74 68 3e 43 6f 6e  rial Type<th>Con
96e0: 74 65 6e 74 20 53 69 7a 65 3c 74 68 3e 4d 65 61  tent Size<th>Mea
96f0: 6e 69 6e 67 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ning.<tr><td val
9700: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
9710: 6e 74 65 72 3e 30 3c 74 64 20 76 61 6c 69 67 6e  nter>0<td valign
9720: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
9730: 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>0<td align=lef
9740: 74 3e 0a 4e 55 4c 4c 0a 3c 74 72 3e 3c 74 64 20  t>.NULL.<tr><td 
9750: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
9760: 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 76 61 6c  =center>1<td val
9770: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
9780: 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d  nter>1<td align=
9790: 6c 65 66 74 3e 0a 38 2d 62 69 74 20 74 77 6f 73  left>.8-bit twos
97a0: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
97b0: 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ger.<tr><td vali
97c0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
97d0: 74 65 72 3e 32 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>2<td valign=
97e0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
97f0: 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >2<td align=left
9800: 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 31 36 2d  >.Big-endian 16-
9810: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
9820: 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e  ent integer.<tr>
9830: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
9840: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64  lign=center>3<td
9850: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
9860: 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20 61 6c  n=center>3<td al
9870: 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e  ign=left>.Big-en
9880: 64 69 61 6e 20 32 34 2d 62 69 74 20 74 77 6f 73  dian 24-bit twos
9890: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
98a0: 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ger.<tr><td vali
98b0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
98c0: 74 65 72 3e 34 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>4<td valign=
98d0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
98e0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
98f0: 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d  >.Big-endian 32-
9900: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
9910: 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e  ent integer.<tr>
9920: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
9930: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 3c 74 64  lign=center>5<td
9940: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
9950: 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 61 6c  n=center>6<td al
9960: 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e  ign=left>.Big-en
9970: 64 69 61 6e 20 34 38 2d 62 69 74 20 74 77 6f 73  dian 48-bit twos
9980: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
9990: 67 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ger.<tr><td vali
99a0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
99b0: 74 65 72 3e 36 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>6<td valign=
99c0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
99d0: 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >8<td align=left
99e0: 3e 0a 42 69 67 2d 65 6e 64 69 61 6e 20 36 34 2d  >.Big-endian 64-
99f0: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
9a00: 65 6e 74 20 69 6e 74 65 67 65 72 0a 3c 74 72 3e  ent integer.<tr>
9a10: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
9a20: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37 3c 74 64  lign=center>7<td
9a30: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
9a40: 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 61 6c  n=center>8<td al
9a50: 69 67 6e 3d 6c 65 66 74 3e 0a 42 69 67 2d 65 6e  ign=left>.Big-en
9a60: 64 69 61 6e 20 49 45 45 45 20 37 35 34 2d 32 30  dian IEEE 754-20
9a70: 30 38 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69  08 64-bit floati
9a80: 6e 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 0a  ng point number.
9a90: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
9aa0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
9ab0: 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
9ac0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74  align=center>0<t
9ad0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 49 6e  d align=left>.In
9ae0: 74 65 67 65 72 20 63 6f 6e 73 74 61 6e 74 20 30  teger constant 0
9af0: 2e 20 20 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c  .  Only availabl
9b00: 65 20 66 6f 72 20 73 63 68 65 6d 61 20 66 6f 72  e for schema for
9b10: 6d 61 74 20 34 20 61 6e 64 20 68 69 67 68 65 72  mat 4 and higher
9b20: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
9b30: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
9b40: 72 3e 39 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  r>9<td valign=to
9b50: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30  p align=center>0
9b60: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
9b70: 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61 6e 74  Integer constant
9b80: 20 31 2e 20 20 4f 6e 6c 79 20 61 76 61 69 6c 61   1.  Only availa
9b90: 62 6c 65 20 66 6f 72 20 73 63 68 65 6d 61 20 66  ble for schema f
9ba0: 6f 72 6d 61 74 20 34 20 61 6e 64 20 68 69 67 68  ormat 4 and high
9bb0: 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  er..<tr><td vali
9bc0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
9bd0: 74 65 72 3e 31 30 2c 31 31 0a 20 20 20 20 3c 74  ter>10,11.    <t
9be0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
9bf0: 67 6e 3d 63 65 6e 74 65 72 3e 26 6e 62 73 70 3b  gn=center>&nbsp;
9c00: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
9c10: 3c 69 3e 4e 6f 74 20 75 73 65 64 2e 20 20 52 65  <i>Not used.  Re
9c20: 73 65 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e  served for expan
9c30: 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72 3e 3c 74  sion.</i>.<tr><t
9c40: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
9c50: 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32  gn=center>N&#x22
9c60: 36 35 3b 31 32 20 61 6e 64 20 65 76 65 6e 0a 20  65;12 and even. 
9c70: 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
9c80: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28  p align=center>(
9c90: 4e 2d 31 32 29 2f 32 3c 74 64 20 61 6c 69 67 6e  N-12)/2<td align
9ca0: 3d 6c 65 66 74 3e 0a 41 20 73 74 72 69 6e 67 20  =left>.A string 
9cb0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
9cc0: 65 6e 63 6f 64 69 6e 67 20 61 6e 64 20 28 4e 2d  encoding and (N-
9cd0: 31 32 29 2f 32 20 62 79 74 65 73 20 69 6e 20 6c  12)/2 bytes in l
9ce0: 65 6e 67 74 68 2e 0a 54 68 65 20 6e 75 6c 20 74  ength..The nul t
9cf0: 65 72 6d 69 6e 61 74 6f 72 20 69 73 20 6f 6d 69  erminator is omi
9d00: 74 74 65 64 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  tted..<tr><td va
9d10: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
9d20: 65 6e 74 65 72 3e 4e 26 23 78 32 32 36 35 3b 31  enter>N&#x2265;1
9d30: 33 20 61 6e 64 20 6f 64 64 0a 20 20 20 20 3c 74  3 and odd.    <t
9d40: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
9d50: 67 6e 3d 63 65 6e 74 65 72 3e 28 4e 2d 31 33 29  gn=center>(N-13)
9d60: 2f 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  /2<td align=left
9d70: 3e 0a 41 20 42 4c 4f 42 20 74 68 61 74 20 69 73  >.A BLOB that is
9d80: 20 28 4e 2d 31 33 29 2f 32 20 62 79 74 65 73 20   (N-13)/2 bytes 
9d90: 69 6e 20 6c 65 6e 67 74 68 0a 3c 2f 74 61 62 6c  in length.</tabl
9da0: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e  e></center>..<p>
9db0: 4e 6f 74 65 20 74 68 61 74 20 62 65 63 61 75 73  Note that becaus
9dc0: 65 20 6f 66 20 74 68 65 20 77 61 79 20 76 61 72  e of the way var
9dd0: 69 6e 74 73 20 61 72 65 20 64 65 66 69 6e 65 64  ints are defined
9de0: 2c 20 74 68 65 20 68 65 61 64 65 72 20 73 69 7a  , the header siz
9df0: 65 20 76 61 72 69 6e 74 0a 61 6e 64 20 73 65 72  e varint.and ser
9e00: 69 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73  ial type varints
9e10: 20 77 69 6c 6c 20 75 73 75 61 6c 6c 79 20 63 6f   will usually co
9e20: 6e 73 69 73 74 20 6f 66 20 61 20 73 69 6e 67 6c  nsist of a singl
9e30: 65 20 62 79 74 65 2e 20 20 54 68 65 0a 73 65 72  e byte.  The.ser
9e40: 69 61 6c 20 74 79 70 65 20 76 61 72 69 6e 74 73  ial type varints
9e50: 20 66 6f 72 20 6c 61 72 67 65 20 73 74 72 69 6e   for large strin
9e60: 67 73 20 61 6e 64 20 42 4c 4f 42 73 20 6d 69 67  gs and BLOBs mig
9e70: 68 74 20 65 78 74 65 6e 64 20 74 6f 20 74 77 6f  ht extend to two
9e80: 20 6f 72 20 74 68 72 65 65 0a 62 79 74 65 20 76   or three.byte v
9e90: 61 72 69 6e 74 73 2c 20 62 75 74 20 74 68 61 74  arints, but that
9ea0: 20 69 73 20 74 68 65 20 65 78 63 65 70 74 69 6f   is the exceptio
9eb0: 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20 74 68  n rather than th
9ec0: 65 20 72 75 6c 65 2e 20 0a 54 68 65 20 76 61 72  e rule. .The var
9ed0: 69 6e 74 20 66 6f 72 6d 61 74 20 69 73 20 76 65  int format is ve
9ee0: 72 79 20 65 66 66 69 63 69 65 6e 74 20 61 74 20  ry efficient at 
9ef0: 63 6f 64 69 6e 67 20 74 68 65 20 72 65 63 6f 72  coding the recor
9f00: 64 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c  d header.</p>..<
9f10: 70 3e 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72  p>The values for
9f20: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
9f30: 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64  the record immed
9f40: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68  iately follow th
9f50: 65 20 68 65 61 64 65 72 2e 0a 4e 6f 74 65 20 74  e header..Note t
9f60: 68 61 74 20 66 6f 72 20 73 65 72 69 61 6c 20 74  hat for serial t
9f70: 79 70 65 73 20 30 2c 20 38 2c 20 39 2c 20 31 32  ypes 0, 8, 9, 12
9f80: 2c 20 61 6e 64 20 31 33 2c 20 74 68 65 20 76 61  , and 13, the va
9f90: 6c 75 65 20 69 73 20 7a 65 72 6f 20 62 79 74 65  lue is zero byte
9fa0: 73 20 69 6e 0a 6c 65 6e 67 74 68 2e 20 20 49 66  s in.length.  If
9fb0: 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65   all columns are
9fc0: 20 6f 66 20 74 68 65 73 65 20 74 79 70 65 73 20   of these types 
9fd0: 74 68 65 6e 20 74 68 65 20 62 6f 64 79 20 73 65  then the body se
9fe0: 63 74 69 6f 6e 20 6f 66 20 74 68 65 0a 72 65 63  ction of the.rec
9ff0: 6f 72 64 20 69 73 20 65 6d 70 74 79 2e 3c 2f 70  ord is empty.</p
a000: 3e 0a 0a 3c 68 33 3e 32 2e 32 20 52 65 63 6f 72  >..<h3>2.2 Recor
a010: 64 20 53 6f 72 74 20 4f 72 64 65 72 3c 2f 68 33  d Sort Order</h3
a020: 3e 0a 0a 3c 70 3e 54 68 65 20 6f 72 64 65 72 20  >..<p>The order 
a030: 6f 66 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  of keys in an in
a040: 64 65 78 20 62 2d 74 72 65 65 20 69 73 20 64 65  dex b-tree is de
a050: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
a060: 73 6f 72 74 20 6f 72 64 65 72 20 6f 66 0a 74 68  sort order of.th
a070: 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 74  e records that t
a080: 68 65 20 6b 65 79 73 20 72 65 70 72 65 73 65 6e  he keys represen
a090: 74 2e 20 20 52 65 63 6f 72 64 20 63 6f 6d 70 61  t.  Record compa
a0a0: 72 69 73 6f 6e 20 70 72 6f 63 65 65 64 73 20 63  rison proceeds c
a0b0: 6f 6c 75 6d 6e 0a 62 79 20 63 6f 6c 75 6d 6e 2e  olumn.by column.
a0c0: 20 20 43 6f 6c 75 6d 6e 73 20 6f 66 20 61 20 72    Columns of a r
a0d0: 65 63 6f 72 64 20 61 72 65 20 65 78 61 6d 69 6e  ecord are examin
a0e0: 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ed from left to 
a0f0: 72 69 67 68 74 2e 20 20 54 68 65 0a 66 69 72 73  right.  The.firs
a100: 74 20 70 61 69 72 20 6f 66 20 63 6f 6c 75 6d 6e  t pair of column
a110: 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74 20 65  s that are not e
a120: 71 75 61 6c 20 64 65 74 65 72 6d 69 6e 65 73 20  qual determines 
a130: 74 68 65 20 72 65 6c 61 74 69 76 65 20 6f 72 64  the relative ord
a140: 65 72 0a 6f 66 20 74 68 65 20 74 77 6f 20 72 65  er.of the two re
a150: 63 6f 72 64 73 2e 20 20 54 68 65 20 73 6f 72 74  cords.  The sort
a160: 20 6f 72 64 65 72 20 6f 66 20 69 6e 64 69 76 69   order of indivi
a170: 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 69 73 20  dual columns is 
a180: 61 73 0a 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a  as.follows:</p>.
a190: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 4e 55 4c 4c 20 76  .<ol>.<li>NULL v
a1a0: 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20 74 79  alues (serial ty
a1b0: 70 65 20 30 29 20 73 6f 72 74 20 66 69 72 73 74  pe 0) sort first
a1c0: 0a 3c 6c 69 3e 4e 75 6d 65 72 69 63 20 76 61 6c  .<li>Numeric val
a1d0: 75 65 73 20 28 73 65 72 69 61 6c 20 74 79 70 65  ues (serial type
a1e0: 73 20 31 20 74 68 72 6f 75 67 68 20 39 29 20 73  s 1 through 9) s
a1f0: 6f 72 74 20 6e 65 78 74 20 61 6e 64 20 69 6e 20  ort next and in 
a200: 6e 75 6d 65 72 69 63 20 6f 72 64 65 72 0a 3c 6c  numeric order.<l
a210: 69 3e 54 65 78 74 20 76 61 6c 75 65 73 20 28 65  i>Text values (e
a220: 76 65 6e 20 73 65 72 69 61 6c 20 74 79 70 65 73  ven serial types
a230: 20 31 32 20 61 6e 64 20 6c 61 72 67 65 72 29 20   12 and larger) 
a240: 73 6f 72 74 20 6e 65 78 74 20 69 6e 20 74 68 65  sort next in the
a250: 20 6f 72 64 65 72 0a 20 20 20 20 64 65 74 65 72   order.    deter
a260: 6d 69 6e 65 64 20 62 79 20 74 68 65 20 63 6f 6c  mined by the col
a270: 75 6d 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 66  umns collating f
a280: 75 6e 63 74 69 6f 6e 0a 3c 6c 69 3e 42 4c 4f 42  unction.<li>BLOB
a290: 20 76 61 6c 75 65 73 20 28 6f 64 64 20 73 65 72   values (odd ser
a2a0: 69 61 6c 20 74 79 70 65 73 20 31 33 20 61 6e 64  ial types 13 and
a2b0: 20 6c 61 72 67 65 72 29 20 73 6f 72 74 20 6c 61   larger) sort la
a2c0: 73 74 20 69 6e 20 6f 72 64 65 72 20 0a 20 20 20  st in order .   
a2d0: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6d   determined by m
a2e0: 65 6d 63 6d 70 28 29 2e 0a 3c 2f 6f 6c 3e 0a 0a  emcmp()..</ol>..
a2f0: 3c 70 3e 41 20 63 6f 6c 6c 61 74 69 6e 67 20 66  <p>A collating f
a300: 75 6e 63 74 69 6f 6e 20 66 6f 72 20 65 61 63 68  unction for each
a310: 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 65 63 65 73   column is neces
a320: 73 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  sary in order to
a330: 20 63 6f 6d 70 75 74 65 0a 74 68 65 20 6f 72 64   compute.the ord
a340: 65 72 20 6f 66 20 74 65 78 74 20 66 69 65 6c 64  er of text field
a350: 73 2e 20 20 53 51 4c 69 74 65 20 64 65 66 69 6e  s.  SQLite defin
a360: 65 73 20 74 68 72 65 65 20 62 75 69 6c 74 2d 69  es three built-i
a370: 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  n collating func
a380: 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a 0a 3c 62 6c  tions:.</p>..<bl
a390: 6f 63 6b 71 75 6f 74 65 3e 3c 74 61 62 6c 65 20  ockquote><table 
a3a0: 62 6f 72 64 65 72 3d 30 20 63 65 6c 6c 73 70 61  border=0 cellspa
a3b0: 63 69 6e 67 3d 31 30 3e 0a 3c 74 72 3e 3c 74 64  cing=10>.<tr><td
a3c0: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 42 49 4e 41   valign=top>BINA
a3d0: 52 59 0a 20 20 20 20 3c 74 64 3e 53 74 72 69 6e  RY.    <td>Strin
a3e0: 67 73 20 61 72 65 20 63 6f 6d 70 61 72 69 65 64  gs are comparied
a3f0: 20 62 79 74 65 20 62 79 20 62 79 74 65 20 75 73   byte by byte us
a400: 69 6e 67 20 74 68 65 20 6d 65 6d 63 6d 70 28 29  ing the memcmp()
a410: 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20   function.      
a420: 20 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64    from the stand
a430: 61 72 64 20 43 20 6c 69 62 72 61 72 79 2e 0a 3c  ard C library..<
a440: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
a450: 70 3e 4e 4f 43 41 53 45 0a 20 20 20 20 3c 74 64  p>NOCASE.    <td
a460: 3e 4c 69 6b 65 20 42 49 4e 41 52 59 20 65 78 63  >Like BINARY exc
a470: 65 70 74 20 74 68 61 74 20 75 70 70 65 72 63 61  ept that upperca
a480: 73 65 20 41 53 43 49 49 20 63 68 61 72 61 63 74  se ASCII charact
a490: 65 72 73 20 28 27 41 27 20 74 68 72 6f 75 67 68  ers ('A' through
a4a0: 20 27 5a 27 29 0a 20 20 20 20 20 20 20 20 61 72   'Z').        ar
a4b0: 65 20 66 6f 6c 64 65 64 20 69 6e 74 6f 20 74 68  e folded into th
a4c0: 65 69 72 20 6c 6f 77 65 72 63 61 73 65 20 65 71  eir lowercase eq
a4d0: 75 69 76 61 6c 65 6e 74 73 20 70 72 69 6f 72 20  uivalents prior 
a4e0: 74 6f 20 72 75 6e 6e 69 6e 67 20 74 68 65 0a 20  to running the. 
a4f0: 20 20 20 20 20 20 20 63 6f 6d 70 61 72 69 73 6f         compariso
a500: 6e 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 6f 6e  n.  Note that on
a510: 6c 79 20 41 53 43 49 49 20 63 68 61 72 61 63 74  ly ASCII charact
a520: 65 72 73 20 61 72 65 20 63 61 73 65 2d 66 6f 6c  ers are case-fol
a530: 64 65 64 2e 20 20 4e 4f 43 41 53 45 0a 20 20 20  ded.  NOCASE.   
a540: 20 20 20 20 20 64 6f 65 73 20 6e 6f 74 20 69 6d       does not im
a550: 70 6c 65 6d 65 6e 74 20 61 20 67 65 6e 65 72 61  plement a genera
a560: 6c 20 70 75 72 70 6f 73 65 20 75 6e 69 63 6f 64  l purpose unicod
a570: 65 20 63 61 73 65 6c 65 73 73 20 63 6f 6d 70 61  e caseless compa
a580: 72 69 73 6f 6e 2e 0a 3c 74 72 3e 3c 74 64 20 76  rison..<tr><td v
a590: 61 6c 69 67 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a  align=top>RTRIM.
a5a0: 20 20 20 20 3c 74 64 3e 4c 69 6b 65 20 42 49 4e      <td>Like BIN
a5b0: 41 52 59 20 65 78 63 65 70 74 20 74 68 61 74 20  ARY except that 
a5c0: 73 70 61 63 65 73 20 61 74 20 74 68 65 20 65 6e  spaces at the en
a5d0: 64 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  d of the string 
a5e0: 61 72 65 20 65 6c 69 64 65 64 0a 20 20 20 20 20  are elided.     
a5f0: 20 20 20 70 72 69 6f 72 20 74 6f 20 63 6f 6d 70     prior to comp
a600: 61 72 69 73 6f 6e 2e 0a 3c 2f 74 61 62 6c 65 3e  arison..</table>
a610: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c  </blockquote>..<
a620: 70 3e 41 64 64 69 74 69 6f 6e 61 6c 20 61 70 70  p>Additional app
a630: 6c 69 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69  lication-specifi
a640: 63 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  c collating func
a650: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 61 64 64  tions can be add
a660: 65 64 20 74 6f 0a 53 51 4c 69 74 65 20 75 73 69  ed to.SQLite usi
a670: 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
a680: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
a690: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  ()] interface.</
a6a0: 70 3e 0a 0a 3c 70 3e 54 68 65 20 64 65 66 61 75  p>..<p>The defau
a6b0: 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  lt collating fun
a6c0: 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73 74  ction for all st
a6d0: 72 69 6e 67 73 20 69 73 20 42 49 4e 41 52 59 2e  rings is BINARY.
a6e0: 0a 41 6c 74 65 72 6e 61 74 69 76 65 20 63 6f 6c  .Alternative col
a6f0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73  lating functions
a700: 20 66 6f 72 20 74 61 62 6c 65 20 63 6f 6c 75 6d   for table colum
a710: 6e 73 20 63 61 6e 20 62 65 20 73 70 65 63 69 66  ns can be specif
a720: 69 65 64 20 69 6e 20 74 68 65 0a 5b 43 52 45 41  ied in the.[CREA
a730: 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d  TE TABLE] statem
a740: 65 6e 74 20 75 73 69 6e 67 20 74 68 65 20 43 4f  ent using the CO
a750: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f 6e 20  LLATE clause on 
a760: 74 68 65 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  the column defin
a770: 69 74 69 6f 6e 2e 0a 57 68 65 6e 20 61 20 63 6f  ition..When a co
a780: 6c 75 6d 6e 20 69 73 20 69 6e 64 65 78 65 64 2c  lumn is indexed,
a790: 20 74 68 65 20 73 61 6d 65 20 63 6f 6c 6c 61 74   the same collat
a7a0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
a7b0: 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43  cified in the.[C
a7c0: 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61  REATE TABLE] sta
a7d0: 74 65 6d 65 6e 74 20 69 73 20 75 73 65 64 20 66  tement is used f
a7e0: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  or the column in
a7f0: 20 74 68 65 20 69 6e 64 65 78 2c 20 62 79 20 64   the index, by d
a800: 65 66 61 75 6c 74 2c 0a 74 68 6f 75 67 68 20 74  efault,.though t
a810: 68 69 73 20 63 61 6e 20 62 65 20 6f 76 65 72 72  his can be overr
a820: 69 64 64 65 6e 20 75 73 69 6e 67 20 61 20 43 4f  idden using a CO
a830: 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 69 6e 20  LLATE clause in 
a840: 74 68 65 20 0a 5b 43 52 45 41 54 45 20 49 4e 44  the .[CREATE IND
a850: 45 58 5d 20 73 74 61 74 65 6d 65 6e 74 2e 0a 0a  EX] statement...
a860: 3c 68 33 3e 32 2e 33 20 52 65 70 72 65 73 65 6e  <h3>2.3 Represen
a870: 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 54 61  tation Of SQL Ta
a880: 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 45 61  bles</h3>..<p>Ea
a890: 63 68 20 6f 72 64 69 6e 61 72 79 20 53 51 4c 20  ch ordinary SQL 
a8a0: 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61 74  table in the dat
a8b0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
a8c0: 72 65 70 72 65 73 65 6e 74 65 64 20 6f 6e 20 64  represented on d
a8d0: 69 73 6b 0a 62 79 20 61 20 74 61 62 6c 65 20 62  isk.by a table b
a8e0: 2d 74 72 65 65 2e 20 20 45 61 63 68 20 65 6e 74  -tree.  Each ent
a8f0: 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ry in the table 
a900: 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e  b-tree correspon
a910: 64 73 20 74 6f 20 61 20 72 6f 77 0a 6f 66 20 74  ds to a row.of t
a920: 68 65 20 53 51 4c 20 74 61 62 6c 65 2e 20 20 54  he SQL table.  T
a930: 68 65 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68  he [rowid] of th
a940: 65 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 74  e SQL table is t
a950: 68 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  he 64-bit signed
a960: 0a 69 6e 74 65 67 65 72 20 6b 65 79 20 66 6f 72  .integer key for
a970: 20 65 61 63 68 20 65 6e 74 72 79 20 69 6e 20 74   each entry in t
a980: 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 2e  he table b-tree.
a990: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 63 6f 6e  </p>..<p>The con
a9a0: 74 65 6e 74 20 6f 66 20 65 61 63 68 20 53 51 4c  tent of each SQL
a9b0: 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 73 74   table row is st
a9c0: 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61  ored in the data
a9d0: 62 61 73 65 20 66 69 6c 65 20 62 79 0a 66 69 72  base file by.fir
a9e0: 73 74 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65  st combining the
a9f0: 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 76   values in the v
aa00: 61 72 69 6f 75 73 20 63 6f 6c 75 6d 6e 73 20 69  arious columns i
aa10: 6e 74 6f 20 61 20 62 79 74 65 20 61 72 72 61 79  nto a byte array
aa20: 0a 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 66  .in the record f
aa30: 6f 72 6d 61 74 2c 20 74 68 65 6e 20 73 74 6f 72  ormat, then stor
aa40: 69 6e 67 20 74 68 61 74 20 62 79 74 65 20 61 72  ing that byte ar
aa50: 72 61 79 20 61 73 20 74 68 65 20 70 61 79 6c 6f  ray as the paylo
aa60: 61 64 20 69 6e 0a 61 6e 20 65 6e 74 72 79 20 69  ad in.an entry i
aa70: 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72  n the table b-tr
aa80: 65 65 2e 20 20 54 68 65 20 6f 72 64 65 72 20 6f  ee.  The order o
aa90: 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  f values in the 
aaa0: 72 65 63 6f 72 64 20 69 73 0a 74 68 65 20 73 61  record is.the sa
aab0: 6d 65 20 61 73 20 74 68 65 20 6f 72 64 65 72 20  me as the order 
aac0: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
aad0: 65 20 53 51 4c 20 74 61 62 6c 65 20 64 65 66 69  e SQL table defi
aae0: 6e 69 74 69 6f 6e 2e 0a 57 68 65 6e 20 61 6e 20  nition..When an 
aaf0: 53 51 4c 20 74 61 62 6c 65 20 74 68 61 74 20 69  SQL table that i
ab00: 6e 63 6c 75 64 65 73 20 61 6e 0a 5b 49 4e 54 45  ncludes an.[INTE
ab10: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d  GER PRIMARY KEY]
ab20: 20 63 6f 6c 75 6d 6e 20 28 77 68 69 63 68 20 61   column (which a
ab30: 6c 69 61 73 65 73 20 74 68 65 20 5b 72 6f 77 69  liases the [rowi
ab40: 64 5d 29 20 74 68 65 6e 20 74 68 61 74 0a 63 6f  d]) then that.co
ab50: 6c 75 6d 6e 20 61 70 70 65 61 72 73 20 69 6e 20  lumn appears in 
ab60: 74 68 65 20 72 65 63 6f 72 64 20 61 73 20 61 20  the record as a 
ab70: 4e 55 4c 4c 20 76 61 6c 75 65 2e 20 20 53 51 4c  NULL value.  SQL
ab80: 69 74 65 20 77 69 6c 6c 20 6b 6e 6f 77 20 74 6f  ite will know to
ab90: 20 75 73 65 0a 74 68 65 20 74 61 62 6c 65 20 62   use.the table b
aba0: 2d 74 72 65 65 20 6b 65 79 20 72 61 74 68 65 72  -tree key rather
abb0: 20 74 68 61 6e 20 74 68 65 20 4e 55 4c 4c 20 76   than the NULL v
abc0: 61 6c 75 65 20 77 68 65 6e 20 72 65 66 65 72 65  alue when refere
abd0: 6e 63 69 6e 67 20 74 68 65 0a 5b 49 4e 54 45 47  ncing the.[INTEG
abe0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20  ER PRIMARY KEY] 
abf0: 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e  column.</p>..<p>
ac00: 49 66 20 74 68 65 20 5b 61 66 66 69 6e 69 74 79  If the [affinity
ac10: 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  ] of a column is
ac20: 20 52 45 41 4c 20 61 6e 64 20 74 68 61 74 20 63   REAL and that c
ac30: 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61  olumn contains a
ac40: 0a 76 61 6c 75 65 20 74 68 61 74 20 63 61 6e 20  .value that can 
ac50: 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  be converted to 
ac60: 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f  an integer witho
ac70: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
ac80: 6d 61 74 69 6f 6e 0a 28 69 66 20 74 68 65 20 76  mation.(if the v
ac90: 61 6c 75 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f  alue contains no
aca0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
acb0: 20 61 6e 64 20 69 73 20 6e 6f 74 20 74 6f 6f 20   and is not too 
acc0: 6c 61 72 67 65 20 74 6f 20 62 65 0a 72 65 70 72  large to be.repr
acd0: 65 73 65 6e 74 65 64 20 61 73 20 61 6e 20 69 6e  esented as an in
ace0: 74 65 67 65 72 29 20 74 68 65 6e 20 74 68 65 20  teger) then the 
acf0: 63 6f 6c 75 6d 6e 20 6d 61 79 20 62 65 20 73 74  column may be st
ad00: 6f 72 65 64 20 69 6e 20 74 68 65 20 72 65 63 6f  ored in the reco
ad10: 72 64 0a 61 73 20 61 6e 20 69 6e 74 65 67 65 72  rd.as an integer
ad20: 2e 20 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6b  .  SQLite will k
ad30: 6e 6f 77 20 74 6f 20 63 6f 6e 76 65 72 74 20 74  now to convert t
ad40: 68 65 20 76 61 6c 75 65 20 62 61 63 6b 20 74 6f  he value back to
ad50: 20 66 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20   floating.point 
ad60: 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20  when extracting 
ad70: 69 74 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  it from the reco
ad80: 72 64 2e 3c 2f 70 3e 0a 0a 0a 3c 68 33 3e 32 2e  rd.</p>...<h3>2.
ad90: 34 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  4 Representation
ada0: 20 4f 66 20 53 51 4c 20 49 6e 64 69 63 65 73 3c   Of SQL Indices<
adb0: 2f 68 33 3e 0a 0a 3c 70 3e 45 61 63 68 20 53 51  /h3>..<p>Each SQ
adc0: 4c 20 69 6e 64 65 78 2c 20 77 68 65 74 68 65 72  L index, whether
add0: 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c   explicitly decl
ade0: 61 72 65 64 20 76 69 61 20 61 20 5b 43 52 45 41  ared via a [CREA
adf0: 54 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d  TE INDEX] statem
ae00: 65 6e 74 0a 6f 72 20 69 6d 70 6c 69 65 64 20 62  ent.or implied b
ae10: 79 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  y a UNIQUE const
ae20: 72 61 69 6e 74 2c 20 63 6f 72 72 65 73 70 6f 6e  raint, correspon
ae30: 64 73 20 74 6f 20 61 6e 20 69 6e 64 65 78 20 62  ds to an index b
ae40: 2d 74 72 65 65 20 69 6e 20 74 68 65 0a 64 61 74  -tree in the.dat
ae50: 61 62 61 73 65 20 66 69 6c 65 2e 0a 54 68 65 72  abase file..Ther
ae60: 65 20 69 73 20 6f 6e 65 20 65 6e 74 72 79 20 69  e is one entry i
ae70: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 66  n index b-tree f
ae80: 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74  or each row in t
ae90: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
aea0: 20 74 61 62 6c 65 2e 0a 54 68 65 20 6b 65 79 20   table..The key 
aeb0: 74 6f 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72  to an index b-tr
aec0: 65 65 20 69 73 0a 61 20 72 65 63 6f 72 64 20 63  ee is.a record c
aed0: 6f 6d 70 6f 73 65 64 20 6f 66 20 74 68 65 20 63  omposed of the c
aee0: 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20  olumns that are 
aef0: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20 66 6f  being indexed fo
af00: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 0a 5b 72  llowed by the.[r
af10: 6f 77 69 64 5d 20 6f 66 20 74 68 65 20 74 61 62  owid] of the tab
af20: 6c 65 20 72 6f 77 2e 20 20 42 65 63 61 75 73 65  le row.  Because
af30: 20 65 76 65 72 79 20 72 6f 77 20 69 6e 20 61 20   every row in a 
af40: 74 61 62 6c 65 20 68 61 73 20 61 20 75 6e 69 71  table has a uniq
af50: 75 65 0a 72 6f 77 69 64 20 61 6e 64 20 61 6c 6c  ue.rowid and all
af60: 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
af70: 78 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 72 6f  x contain the ro
af80: 77 69 64 2c 20 61 6c 6c 20 6b 65 79 73 20 69 6e  wid, all keys in
af90: 20 61 6e 20 69 6e 64 65 78 0a 61 72 65 20 75 6e   an index.are un
afa0: 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ique.</p>..<p>Th
afb0: 65 72 65 20 69 73 20 61 20 6f 6e 65 2d 74 6f 2d  ere is a one-to-
afc0: 6f 6e 65 20 6d 61 70 70 69 6e 67 20 62 65 74 77  one mapping betw
afd0: 65 65 6e 20 72 6f 77 73 20 69 6e 20 61 20 74 61  een rows in a ta
afe0: 62 6c 65 20 61 6e 64 0a 65 6e 74 72 69 65 73 20  ble and.entries 
aff0: 69 6e 20 65 61 63 68 20 69 6e 64 65 78 20 61 73  in each index as
b000: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
b010: 61 74 20 74 61 62 6c 65 2e 0a 43 6f 72 72 65 73  at table..Corres
b020: 70 6f 6e 64 69 6e 67 20 72 6f 77 73 20 69 6e 74  ponding rows int
b030: 20 74 68 65 20 69 6e 64 65 78 20 61 6e 64 20 74   the index and t
b040: 61 62 6c 65 20 62 2d 74 72 65 65 73 20 73 68 61  able b-trees sha
b050: 72 65 20 74 68 65 20 73 61 6d 65 20 72 6f 77 69  re the same rowi
b060: 64 0a 76 61 6c 75 65 2c 20 61 6e 64 20 63 6f 6e  d.value, and con
b070: 74 61 69 6e 20 74 68 65 20 73 61 6d 65 20 76 61  tain the same va
b080: 6c 75 65 20 66 6f 72 20 61 6c 6c 20 69 6e 64 65  lue for all inde
b090: 78 65 64 20 63 6f 6c 75 6d 6e 73 2e 3c 2f 70 3e  xed columns.</p>
b0a0: 0a 0a 3c 68 33 3e 32 2e 35 20 53 74 6f 72 61 67  ..<h3>2.5 Storag
b0b0: 65 20 4f 66 20 54 68 65 20 53 51 4c 20 44 61 74  e Of The SQL Dat
b0c0: 61 62 61 73 65 20 53 63 68 65 6d 61 3c 2f 68 33  abase Schema</h3
b0d0: 3e 0a 0a 3c 70 3e 50 61 67 65 20 31 20 6f 66 20  >..<p>Page 1 of 
b0e0: 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  a database file 
b0f0: 69 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  is the root page
b100: 20 6f 66 20 61 20 74 61 62 6c 65 20 62 2d 74 72   of a table b-tr
b110: 65 65 20 74 68 61 74 0a 68 6f 6c 64 73 20 61 20  ee that.holds a 
b120: 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20 6e 61  special table na
b130: 6d 65 64 20 22 73 71 6c 69 74 65 5f 6d 61 73 74  med "sqlite_mast
b140: 65 72 22 20 28 6f 72 20 22 73 71 6c 69 74 65 5f  er" (or "sqlite_
b150: 74 65 6d 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a  temp_master" in.
b160: 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 54 45  the case of a TE
b170: 4d 50 20 64 61 74 61 62 61 73 65 29 20 77 68 69  MP database) whi
b180: 63 68 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  ch stores the co
b190: 6d 70 6c 65 74 65 0a 64 61 74 61 62 61 73 65 20  mplete.database 
b1a0: 73 63 68 65 6d 61 2e 20 20 54 68 65 20 73 74 72  schema.  The str
b1b0: 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 73 71  ucture of the sq
b1c0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
b1d0: 65 20 69 73 20 61 73 0a 69 66 20 69 74 20 68 61  e is as.if it ha
b1e0: 64 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 75  d been created u
b1f0: 73 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69  sing the followi
b200: 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c  ng SQL:</p>..<bl
b210: 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43  ockquote><pre>.C
b220: 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69  REATE TABLE sqli
b230: 74 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79 70  te_master(.  typ
b240: 65 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74  e text,.  name t
b250: 65 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20  ext,.  tbl_name 
b260: 74 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65  text,.  rootpage
b270: 20 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c 20   integer,.  sql 
b280: 74 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f  text.);.</pre></
b290: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
b2a0: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
b2b0: 72 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  r table contains
b2c0: 20 61 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20   a row for each 
b2d0: 74 61 62 6c 65 2c 20 69 6e 64 65 78 2c 20 76 69  table, index, vi
b2e0: 65 77 2c 0a 61 6e 64 20 74 72 69 67 67 65 72 20  ew,.and trigger 
b2f0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
b300: 73 63 68 65 6d 61 2c 20 65 78 63 65 70 74 20 74  schema, except t
b310: 68 65 72 65 20 69 73 20 6e 6f 20 65 6e 74 72 79  here is no entry
b320: 20 66 6f 72 20 74 68 65 0a 73 71 6c 69 74 65 5f   for the.sqlite_
b330: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 69 74 73  master table its
b340: 65 6c 66 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  elf.</p>..<p>The
b350: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74   sqlite_master.t
b360: 79 70 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c 20  ype column will 
b370: 62 65 20 6f 6e 65 0a 6f 66 20 74 68 65 20 66 6f  be one.of the fo
b380: 6c 6c 6f 77 69 6e 67 20 74 65 78 74 20 73 74 72  llowing text str
b390: 69 6e 67 73 3a 20 20 27 74 61 62 6c 65 27 2c 20  ings:  'table', 
b3a0: 27 69 6e 64 65 78 27 2c 20 27 76 69 65 77 27 2c  'index', 'view',
b3b0: 20 6f 72 20 27 74 72 69 67 67 65 72 27 0a 61 63   or 'trigger'.ac
b3c0: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 74  cording to the t
b3d0: 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 20 64 65  ype of object de
b3e0: 66 69 6e 65 64 2e 20 20 54 68 65 20 27 74 61 62  fined.  The 'tab
b3f0: 6c 65 27 20 73 74 72 69 6e 67 20 69 73 20 75 73  le' string is us
b400: 65 64 0a 66 6f 72 20 62 6f 74 68 20 6f 72 64 69  ed.for both ordi
b410: 6e 61 72 79 20 61 6e 64 20 5b 76 69 72 74 75 61  nary and [virtua
b420: 6c 20 74 61 62 6c 65 73 5d 2e 3c 2f 70 3e 0a 0a  l tables].</p>..
b430: 3c 2f 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d  </p>The sqlite_m
b440: 61 73 74 65 72 2e 6e 61 6d 65 20 63 6f 6c 75 6d  aster.name colum
b450: 6e 20 77 69 6c 6c 20 68 6f 6c 64 20 74 68 65 20  n will hold the 
b460: 6e 61 6d 65 20 6f 66 20 74 68 65 20 6f 62 6a 65  name of the obje
b470: 63 74 2e 0a 46 6f 72 20 69 6e 64 69 63 65 73 20  ct..For indices 
b480: 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74  that are automat
b490: 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 62  ically created b
b4a0: 79 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  y UNIQUE constra
b4b0: 69 6e 74 73 2c 20 74 68 65 0a 6e 61 6d 65 20 69  ints, the.name i
b4c0: 73 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  s "sqlite_autoin
b4d0: 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 77 68 65  dex_TABLE_N" whe
b4e0: 72 65 20 54 41 42 4c 45 20 69 73 20 72 65 70 6c  re TABLE is repl
b4f0: 61 63 65 64 20 62 79 20 74 68 65 20 6e 61 6d 65  aced by the name
b500: 0a 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68  .of the table th
b510: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
b520: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
b530: 74 20 61 6e 64 20 4e 20 69 73 20 61 6e 20 69 6e  t and N is an in
b540: 74 65 67 65 72 20 62 65 67 69 6e 6e 69 6e 67 0a  teger beginning.
b550: 77 69 74 68 20 31 20 61 6e 64 20 69 6e 63 72 65  with 1 and incre
b560: 61 73 69 6e 67 20 62 79 20 6f 6e 65 20 77 69 74  asing by one wit
b570: 68 20 65 61 63 68 20 55 4e 49 51 55 45 20 63 6f  h each UNIQUE co
b580: 6e 73 74 72 61 69 6e 74 20 73 65 65 6e 2e 3c 2f  nstraint seen.</
b590: 70 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74  p>..<p>The sqlit
b5a0: 65 5f 6d 61 73 74 65 72 2e 74 62 6c 5f 6e 61 6d  e_master.tbl_nam
b5b0: 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74  e column holds t
b5c0: 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 74 61 62  he name of a tab
b5d0: 6c 65 20 6f 72 20 76 69 65 77 0a 74 68 61 74 20  le or view.that 
b5e0: 74 68 65 20 6f 62 6a 65 63 74 20 69 73 20 61 73  the object is as
b5f0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 2e 20 20  sociated with.  
b600: 46 6f 72 20 61 20 74 61 62 6c 65 20 6f 72 20 76  For a table or v
b610: 69 65 77 2c 20 74 68 65 0a 74 62 6c 5f 6e 61 6d  iew, the.tbl_nam
b620: 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f  e column is a co
b630: 70 79 20 6f 66 20 74 68 65 20 6e 61 6d 65 20 63  py of the name c
b640: 6f 6c 75 6d 6e 2e 20 20 46 6f 72 20 61 6e 20 69  olumn.  For an i
b650: 6e 64 65 78 2c 20 74 68 65 20 74 62 6c 5f 6e 61  ndex, the tbl_na
b660: 6d 65 0a 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  me.is the name o
b670: 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
b680: 20 69 73 20 69 6e 64 65 78 65 64 2e 20 20 46 6f   is indexed.  Fo
b690: 72 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65  r a trigger, the
b6a0: 20 74 62 6c 5f 6e 61 6d 65 0a 63 6f 6c 75 6d 6e   tbl_name.column
b6b0: 20 73 74 6f 72 65 73 20 74 68 65 20 6e 61 6d 65   stores the name
b6c0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
b6d0: 20 76 69 65 77 20 74 68 61 74 20 63 61 75 73 65   view that cause
b6e0: 73 20 74 68 65 20 74 72 69 67 67 65 72 20 0a 74  s the trigger .t
b6f0: 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  o fire.</p>..<p>
b700: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
b710: 72 2e 72 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d  r.rootpage colum
b720: 6e 20 73 74 6f 72 65 73 20 74 68 65 20 70 61 67  n stores the pag
b730: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
b740: 72 6f 6f 74 0a 62 2d 74 72 65 65 20 70 61 67 65  root.b-tree page
b750: 20 66 6f 72 20 74 61 62 6c 65 73 20 61 6e 64 20   for tables and 
b760: 69 6e 64 69 63 65 73 2e 20 20 46 6f 72 20 72 6f  indices.  For ro
b770: 77 73 20 74 68 61 74 20 64 65 66 69 6e 65 20 76  ws that define v
b780: 69 65 77 73 2c 20 74 72 69 67 67 65 72 73 2c 0a  iews, triggers,.
b790: 61 6e 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c  and virtual tabl
b7a0: 65 73 2c 20 74 68 65 20 72 6f 6f 74 70 61 67 65  es, the rootpage
b7b0: 20 63 6f 6c 75 6d 6e 20 69 73 20 30 20 6f 72 20   column is 0 or 
b7c0: 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  NULL.</p>..<p>Th
b7d0: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
b7e0: 73 71 6c 20 63 6f 6c 75 6d 6e 20 73 74 6f 72 65  sql column store
b7f0: 73 20 53 51 4c 20 74 65 78 74 20 74 68 61 74 20  s SQL text that 
b800: 64 65 73 63 72 69 62 65 73 20 74 68 65 0a 6f 62  describes the.ob
b810: 6a 65 63 74 2e 20 20 54 68 69 73 20 53 51 4c 20  ject.  This SQL 
b820: 74 65 78 74 20 69 73 20 61 20 5b 43 52 45 41 54  text is a [CREAT
b830: 45 20 54 41 42 4c 45 5d 2c 20 5b 43 52 45 41 54  E TABLE], [CREAT
b840: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 5d  E VIRTUAL TABLE]
b850: 2c 0a 5b 43 52 45 41 54 45 20 49 4e 44 45 58 5d  ,.[CREATE INDEX]
b860: 2c 0a 5b 43 52 45 41 54 45 20 56 49 45 57 5d 2c  ,.[CREATE VIEW],
b870: 20 6f 72 20 5b 43 52 45 41 54 45 20 54 52 49 47   or [CREATE TRIG
b880: 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74 20 74  GER] statement t
b890: 68 61 74 20 69 66 20 65 76 61 6c 75 61 74 65 64  hat if evaluated
b8a0: 20 61 67 61 69 6e 73 74 0a 74 68 65 20 64 61 74   against.the dat
b8b0: 61 62 61 73 65 20 66 69 6c 65 20 77 68 65 6e 20  abase file when 
b8c0: 69 74 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  it is the main d
b8d0: 61 74 61 62 61 73 65 20 6f 66 20 61 20 5b 64 61  atabase of a [da
b8e0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b8f0: 6e 5d 0a 77 6f 75 6c 64 20 72 65 63 72 65 61 74  n].would recreat
b900: 65 64 20 74 68 65 20 6f 62 6a 65 63 74 2e 20 20  ed the object.  
b910: 54 68 65 20 74 65 78 74 20 69 73 20 75 73 75 61  The text is usua
b920: 6c 6c 79 20 61 20 63 6f 70 79 20 6f 66 20 74 68  lly a copy of th
b930: 65 20 6f 72 69 67 69 6e 61 6c 0a 73 74 61 74 65  e original.state
b940: 6d 65 6e 74 20 75 73 65 64 20 74 6f 20 63 72 65  ment used to cre
b950: 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74 20 62  ate the object b
b960: 75 74 20 77 69 74 68 20 6e 6f 72 6d 61 6c 69 7a  ut with normaliz
b970: 61 74 69 6f 6e 73 20 61 70 70 6c 69 65 64 20 73  ations applied s
b980: 6f 0a 74 68 61 74 20 74 68 65 20 74 65 78 74 20  o.that the text 
b990: 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 74 68 65 20  conforms to the 
b9a0: 66 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c 65 73 3a  following rules:
b9b0: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54 68 65 20 43  ..<ul>.<li>The C
b9c0: 52 45 41 54 45 2c 20 54 41 42 4c 45 2c 20 56 49  REATE, TABLE, VI
b9d0: 45 57 2c 20 54 52 49 47 47 45 52 2c 20 61 6e 64  EW, TRIGGER, and
b9e0: 20 49 4e 44 45 58 20 6b 65 79 77 6f 72 64 73 20   INDEX keywords 
b9f0: 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
ba00: 0a 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e  .of the statemen
ba10: 74 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20  t are converted 
ba20: 74 6f 20 61 6c 6c 20 75 70 70 65 72 20 63 61 73  to all upper cas
ba30: 65 20 6c 65 74 74 65 72 73 2e 0a 3c 6c 69 3e 54  e letters..<li>T
ba40: 68 65 20 54 45 4d 50 20 6f 72 20 54 45 4d 50 4f  he TEMP or TEMPO
ba50: 52 41 52 59 20 6b 65 79 77 6f 72 64 20 69 73 20  RARY keyword is 
ba60: 72 65 6d 6f 76 65 64 20 69 66 20 69 74 20 6f 63  removed if it oc
ba70: 63 75 72 73 20 61 66 74 65 72 20 74 68 65 20 0a  curs after the .
ba80: 69 6e 69 74 69 61 6c 20 43 52 45 41 54 45 20 6b  initial CREATE k
ba90: 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e 41 6e 79 20  eyword..<li>Any 
baa0: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 71 75  database name qu
bab0: 61 6c 69 66 69 65 72 20 74 68 61 74 20 6f 63 63  alifier that occ
bac0: 75 72 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65  urs prior to the
bad0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 0a 6f 62 6a   name of the.obj
bae0: 65 63 74 20 62 65 69 6e 67 20 63 72 65 61 74 65  ect being create
baf0: 64 20 69 73 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c  d is removed..<l
bb00: 69 3e 4c 65 61 64 69 6e 67 20 73 70 61 63 65 73  i>Leading spaces
bb10: 20 61 72 65 20 72 65 6d 6f 76 65 64 2e 0a 3c 6c   are removed..<l
bb20: 69 3e 41 6c 6c 20 73 70 61 63 65 73 20 66 6f 6c  i>All spaces fol
bb30: 6c 6f 77 69 6e 67 20 74 68 65 20 66 69 72 73 74  lowing the first
bb40: 20 74 77 6f 20 6b 65 79 77 6f 72 64 73 20 61 72   two keywords ar
bb50: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
bb60: 20 61 20 73 69 6e 67 6c 65 0a 73 70 61 63 65 2e   a single.space.
bb70: 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 54 68 65 20 74  .</ul>..<p>The t
bb80: 65 78 74 20 69 6e 20 74 68 65 20 73 71 6c 69 74  ext in the sqlit
bb90: 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 63 6f 6c  e_master.sql col
bba0: 75 6d 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66  umn is a copy of
bbb0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 43 52   the original.CR
bbc0: 45 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 74  EATE statement t
bbd0: 65 78 74 20 74 68 61 74 20 63 72 65 61 74 65 64  ext that created
bbe0: 20 74 68 65 20 6f 62 6a 65 63 74 2c 20 65 78 63   the object, exc
bbf0: 65 70 74 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 61  ept normalized a
bc00: 73 0a 64 65 73 63 72 69 62 65 64 20 61 62 6f 76  s.described abov
bc10: 65 20 61 6e 64 20 61 73 20 6d 6f 64 69 66 69 65  e and as modifie
bc20: 64 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20  d by subsequent 
bc30: 5b 41 4c 54 45 52 20 54 41 42 4c 45 5d 20 73 74  [ALTER TABLE] st
bc40: 61 74 65 6d 65 6e 74 73 2e 3c 2f 70 3e 0a 0a 3c  atements.</p>..<
bc50: 70 3e 46 6f 72 20 69 6e 64 69 63 65 73 20 74 68  p>For indices th
bc60: 61 74 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63  at are automatic
bc70: 61 6c 6c 79 20 63 72 65 61 74 65 64 20 62 79 20  ally created by 
bc80: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
bc90: 74 73 2c 0a 74 68 65 20 73 71 6c 69 74 65 5f 6d  ts,.the sqlite_m
bca0: 61 73 74 65 72 2e 73 71 6c 20 66 69 65 6c 64 20  aster.sql field 
bcb0: 69 73 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 0a 3c  is NULL.</p>...<
bcc0: 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20  tcl>hd_fragment 
bcd0: 72 6f 6c 6c 62 61 63 6b 6a 6f 75 72 6e 61 6c 20  rollbackjournal 
bce0: 7b 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61  {rollback journa
bcf0: 6c 20 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a  l format}</tcl>.
bd00: 3c 68 32 3e 33 2e 30 20 54 68 65 20 52 6f 6c 6c  <h2>3.0 The Roll
bd10: 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 3c 2f 68 32  back Journal</h2
bd20: 3e 0a 0a 3c 70 3e 54 68 65 20 72 6f 6c 6c 62 61  >..<p>The rollba
bd30: 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20 61 20  ck journal is a 
bd40: 66 69 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20  file associated 
bd50: 77 69 74 68 20 65 61 63 68 20 53 51 4c 69 74 65  with each SQLite
bd60: 20 64 61 74 61 62 61 73 65 0a 66 61 69 6c 20 74   database.fail t
bd70: 68 61 74 20 68 6f 6c 64 20 69 6e 66 6f 72 6d 61  hat hold informa
bd80: 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 72 65 73  tion used to res
bd90: 74 6f 72 65 20 74 68 65 20 64 61 74 61 62 61 73  tore the databas
bda0: 65 20 66 69 6c 65 20 74 6f 20 69 74 73 20 69 6e  e file to its in
bdb0: 69 74 69 61 6c 0a 73 74 61 74 65 20 64 75 72 69  itial.state duri
bdc0: 6e 67 20 74 68 65 20 63 6f 75 72 73 65 20 6f 66  ng the course of
bdd0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a   a transaction..
bde0: 54 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75  The rollback jou
bdf0: 72 6e 61 6c 20 66 69 6c 65 20 69 73 20 61 6c 77  rnal file is alw
be00: 61 79 73 20 6c 6f 63 61 74 65 64 20 69 6e 20 74  ays located in t
be10: 68 65 20 64 69 72 65 63 74 6f 72 79 20 61 73 20  he directory as 
be20: 74 68 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c  the database.fil
be30: 65 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61  e and has the sa
be40: 6d 65 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64  me name as the d
be50: 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 75 74  atabase file but
be60: 20 77 69 74 68 20 74 68 65 20 73 74 72 69 6e 67   with the string
be70: 0a 22 3c 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f  ."<tt>-journal</
be80: 74 74 3e 22 20 61 70 70 65 6e 64 65 64 2e 20 20  tt>" appended.  
be90: 54 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62  There can only b
bea0: 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62  e a single rollb
beb0: 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f  ack journal.asso
bec0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 67 69  ciated with a gi
bed0: 76 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  ve database and 
bee0: 68 65 6e 63 65 20 74 68 65 72 65 20 63 61 6e 20  hence there can 
bef0: 6f 6e 6c 79 20 62 65 20 6f 6e 65 20 77 72 69 74  only be one writ
bf00: 65 0a 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70  e.transaction op
bf10: 65 6e 20 61 67 61 69 6e 73 74 20 61 20 73 69 6e  en against a sin
bf20: 67 6c 65 20 64 61 74 61 62 61 73 65 20 61 74 20  gle database at 
bf30: 6f 6e 65 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c  one time.</p>..<
bf40: 70 3e 49 66 20 61 20 74 72 61 6e 73 61 63 74 69  p>If a transacti
bf50: 6f 6e 20 69 73 20 61 62 6f 72 74 65 64 20 64 75  on is aborted du
bf60: 65 20 74 6f 20 61 6e 20 61 70 70 6c 69 63 61 74  e to an applicat
bf70: 69 6f 6e 20 63 72 61 73 68 2c 20 61 6e 20 6f 70  ion crash, an op
bf80: 65 72 61 74 69 6e 67 0a 73 79 73 74 65 6d 20 63  erating.system c
bf90: 72 61 73 68 2c 20 6f 72 20 61 20 68 61 72 64 77  rash, or a hardw
bfa0: 61 72 65 20 70 6f 77 65 72 20 66 61 69 6c 75 72  are power failur
bfb0: 65 20 6f 72 20 63 72 61 73 68 2c 20 74 68 65 6e  e or crash, then
bfc0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d 61   the database ma
bfd0: 79 0a 62 65 20 6c 65 66 74 20 69 6e 20 61 6e 20  y.be left in an 
bfe0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61  inconsistent sta
bff0: 74 65 2e 20 20 54 68 65 20 6e 65 78 74 20 74 69  te.  The next ti
c000: 6d 65 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70  me SQLite attemp
c010: 74 73 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20 64  ts to open.the d
c020: 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68  atabase file, th
c030: 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74 68  e presence of th
c040: 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
c050: 61 6c 20 66 69 6c 65 20 77 69 6c 6c 20 62 65 20  al file will be 
c060: 0a 64 65 74 65 63 74 65 64 20 61 6e 64 20 74 68  .detected and th
c070: 65 20 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c 20 62  e journal will b
c080: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
c090: 70 6c 61 79 65 64 20 62 61 63 6b 20 74 6f 20 72  played back to r
c0a0: 65 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62  estore the.datab
c0b0: 61 73 65 20 74 6f 20 69 74 73 20 73 74 61 74 65  ase to its state
c0c0: 20 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66   at the start of
c0d0: 20 74 68 65 20 69 6e 63 6f 6d 70 6c 65 74 65 20   the incomplete 
c0e0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e  transaction.</p>
c0f0: 0a 0a 3c 70 3e 41 20 72 6f 6c 6c 62 61 63 6b 20  ..<p>A rollback 
c100: 6a 6f 75 72 6e 61 6c 20 69 73 20 6f 6e 6c 79 20  journal is only 
c110: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65  considered to be
c120: 20 76 61 6c 69 64 20 69 66 20 69 74 20 65 78 69   valid if it exi
c130: 73 74 73 20 61 6e 64 0a 63 6f 6e 74 61 69 6e 73  sts and.contains
c140: 20 61 20 76 61 6c 69 64 20 68 65 61 64 65 72 2e   a valid header.
c150: 20 20 48 65 6e 63 65 20 61 20 74 72 61 6e 73 61    Hence a transa
c160: 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 63 6f 6d  ction can be com
c170: 6d 69 74 74 65 64 20 69 6e 20 6f 6e 65 0a 6f 66  mitted in one.of
c180: 20 74 68 72 65 65 20 77 61 79 73 3a 0a 3c 6f 6c   three ways:.<ol
c190: 3e 0a 3c 6c 69 3e 54 68 65 20 72 6f 6c 6c 62 61  >.<li>The rollba
c1a0: 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20  ck journal file 
c1b0: 63 61 6e 20 62 65 20 64 65 6c 65 74 65 64 2c 0a  can be deleted,.
c1c0: 3c 6c 69 3e 54 68 65 20 72 6f 6c 6c 62 61 63 6b  <li>The rollback
c1d0: 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 63 61   journal file ca
c1e0: 6e 20 62 65 20 74 72 75 6e 63 61 74 65 64 20 74  n be truncated t
c1f0: 6f 20 7a 65 72 6f 20 6c 65 6e 67 74 68 2c 20 6f  o zero length, o
c200: 72 0a 3c 6c 69 3e 54 68 65 20 68 65 61 64 65 72  r.<li>The header
c210: 20 6f 66 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b   of the rollback
c220: 20 6a 6f 75 72 6e 61 6c 20 63 61 6e 20 62 65 20   journal can be 
c230: 6f 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68  overwritten with
c240: 0a 69 6e 76 61 6c 69 64 20 68 65 61 64 65 72 20  .invalid header 
c250: 74 65 78 74 20 28 66 6f 72 20 65 78 61 6d 70 6c  text (for exampl
c260: 65 2c 20 61 6c 6c 20 7a 65 72 6f 73 29 2e 0a 3c  e, all zeros)..<
c270: 2f 6f 6c 3e 0a 54 68 65 73 65 20 74 68 72 65 65  /ol>.These three
c280: 20 77 61 79 73 20 6f 66 20 63 6f 6d 6d 69 74 74   ways of committ
c290: 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69 6f  ing a transactio
c2a0: 6e 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  n correspond to 
c2b0: 74 68 65 20 44 45 4c 45 54 45 2c 0a 54 52 55 4e  the DELETE,.TRUN
c2c0: 43 41 54 45 2c 20 61 6e 64 20 50 45 52 53 49 53  CATE, and PERSIS
c2d0: 54 20 73 65 74 74 69 6e 67 73 2c 20 72 65 73 70  T settings, resp
c2e0: 65 63 74 69 76 65 6c 79 2c 20 6f 66 20 74 68 65  ectively, of the
c2f0: 20 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 70   [journal_mode p
c300: 72 61 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a 3c  ragma]..</p>...<
c310: 70 3e 41 20 76 61 6c 69 64 20 72 6f 6c 6c 62 61  p>A valid rollba
c320: 63 6b 20 6a 6f 75 72 6e 61 6c 20 62 65 67 69 6e  ck journal begin
c330: 73 20 77 69 74 68 20 61 20 68 65 61 64 65 72 20  s with a header 
c340: 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
c350: 20 66 6f 72 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c 63   format:</p>..<c
c360: 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61  enter>.<i>Rollba
c370: 63 6b 20 4a 6f 75 72 6e 61 6c 20 48 65 61 64 65  ck Journal Heade
c380: 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e  r Format</i><br>
c390: 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38  .<table width="8
c3a0: 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74  0%" border=1>.<t
c3b0: 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e  r><th>Offset<th>
c3c0: 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74  Size<th>Descript
c3d0: 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ion.<tr><td vali
c3e0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
c3f0: 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61  ter>0.    <td va
c400: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
c410: 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64 3e  enter>8.    <td>
c420: 48 65 61 64 65 72 20 73 74 72 69 6e 67 3a 20 20  Header string:  
c430: 30 78 64 39 2c 20 30 78 64 35 2c 20 30 78 30 35  0xd9, 0xd5, 0x05
c440: 2c 20 30 78 66 39 2c 20 30 78 32 30 2c 20 30 78  , 0xf9, 0x20, 0x
c450: 61 31 2c 20 30 78 36 33 2c 20 30 78 64 37 0a 3c  a1, 0x63, 0xd7.<
c460: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
c470: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38  p align=center>8
c480: 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d  .    <td valign=
c490: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
c4a0: 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20 22  >4.    <td>The "
c4b0: 50 61 67 65 20 43 6f 75 6e 74 22 20 2d 20 54 68  Page Count" - Th
c4c0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
c4d0: 73 20 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65  s in the next se
c4e0: 67 6d 65 6e 74 20 6f 66 20 74 68 65 20 0a 20 20  gment of the .  
c4f0: 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2c 20 6f        journal, o
c500: 72 20 2d 31 20 74 6f 0a 20 20 20 20 20 20 20 20  r -1 to.        
c510: 6d 65 61 6e 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  mean all content
c520: 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74   to the end of t
c530: 68 65 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64 20  he file.<tr><td 
c540: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
c550: 3d 63 65 6e 74 65 72 3e 31 32 0a 20 20 20 20 3c  =center>12.    <
c560: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
c570: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
c580: 20 3c 74 64 3e 41 20 72 61 6e 64 6f 6d 20 6e 6f   <td>A random no
c590: 6e 63 65 20 66 6f 72 20 74 68 65 20 63 68 65 63  nce for the chec
c5a0: 6b 73 75 6d 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ksum.<tr><td val
c5b0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
c5c0: 6e 74 65 72 3e 31 36 0a 20 20 20 20 3c 74 64 20  nter>16.    <td 
c5d0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
c5e0: 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
c5f0: 64 3e 49 6e 69 74 69 61 6c 20 73 69 7a 65 20 6f  d>Initial size o
c600: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
c610: 6e 20 70 61 67 65 73 0a 3c 74 72 3e 3c 74 64 20  n pages.<tr><td 
c620: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
c630: 3d 63 65 6e 74 65 72 3e 32 30 0a 20 20 20 20 3c  =center>20.    <
c640: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
c650: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
c660: 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20 61 20 64   <td>Size of a d
c670: 69 73 6b 20 73 65 63 74 6f 72 20 61 73 73 75 6d  isk sector assum
c680: 65 64 20 62 79 20 74 68 65 20 70 72 6f 63 65 73  ed by the proces
c690: 73 20 74 68 61 74 20 77 72 6f 74 65 20 74 68 69  s that wrote thi
c6a0: 73 0a 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61  s.        journa
c6b0: 6c 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  l..<tr><td valig
c6c0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
c6d0: 65 72 3e 32 34 0a 20 20 20 20 3c 74 64 20 76 61  er>24.    <td va
c6e0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
c6f0: 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
c700: 53 69 7a 65 20 6f 66 20 70 61 67 65 73 20 69 6e  Size of pages in
c710: 20 74 68 69 73 20 6a 6f 75 72 6e 61 6c 2e 0a 3c   this journal..<
c720: 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
c730: 3e 0a 0a 3c 70 3e 41 20 72 6f 6c 6c 62 61 63 6b  >..<p>A rollback
c740: 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20   journal header 
c750: 69 73 20 70 61 64 64 65 64 20 77 69 74 68 20 7a  is padded with z
c760: 65 72 6f 73 20 6f 75 74 20 74 6f 20 74 68 65 20  eros out to the 
c770: 73 69 7a 65 20 6f 66 20 61 20 0a 73 69 6e 67 6c  size of a .singl
c780: 65 20 73 65 63 74 6f 72 20 28 61 73 20 64 65 66  e sector (as def
c790: 69 6e 65 64 20 62 79 20 74 68 65 20 73 65 63 74  ined by the sect
c7a0: 6f 72 20 73 69 7a 65 20 69 6e 74 65 67 65 72 20  or size integer 
c7b0: 61 74 20 6f 66 66 73 65 74 20 32 30 29 2e 0a 54  at offset 20)..T
c7c0: 68 65 20 68 65 61 64 65 72 20 69 73 20 69 6e 20  he header is in 
c7d0: 61 20 73 65 63 74 6f 72 20 62 79 20 69 74 73 65  a sector by itse
c7e0: 6c 66 20 73 6f 20 74 68 61 74 20 69 66 20 61 20  lf so that if a 
c7f0: 70 6f 77 65 72 20 6c 6f 73 73 20 6f 63 63 75 72  power loss occur
c800: 73 20 77 68 69 6c 65 0a 77 72 69 74 69 6e 67 20  s while.writing 
c810: 74 68 65 20 73 65 63 74 6f 72 2c 20 69 6e 66 6f  the sector, info
c820: 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 66 6f 6c  rmation that fol
c830: 6c 6f 77 73 20 74 68 65 20 68 65 61 64 65 72 20  lows the header 
c840: 77 69 6c 6c 20 62 65 0a 28 68 6f 70 65 66 75 6c  will be.(hopeful
c850: 6c 79 29 20 75 6e 64 61 6d 61 67 65 64 2e 3c 2f  ly) undamaged.</
c860: 70 3e 0a 0a 3c 70 3e 41 66 74 65 72 20 74 68 65  p>..<p>After the
c870: 20 68 65 61 64 65 72 20 61 6e 64 20 7a 65 72 6f   header and zero
c880: 20 70 61 64 64 69 6e 67 20 61 72 65 20 7a 65 72   padding are zer
c890: 6f 20 6f 72 20 6d 6f 72 65 20 70 61 67 65 20 72  o or more page r
c8a0: 65 63 6f 72 64 73 2e 20 20 45 61 63 68 0a 70 61  ecords.  Each.pa
c8b0: 67 65 20 72 65 63 6f 72 64 20 73 74 6f 72 65 73  ge record stores
c8c0: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 63   a copy of the c
c8d0: 6f 6e 74 65 6e 74 20 6f 66 20 61 20 70 61 67 65  ontent of a page
c8e0: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
c8f0: 73 65 20 66 69 6c 65 0a 62 65 66 6f 72 65 20 69  se file.before i
c900: 74 20 77 61 73 20 63 68 61 6e 67 65 64 2e 20 20  t was changed.  
c910: 54 68 65 20 73 61 6d 65 20 70 61 67 65 20 6d 61  The same page ma
c920: 79 20 6e 6f 74 20 61 70 70 65 61 72 20 6d 6f 72  y not appear mor
c930: 65 20 74 68 61 6e 20 6f 6e 63 65 0a 77 69 74 68  e than once.with
c940: 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c  in a single roll
c950: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 54 6f  back journal..To
c960: 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 69 6e 63   rollback an inc
c970: 6f 6d 70 6c 65 74 65 20 74 72 61 6e 73 61 63 74  omplete transact
c980: 69 6f 6e 2c 20 61 20 70 72 6f 63 65 73 73 0a 68  ion, a process.h
c990: 61 73 20 6d 65 72 65 6c 79 20 74 6f 20 72 65 61  as merely to rea
c9a0: 64 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  d the rollback j
c9b0: 6f 75 72 6e 61 6c 20 66 72 6f 6d 20 62 65 67 69  ournal from begi
c9c0: 6e 6e 69 6e 67 20 74 6f 20 65 6e 64 20 61 6e 64  nning to end and
c9d0: 0a 77 72 69 74 65 20 70 61 67 65 73 20 66 6f 75  .write pages fou
c9e0: 6e 64 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61  nd in the journa
c9f0: 6c 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  l back into the 
ca00: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 74  database file at
ca10: 20 74 68 65 0a 61 70 70 72 6f 70 72 69 61 74 65   the.appropriate
ca20: 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a   location.</p>..
ca30: 3c 70 3e 4c 65 74 20 74 68 65 20 64 61 74 61 62  <p>Let the datab
ca40: 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 28 74  ase page size (t
ca50: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
ca60: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
ca70: 74 20 32 34 20 0a 69 6e 20 74 68 65 20 6a 6f 75  t 24 .in the jou
ca80: 72 6e 61 6c 20 68 65 61 64 65 72 29 20 62 65 20  rnal header) be 
ca90: 4e 2e 0a 54 68 65 6e 20 74 68 65 20 66 6f 72 6d  N..Then the form
caa0: 61 74 20 6f 66 20 61 20 70 61 67 65 20 72 65 63  at of a page rec
cab0: 6f 72 64 20 69 73 20 61 73 20 66 6f 6c 6c 6f 77  ord is as follow
cac0: 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e  s:</p>..<center>
cad0: 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75  .<i>Rollback Jou
cae0: 72 6e 61 6c 20 50 61 67 65 20 52 65 63 6f 72 64  rnal Page Record
caf0: 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
cb00: 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
cb10: 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
cb20: 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53  ><th>Offset<th>S
cb30: 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69  ize<th>Descripti
cb40: 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
cb50: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
cb60: 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76 61 6c  er>0.    <td val
cb70: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
cb80: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54  nter>4.    <td>T
cb90: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69  he page number i
cba0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
cbb0: 69 6c 65 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ile.<tr><td vali
cbc0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
cbd0: 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 20 76 61  ter>4.    <td va
cbe0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
cbf0: 65 6e 74 65 72 3e 4e 0a 20 20 20 20 3c 74 64 3e  enter>N.    <td>
cc00: 4f 72 69 67 69 6e 61 6c 20 63 6f 6e 74 65 6e 74  Original content
cc10: 20 6f 66 20 74 68 65 20 70 61 67 65 20 70 72 69   of the page pri
cc20: 6f 72 20 74 6f 20 74 68 65 20 73 74 61 72 74 20  or to the start 
cc30: 6f 66 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  of the transacti
cc40: 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  on.<tr><td valig
cc50: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
cc60: 65 72 3e 4e 2b 34 0a 20 20 20 20 3c 74 64 20 76  er>N+4.    <td v
cc70: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
cc80: 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
cc90: 3e 43 68 65 63 6b 73 75 6d 0a 3c 2f 74 61 62 6c  >Checksum.</tabl
cca0: 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 0a 3c  e>.</center>...<
ccb0: 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d 20 69  p>The checksum i
ccc0: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 33 32  s an unsigned 32
ccd0: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 63 6f 6d  -bit integer com
cce0: 70 75 74 65 64 20 61 73 20 66 6f 6c 6c 6f 77 73  puted as follows
ccf0: 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e  :</p>..<ol>.<li>
cd00: 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 63  Initialize the c
cd10: 68 65 63 6b 73 75 6d 20 74 6f 20 74 68 65 20 63  hecksum to the c
cd20: 68 65 63 6b 73 75 6d 20 6e 6f 6e 63 65 20 76 61  hecksum nonce va
cd30: 6c 75 65 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  lue found in the
cd40: 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20  .journal header 
cd50: 61 74 20 6f 66 66 73 65 74 20 31 32 2e 0a 3c 6c  at offset 12..<l
cd60: 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 69 6e 64  i>Initialize ind
cd70: 65 78 20 58 20 74 6f 20 62 65 20 4e 2d 32 30 30  ex X to be N-200
cd80: 20 28 77 68 65 72 65 20 4e 20 69 73 20 74 68 65   (where N is the
cd90: 20 73 69 7a 65 20 6f 66 20 61 20 64 61 74 61 62   size of a datab
cda0: 61 73 65 20 70 61 67 65 0a 69 6e 20 62 79 74 65  ase page.in byte
cdb0: 73 2e 0a 3c 6c 69 3e 49 6e 74 65 72 70 72 65 74  s..<li>Interpret
cdc0: 20 74 68 65 20 66 6f 75 72 20 62 79 74 65 73 20   the four bytes 
cdd0: 61 74 20 6f 66 66 73 65 74 20 58 20 69 6e 74 6f  at offset X into
cde0: 20 74 68 65 20 70 61 67 65 20 61 73 20 61 20 34   the page as a 4
cdf0: 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e  -byte big-endian
ce00: 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65  .unsigned intege
ce10: 72 2e 20 20 41 64 64 20 74 68 65 20 76 61 6c 75  r.  Add the valu
ce20: 65 20 6f 66 20 74 68 61 74 20 69 6e 74 65 67 65  e of that intege
ce30: 72 20 74 6f 20 74 68 65 20 63 68 65 63 6b 73 75  r to the checksu
ce40: 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72 61 63 65 20  m..<li>Subtrace 
ce50: 32 30 30 20 66 72 6f 6d 20 58 2e 0a 3c 6c 69 3e  200 from X..<li>
ce60: 49 66 20 58 20 69 73 20 67 72 65 61 74 65 72 20  If X is greater 
ce70: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
ce80: 20 7a 65 72 6f 2c 20 67 6f 20 62 61 63 6b 20 74   zero, go back t
ce90: 6f 20 73 74 65 70 20 33 2e 0a 3c 2f 6f 6c 3e 0a  o step 3..</ol>.
cea0: 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73 75 6d  .<p>The checksum
ceb0: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 74   value is used t
cec0: 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73 74 20  o guard against 
ced0: 69 6e 63 6f 6d 70 6c 65 74 65 20 77 72 69 74 65  incomplete write
cee0: 73 20 6f 66 0a 61 20 6a 6f 75 72 6e 61 6c 20 70  s of.a journal p
cef0: 61 67 65 20 72 65 63 6f 72 64 20 66 6f 6c 6c 6f  age record follo
cf00: 77 69 6e 67 20 61 20 70 6f 77 65 72 20 66 61 69  wing a power fai
cf10: 6c 75 72 65 2e 20 20 41 20 64 69 66 66 65 72 65  lure.  A differe
cf20: 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f 6e 63 65 0a  nt random nonce.
cf30: 69 73 20 75 73 65 64 20 65 61 63 68 20 74 69 6d  is used each tim
cf40: 65 20 61 20 74 72 61 73 61 63 74 69 6f 6e 20 69  e a trasaction i
cf50: 73 20 73 74 61 72 74 65 64 20 69 6e 20 6f 72 64  s started in ord
cf60: 65 72 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74  er to minimize t
cf70: 68 65 20 72 69 73 6b 0a 74 68 61 74 20 75 6e 77  he risk.that unw
cf80: 72 69 74 74 65 6e 20 73 65 63 74 6f 72 73 20 6d  ritten sectors m
cf90: 69 67 68 74 20 62 79 20 63 68 61 6e 63 65 20 63  ight by chance c
cfa0: 6f 6e 74 61 69 6e 20 64 61 74 61 20 66 72 6f 6d  ontain data from
cfb0: 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 0a 74   the same page.t
cfc0: 68 61 74 20 77 61 73 20 61 20 70 61 72 74 20 6f  hat was a part o
cfd0: 66 20 70 72 69 6f 72 20 6a 6f 75 72 6e 61 6c 73  f prior journals
cfe0: 2e 20 20 42 79 20 63 68 61 6e 67 69 6e 67 20 74  .  By changing t
cff0: 68 65 20 6e 6f 6e 63 65 20 66 6f 72 20 65 61 63  he nonce for eac
d000: 68 0a 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 73  h.transaction, s
d010: 74 61 6c 65 20 64 61 74 61 20 6f 6e 20 64 69 73  tale data on dis
d020: 6b 20 77 69 6c 6c 20 73 74 69 6c 6c 20 67 65 6e  k will still gen
d030: 65 72 61 74 65 20 61 6e 20 69 6e 63 6f 72 72 65  erate an incorre
d040: 63 74 20 63 68 65 63 6b 73 75 6d 0a 61 6e 64 20  ct checksum.and 
d050: 62 65 20 64 65 74 65 63 74 65 64 20 77 69 74 68  be detected with
d060: 20 68 69 67 68 20 70 72 6f 62 61 62 69 6c 69 74   high probabilit
d070: 79 2e 20 20 54 68 65 20 63 68 65 63 6b 73 75 6d  y.  The checksum
d080: 20 6f 6e 6c 79 20 75 73 65 73 20 61 20 73 70 61   only uses a spa
d090: 72 63 65 20 73 61 6d 70 6c 65 0a 6f 66 20 33 32  rce sample.of 32
d0a0: 2d 62 69 74 20 77 6f 72 64 73 20 66 72 6f 6d 20  -bit words from 
d0b0: 74 68 65 20 64 61 74 61 20 72 65 63 6f 72 64 20  the data record 
d0c0: 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  for performance 
d0d0: 72 65 61 73 6f 6e 73 20 2d 20 64 65 73 69 67 6e  reasons - design
d0e0: 20 73 74 75 64 69 65 73 20 0a 64 75 72 69 6e 67   studies .during
d0f0: 20 74 68 65 20 70 6c 61 6e 6e 69 6e 67 20 70 68   the planning ph
d100: 61 73 65 73 20 6f 66 20 53 51 4c 69 74 65 20 33  ases of SQLite 3
d110: 2e 30 2e 30 20 73 68 6f 77 65 64 0a 61 20 73 69  .0.0 showed.a si
d120: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
d130: 6d 61 6e 63 65 20 68 69 74 20 69 6e 20 63 68 65  mance hit in che
d140: 63 6b 73 75 6d 6d 69 6e 67 20 74 68 65 20 65 6e  cksumming the en
d150: 74 69 72 65 20 70 61 67 65 2e 3c 2f 70 3e 0a 0a  tire page.</p>..
d160: 3c 70 3e 4c 65 74 20 74 68 65 20 70 61 67 65 20  <p>Let the page 
d170: 63 6f 75 6e 74 20 76 61 6c 75 65 20 61 74 20 6f  count value at o
d180: 66 66 73 65 74 20 38 20 69 6e 20 74 68 65 20 6a  ffset 8 in the j
d190: 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 62 79  ournal header by
d1a0: 20 4d 2e 0a 49 66 20 4d 20 69 73 20 67 72 65 61   M..If M is grea
d1b0: 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 74 68  ter than zero th
d1c0: 65 6e 20 61 66 74 65 72 20 4d 20 70 61 67 65 20  en after M page 
d1d0: 72 65 63 6f 72 64 73 20 74 68 65 20 6a 6f 75 72  records the jour
d1e0: 6e 61 6c 20 66 69 6c 65 0a 6d 61 79 20 62 65 20  nal file.may be 
d1f0: 7a 65 72 6f 20 70 61 64 64 65 64 20 6f 75 74 20  zero padded out 
d200: 74 6f 20 74 68 65 20 6e 65 78 74 20 6d 75 6c 74  to the next mult
d210: 69 70 6c 65 20 6f 66 20 74 68 65 20 73 65 63 74  iple of the sect
d220: 6f 72 20 73 69 7a 65 20 61 6e 64 20 61 6e 6f 74  or size and anot
d230: 68 65 72 0a 6a 6f 75 72 6e 61 6c 20 68 65 61 64  her.journal head
d240: 65 72 20 6d 61 79 20 62 65 20 69 6e 73 65 72 74  er may be insert
d250: 65 64 2e 20 20 41 6c 6c 20 6a 6f 75 72 6e 61 6c  ed.  All journal
d260: 20 68 65 61 64 65 72 73 20 77 69 74 68 69 6e 20   headers within 
d270: 74 68 65 20 73 61 6d 65 0a 6a 6f 75 72 6e 61 6c  the same.journal
d280: 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 74 68   must contain th
d290: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
d2a0: 70 61 67 65 20 73 69 7a 65 20 61 6e 64 20 73 65  page size and se
d2b0: 63 74 6f 72 20 73 69 7a 65 2e 3c 2f 70 3e 0a 0a  ctor size.</p>..
d2c0: 3c 70 3e 49 66 20 4d 20 69 73 20 2d 31 20 69 6e  <p>If M is -1 in
d2d0: 20 74 68 65 20 69 6e 69 74 69 61 6c 20 6a 6f 75   the initial jou
d2e0: 72 6e 61 6c 20 68 65 61 64 65 72 2c 20 74 68 65  rnal header, the
d2f0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
d300: 70 61 67 65 20 72 65 63 6f 72 64 73 0a 74 68 61  page records.tha
d310: 74 20 66 6f 6c 6c 6f 77 20 69 73 20 63 6f 6d 70  t follow is comp
d320: 75 74 65 64 20 62 79 20 66 69 67 75 72 65 20 6f  uted by figure o
d330: 75 74 20 68 6f 77 20 6d 61 6e 79 20 70 61 67 65  ut how many page
d340: 20 72 65 63 6f 72 64 73 20 77 69 6c 6c 20 66 69   records will fi
d350: 74 20 69 6e 0a 74 68 65 20 61 76 61 69 6c 61 62  t in.the availab
d360: 6c 65 20 73 70 61 63 65 20 6f 66 20 74 68 65 20  le space of the 
d370: 72 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 65  remainder of the
d380: 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 2e 3c 2f   journal file.</
d390: 70 3e 0a                                         p>.