Documentation Source Text

Hex Artifact Content
Login

Artifact f6ab571f751a042ffb4dc3695d12bb89b3670346:


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 0a   file in pages..
1610: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
1620: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1630: 33 32 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  32<td valign=top
1640: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c   align=center>4<
1650: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 50  td align=left>.P
1660: 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
1670: 65 20 66 69 72 73 74 20 66 72 65 65 6c 69 73 74  e first freelist
1680: 20 74 72 75 6e 6b 20 70 61 67 65 2e 0a 3c 74 72   trunk page..<tr
1690: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
16a0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 36 3c  align=center>36<
16b0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
16c0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
16d0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 6f 74 61  align=left>.Tota
16e0: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 66 72 65 65  l number of free
16f0: 6c 69 73 74 20 70 61 67 65 73 2e 0a 3c 74 72 3e  list pages..<tr>
1700: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1710: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 30 3c 74  lign=center>40<t
1720: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1730: 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61  gn=center>4<td a
1740: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 73  lign=left>.The s
1750: 63 68 65 6d 61 20 63 6f 6f 6b 69 65 2e 0a 3c 74  chema cookie..<t
1760: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1770: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 34   align=center>44
1780: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1790: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
17a0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65   align=left>.The
17b0: 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e   schema format n
17c0: 75 6d 62 65 72 2e 20 20 43 75 72 72 65 6e 74 6c  umber.  Currentl
17d0: 79 20 73 75 70 70 6f 72 74 20 73 63 68 65 6d 61  y support schema
17e0: 20 66 6f 72 6d 61 74 73 20 61 72 65 20 31 2c 20   formats are 1, 
17f0: 32 2c 20 33 2c 20 61 6e 64 20 34 2e 0a 3c 74 72  2, 3, and 4..<tr
1800: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1810: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 38 3c  align=center>48<
1820: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1830: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1840: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 44 65 66 61  align=left>.Defa
1850: 75 6c 74 20 70 61 67 65 20 63 61 63 68 65 20 73  ult page cache s
1860: 69 7a 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ize..<tr><td val
1870: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1880: 6e 74 65 72 3e 35 32 3c 74 64 20 76 61 6c 69 67  nter>52<td valig
1890: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
18a0: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
18b0: 66 74 3e 0a 54 68 65 20 70 61 67 65 20 6e 75 6d  ft>.The page num
18c0: 62 65 72 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ber of the large
18d0: 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  st root b-tree p
18e0: 61 67 65 20 77 68 65 6e 20 69 6e 20 61 75 74 6f  age when in auto
18f0: 2d 76 61 63 75 75 6d 20 6f 72 0a 69 6e 63 72 65  -vacuum or.incre
1900: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20 6d 6f  mental-vacuum mo
1910: 64 65 73 2c 20 6f 72 20 7a 65 72 6f 20 6f 74 68  des, or zero oth
1920: 65 72 77 69 73 65 2e 0a 3c 74 72 3e 3c 74 64 20  erwise..<tr><td 
1930: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1940: 3d 63 65 6e 74 65 72 3e 35 36 3c 74 64 20 76 61  =center>56<td va
1950: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
1960: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
1970: 3d 6c 65 66 74 3e 0a 54 68 65 20 64 61 74 61 62  =left>.The datab
1980: 61 73 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  ase text encodin
1990: 67 2e 20 20 41 20 76 61 6c 75 65 20 6f 66 20 31  g.  A value of 1
19a0: 20 6d 65 61 6e 73 20 55 54 46 2d 38 2e 20 20 41   means UTF-8.  A
19b0: 20 76 61 6c 75 65 20 6f 66 20 32 0a 6d 65 61 6e   value of 2.mean
19c0: 73 20 55 54 46 2d 31 36 6c 65 2e 20 20 41 20 76  s UTF-16le.  A v
19d0: 61 6c 75 65 20 6f 66 20 33 20 6d 65 61 6e 73 20  alue of 3 means 
19e0: 55 54 46 2d 31 36 62 65 2e 0a 3c 74 72 3e 3c 74  UTF-16be..<tr><t
19f0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1a00: 67 6e 3d 63 65 6e 74 65 72 3e 36 30 3c 74 64 20  gn=center>60<td 
1a10: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1a20: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
1a30: 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 22 75 73  gn=left>.The "us
1a40: 65 72 20 76 65 72 73 69 6f 6e 22 20 61 73 20 72  er version" as r
1a50: 65 61 64 20 61 6e 64 20 73 65 74 20 62 79 20 74  ead and set by t
1a60: 68 65 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e  he [user_version
1a70: 20 70 72 61 67 6d 61 5d 2e 0a 3c 74 72 3e 3c 74   pragma]..<tr><t
1a80: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1a90: 67 6e 3d 63 65 6e 74 65 72 3e 36 34 3c 74 64 20  gn=center>64<td 
1aa0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1ab0: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
1ac0: 67 6e 3d 6c 65 66 74 3e 0a 54 72 75 65 20 28 6e  gn=left>.True (n
1ad0: 6f 6e 2d 7a 65 72 6f 29 20 66 6f 72 20 69 6e 63  on-zero) for inc
1ae0: 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 20  remental-vacuum 
1af0: 6d 6f 64 65 2e 20 20 46 61 6c 73 65 20 28 7a 65  mode.  False (ze
1b00: 72 6f 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c  ro) otherwise..<
1b10: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
1b20: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36  p align=center>6
1b30: 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
1b40: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 32 3c  align=center>32<
1b50: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 52  td align=left>.R
1b60: 65 73 65 72 76 65 64 20 66 6f 72 20 65 78 70 61  eserved for expa
1b70: 6e 73 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20  nsion.  Must be 
1b80: 7a 65 72 6f 2e 0a 3c 2f 74 61 62 6c 65 3e 3c 2f  zero..</table></
1b90: 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 45 76 65 72  center>..<p>Ever
1ba0: 79 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  y SQLite databas
1bb0: 65 20 66 69 6c 65 20 62 65 67 69 6e 73 20 77 69  e file begins wi
1bc0: 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  th the following
1bd0: 20 31 36 20 62 79 74 65 73 20 28 69 6e 20 68 65   16 bytes (in he
1be0: 78 29 3a 0a 35 33 20 35 31 20 34 63 20 36 39 20  x):.53 51 4c 69 
1bf0: 37 34 20 36 35 20 32 30 20 36 36 20 36 66 20 37  74 65 20 66 6f 7
1c00: 32 20 36 64 20 36 31 20 37 34 20 32 30 20 33 33  2 6d 61 74 20 33
1c10: 20 30 30 2e 20 20 54 68 69 73 20 62 79 74 65 20   00.  This byte 
1c20: 73 65 71 75 65 6e 63 65 0a 63 6f 72 72 65 73 70  sequence.corresp
1c30: 6f 6e 64 73 20 74 6f 20 74 68 65 20 55 54 46 2d  onds to the UTF-
1c40: 38 20 73 74 72 69 6e 67 20 22 53 51 4c 69 74 65  8 string "SQLite
1c50: 20 66 6f 72 6d 61 74 20 33 22 20 69 6e 63 6c 75   format 3" inclu
1c60: 64 69 6e 67 20 74 68 65 20 6e 75 6c 0a 74 65 72  ding the nul.ter
1c70: 6d 69 6e 61 74 6f 72 20 63 68 61 72 61 63 74 65  minator characte
1c80: 72 20 61 74 20 74 68 65 20 65 6e 64 2e 3c 2f 70  r at the end.</p
1c90: 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 6c 65 20 66  >..<p>The file f
1ca0: 6f 72 6d 61 74 20 77 72 69 74 65 20 76 65 72 73  ormat write vers
1cb0: 69 6f 6e 20 61 6e 64 20 66 69 6c 65 20 66 6f 72  ion and file for
1cc0: 6d 61 74 20 72 65 61 64 20 76 65 72 73 69 6f 6e  mat read version
1cd0: 20 61 74 20 6f 66 66 73 65 74 73 0a 31 38 20 61   at offsets.18 a
1ce0: 6e 64 20 31 39 20 61 72 65 20 69 6e 74 65 6e 64  nd 19 are intend
1cf0: 65 64 20 74 6f 20 61 6c 6c 6f 77 20 66 6f 72 20  ed to allow for 
1d00: 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20 6f 66 20  enhancements of 
1d10: 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  the file format.
1d20: 69 6e 20 66 75 74 75 72 65 20 76 65 72 73 69 6f  in future versio
1d30: 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 49  ns of SQLite.  I
1d40: 6e 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f  n current versio
1d50: 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c 20 62 6f  ns of SQLite, bo
1d60: 74 68 20 6f 66 0a 74 68 65 73 65 20 76 61 6c 75  th of.these valu
1d70: 65 73 20 6d 75 73 74 20 62 65 20 6f 6e 65 2e 20  es must be one. 
1d80: 20 49 66 20 61 20 76 65 72 73 69 6f 6e 20 6f 66   If a version of
1d90: 20 53 51 4c 69 74 65 20 63 6f 64 65 64 20 74 6f   SQLite coded to
1da0: 20 74 68 65 20 63 75 72 72 65 6e 74 0a 66 69 6c   the current.fil
1db0: 65 20 66 6f 72 6d 61 74 20 73 70 65 63 69 66 69  e format specifi
1dc0: 63 61 74 69 6f 6e 20 65 6e 63 6f 75 6e 74 65 72  cation encounter
1dd0: 73 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  s a database fil
1de0: 65 20 77 68 65 72 65 20 74 68 65 20 72 65 61 64  e where the read
1df0: 0a 76 65 72 73 69 6f 6e 20 69 73 20 31 20 62 75  .version is 1 bu
1e00: 74 20 74 68 65 20 77 72 69 74 65 20 76 65 72 73  t the write vers
1e10: 69 6f 6e 20 69 73 20 67 72 65 61 74 65 72 20 74  ion is greater t
1e20: 68 61 6e 20 6f 6e 65 2c 20 74 68 65 6e 20 74 68  han one, then th
1e30: 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20  e database.file 
1e40: 6d 75 73 74 20 62 65 20 74 72 65 61 74 65 64 20  must be treated 
1e50: 61 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 49  as read-only.  I
1e60: 66 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  f a database fil
1e70: 65 20 77 69 74 68 20 61 20 72 65 61 64 20 76 65  e with a read ve
1e80: 72 73 69 6f 6e 0a 67 72 65 61 74 65 72 20 74 68  rsion.greater th
1e90: 61 6e 20 31 20 69 73 20 65 6e 63 6f 75 6e 74 65  an 1 is encounte
1ea0: 72 2c 20 74 68 65 6e 20 74 68 61 74 20 64 61 74  r, then that dat
1eb0: 61 62 61 73 65 20 63 61 6e 6e 6f 74 20 62 65 20  abase cannot be 
1ec0: 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
1ed0: 3c 2f 70 3e 0a 0a 3c 70 3e 53 51 4c 69 74 65 20  </p>..<p>SQLite 
1ee0: 68 61 73 20 74 68 65 20 61 62 69 6c 69 74 79 20  has the ability 
1ef0: 74 6f 20 73 65 74 20 61 73 69 64 65 20 61 20 73  to set aside a s
1f00: 6d 61 6c 6c 20 6e 75 6d 62 65 72 20 6f 66 20 65  mall number of e
1f10: 78 74 72 61 20 62 79 74 65 73 20 61 74 0a 74 68  xtra bytes at.th
1f20: 65 20 65 6e 64 20 6f 66 20 65 76 65 72 79 20 70  e end of every p
1f30: 61 67 65 20 66 6f 72 20 75 73 65 20 62 79 20 65  age for use by e
1f40: 78 74 65 6e 73 69 6f 6e 73 2e 20 20 54 68 65 73  xtensions.  Thes
1f50: 65 20 65 78 74 72 61 20 62 79 74 65 73 20 61 72  e extra bytes ar
1f60: 65 0a 75 73 65 64 2c 20 66 6f 72 20 65 78 61 6d  e.used, for exam
1f70: 70 6c 65 2c 20 62 79 20 74 68 65 20 53 51 4c 69  ple, by the SQLi
1f80: 74 65 20 45 6e 63 72 79 70 74 69 6f 6e 20 45 78  te Encryption Ex
1f90: 74 65 6e 73 69 6f 6e 20 74 6f 20 73 74 6f 72 65  tension to store
1fa0: 20 61 20 6e 6f 6e 63 65 0a 61 6e 64 2f 6f 72 20   a nonce.and/or 
1fb0: 63 72 79 70 74 6f 67 72 61 70 68 69 63 20 63 68  cryptographic ch
1fc0: 65 63 6b 73 75 6d 20 61 73 73 6f 63 69 61 74 65  ecksum associate
1fd0: 64 20 77 69 74 68 20 65 61 63 68 20 70 61 67 65  d with each page
1fe0: 2e 20 20 54 68 65 20 0a 22 72 65 73 65 72 76 65  .  The ."reserve
1ff0: 64 20 73 70 61 63 65 22 20 73 69 7a 65 20 69 6e  d space" size in
2000: 20 74 68 65 20 31 2d 62 79 74 65 20 69 6e 74 65   the 1-byte inte
2010: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 30  ger at offset 20
2020: 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 0a 6f   is the number.o
2030: 66 20 62 79 74 65 73 20 6f 66 20 73 70 61 63 65  f bytes of space
2040: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65   at the end of e
2050: 61 63 68 20 70 61 67 65 20 74 6f 20 72 65 73 65  ach page to rese
2060: 72 76 65 20 66 6f 72 20 65 78 74 65 6e 73 69 6f  rve for extensio
2070: 6e 73 2e 0a 54 68 69 73 20 76 61 6c 75 65 20 69  ns..This value i
2080: 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 54 68  s usually 0.  Th
2090: 65 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 6f  e value can be o
20a0: 64 64 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  dd.</p>..<tcl>hd
20b0: 5f 66 72 61 67 6d 65 6e 74 20 75 73 61 62 6c 65  _fragment usable
20c0: 5f 73 69 7a 65 20 7b 75 73 61 62 6c 65 20 73 69  _size {usable si
20d0: 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c 70 3e 54 68 65  ze}</tcl>.<p>The
20e0: 20 22 75 73 61 62 6c 65 20 73 69 7a 65 22 20 6f   "usable size" o
20f0: 66 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67  f a database pag
2100: 65 20 69 73 20 74 68 65 20 70 61 67 65 20 73 69  e is the page si
2110: 7a 65 20 73 70 65 63 69 66 79 20 62 79 20 74 68  ze specify by th
2120: 65 0a 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72  e.2-byte integer
2130: 20 61 74 20 6f 66 66 73 65 74 20 31 36 20 69 6e   at offset 16 in
2140: 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 73 73   the header less
2150: 20 74 68 65 20 22 72 65 73 65 72 76 65 64 22 20   the "reserved" 
2160: 73 70 61 63 65 20 73 69 7a 65 0a 72 65 63 6f 72  space size.recor
2170: 64 65 64 20 69 6e 20 74 68 65 20 31 2d 62 79 74  ded in the 1-byt
2180: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
2190: 73 65 74 20 32 30 20 69 6e 20 74 68 65 20 68 65  set 20 in the he
21a0: 61 64 65 72 2e 20 20 54 68 65 20 75 73 61 62 6c  ader.  The usabl
21b0: 65 0a 73 69 7a 65 20 6f 66 20 61 20 70 61 67 65  e.size of a page
21c0: 20 6d 69 67 68 74 20 62 65 20 61 6e 20 6f 64 64   might be an odd
21d0: 20 6e 75 6d 62 65 72 2e 20 20 48 6f 77 65 76 65   number.  Howeve
21e0: 72 2c 20 74 68 65 20 75 73 61 62 6c 65 20 73 69  r, the usable si
21f0: 7a 65 20 69 73 20 6e 6f 74 0a 61 6c 6c 6f 77 65  ze is not.allowe
2200: 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  d to be less tha
2210: 6e 20 34 38 30 2e 20 20 49 6e 20 6f 74 68 65 72  n 480.  In other
2220: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 70   words, if the p
2230: 61 67 65 20 73 69 7a 65 20 69 73 20 35 31 32 2c  age size is 512,
2240: 0a 74 68 65 6e 20 74 68 65 20 72 65 73 65 72 76  .then the reserv
2250: 65 64 20 73 70 61 63 65 20 73 69 7a 65 20 63 61  ed space size ca
2260: 6e 6e 6f 74 20 65 78 63 65 65 64 20 33 32 2e 3c  nnot exceed 32.<
2270: 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6d 61 78 69  /p>..<p>The maxi
2280: 6d 75 6d 20 61 6e 64 20 6d 69 6e 69 6d 75 6d 20  mum and minimum 
2290: 65 6d 62 65 64 64 65 64 20 70 61 79 6c 6f 61 64  embedded payload
22a0: 20 66 72 61 63 74 69 6f 6e 73 20 61 6e 64 20 74   fractions and t
22b0: 68 65 20 6c 65 61 66 0a 70 61 79 6c 6f 61 64 20  he leaf.payload 
22c0: 66 72 61 63 74 69 6f 6e 20 76 61 6c 75 65 73 20  fraction values 
22d0: 6d 75 73 74 20 62 65 20 36 34 2c 20 33 32 2c 20  must be 64, 32, 
22e0: 61 6e 64 20 33 32 2e 20 20 54 68 65 73 65 20 76  and 32.  These v
22f0: 61 6c 75 65 73 20 77 65 72 65 0a 6f 72 67 69 6e  alues were.orgin
2300: 61 6c 6c 79 20 69 6e 74 65 6e 64 65 64 20 74 6f  ally intended to
2310: 20 61 73 20 74 75 6e 61 62 6c 65 20 70 61 72 61   as tunable para
2320: 6d 65 74 65 72 73 20 74 68 61 74 20 63 6f 75 6c  meters that coul
2330: 64 20 62 65 20 75 73 65 64 20 74 6f 0a 6d 6f 64  d be used to.mod
2340: 69 66 79 20 74 68 65 20 73 74 6f 72 61 67 65 20  ify the storage 
2350: 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 62 2d  format of the b-
2360: 74 72 65 65 20 61 6c 67 6f 72 69 74 68 6d 2e 20  tree algorithm. 
2370: 20 48 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 66   However, that.f
2380: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20  unctionality is 
2390: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 61 6e  not supported an
23a0: 64 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63  d there are no c
23b0: 75 72 72 65 6e 74 20 70 6c 61 6e 73 20 74 6f 20  urrent plans to 
23c0: 61 64 64 0a 73 75 70 70 6f 72 74 20 69 6e 20 74  add.support in t
23d0: 68 65 20 66 75 74 75 72 65 2e 20 20 48 65 6e 63  he future.  Henc
23e0: 65 2c 20 74 68 65 73 65 20 74 68 72 65 65 20 62  e, these three b
23f0: 79 74 65 73 20 61 72 65 20 66 69 78 65 64 20 61  ytes are fixed a
2400: 74 20 74 68 65 0a 76 61 6c 75 65 73 20 73 70 65  t the.values spe
2410: 63 69 66 69 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e  cified.</p>..<p>
2420: 54 68 65 20 66 69 6c 65 20 63 68 61 6e 67 65 20  The file change 
2430: 63 6f 75 6e 74 65 72 20 69 73 20 61 20 34 2d 62  counter is a 4-b
2440: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
2450: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 0a  nteger which is.
2460: 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e  incremented when
2470: 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
2480: 65 20 66 69 6c 65 20 69 73 20 63 68 61 6e 67 65  e file is change
2490: 64 2e 20 20 57 68 65 6e 20 74 77 6f 20 6f 72 20  d.  When two or 
24a0: 6d 6f 72 65 0a 70 72 6f 63 65 73 73 65 73 20 61  more.processes a
24b0: 72 65 20 72 65 61 64 69 6e 67 20 74 68 65 20 73  re reading the s
24c0: 61 6d 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ame database fil
24d0: 65 2c 20 65 61 63 68 20 70 72 6f 63 65 73 73 20  e, each process 
24e0: 63 61 6e 20 64 65 74 65 63 74 0a 64 61 74 61 62  can detect.datab
24f0: 61 73 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d  ase changes from
2500: 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73   other processes
2510: 20 62 79 20 6d 6f 6e 69 74 6f 72 69 6e 67 20 74   by monitoring t
2520: 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
2530: 72 2e 0a 41 20 70 72 6f 63 65 73 73 20 77 69 6c  r..A process wil
2540: 6c 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20  l normally want 
2550: 74 6f 20 66 6c 75 73 68 20 69 74 73 20 64 61 74  to flush its dat
2560: 61 62 61 73 65 20 70 61 67 65 20 63 61 63 68 65  abase page cache
2570: 20 77 68 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72   when.another pr
2580: 6f 63 65 73 73 20 6d 6f 64 69 66 69 65 64 20 74  ocess modified t
2590: 68 65 20 64 61 74 61 62 61 73 65 2c 20 73 69 6e  he database, sin
25a0: 63 65 20 74 68 65 20 63 61 63 68 65 20 68 61 73  ce the cache has
25b0: 20 62 65 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54   become stale..T
25c0: 68 65 20 66 69 6c 65 20 63 68 61 6e 67 65 20 63  he file change c
25d0: 6f 75 6e 74 65 72 20 66 61 63 69 6c 69 74 61 74  ounter facilitat
25e0: 65 73 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70  es this.</p>..<p
25f0: 3e 55 6e 75 73 65 64 20 70 61 67 65 73 20 69 6e  >Unused pages in
2600: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2610: 6c 65 20 61 72 65 20 73 74 6f 72 65 64 20 6f 6e  le are stored on
2620: 20 61 20 66 72 65 65 6c 69 73 74 2e 20 20 54 68   a freelist.  Th
2630: 65 0a 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  e.4-byte big-end
2640: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f  ian integer at o
2650: 66 66 73 65 74 20 33 32 20 73 74 6f 72 65 73 20  ffset 32 stores 
2660: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
2670: 6f 66 0a 74 68 65 20 66 69 72 73 74 20 70 61 67  of.the first pag
2680: 65 20 6f 66 20 74 68 65 20 66 72 65 65 6c 69 73  e of the freelis
2690: 74 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68  t, or zero if th
26a0: 65 20 66 72 65 65 6c 69 73 74 20 69 73 20 65 6d  e freelist is em
26b0: 70 74 79 2e 0a 54 68 65 20 34 2d 62 79 74 65 20  pty..The 4-byte 
26c0: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
26d0: 65 72 20 61 74 20 6f 66 66 73 65 74 20 33 36 20  er at offset 36 
26e0: 73 74 6f 72 65 73 20 73 74 6f 72 65 73 20 74 68  stores stores th
26f0: 65 20 74 6f 74 61 6c 20 0a 6e 75 6d 62 65 72 20  e total .number 
2700: 6f 66 20 70 61 67 65 73 20 6f 6e 20 74 68 65 20  of pages on the 
2710: 66 72 65 65 6c 69 73 74 2e 3c 2f 70 3e 0a 0a 3c  freelist.</p>..<
2720: 70 3e 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  p>The schema coo
2730: 6b 69 65 20 69 73 20 61 20 34 2d 62 79 74 65 20  kie is a 4-byte 
2740: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
2750: 65 72 20 61 74 20 6f 66 66 73 65 74 20 34 30 0a  er at offset 40.
2760: 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  that is incremen
2770: 74 65 64 20 77 68 65 6e 65 76 65 72 20 74 68 65  ted whenever the
2780: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
2790: 20 63 68 61 6e 67 65 73 2e 20 20 41 20 0a 70 72   changes.  A .pr
27a0: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
27b0: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 61 67 61   is compiled aga
27c0: 69 6e 73 74 20 61 20 73 70 65 63 69 66 69 63 20  inst a specific 
27d0: 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 0a 64  version of the.d
27e0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
27f0: 20 57 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   Whenever the da
2800: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
2810: 61 6e 67 65 73 2c 20 74 68 65 20 73 74 61 74 65  anges, the state
2820: 6d 65 6e 74 0a 6d 75 73 74 20 62 65 20 72 65 70  ment.must be rep
2830: 72 65 70 61 72 65 64 2e 20 20 57 68 65 6e 65 76  repared.  Whenev
2840: 65 72 20 61 20 70 72 65 70 61 72 65 64 20 73 74  er a prepared st
2850: 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 69 74  atement runs, it
2860: 20 66 69 72 73 74 20 63 68 65 63 6b 73 0a 74 68   first checks.th
2870: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
2880: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  to make sure the
2890: 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 61   value is the sa
28a0: 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65 20 73  me as when the s
28b0: 74 61 74 65 6d 65 6e 74 0a 77 61 73 20 70 72 65  tatement.was pre
28c0: 70 61 72 65 64 20 61 6e 64 20 69 66 20 6e 6f 74  pared and if not
28d0: 20 69 74 20 61 62 6f 72 74 73 20 74 6f 20 66 6f   it aborts to fo
28e0: 72 63 65 20 74 68 65 20 73 74 61 74 65 6d 65 6e  rce the statemen
28f0: 74 20 74 6f 20 62 65 20 72 65 70 72 65 70 61 72  t to be reprepar
2900: 65 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  ed.</p>..<p>The 
2910: 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75  schema format nu
2920: 6d 62 65 72 20 69 73 20 61 20 34 2d 62 79 74 65  mber is a 4-byte
2930: 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65   big-endian inte
2940: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 34 34  ger at offset 44
2950: 2e 0a 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72  ..The schema for
2960: 6d 61 74 20 6e 75 6d 62 65 72 20 69 73 20 73 69  mat number is si
2970: 6d 69 6c 61 72 20 74 6f 20 74 68 65 20 66 69 6c  milar to the fil
2980: 65 20 66 6f 72 6d 61 74 20 72 65 61 64 20 61 6e  e format read an
2990: 64 20 77 72 69 74 65 0a 76 65 72 73 69 6f 6e 20  d write.version 
29a0: 6e 75 6d 62 65 72 73 20 61 74 20 6f 66 66 73 65  numbers at offse
29b0: 74 73 20 31 38 20 61 6e 64 20 31 39 20 65 78 63  ts 18 and 19 exc
29c0: 65 70 74 20 74 68 61 74 20 74 68 65 20 73 63 68  ept that the sch
29d0: 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65  ema format numbe
29e0: 72 0a 72 65 66 65 72 73 20 74 6f 20 74 68 65 20  r.refers to the 
29f0: 68 69 67 68 2d 6c 65 76 65 6c 20 53 51 4c 20 66  high-level SQL f
2a00: 6f 72 6d 61 74 74 69 6e 67 20 72 61 74 68 65 72  ormatting rather
2a10: 20 74 68 61 6e 20 74 68 65 20 6c 6f 77 2d 6c 65   than the low-le
2a20: 76 65 6c 20 62 2d 74 72 65 65 0a 66 6f 72 6d 61  vel b-tree.forma
2a30: 74 74 69 6e 67 2e 20 20 46 6f 75 72 20 73 63 68  tting.  Four sch
2a40: 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65  ema format numbe
2a50: 72 73 20 61 72 65 20 63 75 72 72 65 6e 74 6c 79  rs are currently
2a60: 20 64 65 66 69 6e 65 64 3a 3c 2f 70 3e 0a 0a 3c   defined:</p>..<
2a70: 6f 6c 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 31 3e  ol>.<li value=1>
2a80: 46 6f 72 6d 61 74 20 31 20 69 73 20 75 6e 64 65  Format 1 is unde
2a90: 72 73 74 6f 6f 64 20 62 79 20 61 6c 6c 20 76 65  rstood by all ve
2aa0: 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65  rsions of SQLite
2ab0: 20 62 61 63 6b 20 74 6f 0a 76 65 72 73 69 6f 6e   back to.version
2ac0: 20 33 2e 30 2e 30 2e 3c 2f 6c 69 3e 0a 3c 6c 69   3.0.0.</li>.<li
2ad0: 20 76 61 6c 75 65 3d 32 3e 46 6f 72 6d 61 74 20   value=2>Format 
2ae0: 32 20 61 64 64 73 20 74 68 65 20 61 62 69 6c 69  2 adds the abili
2af0: 74 79 20 6f 66 20 72 6f 77 73 20 77 69 74 68 69  ty of rows withi
2b00: 6e 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  n the same table
2b10: 0a 74 6f 20 68 61 76 65 20 61 20 76 61 72 69 6e  .to have a varin
2b20: 67 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  g number of colu
2b30: 6d 6e 73 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f  mns, in order to
2b40: 20 73 75 70 70 6f 72 74 20 74 68 65 0a 5b 41 4c   support the.[AL
2b50: 54 45 52 20 54 41 42 4c 45 20 7c 20 41 4c 54 45  TER TABLE | ALTE
2b60: 52 20 54 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20  R TABLE ... ADD 
2b70: 43 4f 4c 55 4d 4e 5d 20 66 75 6e 63 74 69 6f 6e  COLUMN] function
2b80: 61 6c 69 74 79 2e 20 20 53 75 70 70 6f 72 74 20  ality.  Support 
2b90: 66 6f 72 0a 72 65 61 64 69 6e 67 20 61 6e 64 20  for.reading and 
2ba0: 77 72 69 74 69 6e 67 20 66 6f 72 6d 61 74 20 32  writing format 2
2bb0: 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53 51   was added in SQ
2bc0: 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 31  Lite version 3.1
2bd0: 2e 33 20 0a 6f 6e 20 32 30 30 35 2d 30 32 2d 31  .3 .on 2005-02-1
2be0: 39 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75  9.</li>.<li valu
2bf0: 65 3d 33 3e 46 6f 72 6d 61 74 20 33 20 61 64 64  e=3>Format 3 add
2c00: 73 20 74 68 65 20 61 62 69 6c 69 74 79 20 6f 66  s the ability of
2c10: 20 65 78 74 72 61 20 63 6f 6c 75 6d 6e 73 20 61   extra columns a
2c20: 64 64 65 64 20 62 79 0a 5b 41 4c 54 45 52 20 54  dded by.[ALTER T
2c30: 41 42 4c 45 20 7c 20 41 4c 54 45 52 20 54 41 42  ABLE | ALTER TAB
2c40: 4c 45 20 2e 2e 2e 20 41 44 44 20 43 4f 4c 55 4d  LE ... ADD COLUM
2c50: 4e 5d 20 74 6f 20 68 61 76 65 20 6e 6f 6e 2d 4e  N] to have non-N
2c60: 55 4c 4c 20 64 65 66 61 75 6c 74 0a 76 61 6c 75  ULL default.valu
2c70: 65 73 2e 20 20 54 68 69 73 20 63 61 70 61 62 69  es.  This capabi
2c80: 6c 69 74 79 20 77 61 73 20 61 64 64 65 64 20 69  lity was added i
2c90: 6e 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  n SQLite version
2ca0: 20 33 2e 31 2e 34 20 0a 6f 6e 20 32 30 30 35 2d   3.1.4 .on 2005-
2cb0: 30 33 2d 31 31 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20  03-11.</li>.<li 
2cc0: 76 61 6c 75 65 3d 34 3e 46 6f 72 6d 61 74 20 34  value=4>Format 4
2cd0: 20 63 61 75 73 65 73 20 53 51 4c 69 74 65 20 74   causes SQLite t
2ce0: 6f 20 72 65 73 70 65 63 74 20 74 68 65 20 44 45  o respect the DE
2cf0: 53 43 20 6b 65 79 77 6f 72 64 20 6f 6e 0a 69 6e  SC keyword on.in
2d00: 64 65 78 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  dex declarations
2d10: 2e 20 20 28 54 68 65 20 44 45 53 43 20 6b 65 79  .  (The DESC key
2d20: 77 6f 72 64 20 69 73 20 69 67 6e 6f 72 65 64 20  word is ignored 
2d30: 69 6e 20 69 6e 64 69 63 65 73 20 66 6f 72 20 0a  in indices for .
2d40: 66 6f 72 6d 61 74 73 20 31 2c 20 32 2c 20 61 6e  formats 1, 2, an
2d50: 64 20 33 2e 29 0a 46 6f 72 6d 61 74 20 34 20 61  d 3.).Format 4 a
2d60: 6c 73 6f 20 61 64 64 73 20 74 77 6f 20 6e 65 77  lso adds two new
2d70: 20 62 6f 6f 6c 65 61 6e 20 72 65 63 6f 72 64 20   boolean record 
2d80: 74 79 70 65 20 76 61 6c 75 65 73 20 28 5b 73 65  type values ([se
2d90: 72 69 61 6c 20 74 79 70 65 73 5d 0a 38 20 61 6e  rial types].8 an
2da0: 64 20 39 2e 29 20 20 53 75 70 70 6f 72 74 20 66  d 9.)  Support f
2db0: 6f 72 20 66 6f 72 6d 61 74 20 34 20 77 61 73 20  or format 4 was 
2dc0: 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74 65 20  added in SQLite 
2dd0: 33 2e 33 2e 30 20 6f 6e 0a 32 30 30 36 2d 30 31  3.3.0 on.2006-01
2de0: 2d 31 30 2e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 0a  -10.</li>.</ol>.
2df0: 0a 3c 70 3e 4e 65 77 20 64 61 74 61 62 61 73 65  .<p>New database
2e00: 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 62   files created b
2e10: 79 20 53 51 4c 69 74 65 20 75 73 65 20 66 6f 72  y SQLite use for
2e20: 6d 61 74 20 31 20 62 79 20 64 65 66 61 75 6c 74  mat 1 by default
2e30: 2c 20 73 6f 0a 74 68 61 74 20 64 61 74 61 62 61  , so.that databa
2e40: 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64  se files created
2e50: 20 62 79 20 6e 65 77 65 72 20 76 65 72 73 69 6f   by newer versio
2e60: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 63 61 6e  ns of SQLite can
2e70: 20 73 74 69 6c 6c 0a 62 65 20 72 65 61 64 20 62   still.be read b
2e80: 79 20 6f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  y older versions
2e90: 20 6f 66 20 53 51 4c 69 74 65 2e 0a 54 68 65 20   of SQLite..The 
2ea0: 5b 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72  [legacy_file_for
2eb0: 6d 61 74 20 70 72 61 67 6d 61 5d 20 63 61 6e 20  mat pragma] can 
2ec0: 62 65 20 75 73 65 64 20 74 6f 20 63 61 75 73 65  be used to cause
2ed0: 20 53 51 4c 69 74 65 0a 74 6f 20 63 72 65 61 74   SQLite.to creat
2ee0: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 66  e new database f
2ef0: 69 6c 65 73 20 75 73 69 6e 67 20 66 6f 72 6d 61  iles using forma
2f00: 74 20 34 2e 20 20 46 75 74 75 72 65 20 76 65 72  t 4.  Future ver
2f10: 73 69 6f 6e 73 20 6f 66 20 0a 53 51 4c 69 74 65  sions of .SQLite
2f20: 20 6d 61 79 20 62 65 67 69 6e 20 74 6f 20 63 72   may begin to cr
2f30: 65 61 74 65 20 66 69 6c 65 73 20 75 73 69 6e 67  eate files using
2f40: 20 66 6f 72 6d 61 74 20 34 20 62 79 20 64 65 66   format 4 by def
2f50: 61 75 6c 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  ault.</p>..<p>Th
2f60: 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  e 4-byte big-end
2f70: 69 61 6e 20 73 69 67 6e 65 64 20 69 6e 74 65 67  ian signed integ
2f80: 65 72 20 61 74 20 6f 66 66 73 65 74 20 34 38 20  er at offset 48 
2f90: 69 73 20 74 68 65 20 73 75 67 67 65 73 74 0a 63  is the suggest.c
2fa0: 61 63 68 65 20 73 69 7a 65 20 69 6e 20 70 61 67  ache size in pag
2fb0: 65 73 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  es for the datab
2fc0: 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 76  ase file.  The v
2fd0: 61 6c 75 65 20 69 73 20 61 20 73 75 67 67 65 73  alue is a sugges
2fe0: 74 69 6f 6e 0a 6f 6e 6c 79 20 61 6e 64 20 53 51  tion.only and SQ
2ff0: 4c 69 74 65 20 69 73 20 75 6e 64 65 72 20 6e 6f  Lite is under no
3000: 20 6f 62 6c 69 67 61 74 69 6f 6e 20 74 6f 20 68   obligation to h
3010: 6f 6e 6f 72 20 69 74 2e 20 20 54 68 65 20 61 62  onor it.  The ab
3020: 73 6f 6c 75 74 65 20 76 61 6c 75 65 0a 6f 66 20  solute value.of 
3030: 74 68 65 20 69 6e 74 65 67 65 72 20 69 73 20 75  the integer is u
3040: 73 65 64 20 61 73 20 74 68 65 20 73 75 67 67 65  sed as the sugge
3050: 73 74 65 64 20 73 69 7a 65 2e 20 20 54 68 65 20  sted size.  The 
3060: 73 75 67 67 65 73 74 65 64 20 63 61 63 68 65 20  suggested cache 
3070: 73 69 7a 65 0a 63 61 6e 20 62 65 20 73 65 74 20  size.can be set 
3080: 75 73 69 6e 67 20 74 68 65 20 5b 64 65 66 61 75  using the [defau
3090: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 70 72  lt_cache_size pr
30a0: 61 67 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54  agma].</p>..<p>T
30b0: 68 65 20 74 77 6f 20 34 2d 62 79 74 65 20 62 69  he two 4-byte bi
30c0: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
30d0: 73 20 61 74 20 6f 66 66 73 65 74 73 20 35 32 20  s at offsets 52 
30e0: 61 6e 64 20 36 34 20 61 72 65 20 75 73 65 64 0a  and 64 are used.
30f0: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 5b 61  to manage the [a
3100: 75 74 6f 5f 76 61 63 75 75 6d 5d 20 61 6e 64 20  uto_vacuum] and 
3110: 5b 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63  [incremental_vac
3120: 75 75 6d 5d 20 6d 6f 64 65 73 2e 20 20 49 66 0a  uum] modes.  If.
3130: 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  the integer at o
3140: 66 66 73 65 74 20 35 32 20 69 73 20 7a 65 72 6f  ffset 52 is zero
3150: 20 74 68 65 6e 20 70 6f 69 6e 74 65 72 2d 6d 61   then pointer-ma
3160: 70 20 28 70 74 72 6d 61 70 29 20 70 61 67 65 73  p (ptrmap) pages
3170: 20 61 72 65 0a 6f 6d 69 74 74 65 64 20 66 72 6f   are.omitted fro
3180: 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
3190: 69 6c 65 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ile and neither 
31a0: 61 75 74 6f 5f 76 61 63 75 75 6d 20 6e 6f 72 0a  auto_vacuum nor.
31b0: 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75  incremental_vacu
31c0: 75 6d 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  um are supported
31d0: 2e 20 20 49 66 20 74 68 65 20 69 6e 74 65 67 65  .  If the intege
31e0: 72 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69  r at offset 52 i
31f0: 73 0a 6e 6f 6e 2d 7a 65 72 6f 20 74 68 65 6e 20  s.non-zero then 
3200: 69 74 20 69 73 20 74 68 65 20 70 61 67 65 20 6e  it is the page n
3210: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6c 61 72  umber of the lar
3220: 67 65 73 74 20 72 6f 6f 74 20 70 61 67 65 20 69  gest root page i
3230: 6e 20 74 68 65 0a 64 61 74 61 62 61 73 65 20 66  n the.database f
3240: 69 6c 65 2c 20 74 68 65 20 64 61 74 61 62 61 73  ile, the databas
3250: 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 20 70  e file contain p
3260: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6e 64  trmap pages, and
3270: 20 74 68 65 0a 6d 6f 64 65 20 6d 75 73 74 20 62   the.mode must b
3280: 65 20 65 69 74 68 65 72 20 61 75 74 6f 5f 76 61  e either auto_va
3290: 63 75 75 6d 20 6f 72 20 69 6e 63 72 65 6d 65 6e  cuum or incremen
32a0: 74 61 6c 5f 76 61 63 75 75 6d 2e 20 20 49 6e 20  tal_vacuum.  In 
32b0: 74 68 69 73 20 6c 61 74 74 65 72 0a 63 61 73 65  this latter.case
32c0: 2c 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74  , the integer at
32d0: 20 6f 66 66 73 65 74 20 36 34 20 69 73 20 74 72   offset 64 is tr
32e0: 75 65 20 66 6f 72 20 69 6e 63 72 65 6d 65 6e 74  ue for increment
32f0: 61 6c 5f 76 61 63 75 75 6d 20 61 6e 64 0a 66 61  al_vacuum and.fa
3300: 6c 73 65 20 66 6f 72 20 61 75 74 6f 5f 76 61 63  lse for auto_vac
3310: 75 75 6d 2e 20 20 49 66 20 74 68 65 20 69 6e 74  uum.  If the int
3320: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35  eger at offset 5
3330: 32 20 69 73 20 7a 65 72 6f 20 74 68 65 6e 0a 74  2 is zero then.t
3340: 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  he integer at of
3350: 66 73 65 74 20 36 34 20 6d 75 73 74 20 61 6c 73  fset 64 must als
3360: 6f 20 62 65 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a  o be zero.</p>..
3370: 3c 70 3e 54 68 65 20 34 2d 62 79 74 65 20 62 69  <p>The 4-byte bi
3380: 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72  g-endian integer
3390: 20 61 74 20 6f 66 66 73 65 74 20 35 36 20 64 65   at offset 56 de
33a0: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 65 6e 63  termines the enc
33b0: 6f 64 69 6e 67 0a 75 73 65 64 20 66 6f 72 20 61  oding.used for a
33c0: 6c 6c 20 74 65 78 74 20 73 74 72 69 6e 67 73 20  ll text strings 
33d0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
33e0: 74 61 62 61 73 65 2e 20 20 41 20 76 61 6c 75 65  tabase.  A value
33f0: 20 6f 66 20 31 20 6d 65 61 6e 73 0a 55 54 46 2d   of 1 means.UTF-
3400: 38 2e 20 20 41 20 76 61 6c 75 65 20 6f 66 20 32  8.  A value of 2
3410: 20 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e   means UTF-16le.
3420: 20 20 41 20 76 61 6c 75 65 20 6f 66 20 33 20 6d    A value of 3 m
3430: 65 61 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a 4e  eans UTF-16be..N
3440: 6f 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20 61  o other values a
3450: 72 65 20 61 6c 6c 6f 77 65 64 2e 3c 2f 70 3e 0a  re allowed.</p>.
3460: 0a 3c 70 3e 54 68 65 20 34 2d 62 79 74 65 20 62  .<p>The 4-byte b
3470: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
3480: 72 20 61 74 20 6f 66 66 73 65 74 20 36 30 20 69  r at offset 60 i
3490: 73 20 74 68 65 20 75 73 65 72 20 76 65 72 73 69  s the user versi
34a0: 6f 6e 20 77 68 69 63 68 0a 69 73 20 73 65 74 20  on which.is set 
34b0: 61 6e 64 20 71 75 65 72 69 65 64 20 62 79 20 74  and queried by t
34c0: 68 65 20 5b 75 73 65 72 5f 76 65 72 73 69 6f 6e  he [user_version
34d0: 20 70 72 61 67 6d 61 5d 2e 20 20 54 68 65 20 75   pragma].  The u
34e0: 73 65 72 20 76 65 72 73 69 6f 6e 20 69 73 0a 6e  ser version is.n
34f0: 6f 74 20 75 73 65 64 20 62 79 20 53 51 4c 69 74  ot used by SQLit
3500: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 6c 6c 20 6f  e.</p>..<p>All o
3510: 74 68 65 72 20 62 79 74 65 73 20 6f 66 20 74 68  ther bytes of th
3520: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
3530: 68 65 61 64 65 72 20 61 72 65 20 72 65 73 65 72  header are reser
3540: 76 65 64 20 66 6f 72 0a 66 75 74 75 72 65 20 65  ved for.future e
3550: 78 70 61 6e 73 69 6f 6e 20 61 6e 64 20 6d 75 73  xpansion and mus
3560: 74 20 62 65 20 73 65 74 20 74 6f 20 7a 65 72 6f  t be set to zero
3570: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 33 20 54  .</p>..<h3>1.3 T
3580: 68 65 20 4c 6f 63 6b 2d 42 79 74 65 20 50 61 67  he Lock-Byte Pag
3590: 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 6c  e</h3>..<p>The l
35a0: 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20 69 73  ock-byte page is
35b0: 20 74 68 65 20 73 69 6e 67 6c 65 20 70 61 67 65   the single page
35c0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
35d0: 20 66 69 6c 65 0a 74 68 61 74 20 63 6f 6e 74 61   file.that conta
35e0: 69 6e 73 20 74 68 65 20 62 79 74 65 73 20 61 74  ins the bytes at
35f0: 20 6f 66 66 73 65 74 73 20 62 65 74 77 65 65 6e   offsets between
3600: 20 31 30 37 33 37 34 31 38 32 34 20 61 6e 64 20   1073741824 and 
3610: 31 30 37 33 37 34 32 33 33 35 2c 0a 69 6e 63 6c  1073742335,.incl
3620: 75 73 69 76 65 2e 20 20 41 20 64 61 74 61 62 61  usive.  A databa
3630: 73 65 20 66 69 6c 65 20 74 68 61 74 20 69 73 20  se file that is 
3640: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
3650: 61 6c 20 74 6f 20 31 30 37 33 37 34 31 38 32 34  al to 1073741824
3660: 20 62 79 74 65 73 20 0a 69 6e 20 73 69 7a 65 20   bytes .in size 
3670: 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 6c 6f 63 6b  contains no lock
3680: 2d 62 79 74 65 20 70 61 67 65 2e 20 20 41 20 64  -byte page.  A d
3690: 61 74 61 62 61 73 65 20 66 69 6c 65 20 6c 61 72  atabase file lar
36a0: 67 65 72 20 74 68 61 6e 0a 31 30 37 33 37 34 31  ger than.1073741
36b0: 38 32 34 20 63 6f 6e 74 61 69 6e 73 20 65 78 61  824 contains exa
36c0: 63 74 6c 79 20 6f 6e 65 20 6c 6f 63 6b 2d 62 79  ctly one lock-by
36d0: 74 65 20 70 61 67 65 2e 0a 3c 2f 70 3e 0a 0a 3c  te page..</p>..<
36e0: 70 3e 54 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20  p>The lock-byte 
36f0: 70 61 67 65 20 69 73 20 73 65 74 20 61 73 69 64  page is set asid
3700: 65 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  e for use by the
3710: 20 6f 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65   operating-syste
3720: 6d 20 73 70 65 63 69 66 69 63 0a 56 46 53 20 69  m specific.VFS i
3730: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6e  mplementation in
3740: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
3750: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
3760: 6c 6f 63 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  locking primitiv
3770: 65 73 2e 0a 53 51 4c 69 74 65 20 77 69 6c 6c 20  es..SQLite will 
3780: 6e 6f 74 20 75 73 65 20 74 68 65 20 6c 6f 63 6b  not use the lock
3790: 2d 62 79 74 65 20 70 61 67 65 3b 20 69 74 20 77  -byte page; it w
37a0: 69 6c 6c 20 6e 65 76 65 72 20 62 65 20 72 65 61  ill never be rea
37b0: 64 20 6f 72 20 77 72 69 74 74 65 6e 0a 62 79 20  d or written.by 
37c0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 2c  the SQLite core,
37d0: 20 74 68 6f 75 67 68 20 6f 70 65 72 61 74 69 6e   though operatin
37e0: 67 2d 73 79 73 74 65 6d 20 73 70 65 63 69 66 69  g-system specifi
37f0: 63 20 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74 69  c VFS implementi
3800: 6f 6e 73 20 6d 61 79 0a 63 68 6f 6f 73 65 20 74  ons may.choose t
3810: 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  o read or write 
3820: 62 79 74 65 73 20 6f 6e 20 74 68 65 20 6c 6f 63  bytes on the loc
3830: 6b 2d 62 79 74 65 20 70 61 67 65 20 61 63 63 6f  k-byte page acco
3840: 72 64 69 6e 67 20 74 6f 20 74 68 65 20 0a 6e 65  rding to the .ne
3850: 65 64 73 20 61 6e 64 20 70 72 6f 63 6c 61 76 69  eds and proclavi
3860: 74 69 65 73 20 6f 66 20 74 68 65 20 75 6e 64 65  ties of the unde
3870: 72 6c 79 69 6e 67 20 73 79 73 74 65 6d 2e 20 20  rlying system.  
3880: 54 68 65 20 75 6e 69 78 20 61 6e 64 20 77 69 6e  The unix and win
3890: 33 32 0a 56 46 53 20 69 6d 70 6c 65 6d 65 6e 74  32.VFS implement
38a0: 61 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 65  ations that come
38b0: 20 62 75 69 6c 74 20 69 6e 74 6f 20 53 51 4c 69   built into SQLi
38c0: 74 65 20 64 6f 20 6e 6f 74 20 77 72 69 74 65 20  te do not write 
38d0: 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d 62 79 74 65  to the.lock-byte
38e0: 20 70 61 67 65 2c 20 62 75 74 20 77 65 20 61 72   page, but we ar
38f0: 65 20 61 77 61 72 65 20 6f 66 20 74 68 69 72 64  e aware of third
3900: 2d 70 61 72 74 79 20 56 46 53 20 69 6d 70 6c 65  -party VFS imple
3910: 6d 65 6e 74 61 74 69 6f 6e 73 20 66 6f 72 0a 6f  mentations for.o
3920: 74 68 65 72 20 6f 70 65 72 61 74 69 6e 67 20 73  ther operating s
3930: 79 73 74 65 6d 73 20 74 68 61 74 20 64 6f 20 73  ystems that do s
3940: 6f 6d 65 74 69 6d 65 73 20 77 72 69 74 65 20 74  ometimes write t
3950: 6f 20 74 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20  o the lock-byte 
3960: 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31  page.</p>..<h3>1
3970: 2e 34 20 54 68 65 20 46 72 65 65 6c 69 73 74 3c  .4 The Freelist<
3980: 2f 68 33 3e 0a 0a 3c 70 3e 41 20 64 61 74 61 62  /h3>..<p>A datab
3990: 61 73 65 20 66 69 6c 65 20 6d 69 67 68 74 20 63  ase file might c
39a0: 6f 6e 74 61 69 6e 20 6f 6e 65 20 6f 72 20 6d 6f  ontain one or mo
39b0: 72 65 20 70 61 67 65 73 20 74 68 61 74 20 61 72  re pages that ar
39c0: 65 20 6e 6f 74 20 69 6e 0a 61 63 74 69 76 65 20  e not in.active 
39d0: 75 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67  use.  Unused pag
39e0: 65 73 20 63 61 6e 20 63 6f 6d 65 20 61 62 6f 75  es can come abou
39f0: 74 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20  t, for example, 
3a00: 77 68 65 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  when information
3a10: 0a 69 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d  .is deleted from
3a20: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
3a30: 55 6e 75 73 65 64 20 70 61 67 65 73 20 61 72 65  Unused pages are
3a40: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 66   stored on the f
3a50: 72 65 65 6c 69 73 74 0a 61 6e 64 20 61 72 65 20  reelist.and are 
3a60: 72 65 75 73 65 64 20 77 68 65 6e 20 61 64 64 69  reused when addi
3a70: 74 69 6f 6e 61 6c 20 70 61 67 65 73 20 61 72 65  tional pages are
3a80: 20 72 65 71 75 69 72 65 64 2e 3c 2f 70 3e 0a 0a   required.</p>..
3a90: 3c 70 3e 54 68 65 20 66 72 65 65 6c 69 73 74 20  <p>The freelist 
3aa0: 69 73 20 6f 72 67 61 6e 69 7a 65 64 20 61 73 20  is organized as 
3ab0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
3ac0: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
3ad0: 70 61 67 65 73 0a 77 69 74 68 20 65 61 63 68 20  pages.with each 
3ae0: 74 72 75 6e 6b 20 70 61 67 65 73 20 63 6f 6e 74  trunk pages cont
3af0: 61 69 6e 69 6e 67 20 70 61 67 65 20 6e 75 6d 62  aining page numb
3b00: 65 72 73 20 66 6f 72 20 7a 65 72 6f 20 6f 72 20  ers for zero or 
3b10: 6d 6f 72 65 20 66 72 65 65 6c 69 73 74 0a 6c 65  more freelist.le
3b20: 61 66 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c  af pages.</p>..<
3b30: 70 3e 41 20 66 72 65 65 6c 69 73 74 20 74 72 75  p>A freelist tru
3b40: 6e 6b 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73  nk page consists
3b50: 20 6f 66 20 61 6e 20 61 72 72 61 79 20 6f 66 20   of an array of 
3b60: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
3b70: 6e 20 69 6e 74 65 67 65 72 73 2e 0a 54 68 65 20  n integers..The 
3b80: 73 69 7a 65 20 6f 66 20 74 68 65 20 61 72 72 61  size of the arra
3b90: 79 20 69 73 20 61 73 20 6d 61 6e 79 20 69 6e 74  y is as many int
3ba0: 65 67 65 72 73 20 61 73 20 77 69 6c 6c 20 66 69  egers as will fi
3bb0: 74 20 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20  t in the usable 
3bc0: 73 70 61 63 65 0a 6f 66 20 61 20 70 61 67 65 2e  space.of a page.
3bd0: 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 75 73    The minimum us
3be0: 61 62 6c 65 20 73 70 61 63 65 20 69 73 20 34 38  able space is 48
3bf0: 30 20 62 79 74 65 73 20 73 6f 20 74 68 65 20 61  0 bytes so the a
3c00: 72 72 61 79 20 77 69 6c 6c 20 61 6c 77 61 79 73  rray will always
3c10: 0a 62 65 20 61 74 20 6c 65 61 73 74 20 31 32 30  .be at least 120
3c20: 20 65 6e 74 72 69 65 73 20 69 6e 20 6c 65 6e 67   entries in leng
3c30: 74 68 2e 20 20 54 68 65 20 66 69 72 73 74 20 69  th.  The first i
3c40: 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20 61 72  nteger in the ar
3c50: 72 61 79 20 0a 69 73 20 74 68 65 20 70 61 67 65  ray .is the page
3c60: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
3c70: 65 78 74 20 66 72 65 65 6c 69 73 74 20 74 72 75  ext freelist tru
3c80: 6e 6b 20 70 61 67 65 20 69 6e 20 74 68 65 20 6c  nk page in the l
3c90: 69 73 74 20 6f 72 20 7a 65 72 6f 20 0a 69 66 20  ist or zero .if 
3ca0: 74 68 69 73 20 69 73 20 74 68 65 20 6c 61 73 74  this is the last
3cb0: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
3cc0: 70 61 67 65 2e 20 20 54 68 65 20 73 65 63 6f 6e  page.  The secon
3cd0: 64 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65  d integer in the
3ce0: 20 61 72 72 61 79 0a 69 73 20 74 68 65 20 6e 75   array.is the nu
3cf0: 6d 62 65 72 20 6f 66 20 6c 65 61 66 20 70 61 67  mber of leaf pag
3d00: 65 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 66 6f  e pointers to fo
3d10: 6c 6c 6f 77 2e 20 20 43 61 6c 6c 20 74 68 65 20  llow.  Call the 
3d20: 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72 20 4c  second integer L
3d30: 2e 0a 49 66 20 4c 20 69 73 20 67 72 65 61 74 65  ..If L is greate
3d40: 72 20 74 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e  r than zero then
3d50: 20 69 6e 74 65 67 65 72 73 20 77 69 74 68 20 61   integers with a
3d60: 72 72 61 79 20 69 6e 64 65 78 65 73 20 62 65 74  rray indexes bet
3d70: 77 65 65 6e 20 32 20 61 6e 64 0a 4c 2b 31 20 69  ween 2 and.L+1 i
3d80: 6e 63 6c 75 73 69 76 65 20 63 6f 6e 74 61 69 6e  nclusive contain
3d90: 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f   page numbers fo
3da0: 72 20 66 72 65 65 6c 69 73 74 20 6c 65 61 66 20  r freelist leaf 
3db0: 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 46  pages.</p>..<p>F
3dc0: 72 65 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67  reelist leaf pag
3dd0: 65 73 20 63 6f 6e 74 61 69 6e 20 6e 6f 20 69 6e  es contain no in
3de0: 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 53 51 4c 69  formation.  SQLi
3df0: 74 65 20 61 76 6f 69 64 20 72 65 61 64 69 6e 67  te avoid reading
3e00: 20 6f 72 0a 77 72 69 74 69 6e 67 20 66 72 65 65   or.writing free
3e10: 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65 73 20  list leaf pages 
3e20: 69 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 64 75  in order to redu
3e30: 63 65 20 64 69 73 6b 20 49 2f 4f 2e 3c 2f 70 3e  ce disk I/O.</p>
3e40: 0a 0a 3c 70 3e 41 20 62 75 67 20 69 6e 20 53 51  ..<p>A bug in SQ
3e50: 4c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 70 72  Lite versions pr
3e60: 69 6f 72 20 74 6f 20 33 2e 36 2e 30 20 63 61 75  ior to 3.6.0 cau
3e70: 73 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  sed the database
3e80: 20 74 6f 20 62 65 0a 72 65 70 6f 72 74 65 64 20   to be.reported 
3e90: 61 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e  as corrupt if an
3ea0: 79 20 6c 61 73 74 20 36 20 65 6e 74 72 69 65 73  y last 6 entries
3eb0: 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74   in the freelist
3ec0: 20 74 72 75 6e 6b 20 70 61 67 65 20 0a 61 72 72   trunk page .arr
3ed0: 61 79 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e  ay contained non
3ee0: 2d 7a 65 72 6f 20 76 61 6c 75 65 73 2e 20 20 4e  -zero values.  N
3ef0: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
3f00: 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 68   SQLite do not h
3f10: 61 76 65 0a 74 68 69 73 20 70 72 6f 62 6c 65 6d  ave.this problem
3f20: 2e 20 20 48 6f 77 65 76 65 72 2c 20 6e 65 77 65  .  However, newe
3f30: 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51  r versions of SQ
3f40: 4c 69 74 65 20 73 74 69 6c 6c 20 61 76 6f 69 64  Lite still avoid
3f50: 20 75 73 69 6e 67 20 74 68 65 20 0a 6c 61 73 74   using the .last
3f60: 20 73 69 78 20 65 6e 74 72 69 65 73 20 69 6e 20   six entries in 
3f70: 74 68 65 20 66 72 65 65 6c 69 73 74 20 74 72 75  the freelist tru
3f80: 6e 6b 20 70 61 67 65 20 61 72 72 61 79 20 69 6e  nk page array in
3f90: 20 6f 72 64 65 72 20 74 68 61 74 20 64 61 74 61   order that data
3fa0: 62 61 73 65 0a 66 69 6c 65 73 20 63 72 65 61 74  base.files creat
3fb0: 65 64 20 62 79 20 6e 65 77 65 72 20 76 65 72 73  ed by newer vers
3fc0: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 63  ions of SQLite c
3fd0: 61 6e 20 62 65 20 72 65 61 64 20 62 79 20 6f 6c  an be read by ol
3fe0: 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f 66 20  der versions.of 
3ff0: 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  SQLite.</p>..<p>
4000: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72  The number of fr
4010: 65 65 6c 69 73 74 20 70 61 67 65 73 20 69 73 20  eelist pages is 
4020: 73 74 6f 72 65 64 20 61 73 20 61 20 34 2d 62 79  stored as a 4-by
4030: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
4040: 74 65 67 65 72 0a 69 6e 20 74 68 65 20 64 61 74  teger.in the dat
4050: 61 62 61 73 65 20 68 65 61 64 65 72 20 61 74 20  abase header at 
4060: 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33 36 20  an offset of 36 
4070: 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
4080: 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65 2e 0a  ng of the file..
4090: 54 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  The database hea
40a0: 64 65 72 20 61 6c 73 6f 20 73 74 6f 72 65 73 20  der also stores 
40b0: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
40c0: 6f 66 20 74 68 65 20 66 69 72 73 74 20 66 72 65  of the first fre
40d0: 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70 61 67 65  elist trunk.page
40e0: 20 61 73 20 61 20 34 2d 62 79 74 65 20 62 69 67   as a 4-byte big
40f0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
4100: 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20  at an offset of 
4110: 33 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  32 from the begi
4120: 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20 66 69 6c  nning.of the fil
4130: 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 31 2e 35 20  e.</p>..<h3>1.5 
4140: 42 2d 74 72 65 65 20 50 61 67 65 73 3c 2f 68 33  B-tree Pages</h3
4150: 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70  >..<p>A b-tree p
4160: 61 67 65 20 69 73 20 65 69 74 68 65 72 20 61 6e  age is either an
4170: 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65 20 6f   interior page o
4180: 72 20 61 20 6c 65 61 66 20 70 61 67 65 2e 0a 41  r a leaf page..A
4190: 20 6c 65 61 66 20 70 61 67 65 20 63 6f 6e 74 61   leaf page conta
41a0: 69 6e 73 20 6b 65 79 73 20 61 6e 64 20 69 6e 20  ins keys and in 
41b0: 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 74 61  the case of a ta
41c0: 62 6c 65 20 62 2d 74 72 65 65 20 65 61 63 68 0a  ble b-tree each.
41d0: 6b 65 79 20 68 61 73 20 61 73 73 6f 63 69 61 74  key has associat
41e0: 65 64 20 63 6f 6e 74 65 6e 74 2e 20 20 41 6e 20  ed content.  An 
41f0: 69 6e 74 65 72 69 6f 72 20 70 61 67 65 20 63 6f  interior page co
4200: 6e 74 61 69 6e 73 0a 4b 20 6b 65 79 73 20 77 69  ntains.K keys wi
4210: 74 68 6f 75 74 20 63 6f 6e 74 65 6e 74 20 62 75  thout content bu
4220: 74 20 77 69 74 68 20 4b 2b 31 20 70 6f 69 6e 74  t with K+1 point
4230: 65 72 73 20 74 6f 20 63 68 69 6c 64 20 62 2d 74  ers to child b-t
4240: 72 65 65 20 70 61 67 65 73 2e 0a 41 20 22 70 6f  ree pages..A "po
4250: 69 6e 74 65 72 22 20 69 6e 20 61 6e 20 69 6e 74  inter" in an int
4260: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
4270: 65 20 69 73 20 6a 75 73 74 20 74 68 65 20 33 31  e is just the 31
4280: 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 70 61 67  -bit integer.pag
4290: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
42a0: 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f 70 3e 0a  child page.</p>.
42b0: 0a 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20  ..<p>Define the 
42c0: 64 65 70 74 68 0a 6f 66 20 61 20 6c 65 61 66 20  depth.of a leaf 
42d0: 62 2d 74 72 65 65 20 74 6f 20 62 65 20 31 20 61  b-tree to be 1 a
42e0: 6e 64 20 74 68 61 74 20 74 68 65 20 64 65 70 74  nd that the dept
42f0: 68 20 6f 66 20 61 6e 79 20 69 6e 74 65 72 69 6f  h of any interio
4300: 72 20 62 2d 74 72 65 65 20 74 6f 20 62 65 20 6f  r b-tree to be o
4310: 6e 65 0a 6d 6f 72 65 20 74 68 61 6e 20 74 68 65  ne.more than the
4320: 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
4330: 66 20 61 6e 79 20 6f 66 20 69 74 73 20 63 68 69  f any of its chi
4340: 6c 64 72 65 6e 2e 20 20 49 6e 20 61 20 77 65 6c  ldren.  In a wel
4350: 6c 2d 66 6f 72 6d 65 64 0a 64 61 74 61 62 61 73  l-formed.databas
4360: 65 2c 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20  e, all children 
4370: 6f 66 20 61 6e 79 20 6f 6e 65 20 69 6e 74 65 72  of any one inter
4380: 69 6f 72 20 62 2d 74 72 65 65 20 68 61 76 65 20  ior b-tree have 
4390: 74 68 65 20 73 61 6d 65 20 64 65 70 74 68 2e 3c  the same depth.<
43a0: 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 6e 20 69 6e  /p>..<p>In an in
43b0: 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61  terior b-tree pa
43c0: 67 65 2c 20 74 68 65 20 70 6f 69 6e 74 65 72 73  ge, the pointers
43d0: 20 61 6e 64 20 6b 65 79 73 20 6c 6f 67 69 63 61   and keys logica
43e0: 6c 6c 79 20 61 6c 74 65 72 6e 61 74 65 20 0a 77  lly alternate .w
43f0: 69 74 68 20 61 20 70 6f 69 6e 74 65 72 20 6f 6e  ith a pointer on
4400: 20 62 6f 74 68 20 65 6e 64 73 2e 20 28 54 68 65   both ends. (The
4410: 20 70 72 65 76 69 6f 75 73 20 73 65 6e 74 65 6e   previous senten
4420: 63 65 20 69 73 20 74 6f 20 62 65 20 75 6e 64 65  ce is to be unde
4430: 72 73 74 6f 6f 64 0a 63 6f 6e 63 65 70 74 75 61  rstood.conceptua
4440: 6c 6c 79 20 2d 20 74 68 65 20 61 63 74 75 61 6c  lly - the actual
4450: 20 6c 61 79 6f 75 74 20 6f 66 20 74 68 65 20 6b   layout of the k
4460: 65 79 73 20 61 6e 64 0a 70 6f 69 6e 74 65 72 73  eys and.pointers
4470: 20 77 69 74 68 69 6e 20 74 68 65 20 70 61 67 65   within the page
4480: 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63   is more complic
4490: 61 74 65 64 20 61 6e 64 20 77 69 6c 6c 20 62 65  ated and will be
44a0: 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 74 68   described in.th
44b0: 65 20 73 65 71 75 65 6c 2e 29 20 20 41 6c 6c 20  e sequel.)  All 
44c0: 6b 65 79 73 20 77 69 74 68 69 6e 20 74 68 65 20  keys within the 
44d0: 73 61 6d 65 20 70 61 67 65 20 61 72 65 20 75 6e  same page are un
44e0: 69 71 75 65 20 61 6e 64 20 61 72 65 20 6f 72 67  ique and are org
44f0: 61 6e 69 7a 65 64 0a 69 6e 20 61 73 63 65 6e 64  anized.in ascend
4500: 69 6e 67 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c  ing order from l
4510: 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20 46  eft to right.  F
4520: 6f 72 20 61 6e 79 20 6b 65 79 20 58 2c 20 70 6f  or any key X, po
4530: 69 6e 74 65 72 73 20 74 6f 20 74 68 65 20 6c 65  inters to the le
4540: 66 74 0a 6f 66 20 61 20 58 20 72 65 66 65 72 20  ft.of a X refer 
4550: 74 6f 20 62 2d 74 72 65 65 20 70 61 67 65 73 20  to b-tree pages 
4560: 6f 6e 20 77 68 69 63 68 20 61 6c 6c 73 20 6b 65  on which alls ke
4570: 79 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  ys are less than
4580: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 2e 0a   or equal to X..
4590: 50 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 65 20  Pointers to the 
45a0: 72 69 67 68 74 20 6f 66 20 58 20 72 65 66 65 72  right of X refer
45b0: 20 74 6f 20 70 61 67 65 73 20 77 68 65 72 65 20   to pages where 
45c0: 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 67 72 65  all keys are gre
45d0: 61 74 65 72 20 74 68 61 6e 20 58 2e 3c 2f 70 3e  ater than X.</p>
45e0: 0a 0a 3c 70 3e 57 69 74 68 69 6e 20 61 6e 20 69  ..<p>Within an i
45f0: 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70  nterior b-tree p
4600: 61 67 65 2c 20 65 61 63 68 20 6b 65 79 20 61 6e  age, each key an
4610: 64 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f  d the pointer to
4620: 20 69 74 73 0a 69 6d 6d 65 64 69 61 74 65 20 6c   its.immediate l
4630: 65 66 74 20 61 72 65 20 63 6f 6d 62 69 6e 65 64  eft are combined
4640: 20 69 6e 74 6f 20 61 20 73 74 72 75 63 74 75 72   into a structur
4650: 65 20 63 61 6c 6c 65 64 20 61 20 22 63 65 6c 6c  e called a "cell
4660: 22 2e 20 20 54 68 65 0a 72 69 67 68 74 2d 6d 6f  ".  The.right-mo
4670: 73 74 20 70 6f 69 6e 74 65 72 20 69 73 20 68 65  st pointer is he
4680: 6c 64 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20  ld separately.  
4690: 41 20 6c 65 61 66 20 62 2d 74 72 65 65 20 70 61  A leaf b-tree pa
46a0: 67 65 20 68 61 73 20 6e 6f 0a 70 6f 69 6e 74 65  ge has no.pointe
46b0: 72 73 2c 20 62 75 74 20 69 74 20 73 74 69 6c 6c  rs, but it still
46c0: 20 75 73 65 73 20 74 68 65 20 63 65 6c 6c 20 73   uses the cell s
46d0: 74 72 75 63 74 75 72 65 20 74 6f 20 68 6f 6c 64  tructure to hold
46e0: 20 6b 65 79 73 20 66 6f 72 0a 69 6e 64 65 78 20   keys for.index 
46f0: 62 2d 74 72 65 65 73 20 6f 72 20 6b 65 79 73 20  b-trees or keys 
4700: 61 6e 64 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20  and content for 
4710: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 2e 3c 2f  table b-trees.</
4720: 70 3e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72  p>.</p>..<p>Ever
4730: 79 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61  y b-tree page ha
4740: 73 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61  s at most one pa
4750: 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65  rent b-tree page
4760: 2e 0a 41 20 62 2d 74 72 65 65 20 70 61 67 65 20  ..A b-tree page 
4770: 77 69 74 68 6f 75 74 20 61 20 70 61 72 65 6e 74  without a parent
4780: 20 69 73 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f   is called a roo
4790: 74 20 70 61 67 65 2e 20 20 41 20 72 6f 6f 74 20  t page.  A root 
47a0: 62 2d 74 72 65 65 20 70 61 67 65 0a 74 6f 67 65  b-tree page.toge
47b0: 74 68 65 72 20 77 69 74 68 20 74 68 65 20 63 6c  ther with the cl
47c0: 6f 73 75 72 65 20 6f 66 20 69 74 73 20 63 68 69  osure of its chi
47d0: 6c 64 72 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d  ldren form a com
47e0: 70 6c 65 74 65 20 62 2d 74 72 65 65 2e 0a 49 74  plete b-tree..It
47f0: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 28 61 6e   is possible (an
4800: 64 20 69 6e 20 66 61 63 74 20 72 61 74 68 65 72  d in fact rather
4810: 20 63 6f 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65   common) to have
4820: 20 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72   a complete b-tr
4830: 65 65 0a 74 68 61 74 20 63 6f 6e 73 69 73 74 73  ee.that consists
4840: 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67   of a single pag
4850: 65 20 74 68 61 74 20 69 73 20 62 6f 74 68 20 61  e that is both a
4860: 20 6c 65 61 66 20 61 6e 64 20 74 68 65 20 72 6f   leaf and the ro
4870: 6f 74 2e 0a 42 65 63 61 75 73 65 20 74 68 65 72  ot..Because ther
4880: 65 20 61 72 65 20 70 6f 69 6e 74 65 72 73 20 66  e are pointers f
4890: 72 6f 6d 20 70 61 72 65 6e 74 73 20 74 6f 20 63  rom parents to c
48a0: 68 69 6c 64 72 65 6e 2c 20 65 76 65 72 79 20 70  hildren, every p
48b0: 61 67 65 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74  age of a.complet
48c0: 65 20 62 2d 74 72 65 65 20 63 61 6e 20 62 65 20  e b-tree can be 
48d0: 6c 6f 63 61 74 65 64 20 69 66 20 6f 6e 6c 79 20  located if only 
48e0: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  the root page is
48f0: 20 6b 6e 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a   known.  Hence,.
4900: 62 2d 74 72 65 65 73 20 61 72 65 20 69 64 65 6e  b-trees are iden
4910: 74 69 66 69 65 64 20 62 79 20 74 68 65 69 72 20  tified by their 
4920: 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
4930: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72  .</p>..<p>A b-tr
4940: 65 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65  ee page is eithe
4950: 72 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  r a table b-tree
4960: 20 70 61 67 65 20 6f 72 20 61 6e 20 69 6e 64 65   page or an inde
4970: 78 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41  x b-tree page..A
4980: 6c 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 20  ll pages within 
4990: 65 61 63 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d  each complete b-
49a0: 74 72 65 65 20 61 72 65 20 6f 66 20 74 68 65 20  tree are of the 
49b0: 73 61 6d 65 20 74 79 70 65 3a 20 65 69 74 68 65  same type: eithe
49c0: 72 20 74 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78  r table.or index
49d0: 2e 20 20 54 68 65 72 65 20 69 73 20 61 20 6f 6e  .  There is a on
49e0: 65 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67  e-to-one mapping
49f0: 20 66 72 6f 6d 20 74 61 62 6c 65 20 62 2d 74 72   from table b-tr
4a00: 65 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ees in the datab
4a10: 61 73 65 20 0a 66 69 6c 65 20 74 6f 20 28 6e 6f  ase .file to (no
4a20: 6e 2d 76 69 72 74 75 61 6c 29 20 74 61 62 6c 65  n-virtual) table
4a30: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
4a40: 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c 75 64  e schema, includ
4a50: 69 6e 67 20 73 79 73 74 65 6d 20 74 61 62 6c 65  ing system table
4a60: 73 0a 73 75 63 68 20 61 73 20 73 71 6c 69 74 65  s.such as sqlite
4a70: 5f 6d 61 73 74 65 72 2e 20 20 54 68 65 72 65 20  _master.  There 
4a80: 69 73 20 6f 6e 65 2d 74 6f 2d 6f 6e 65 20 6d 61  is one-to-one ma
4a90: 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 69 6e  pping between in
4aa0: 64 65 78 20 62 2d 74 72 65 65 73 0a 69 6e 20 74  dex b-trees.in t
4ab0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
4ac0: 20 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20   and indices in 
4ad0: 74 68 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c  the schema, incl
4ae0: 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e  uding implied in
4af0: 64 69 63 65 73 0a 63 72 65 61 74 65 64 20 62 79  dices.created by
4b00: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73   uniqueness cons
4b10: 74 72 61 69 6e 74 73 2e 20 20 54 68 65 20 62 2d  traints.  The b-
4b20: 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  tree correspondi
4b30: 6e 67 20 74 6f 20 74 68 65 0a 73 71 6c 69 74 65  ng to the.sqlite
4b40: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 61 6c  _master table al
4b50: 77 61 79 73 20 68 61 73 20 69 74 73 20 72 6f 6f  ways has its roo
4b60: 74 20 70 61 67 65 20 6f 6e 20 61 20 70 61 67 65  t page on a page
4b70: 20 6e 75 6d 62 65 72 20 6f 66 20 31 2e 0a 54 68   number of 1..Th
4b80: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
4b90: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74  table contains t
4ba0: 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
4bb0: 62 65 72 20 66 6f 72 20 65 76 65 72 79 20 6f 74  ber for every ot
4bc0: 68 65 72 20 0a 74 61 62 6c 65 20 61 6e 64 20 69  her .table and i
4bd0: 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61  ndex in the data
4be0: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
4bf0: 3c 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e  <p>Each entry in
4c00: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
4c10: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 36 34  consists of a 64
4c20: 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
4c30: 67 65 72 20 6b 65 79 0a 61 6e 64 20 75 70 20 74  ger key.and up t
4c40: 6f 20 32 31 34 37 34 38 33 36 34 37 20 62 79 74  o 2147483647 byt
4c50: 65 73 20 6f 66 20 61 72 62 69 74 72 61 72 79 20  es of arbitrary 
4c60: 64 61 74 61 2e 20 20 49 6e 74 65 72 69 6f 72 20  data.  Interior 
4c70: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 0a 68 6f  table b-trees.ho
4c80: 6c 64 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e 64  ld only keys and
4c90: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 69   pointers to chi
4ca0: 6c 64 72 65 6e 2e 20 20 41 6c 6c 20 64 61 74 61  ldren.  All data
4cb0: 20 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e   is contained in
4cc0: 20 74 68 65 0a 74 61 62 6c 65 20 62 2d 74 72 65   the.table b-tre
4cd0: 65 20 6c 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c  e leaves.</p>..<
4ce0: 70 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20  p>Each entry in 
4cf0: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
4d00: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
4d10: 72 62 69 74 72 61 72 79 20 6b 65 79 20 6f 66 20  rbitrary key of 
4d20: 75 70 0a 74 6f 20 32 31 34 37 34 38 33 36 34 37  up.to 2147483647
4d30: 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68   bytes in length
4d40: 20 61 6e 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70   and no data.</p
4d50: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
4d60: 65 6e 74 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64  ent cell_payload
4d70: 20 7b 63 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c   {cell payload}<
4d80: 2f 74 63 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20  /tcl>.<p>Define 
4d90: 74 68 65 20 22 70 61 79 6c 6f 61 64 22 20 6f 66  the "payload" of
4da0: 20 61 20 63 65 6c 6c 20 74 6f 20 62 65 20 74 68   a cell to be th
4db0: 65 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67  e arbitrary leng
4dc0: 74 68 20 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68  th section.of th
4dd0: 65 20 63 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20  e cell.  For an 
4de0: 69 6e 64 65 78 20 62 2d 74 72 65 65 2c 20 74 68  index b-tree, th
4df0: 65 20 6b 65 79 20 69 73 20 61 6c 77 61 79 73 20  e key is always 
4e00: 61 72 62 69 74 72 61 72 79 20 69 6e 20 6c 65 6e  arbitrary in len
4e10: 67 74 68 0a 61 6e 64 20 68 65 6e 63 65 20 74 68  gth.and hence th
4e20: 65 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65  e payload is the
4e30: 20 6b 65 79 2e 20 20 54 68 65 72 65 20 61 72 65   key.  There are
4e40: 20 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 65   no arbitrary le
4e50: 6e 67 74 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e  ngth elements.in
4e60: 20 74 68 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e   the cells of in
4e70: 74 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74  terior table b-t
4e80: 72 65 65 20 70 61 67 65 73 20 61 6e 64 20 73 6f  ree pages and so
4e90: 20 74 68 6f 73 65 20 63 65 6c 6c 73 20 68 61 76   those cells hav
4ea0: 65 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54  e no.payload.  T
4eb0: 61 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66  able b-tree leaf
4ec0: 20 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 20 61   pages contain a
4ed0: 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20  rbitrary length 
4ee0: 63 6f 6e 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66  content and.so f
4ef0: 6f 72 20 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73  or cells on thos
4f00: 65 20 70 61 67 65 73 20 74 68 65 20 70 61 79 6c  e pages the payl
4f10: 6f 61 64 20 69 73 20 74 68 65 20 63 6f 6e 74 65  oad is the conte
4f20: 6e 74 2e 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20  nt..<p>When the 
4f30: 73 69 7a 65 20 6f 66 20 70 61 79 6c 6f 61 64 20  size of payload 
4f40: 66 6f 72 20 61 20 63 65 6c 6c 20 65 78 63 65 65  for a cell excee
4f50: 64 73 20 61 20 63 65 72 74 61 69 6e 20 74 68 72  ds a certain thr
4f60: 65 73 68 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65  eshold (to.be de
4f70: 66 69 6e 65 64 20 6c 61 74 65 72 29 20 74 68 65  fined later) the
4f80: 6e 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74  n only the first
4f90: 20 66 65 77 20 62 79 74 65 73 20 6f 66 20 74 68   few bytes of th
4fa0: 65 20 70 61 79 6c 6f 61 64 0a 61 72 65 20 73 74  e payload.are st
4fb0: 6f 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72  ored on the b-tr
4fc0: 65 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20  ee page and the 
4fd0: 62 61 6c 61 6e 63 65 20 69 73 20 73 74 6f 72 65  balance is store
4fe0: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
4ff0: 73 74 0a 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76  st.of content ov
5000: 65 72 66 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70  erflow pages.</p
5010: 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70  >..<p>A b-tree p
5020: 61 67 65 20 69 73 20 64 69 76 69 64 65 64 20 69  age is divided i
5030: 6e 74 6f 20 72 65 67 69 6f 6e 73 20 69 6e 20 74  nto regions in t
5040: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64  he following ord
5050: 65 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68  er:..<ol>.<li>Th
5060: 65 20 31 30 30 2d 62 79 74 65 20 64 61 74 61 62  e 100-byte datab
5070: 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20  ase file header 
5080: 28 66 6f 75 6e 64 20 6f 6e 20 70 61 67 65 20 31  (found on page 1
5090: 20 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38   only).<li>The 8
50a0: 20 6f 72 20 31 32 20 62 79 74 65 20 62 2d 74 72   or 12 byte b-tr
50b0: 65 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 3c  ee page header.<
50c0: 6c 69 3e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e  li>The cell poin
50d0: 74 65 72 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e  ter array.<li>Un
50e0: 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 0a  allocated space.
50f0: 3c 6c 69 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e  <li>The cell con
5100: 74 65 6e 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68  tent area.<li>Th
5110: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
5120: 6e 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c  n..</ol>.</p>..<
5130: 70 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64  p>The 100-byte d
5140: 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61  atabase file hea
5150: 64 65 72 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c  der is found onl
5160: 79 20 6f 6e 20 70 61 67 65 20 31 2c 20 77 68 69  y on page 1, whi
5170: 63 68 20 69 73 0a 61 6c 77 61 79 73 20 61 20 74  ch is.always a t
5180: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
5190: 2e 20 20 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74  .  All other b-t
51a0: 72 65 65 20 70 61 67 65 73 20 69 6e 20 74 68 65  ree pages in the
51b0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 6f   database file.o
51c0: 6d 69 74 20 74 68 69 73 20 31 30 30 2d 62 79 74  mit this 100-byt
51d0: 65 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c  e header.</p>..<
51e0: 70 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72  p>The reserved r
51f0: 65 67 69 6f 6e 20 69 73 20 61 6e 20 61 72 65 61  egion is an area
5200: 20 6f 66 20 75 6e 75 73 65 64 20 73 70 61 63 65   of unused space
5210: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65   at the end of e
5220: 76 65 72 79 0a 70 61 67 65 20 28 65 78 63 65 70  very.page (excep
5230: 74 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61  t the locking pa
5240: 67 65 29 20 74 68 61 74 20 65 78 74 65 6e 73 69  ge) that extensi
5250: 6f 6e 73 20 63 61 6e 20 75 73 65 20 74 6f 20 68  ons can use to h
5260: 6f 6c 64 20 70 65 72 2d 70 61 67 65 0a 69 6e 66  old per-page.inf
5270: 6f 72 6d 61 74 69 6f 6e 2e 20 20 54 68 65 20 73  ormation.  The s
5280: 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65 72  ize of the reser
5290: 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 64 65  ved region is de
52a0: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
52b0: 6f 6e 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e 65  one-byte.unsigne
52c0: 64 20 69 6e 74 65 67 65 72 20 66 6f 75 6e 64 20  d integer found 
52d0: 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20  at an offset of 
52e0: 32 30 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  20 into the data
52f0: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
5300: 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  ..The size of th
5310: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
5320: 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 7a 65 72  n is usually zer
5330: 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 62  o.</p>..<p>The b
5340: 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65  -tree page heade
5350: 72 20 69 73 20 38 20 62 79 74 65 73 20 69 6e 20  r is 8 bytes in 
5360: 73 69 7a 65 20 66 6f 72 20 6c 65 61 66 20 70 61  size for leaf pa
5370: 67 65 73 20 61 6e 64 20 31 32 0a 62 79 74 65 73  ges and 12.bytes
5380: 20 66 6f 72 20 69 6e 74 65 72 69 6f 72 20 70 61   for interior pa
5390: 67 65 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69 62  ges.  All multib
53a0: 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68  yte values in th
53b0: 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 61 72  e page header.ar
53c0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54 68  e big-endian..Th
53d0: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65  e b-tree page he
53e0: 61 64 65 72 20 69 73 20 63 6f 6d 70 6f 73 65 64  ader is composed
53f0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
5400: 67 20 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c  g fields:</p>..<
5410: 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65  center>.<i>B-tre
5420: 65 20 50 61 67 65 20 48 65 61 64 65 72 20 46 6f  e Page Header Fo
5430: 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
5440: 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64  ble border=1 wid
5450: 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74  th="80%">.<tr><t
5460: 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
5470: 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
5480: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
5490: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
54a0: 30 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  0<td align=cente
54b0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74  r valign=top>1<t
54c0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20  d align=left>.A 
54d0: 66 6c 61 67 20 69 6e 64 69 63 61 74 69 6e 67 20  flag indicating 
54e0: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
54f0: 74 79 70 65 0a 41 20 76 61 6c 75 65 20 6f 66 20  type.A value of 
5500: 32 20 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65  2 means the page
5510: 20 69 73 20 61 6e 20 69 6e 74 65 72 69 6f 72 20   is an interior 
5520: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67  index b-tree pag
5530: 65 2e 0a 41 20 76 61 6c 75 65 20 6f 66 20 35 20  e..A value of 5 
5540: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
5550: 73 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 74 61  s an interior ta
5560: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ble b-tree page.
5570: 0a 41 20 76 61 6c 75 65 20 6f 66 20 31 30 20 6d  .A value of 10 m
5580: 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69 73  eans the page is
5590: 20 61 20 6c 65 61 66 20 69 6e 64 65 78 20 62 2d   a leaf index b-
55a0: 74 72 65 65 20 70 61 67 65 2e 0a 41 20 76 61 6c  tree page..A val
55b0: 75 65 20 6f 66 20 31 33 20 6d 65 61 6e 73 20 74  ue of 13 means t
55c0: 68 65 20 70 61 67 65 20 69 73 20 61 20 6c 65 61  he page is a lea
55d0: 66 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20 70  f table b-tree p
55e0: 61 67 65 2e 0a 41 6e 79 20 6f 74 68 65 72 20 76  age..Any other v
55f0: 61 6c 75 65 20 69 73 20 61 6e 20 65 72 72 6f 72  alue is an error
5600: 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  ..<tr><td align=
5610: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
5620: 70 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  p>1<td align=cen
5630: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32  ter valign=top>2
5640: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
5650: 42 79 74 65 20 6f 66 66 73 65 74 20 69 6e 74 6f  Byte offset into
5660: 20 74 68 65 20 70 61 67 65 20 6f 66 20 74 68 65   the page of the
5670: 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b   first freeblock
5680: 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63  .<tr><td align=c
5690: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
56a0: 3e 33 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  >3<td align=cent
56b0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c  er valign=top>2<
56c0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 4e  td align=left>.N
56d0: 75 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f  umber of cells o
56e0: 6e 20 74 68 69 73 20 70 61 67 65 0a 3c 74 72 3e  n this page.<tr>
56f0: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
5700: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 35 3c 74 64   valign=top>5<td
5710: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
5720: 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c  lign=top>2<td al
5730: 69 67 6e 3d 6c 65 66 74 3e 0a 4f 66 66 73 65 74  ign=left>.Offset
5740: 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
5750: 74 65 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 63  te of the cell c
5760: 6f 6e 74 65 6e 74 20 61 72 65 61 0a 3c 74 72 3e  ontent area.<tr>
5770: 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  <td align=center
5780: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 37 3c 74 64   valign=top>7<td
5790: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
57a0: 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c  lign=top>1<td al
57b0: 69 67 6e 3d 6c 65 66 74 3e 0a 4e 75 6d 62 65 72  ign=left>.Number
57c0: 20 6f 66 20 66 72 61 67 6d 65 6e 74 65 64 20 66   of fragmented f
57d0: 72 65 65 20 62 79 74 65 73 20 77 69 74 68 69 6e  ree bytes within
57e0: 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e   the cell conten
57f0: 74 20 61 72 65 61 0a 3c 74 72 3e 3c 74 64 20 61  t area.<tr><td a
5800: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
5810: 67 6e 3d 74 6f 70 3e 38 3c 74 64 20 61 6c 69 67  gn=top>8<td alig
5820: 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d  n=center valign=
5830: 74 6f 70 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c  top>4<td align=l
5840: 65 66 74 3e 0a 54 68 65 20 72 69 67 68 74 2d 6d  eft>.The right-m
5850: 6f 73 74 20 70 6f 69 6e 74 65 72 20 28 69 6e 74  ost pointer (int
5860: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
5870: 65 73 20 6f 6e 6c 79 29 0a 3c 2f 74 61 62 6c 65  es only).</table
5880: 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 2f  ></blockquote></
5890: 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 54 68 65 20  center>..<p>The 
58a0: 63 65 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72  cell pointer arr
58b0: 61 79 20 6f 66 20 61 20 62 2d 74 72 65 65 20 70  ay of a b-tree p
58c0: 61 67 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  age immediately 
58d0: 66 6f 6c 6c 6f 77 73 20 74 68 65 20 62 2d 74 72  follows the b-tr
58e0: 65 65 0a 70 61 67 65 20 68 65 61 64 65 72 2e 20  ee.page header. 
58f0: 20 4c 65 74 20 4b 20 62 65 20 74 68 65 20 6e 75   Let K be the nu
5900: 6d 62 65 72 20 6f 66 20 63 65 6c 6c 73 20 6f 6e  mber of cells on
5910: 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65   the btree.  The
5920: 20 63 65 6c 6c 20 70 6f 69 6e 74 65 72 0a 61 72   cell pointer.ar
5930: 72 61 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ray consists of 
5940: 4b 20 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72  K 2-byte integer
5950: 20 6f 66 66 73 65 74 73 20 74 6f 20 74 68 65 20   offsets to the 
5960: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 73 2e 20 20  cell contents.  
5970: 54 68 65 0a 63 65 6c 6c 20 70 6f 69 6e 74 65 72  The.cell pointer
5980: 73 20 61 72 65 20 61 72 72 61 6e 67 65 64 20 69  s are arranged i
5990: 6e 20 6b 65 79 20 6f 72 64 65 72 20 77 69 74 68  n key order with
59a0: 20 6c 65 66 74 2d 6d 6f 73 74 20 63 65 6c 6c 20   left-most cell 
59b0: 28 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74  (the cell with t
59c0: 68 65 0a 73 6d 61 6c 6c 65 73 74 20 6b 65 79 29  he.smallest key)
59d0: 20 66 69 72 73 74 20 61 6e 64 20 74 68 65 20 72   first and the r
59e0: 69 67 68 74 2d 6d 6f 73 74 20 63 65 6c 6c 20 28  ight-most cell (
59f0: 74 68 65 20 63 65 6c 6c 20 77 69 74 68 20 74 68  the cell with th
5a00: 65 20 6c 61 72 67 65 73 74 0a 6b 65 79 29 20 6c  e largest.key) l
5a10: 61 73 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 43 65 6c  ast.</p>..<p>Cel
5a20: 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 74 6f  l content is sto
5a30: 72 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c 20  red in the cell 
5a40: 63 6f 6e 74 65 6e 74 20 72 65 67 69 6f 6e 20 6f  content region o
5a50: 66 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67  f the b-tree pag
5a60: 65 2e 0a 53 51 4c 69 74 65 20 73 74 72 69 76 65  e..SQLite strive
5a70: 73 20 74 6f 20 70 6c 61 63 65 20 63 65 6c 6c 73  s to place cells
5a80: 20 61 73 20 66 61 72 20 74 6f 77 61 72 64 20 74   as far toward t
5a90: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 2d  he end of the b-
5aa0: 74 72 65 65 20 70 61 67 65 20 61 73 0a 69 74 20  tree page as.it 
5ab0: 63 61 6e 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f  can, in order to
5ac0: 20 6c 65 61 76 65 20 73 70 61 63 65 20 66 6f 72   leave space for
5ad0: 20 66 75 74 75 72 65 20 67 72 6f 77 74 68 20 6f   future growth o
5ae0: 66 20 74 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74  f the cell point
5af0: 65 72 20 61 72 72 61 79 2e 0a 54 68 65 20 61 72  er array..The ar
5b00: 65 61 20 69 6e 20 62 65 74 77 65 65 6e 20 74 68  ea in between th
5b10: 65 20 6c 61 73 74 20 63 65 6c 6c 20 70 6f 69 6e  e last cell poin
5b20: 74 65 72 20 61 72 72 61 79 20 65 6e 74 72 79 20  ter array entry 
5b30: 61 6e 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  and the beginnin
5b40: 67 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 63  g of.the first c
5b50: 65 6c 6c 20 69 73 20 74 68 65 20 75 6e 61 6c 6c  ell is the unall
5b60: 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 2e 0a 3c  ocated region..<
5b70: 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65 65 62 6c  /p>..<p>A freebl
5b80: 6f 63 6b 20 69 73 20 61 20 73 74 72 75 63 74 75  ock is a structu
5b90: 72 65 20 75 73 65 64 20 74 6f 20 69 64 65 6e 74  re used to ident
5ba0: 69 66 79 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20  ify unallocated 
5bb0: 73 70 61 63 65 20 77 69 74 68 69 6e 0a 61 20 62  space within.a b
5bc0: 2d 74 72 65 65 20 70 61 67 65 2e 20 20 46 72 65  -tree page.  Fre
5bd0: 65 62 6c 6f 63 6b 73 20 61 72 65 20 6f 72 67 61  eblocks are orga
5be0: 6e 69 7a 65 64 20 6f 6e 20 61 20 63 68 61 69 6e  nized on a chain
5bf0: 2e 20 20 54 68 65 20 66 69 72 73 74 20 32 20 62  .  The first 2 b
5c00: 79 74 65 73 20 6f 66 0a 61 20 66 72 65 65 62 6c  ytes of.a freebl
5c10: 6f 63 6b 20 61 72 65 20 61 20 62 69 67 2d 65 6e  ock are a big-en
5c20: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  dian integer whi
5c30: 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74  ch is the offset
5c40: 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   in the b-tree p
5c50: 61 67 65 0a 6f 66 20 74 68 65 20 6e 65 78 74 20  age.of the next 
5c60: 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20 74 68 65  freeblock in the
5c70: 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65 72 6f 20   chain, or zero 
5c80: 69 66 20 74 68 65 20 66 72 65 65 62 6c 6f 63 6b  if the freeblock
5c90: 20 69 73 20 74 68 65 20 6c 61 73 74 20 6f 6e 0a   is the last on.
5ca0: 74 68 65 20 63 68 61 69 6e 2e 20 20 54 68 65 20  the chain.  The 
5cb0: 74 68 69 72 64 20 61 6e 64 20 66 6f 75 72 74 68  third and fourth
5cc0: 20 62 79 74 65 73 20 6f 66 20 65 61 63 68 20 66   bytes of each f
5cd0: 72 65 65 62 6c 6f 63 6b 20 66 6f 72 6d 0a 61 20  reeblock form.a 
5ce0: 62 69 74 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  bit-endian integ
5cf0: 65 72 73 20 77 68 69 63 68 20 69 73 20 74 68 65  ers which is the
5d00: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 66 72 65   size of the fre
5d10: 65 62 6c 6f 63 6b 20 69 6e 20 62 79 74 65 73 2c  eblock in bytes,
5d20: 20 69 6e 63 6c 75 64 69 6e 67 0a 74 68 65 20 34   including.the 4
5d30: 2d 62 79 74 65 20 68 65 61 64 65 72 2e 20 20 46  -byte header.  F
5d40: 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 61 6c  reeblocks are al
5d50: 77 61 79 73 20 63 6f 6e 6e 65 63 74 65 64 20 69  ways connected i
5d60: 6e 20 6f 72 64 65 72 20 0a 6f 66 20 69 6e 63 72  n order .of incr
5d70: 65 61 73 69 6e 67 20 6f 66 66 73 65 74 2e 20 20  easing offset.  
5d80: 54 68 65 20 73 65 63 6f 6e 64 20 66 69 65 6c 64  The second field
5d90: 20 6f 66 20 74 68 65 20 62 2d 74 72 65 65 20 70   of the b-tree p
5da0: 61 67 65 20 68 65 61 64 65 72 20 69 73 20 74 68  age header is th
5db0: 65 0a 6f 66 66 73 65 74 20 6f 66 20 74 68 65 20  e.offset of the 
5dc0: 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63 6b 2c  first freeblock,
5dd0: 20 6f 72 20 7a 65 72 6f 20 69 66 20 74 68 65 72   or zero if ther
5de0: 65 20 61 72 65 20 6e 6f 20 66 72 65 65 62 6c 6f  e are no freeblo
5df0: 63 6b 73 20 6f 6e 20 74 68 65 0a 70 61 67 65 2e  cks on the.page.
5e00: 20 20 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d    In a well-form
5e10: 65 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20  ed b-tree page, 
5e20: 74 68 65 72 65 20 77 69 6c 6c 20 61 6c 77 61 79  there will alway
5e30: 73 20 62 65 20 61 74 20 6c 65 61 73 74 20 6f 6e  s be at least on
5e40: 65 20 63 65 6c 6c 0a 62 65 66 6f 72 65 20 74 68  e cell.before th
5e50: 65 20 66 69 72 73 74 20 66 72 65 65 62 6c 6f 63  e first freebloc
5e60: 6b 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 66 72 65  k.</p>..<p>A fre
5e70: 65 62 6c 6f 63 6b 20 72 65 71 75 69 72 65 73 20  eblock requires 
5e80: 61 74 20 6c 65 61 73 74 20 34 20 62 79 74 65 73  at least 4 bytes
5e90: 20 6f 66 20 73 70 61 63 65 2e 20 20 49 66 20 74   of space.  If t
5ea0: 68 65 72 65 20 69 73 20 61 6e 20 69 73 6f 6c 61  here is an isola
5eb0: 74 65 64 0a 67 72 6f 75 70 20 6f 66 20 31 2c 20  ted.group of 1, 
5ec0: 32 2c 20 6f 72 20 33 20 75 6e 75 73 65 64 20 62  2, or 3 unused b
5ed0: 79 74 65 73 20 77 69 74 68 69 6e 20 74 68 65 20  ytes within the 
5ee0: 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65  cell content are
5ef0: 61 2c 20 74 68 6f 73 65 20 62 79 74 65 73 0a 63  a, those bytes.c
5f00: 6f 6d 70 72 69 73 65 20 61 20 66 72 61 67 6d 65  omprise a fragme
5f10: 6e 74 2e 20 20 54 68 65 20 74 6f 74 61 6c 20 6e  nt.  The total n
5f20: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
5f30: 6e 20 61 6c 6c 20 66 72 61 67 6d 65 6e 74 73 20  n all fragments 
5f40: 69 73 20 73 74 6f 72 65 64 0a 69 6e 20 74 68 65  is stored.in the
5f50: 20 66 69 66 74 68 20 66 69 65 6c 64 20 6f 66 20   fifth field of 
5f60: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
5f70: 68 65 61 64 65 72 2e 20 20 49 6e 20 61 20 77 65  header.  In a we
5f80: 6c 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65 65  ll-formed b-tree
5f90: 20 70 61 67 65 2c 0a 74 68 65 20 74 6f 74 61 6c   page,.the total
5fa0: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
5fb0: 20 69 6e 20 66 72 61 67 6d 65 6e 74 73 20 6d 61   in fragments ma
5fc0: 79 20 6e 6f 74 20 65 78 63 65 65 64 20 36 30 2e  y not exceed 60.
5fd0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 74 6f 74  </p>..<p>The tot
5fe0: 61 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 66 72 65  al amount of fre
5ff0: 65 20 73 70 61 63 65 20 6f 6e 20 61 20 62 2d 74  e space on a b-t
6000: 72 65 65 20 70 61 67 65 20 63 6f 6e 73 69 73 74  ree page consist
6010: 73 20 6f 66 20 74 68 65 20 73 69 7a 65 0a 6f 66  s of the size.of
6020: 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64   the unallocated
6030: 20 72 65 67 69 6f 6e 20 70 6c 75 73 20 74 68 65   region plus the
6040: 20 74 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20 61   total size of a
6050: 6c 6c 20 66 72 65 65 62 6c 6f 63 6b 73 20 70 6c  ll freeblocks pl
6060: 75 73 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66  us the.number of
6070: 20 66 72 61 67 6d 65 6e 74 65 64 20 66 72 65 65   fragmented free
6080: 20 62 79 74 65 73 2e 20 20 53 51 4c 69 74 65 20   bytes.  SQLite 
6090: 6d 61 79 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f  may from time to
60a0: 20 74 69 6d 65 20 72 65 6f 72 67 61 6e 69 7a 65   time reorganize
60b0: 0a 61 20 62 2d 74 72 65 65 20 70 61 67 65 20 73  .a b-tree page s
60c0: 6f 20 74 68 61 74 20 74 68 65 72 65 20 61 72 65  o that there are
60d0: 20 6e 6f 20 66 72 65 65 62 6c 6f 63 6b 73 20 6f   no freeblocks o
60e0: 72 20 66 72 61 67 6d 65 6e 74 20 62 79 74 65 73  r fragment bytes
60f0: 2c 20 61 6c 6c 0a 75 6e 75 73 65 64 20 62 79 74  , all.unused byt
6100: 65 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  es are contained
6110: 20 69 6e 20 74 68 65 20 75 6e 61 6c 6c 6f 63 61   in the unalloca
6120: 74 65 64 20 73 70 61 63 65 20 72 65 67 69 6f 6e  ted space region
6130: 2c 20 61 6e 64 20 61 6c 6c 0a 63 65 6c 6c 73 20  , and all.cells 
6140: 61 72 65 20 70 61 63 6b 65 64 20 74 69 67 68 74  are packed tight
6150: 6c 79 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ly at the end of
6160: 20 74 68 65 20 70 61 67 65 2e 20 20 54 68 69 73   the page.  This
6170: 20 69 73 20 63 61 6c 6c 65 64 20 0a 22 64 65 66   is called ."def
6180: 72 61 67 6d 65 6e 74 69 6e 67 22 20 74 68 65 20  ragmenting" the 
6190: 62 2d 74 72 65 65 20 70 61 67 65 2e 3c 2f 70 3e  b-tree page.</p>
61a0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
61b0: 6e 74 20 76 61 72 69 6e 74 20 7b 76 61 72 69 61  nt varint {varia
61c0: 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
61d0: 65 72 7d 20 7b 76 61 72 69 6e 74 7d 3c 2f 74 63  er} {varint}</tc
61e0: 6c 3e 0a 0a 3c 70 3e 41 20 76 61 72 69 61 62 6c  l>..<p>A variabl
61f0: 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72  e-length integer
6200: 20 6f 72 20 22 76 61 72 69 6e 74 22 20 69 73 20   or "varint" is 
6210: 61 20 73 74 61 74 69 63 20 48 75 66 66 6d 61 6e  a static Huffman
6220: 20 65 6e 63 6f 64 69 6e 67 0a 6f 66 20 36 34 2d   encoding.of 64-
6230: 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d  bit twos-complem
6240: 65 6e 74 20 69 6e 74 65 67 65 72 73 20 74 68 61  ent integers tha
6250: 74 20 75 73 65 73 20 6c 65 73 73 20 73 70 61 63  t uses less spac
6260: 65 20 66 6f 72 20 73 6d 61 6c 6c 20 70 6f 73 69  e for small posi
6270: 74 69 76 65 20 0a 76 61 6c 75 65 73 2e 20 0a 41  tive .values. .A
6280: 20 76 61 72 69 6e 74 20 69 73 20 62 65 74 77 65   varint is betwe
6290: 65 6e 20 31 20 61 6e 64 20 39 20 62 79 74 65 73  en 1 and 9 bytes
62a0: 20 69 6e 20 6c 65 6e 67 74 68 2e 20 20 54 68 65   in length.  The
62b0: 20 76 61 72 69 6e 74 20 63 6f 6e 73 69 73 74 73   varint consists
62c0: 20 6f 66 20 65 69 74 68 65 72 0a 7a 65 72 6f 20   of either.zero 
62d0: 6f 72 20 6d 6f 72 65 20 62 79 74 65 20 77 68 69  or more byte whi
62e0: 63 68 20 68 61 76 65 20 74 68 65 20 68 69 67 68  ch have the high
62f0: 2d 6f 72 64 65 72 20 62 69 74 20 73 65 74 20 66  -order bit set f
6300: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 73 69 6e  ollowed by a sin
6310: 67 6c 65 20 62 79 74 65 0a 77 69 74 68 20 74 68  gle byte.with th
6320: 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
6330: 20 63 6c 65 61 72 2c 20 6f 72 20 6e 69 6e 65 20   clear, or nine 
6340: 62 79 74 65 73 2c 20 77 68 69 63 68 65 76 65 72  bytes, whichever
6350: 20 69 73 20 73 68 6f 72 74 65 72 2e 0a 54 68 65   is shorter..The
6360: 20 6c 6f 77 65 72 20 73 65 76 65 6e 20 62 69 74   lower seven bit
6370: 73 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65  s of each of the
6380: 20 66 69 72 73 74 20 65 69 67 68 74 20 62 79 74   first eight byt
6390: 65 73 20 61 6e 64 20 61 6c 6c 20 38 20 62 69 74  es and all 8 bit
63a0: 73 20 6f 66 0a 74 68 65 20 6e 69 6e 74 68 20 62  s of.the ninth b
63b0: 79 74 65 20 61 72 65 20 75 73 65 64 20 74 6f 20  yte are used to 
63c0: 72 65 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  reconstruct the 
63d0: 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  64-bit twos-comp
63e0: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a  lement integer..
63f0: 56 61 72 69 6e 74 73 20 61 72 65 20 62 69 67 2d  Varints are big-
6400: 65 6e 64 69 61 6e 3a 20 62 69 74 73 20 74 61 6b  endian: bits tak
6410: 65 6e 20 66 72 6f 6d 20 74 68 65 20 65 61 72 6c  en from the earl
6420: 69 65 72 20 62 79 74 65 20 6f 66 20 74 68 65 20  ier byte of the 
6430: 76 61 72 69 6e 74 0a 61 72 65 20 74 68 65 20 6d  varint.are the m
6440: 6f 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  ore significant 
6450: 61 6e 64 20 62 69 74 73 20 74 61 6b 65 6e 20 66  and bits taken f
6460: 72 6f 6d 20 74 68 65 20 6c 61 74 65 72 20 62 79  rom the later by
6470: 74 65 73 2e 20 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  tes. </p>..<p>Th
6480: 65 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 63 65  e format of a ce
6490: 6c 6c 20 64 65 70 65 6e 64 73 20 6f 6e 20 77 68  ll depends on wh
64a0: 69 63 68 20 6b 69 6e 64 20 6f 66 20 62 2d 74 72  ich kind of b-tr
64b0: 65 65 20 70 61 67 65 20 74 68 65 20 63 65 6c 6c  ee page the cell
64c0: 0a 61 70 70 65 61 72 73 20 6f 6e 2e 20 20 54 68  .appears on.  Th
64d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
64e0: 65 20 73 68 6f 77 73 20 74 68 65 20 65 6c 65 6d  e shows the elem
64f0: 65 6e 74 73 20 6f 66 20 61 20 63 65 6c 6c 2c 20  ents of a cell, 
6500: 69 6e 0a 6f 72 64 65 72 20 6f 66 20 61 70 70 65  in.order of appe
6510: 61 72 61 6e 63 65 2c 20 66 6f 72 20 74 68 65 20  arance, for the 
6520: 76 61 72 69 6f 75 73 20 62 2d 74 72 65 65 20 70  various b-tree p
6530: 61 67 65 20 74 79 70 65 73 2e 3c 2f 70 3e 0a 0a  age types.</p>..
6540: 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 64 6c 3e  <blockquote><dl>
6550: 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42 2d  .<dt><p>Table B-
6560: 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c 3a 3c  Tree Leaf Cell:<
6570: 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /p></dt>.<dd><p>
6580: 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e  <ul>.<li>A varin
6590: 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74  t which is the t
65a0: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
65b0: 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61 64 2c  ytes of payload,
65c0: 20 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f   including any.o
65d0: 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e 41 20 76 61  verflow.<li>A va
65e0: 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
65f0: 65 20 69 6e 74 65 67 65 72 20 6b 65 79 2c 20 61  e integer key, a
6600: 2e 6b 2e 61 2e 20 22 72 6f 77 69 64 22 0a 3c 6c  .k.a. "rowid".<l
6610: 69 3e 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f  i>The initial po
6620: 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79  rtion of the pay
6630: 6c 6f 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e  load that does n
6640: 6f 74 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72  ot spill to over
6650: 66 6c 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e  flow.pages..<li>
6660: 41 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  A 4-byte big-end
6670: 69 61 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65  ian integer page
6680: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
6690: 66 69 72 73 74 20 70 61 67 65 20 6f 66 20 74 68  first page of th
66a0: 65 0a 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  e.overflow page 
66b0: 6c 69 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69  list - omitted i
66c0: 66 20 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69  f all payload fi
66d0: 74 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65  ts on the b-tree
66e0: 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e   page..</ul></p>
66f0: 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 54 61  </dd>..<dt><p>Ta
6700: 62 6c 65 20 42 2d 54 72 65 65 20 49 6e 74 65 72  ble B-Tree Inter
6710: 69 6f 72 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64  ior Cell:</p></d
6720: 74 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c  t>.<dd><p><ul>.<
6730: 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67 2d  li>A 4-byte big-
6740: 65 6e 64 69 6e 67 20 70 61 67 65 20 6e 75 6d 62  ending page numb
6750: 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
6760: 6c 65 66 74 20 63 68 69 6c 64 20 70 6f 69 6e 74  left child point
6770: 65 72 2e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74  er..<li>A varint
6780: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 69 6e   which is the in
6790: 74 65 67 65 72 20 6b 65 79 0a 3c 2f 75 6c 3e 3c  teger key.</ul><
67a0: 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74 3e 3c 70  /p></dd>..<dt><p
67b0: 3e 49 6e 64 65 78 20 42 2d 54 72 65 65 20 4c 65  >Index B-Tree Le
67c0: 61 66 20 43 65 6c 6c 3a 3c 2f 70 3e 3c 2f 64 74  af Cell:</p></dt
67d0: 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c  >.<dd><p><ul>.<l
67e0: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
67f0: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
6800: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
6810: 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e   key payload, in
6820: 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72  cluding any.over
6830: 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69  flow.<li>The ini
6840: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20  tial portion of 
6850: 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68 61 74  the payload that
6860: 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20   does not spill 
6870: 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65  to overflow.page
6880: 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20  s..<li>A 4-byte 
6890: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
68a0: 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  er page number f
68b0: 6f 72 20 74 68 65 20 66 69 72 73 74 20 70 61 67  or the first pag
68c0: 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f  e of the.overflo
68d0: 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d  w page list - om
68e0: 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70 61 79  itted if all pay
68f0: 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74 68 65  load fits on the
6900: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f   b-tree page..</
6910: 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64  ul></p></dd>..<d
6920: 74 3e 3c 70 3e 49 6e 64 65 78 20 42 2d 54 72 65  t><p>Index B-Tre
6930: 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a  e Interior Cell:
6940: 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  </p></dt>.<dd><p
6950: 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d 62 79  ><ul>.<li>A 4-by
6960: 74 65 20 62 69 67 2d 65 6e 64 69 6e 67 20 70 61  te big-ending pa
6970: 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63 68 20  ge number which 
6980: 69 73 20 74 68 65 20 6c 65 66 74 20 63 68 69 6c  is the left chil
6990: 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69 3e 41  d pointer..<li>A
69a0: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
69b0: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
69c0: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 6b 65  r of bytes of ke
69d0: 79 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75  y payload, inclu
69e0: 64 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f  ding any.overflo
69f0: 77 0a 3c 6c 69 3e 54 68 65 20 69 6e 69 74 69 61  w.<li>The initia
6a00: 6c 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65  l portion of the
6a10: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 64 6f   payload that do
6a20: 65 73 20 6e 6f 74 20 73 70 69 6c 6c 20 74 6f 20  es not spill to 
6a30: 6f 76 65 72 66 6c 6f 77 0a 70 61 67 65 73 2e 0a  overflow.pages..
6a40: 3c 6c 69 3e 41 20 34 2d 62 79 74 65 20 62 69 67  <li>A 4-byte big
6a50: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
6a60: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
6a70: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  the first page o
6a80: 66 20 74 68 65 0a 6f 76 65 72 66 6c 6f 77 20 70  f the.overflow p
6a90: 61 67 65 20 6c 69 73 74 20 2d 20 6f 6d 69 74 74  age list - omitt
6aa0: 65 64 20 69 66 20 61 6c 6c 20 70 61 79 6c 6f 61  ed if all payloa
6ab0: 64 20 66 69 74 73 20 6f 6e 20 74 68 65 20 62 2d  d fits on the b-
6ac0: 74 72 65 65 20 70 61 67 65 2e 0a 3c 2f 75 6c 3e  tree page..</ul>
6ad0: 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 3c  </p></dd>.</dl><
6ae0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
6af0: 3e 54 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  >The information
6b00: 20 61 62 6f 76 65 20 63 61 6e 20 62 65 20 72 65   above can be re
6b10: 63 61 73 74 20 69 6e 74 6f 20 61 20 74 61 62 6c  cast into a tabl
6b20: 65 20 66 6f 72 6d 61 74 20 61 73 20 66 6f 6c 6c  e format as foll
6b30: 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  ows:</p>..<tcl>h
6b40: 64 5f 66 72 61 67 6d 65 6e 74 20 63 65 6c 6c 66  d_fragment cellf
6b50: 6f 72 6d 61 74 20 7b 63 65 6c 6c 20 66 6f 72 6d  ormat {cell form
6b60: 61 74 20 73 75 6d 6d 61 72 79 7d 3c 2f 74 63 6c  at summary}</tcl
6b70: 3e 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d  >.<center>.<i>B-
6b80: 74 72 65 65 20 43 65 6c 6c 20 46 6f 72 6d 61 74  tree Cell Format
6b90: 3c 2f 69 3e 0a 3c 74 61 62 6c 65 20 62 6f 72 64  </i>.<table bord
6ba0: 65 72 3d 31 20 77 69 64 74 68 3d 22 38 30 25 22  er=1 width="80%"
6bb0: 3e 0a 3c 74 72 3e 3c 74 68 20 72 6f 77 73 70 61  >.<tr><th rowspa
6bc0: 6e 3d 32 3e 44 61 74 61 74 79 70 65 0a 20 20 20  n=2>Datatype.   
6bd0: 20 3c 74 68 20 63 6f 6c 73 70 61 6e 3d 34 3e 41   <th colspan=4>A
6be0: 70 70 65 61 72 73 20 69 6e 2e 2e 2e 0a 20 20 20  ppears in....   
6bf0: 20 3c 74 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44   <th rowspan=2>D
6c00: 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c  escription.<tr><
6c10: 74 68 3e 54 61 62 6c 65 20 4c 65 61 66 0a 20 20  th>Table Leaf.  
6c20: 20 20 3c 74 68 3e 54 61 62 6c 65 20 49 6e 74 65    <th>Table Inte
6c30: 72 69 6f 72 0a 20 20 20 20 3c 74 68 3e 49 6e 64  rior.    <th>Ind
6c40: 65 78 20 4c 65 61 66 0a 20 20 20 20 3c 74 68 3e  ex Leaf.    <th>
6c50: 49 6e 64 65 78 20 49 6e 74 65 72 69 6f 72 0a 3c  Index Interior.<
6c60: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
6c70: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34  ter valign=top>4
6c80: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 0a 20 20  -byte integer.  
6c90: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
6ca0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
6cb0: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
6cc0: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6cd0: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
6ce0: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74    <td align=cent
6cf0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e  er valign=top>&n
6d00: 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69  bsp;.    <td ali
6d10: 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e  gn=center valign
6d20: 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20 20  =top>&#x2714;.  
6d30: 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74    <td align=left
6d40: 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20  >Page number of 
6d50: 6c 65 66 74 20 63 68 69 6c 64 0a 3c 74 72 3e 3c  left child.<tr><
6d60: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6d70: 76 61 6c 69 67 6e 3d 74 6f 70 3e 76 61 72 69 6e  valign=top>varin
6d80: 74 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  t.    <td align=
6d90: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6da0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
6db0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6dc0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
6dd0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
6de0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6df0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
6e00: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6e10: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37  valign=top>&#x27
6e20: 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67  14;.    <td alig
6e30: 6e 3d 6c 65 66 74 3e 4e 75 6d 62 65 72 20 6f 66  n=left>Number of
6e40: 20 62 79 74 65 73 20 6f 66 20 70 61 79 6c 6f 61   bytes of payloa
6e50: 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  d.<tr><td align=
6e60: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6e70: 70 3e 76 61 72 69 6e 74 0a 20 20 20 20 3c 74 64  p>varint.    <td
6e80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6e90: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
6ea0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
6eb0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6ec0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
6ed0: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6ee0: 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70  valign=top>&nbsp
6ef0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
6f00: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6f10: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
6f20: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 52 6f 77 69   align=left>Rowi
6f30: 64 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  d.<tr><td align=
6f40: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
6f50: 70 3e 62 79 74 65 20 61 72 72 61 79 0a 20 20 20  p>byte array.   
6f60: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
6f70: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
6f80: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
6f90: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
6fa0: 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20  n=top>&nbsp;.   
6fb0: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
6fc0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
6fd0: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
6fe0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
6ff0: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
7000: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66     <td align=lef
7010: 74 3e 50 61 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74  t>Payload.<tr><t
7020: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
7030: 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d 62 79 74 65  align=top>4-byte
7040: 20 69 6e 74 65 67 65 72 0a 20 20 20 20 3c 74 64   integer.    <td
7050: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
7060: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
7070: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
7080: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7090: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
70a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
70b0: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
70c0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
70d0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
70e0: 70 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c  p>&#x2714;.    <
70f0: 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 50 61  td align=left>Pa
7100: 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 72  ge number of fir
7110: 73 74 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  st overflow page
7120: 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65  .</table></cente
7130: 72 3e 0a 0a 0a 0a 3c 74 72 3e 3c 74 64 20 61 6c  r>....<tr><td al
7140: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
7150: 6e 3d 74 6f 70 3e 0a 0a 3c 70 3e 54 68 65 20 61  n=top>..<p>The a
7160: 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f 61 64  mount of payload
7170: 20 74 68 61 74 20 73 70 69 6c 6c 73 20 6f 6e 74   that spills ont
7180: 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73  o overflow pages
7190: 20 61 6c 73 6f 20 64 65 70 65 6e 64 73 20 6f 6e   also depends on
71a0: 0a 74 68 65 20 70 61 67 65 20 74 79 70 65 2e 20  .the page type. 
71b0: 20 46 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   For the followi
71c0: 6e 67 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 2c  ng computations,
71d0: 20 6c 65 74 20 55 20 62 65 20 74 68 65 20 75 73   let U be the us
71e0: 61 62 6c 65 20 73 69 7a 65 0a 6f 66 20 61 20 64  able size.of a d
71f0: 61 74 61 62 61 73 65 20 70 61 67 65 2c 20 74 68  atabase page, th
7200: 65 20 74 6f 74 61 6c 20 70 61 67 65 20 73 69 7a  e total page siz
7210: 65 20 6c 65 73 73 20 74 68 65 20 72 65 73 65 72  e less the reser
7220: 76 65 64 20 73 70 61 63 65 20 61 74 20 74 68 65  ved space at the
7230: 0a 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61 67  .end of each pag
7240: 65 2e 20 20 41 6e 64 20 6c 65 74 20 50 20 62 65  e.  And let P be
7250: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a   the payload siz
7260: 65 2e 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  e.</p>..<blockqu
7270: 6f 74 65 3e 3c 64 6c 3e 0a 3c 64 74 3e 54 61 62  ote><dl>.<dt>Tab
7280: 6c 65 20 42 2d 54 72 65 65 20 4c 65 61 66 20 43  le B-Tree Leaf C
7290: 65 6c 6c 3a 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70  ell:</dt>.<dd><p
72a0: 3e 0a 49 66 20 74 68 65 20 70 61 79 6c 6f 61 64  >.If the payload
72b0: 20 73 69 7a 65 20 50 20 69 73 20 6c 65 73 73 20   size P is less 
72c0: 74 68 61 6e 20 55 2d 33 36 20 74 68 65 6e 20 74  than U-36 then t
72d0: 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c 6f 61  he entire payloa
72e0: 64 20 69 73 20 73 74 6f 72 65 64 0a 6f 6e 20 74  d is stored.on t
72f0: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20  he b-tree page. 
7300: 20 4c 65 74 20 4d 20 62 65 20 28 28 55 2d 31 32   Let M be ((U-12
7310: 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e 20 20 49  )*32/255)-23.  I
7320: 66 20 50 20 69 73 20 67 72 65 61 74 65 72 20 74  f P is greater t
7330: 68 61 6e 20 55 2d 33 35 0a 74 68 65 6e 20 74 68  han U-35.then th
7340: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
7350: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 62   stored on the b
7360: 2d 74 72 65 65 20 70 61 67 65 20 69 73 20 74 68  -tree page is th
7370: 65 20 6c 65 73 73 6f 72 20 6f 66 0a 4d 2b 28 28  e lessor of.M+((
7380: 50 2d 4d 29 25 28 55 2d 34 29 29 20 61 6e 64 20  P-M)%(U-4)) and 
7390: 55 2d 33 35 2e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a  U-35..</p></dd>.
73a0: 0a 3c 64 74 3e 54 61 62 6c 65 20 42 2d 54 72 65  .<dt>Table B-Tre
73b0: 65 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a  e Interior Cell:
73c0: 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 49 6e  </dt>.<dd><p>.In
73d0: 74 65 72 69 6f 72 20 70 61 67 65 73 20 6f 66 20  terior pages of 
73e0: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68 61  table b-trees ha
73f0: 76 65 20 6e 6f 20 70 61 79 6c 6f 61 64 20 61 6e  ve no payload an
7400: 64 20 73 6f 20 74 68 65 72 65 20 69 73 20 6e 65  d so there is ne
7410: 76 65 72 0a 61 6e 79 20 70 61 79 6c 6f 61 64 20  ver.any payload 
7420: 74 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70 3e 3c 2f  to spill..</p></
7430: 64 64 3e 0a 0a 3c 64 74 3e 49 6e 64 65 78 20 42  dd>..<dt>Index B
7440: 2d 54 72 65 65 20 4c 65 61 66 20 4f 72 20 49 6e  -Tree Leaf Or In
7450: 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f 64 74  terior Cell:</dt
7460: 3e 0a 3c 64 64 3e 3c 70 3e 0a 49 66 20 74 68 65  >.<dd><p>.If the
7470: 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50 20   payload size P 
7480: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 28 28 55  is less than ((U
7490: 2d 31 32 29 2a 36 34 2f 32 35 35 29 2d 32 32 20  -12)*64/255)-22 
74a0: 74 68 65 6e 20 74 68 65 20 65 6e 74 69 72 65 0a  then the entire.
74b0: 70 61 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65  payload is store
74c0: 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  d on the b-tree 
74d0: 70 61 67 65 2e 20 20 0a 4c 65 74 20 4d 20 62 65  page.  .Let M be
74e0: 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29   ((U-12)*32/255)
74f0: 2d 32 33 2e 20 20 49 66 20 50 20 69 73 20 67 72  -23.  If P is gr
7500: 65 61 74 65 72 20 74 68 61 6e 20 28 28 55 2d 31  eater than ((U-1
7510: 32 29 2a 36 34 2f 32 35 35 29 2d 32 33 0a 74 68  2)*64/255)-23.th
7520: 65 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  en the number of
7530: 20 62 79 74 65 20 73 74 6f 72 65 64 20 6f 6e 20   byte stored on 
7540: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
7550: 69 73 20 74 68 65 20 6c 65 73 73 6f 72 20 6f 66  is the lessor of
7560: 0a 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29  .M+((P-M)%(U-4))
7570: 20 61 6e 64 20 28 28 55 2d 31 32 29 2a 36 34 2f   and ((U-12)*64/
7580: 32 35 35 29 2d 32 33 2e 0a 3c 2f 70 3e 3c 2f 64  255)-23..</p></d
7590: 64 3e 0a 3c 2f 64 6c 3e 3c 2f 62 6c 6f 63 6b 71  d>.</dl></blockq
75a0: 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 6f 76  uote>..<p>The ov
75b0: 65 72 66 6c 6f 77 20 74 68 72 65 73 68 6f 6c 64  erflow threshold
75c0: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
75d0: 6f 20 67 69 76 65 20 61 20 6d 69 6e 69 6d 75 6d  o give a minimum
75e0: 20 66 61 6e 6f 75 74 20 6f 66 0a 34 20 66 6f 72   fanout of.4 for
75f0: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 73 20 61   index b-trees a
7600: 6e 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  nd to make sure 
7610: 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 70 61  enough of the pa
7620: 79 6c 6f 61 64 0a 69 73 20 6f 6e 20 74 68 65 20  yload.is on the 
7630: 62 2d 74 72 65 65 20 70 61 67 65 20 74 68 61 74  b-tree page that
7640: 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
7650: 65 72 20 63 61 6e 20 75 73 75 61 6c 6c 79 20 62  er can usually b
7660: 65 20 61 63 63 65 73 73 65 64 0a 77 69 74 68 6f  e accessed.witho
7670: 75 74 20 63 6f 6e 73 75 6c 74 69 6e 67 20 61 6e  ut consulting an
7680: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2e 20   overflow page. 
7690: 20 49 6e 20 68 69 6e 64 73 69 67 68 74 2c 20 74   In hindsight, t
76a0: 68 65 20 64 65 73 69 67 6e 65 72 73 20 6f 66 0a  he designers of.
76b0: 74 68 65 20 53 51 4c 69 74 65 20 62 2d 74 72 65  the SQLite b-tre
76c0: 65 20 6c 6f 67 69 63 20 72 65 61 6c 69 7a 65 20  e logic realize 
76d0: 74 68 61 74 20 74 68 65 73 65 20 74 68 72 65 73  that these thres
76e0: 68 6f 6c 64 73 20 63 6f 75 6c 64 20 68 61 76 65  holds could have
76f0: 20 62 65 65 6e 0a 6d 61 64 65 20 6d 75 63 68 20   been.made much 
7700: 73 69 6d 70 6c 65 72 2e 20 20 48 6f 77 65 76 65  simpler.  Howeve
7710: 72 2c 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69  r, the computati
7720: 6f 6e 73 20 63 61 6e 6e 6f 74 20 62 65 20 6e 6f  ons cannot be no
7730: 77 20 62 65 20 63 68 61 6e 67 65 64 0a 77 69 74  w be changed.wit
7740: 68 6f 75 74 20 72 65 73 75 6c 74 69 6e 67 20 69  hout resulting i
7750: 6e 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 6c  n an incompatibl
7760: 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e 20 20  e file format.  
7770: 41 6e 64 20 74 68 65 20 63 75 72 72 65 6e 74 20  And the current 
7780: 63 6f 6d 70 75 74 61 74 69 6f 6e 73 0a 77 6f 72  computations.wor
7790: 6b 20 77 65 6c 6c 2c 20 65 76 65 6e 20 69 66 20  k well, even if 
77a0: 74 68 65 79 20 61 72 65 20 61 20 6c 69 74 74 6c  they are a littl
77b0: 65 20 63 6f 6d 70 6c 65 78 2e 3c 2f 70 3e 0a 0a  e complex.</p>..
77c0: 3c 68 33 3e 31 2e 36 20 43 65 6c 6c 20 50 61 79  <h3>1.6 Cell Pay
77d0: 6c 6f 61 64 20 4f 76 65 72 66 6c 6f 77 20 50 61  load Overflow Pa
77e0: 67 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 57 68 65  ges</h3>..<p>Whe
77f0: 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 20 6f 66  n the payload of
7800: 20 61 20 62 2d 74 72 65 65 20 63 65 6c 6c 20 69   a b-tree cell i
7810: 73 20 74 6f 6f 20 6c 61 72 67 65 20 66 6f 72 20  s too large for 
7820: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2c  the b-tree page,
7830: 0a 74 68 65 20 73 75 72 70 6c 75 73 20 69 73 20  .the surplus is 
7840: 73 70 69 6c 6c 65 64 20 6f 6e 74 6f 20 6f 76 65  spilled onto ove
7850: 72 66 6c 6f 77 20 70 61 67 65 73 2e 20 20 4f 76  rflow pages.  Ov
7860: 65 72 66 6c 6f 77 20 70 61 67 65 73 20 66 6f 72  erflow pages for
7870: 6d 20 61 20 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e  m a linked.list.
7880: 20 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72    The first four
7890: 20 62 79 74 65 73 20 6f 66 20 65 61 63 68 20 6f   bytes of each o
78a0: 76 65 72 66 6c 6f 77 20 70 61 67 65 20 61 72 65  verflow page are
78b0: 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a 69 6e   a big-endian.in
78c0: 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
78d0: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  he page number o
78e0: 66 20 74 68 65 20 6e 65 78 74 20 70 61 67 65 20  f the next page 
78f0: 69 6e 20 74 68 65 20 63 68 61 69 6e 2c 20 6f 72  in the chain, or
7900: 20 7a 65 72 6f 0a 66 6f 72 20 74 68 65 20 66 69   zero.for the fi
7910: 6e 61 6c 20 70 61 67 65 20 69 6e 20 74 68 65 20  nal page in the 
7920: 63 68 61 69 6e 2e 20 20 54 68 65 20 66 69 66 74  chain.  The fift
7930: 68 20 62 79 74 65 20 74 68 72 6f 75 67 68 20 74  h byte through t
7940: 68 65 20 6c 61 73 74 20 75 73 61 62 6c 65 0a 62  he last usable.b
7950: 79 74 65 20 61 72 65 20 75 73 65 64 20 74 6f 20  yte are used to 
7960: 68 6f 6c 64 20 6f 76 65 72 66 6c 6f 77 20 63 6f  hold overflow co
7970: 6e 74 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e  ntent.</p>..<h3>
7980: 31 2e 37 20 50 6f 69 6e 74 65 72 20 4d 61 70 20  1.7 Pointer Map 
7990: 6f 72 20 50 74 72 6d 61 70 20 50 61 67 65 73 3c  or Ptrmap Pages<
79a0: 2f 68 33 3e 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72  /h3>..<p>Pointer
79b0: 20 6d 61 70 20 6f 72 20 70 74 72 6d 61 70 20 70   map or ptrmap p
79c0: 61 67 65 73 20 61 72 65 20 65 78 74 72 61 20 70  ages are extra p
79d0: 61 67 65 73 20 69 6e 73 65 72 74 65 64 20 69 6e  ages inserted in
79e0: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  to the database.
79f0: 74 6f 20 6d 61 6b 65 20 74 68 65 20 6f 70 65 72  to make the oper
7a00: 61 74 69 6f 6e 20 6f 66 20 5b 61 75 74 6f 5f 76  ation of [auto_v
7a10: 61 63 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72  acuum] and [incr
7a20: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20  emental_vacuum] 
7a30: 6d 6f 64 65 73 0a 6d 6f 72 65 20 65 66 66 69 63  modes.more effic
7a40: 69 65 6e 74 2e 20 20 4f 74 68 65 72 20 70 61 67  ient.  Other pag
7a50: 65 20 74 79 70 65 73 20 69 6e 20 74 68 65 20 64  e types in the d
7a60: 61 74 61 62 61 73 65 20 74 79 70 69 63 61 6c 6c  atabase typicall
7a70: 79 20 68 61 76 65 20 70 6f 69 6e 74 65 72 73 0a  y have pointers.
7a80: 66 72 6f 6d 20 70 61 72 65 6e 74 20 74 6f 20 63  from parent to c
7a90: 68 69 6c 64 2e 20 20 46 6f 72 20 65 78 61 6d 70  hild.  For examp
7aa0: 6c 65 2c 20 61 20 69 6e 74 65 72 69 6f 72 20 62  le, a interior b
7ab0: 2d 74 72 65 65 20 70 61 67 65 20 63 6f 6e 74 61  -tree page conta
7ac0: 69 6e 73 20 70 6f 69 6e 74 65 72 73 0a 74 6f 20  ins pointers.to 
7ad0: 69 74 73 20 63 68 69 6c 64 20 62 2d 74 72 65 65  its child b-tree
7ae0: 20 70 61 67 65 73 20 61 6e 64 20 61 6e 20 6f 76   pages and an ov
7af0: 65 72 66 6c 6f 77 20 63 68 61 69 6e 20 68 61 73  erflow chain has
7b00: 20 61 20 70 6f 69 6e 74 65 72 0a 66 72 6f 6d 20   a pointer.from 
7b10: 65 61 72 6c 69 65 72 20 74 6f 20 6c 61 74 65 72  earlier to later
7b20: 20 6c 69 6e 6b 73 20 69 6e 20 74 68 65 20 63 68   links in the ch
7b30: 61 69 6e 2e 20 20 41 20 70 74 72 6d 61 70 20 70  ain.  A ptrmap p
7b40: 61 67 65 20 63 6f 6e 74 61 69 6e 73 20 6c 69 6e  age contains lin
7b50: 6b 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e  kage.information
7b60: 20 67 6f 69 6e 67 20 69 6e 20 74 68 65 20 6f 70   going in the op
7b70: 70 6f 73 69 74 65 20 64 69 72 65 63 74 69 6f 6e  posite direction
7b80: 2c 20 66 72 6f 6d 20 63 68 69 6c 64 20 74 6f 20  , from child to 
7b90: 70 61 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e  parent.</p>..<p>
7ba0: 50 74 72 6d 61 70 20 70 61 67 65 73 20 6d 75 73  Ptrmap pages mus
7bb0: 74 20 65 78 69 73 74 20 69 6e 20 61 6e 79 20 64  t exist in any d
7bc0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 69  atabase file whi
7bd0: 63 68 20 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72  ch has a non-zer
7be0: 6f 0a 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62  o.largest root b
7bf0: 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c 75 65  -tree page value
7c00: 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 6e   at offset 52 in
7c10: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
7c20: 61 64 65 72 2e 0a 49 66 20 74 68 65 20 6c 61 72  ader..If the lar
7c30: 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65 65  gest root b-tree
7c40: 20 70 61 67 65 20 76 61 6c 75 65 20 69 73 20 7a   page value is z
7c50: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 64 61  ero, then the da
7c60: 74 61 62 61 73 65 20 6d 75 73 74 20 6e 6f 74 0a  tabase must not.
7c70: 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20 70  contain ptrmap p
7c80: 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  ages.</p>..<p>In
7c90: 20 61 20 64 61 74 61 62 61 73 65 20 77 69 74 68   a database with
7ca0: 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 74   ptrmap pages, t
7cb0: 68 65 20 66 69 72 73 74 20 70 74 72 6d 61 70 20  he first ptrmap 
7cc0: 70 61 67 65 20 69 73 20 70 61 67 65 20 32 2e 0a  page is page 2..
7cd0: 41 20 70 74 72 6d 61 70 20 70 61 67 65 20 63 6f  A ptrmap page co
7ce0: 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72 72  nsists of an arr
7cf0: 61 79 20 6f 66 20 35 2d 62 79 74 65 20 65 6e 74  ay of 5-byte ent
7d00: 72 69 65 73 2e 20 20 4c 65 74 20 4a 20 62 65 20  ries.  Let J be 
7d10: 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20 35 2d  the.number of 5-
7d20: 62 79 74 65 20 65 6e 74 72 69 65 73 20 74 68 61  byte entries tha
7d30: 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20 74 68  t will fit in th
7d40: 65 20 75 73 61 62 6c 65 20 73 70 61 63 65 20 6f  e usable space o
7d50: 66 20 61 20 70 61 67 65 2e 0a 28 49 6e 20 6f 74  f a page..(In ot
7d60: 68 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55 2f 35  her words, J=U/5
7d70: 2e 29 20 20 54 68 65 20 66 69 72 73 74 20 70 74  .)  The first pt
7d80: 72 6d 61 70 20 70 61 67 65 20 77 69 6c 6c 20 63  rmap page will c
7d90: 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70 6f 69 6e  ontain back poin
7da0: 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ter.information 
7db0: 66 6f 72 20 70 61 67 65 73 20 33 20 74 68 72 6f  for pages 3 thro
7dc0: 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c 75 73 69  ugh J+2, inclusi
7dd0: 76 65 2e 20 20 54 68 65 20 6e 65 78 74 20 70 6f  ve.  The next po
7de0: 69 6e 74 65 72 20 6d 61 70 0a 70 61 67 65 20 77  inter map.page w
7df0: 69 6c 6c 20 62 65 20 6f 6e 20 70 61 67 65 20 4a  ill be on page J
7e00: 2b 33 20 61 6e 64 20 74 68 61 74 20 70 74 72 6d  +3 and that ptrm
7e10: 61 70 20 70 61 67 65 20 77 69 6c 6c 20 70 72 6f  ap page will pro
7e20: 76 69 64 65 20 62 61 63 6b 20 70 6f 69 6e 74 65  vide back pointe
7e30: 72 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  r.information fo
7e40: 72 20 70 61 67 65 73 20 4a 2b 34 20 74 68 72 6f  r pages J+4 thro
7e50: 75 67 68 20 32 2a 4a 2b 33 20 69 6e 63 6c 75 73  ugh 2*J+3 inclus
7e60: 69 76 65 2e 20 20 41 6e 20 73 6f 20 66 6f 72 74  ive.  An so fort
7e70: 68 20 66 6f 72 0a 74 68 65 20 65 6e 74 69 72 65  h for.the entire
7e80: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 3c   database file.<
7e90: 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 61 20 64 61 74  /p>..<p>In a dat
7ea0: 61 62 61 73 65 20 74 68 61 74 20 75 73 65 73 20  abase that uses 
7eb0: 70 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c  ptrmap pages, al
7ec0: 6c 20 70 61 67 65 73 20 61 74 20 6c 6f 63 61 74  l pages at locat
7ed0: 69 6f 6e 73 20 69 64 65 6e 74 69 66 69 65 64 0a  ions identified.
7ee0: 62 79 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69  by the computati
7ef0: 6f 6e 20 69 6e 20 74 68 65 20 70 72 65 76 69 6f  on in the previo
7f00: 75 73 20 70 61 72 61 67 72 61 70 68 20 6d 75 73  us paragraph mus
7f10: 74 20 62 65 20 70 74 72 6d 61 70 20 70 61 67 65  t be ptrmap page
7f20: 20 61 6e 64 20 6e 6f 0a 6f 74 68 65 72 20 70 61   and no.other pa
7f30: 67 65 20 6d 61 79 20 62 65 20 61 20 70 74 72 6d  ge may be a ptrm
7f40: 61 70 20 70 61 67 65 2e 20 20 45 78 63 65 70 74  ap page.  Except
7f50: 2c 20 69 66 20 74 68 65 20 62 79 74 65 2d 6c 6f  , if the byte-lo
7f60: 63 6b 20 70 61 67 65 20 68 61 70 70 65 6e 73 20  ck page happens 
7f70: 74 6f 0a 66 61 6c 6c 20 6f 6e 20 74 68 65 20 73  to.fall on the s
7f80: 61 6d 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  ame page number 
7f90: 61 73 20 61 20 70 74 72 6d 61 70 20 70 61 67 65  as a ptrmap page
7fa0: 2c 20 74 68 65 6e 20 74 68 65 20 70 74 72 6d 61  , then the ptrma
7fb0: 70 20 69 73 20 6d 6f 76 65 64 0a 74 6f 20 74 68  p is moved.to th
7fc0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 61 67 65  e following page
7fd0: 20 66 6f 72 20 74 68 61 74 20 6f 6e 65 20 63 61   for that one ca
7fe0: 73 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68  se.</p>..<p>Each
7ff0: 20 35 2d 62 79 74 65 20 65 6e 74 72 79 20 6f 6e   5-byte entry on
8000: 20 61 20 70 74 72 6d 61 70 20 70 61 67 65 20 70   a ptrmap page p
8010: 72 6f 76 69 64 65 73 20 62 61 63 6b 2d 6c 69 6e  rovides back-lin
8020: 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  k information ab
8030: 6f 75 74 20 0a 6f 6e 65 20 6f 66 20 70 61 67 65  out .one of page
8040: 73 20 74 68 61 74 20 69 6d 6d 65 64 69 61 74 65  s that immediate
8050: 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70 6f  ly follow the po
8060: 69 6e 74 65 72 20 6d 61 70 2e 20 20 49 66 20 70  inter map.  If p
8070: 61 67 65 20 42 20 69 73 0a 70 74 72 6d 61 70 20  age B is.ptrmap 
8080: 70 61 67 65 20 74 68 65 6e 20 62 61 63 6b 2d 6c  page then back-l
8090: 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ink information 
80a0: 61 62 6f 75 74 20 70 61 67 65 20 42 2b 31 20 69  about page B+1 i
80b0: 73 20 70 72 6f 76 69 64 65 64 20 62 79 0a 74 68  s provided by.th
80c0: 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 6f 6e  e first entry on
80d0: 20 74 68 65 20 70 6f 69 6e 74 65 72 20 6d 61 70   the pointer map
80e0: 2e 20 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  .  Information a
80f0: 62 6f 75 74 20 70 61 67 65 20 42 2b 32 20 69 73  bout page B+2 is
8100: 0a 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65  .provided by the
8110: 20 73 65 63 6f 6e 64 20 65 6e 74 72 79 2e 20 20   second entry.  
8120: 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 3c 2f 70  And so forth.</p
8130: 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79 74  >..<p>Each 5-byt
8140: 65 20 70 74 72 6d 61 70 20 65 6e 74 72 79 20 63  e ptrmap entry c
8150: 6f 6e 73 69 73 74 73 20 6f 66 20 6f 6e 65 20 62  onsists of one b
8160: 79 74 65 20 6f 66 20 22 70 61 67 65 20 74 79 70  yte of "page typ
8170: 65 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 66  e" information.f
8180: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 34 2d 62  ollowed by a 4-b
8190: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 70  yte big-endian p
81a0: 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 46 69 76  age number.  Fiv
81b0: 65 20 70 61 67 65 20 74 79 70 65 73 20 61 72 65  e page types are
81c0: 20 72 65 63 6f 67 6e 69 7a 65 64 3a 0a 3c 2f 70   recognized:.</p
81d0: 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 41 20 62 2d  >..<ol>.<li>A b-
81e0: 74 72 65 65 20 72 6f 6f 74 20 70 61 67 65 2e 20  tree root page. 
81f0: 20 54 68 65 0a 70 61 67 65 20 6e 75 6d 62 65 72   The.page number
8200: 20 73 68 6f 75 6c 64 20 62 65 20 7a 65 72 6f 2e   should be zero.
8210: 0a 3c 6c 69 3e 41 20 66 72 65 65 6c 69 73 74 20  .<li>A freelist 
8220: 70 61 67 65 2e 20 20 54 68 65 20 70 61 67 65 20  page.  The page 
8230: 6e 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65  number should be
8240: 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e 54 68 65 20 66  .zero..<li>The f
8250: 69 72 73 74 20 70 61 67 65 20 6f 66 20 61 0a 63  irst page of a.c
8260: 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72  ell payload over
8270: 66 6c 6f 77 20 63 68 61 69 6e 2e 20 20 54 68 65  flow chain.  The
8280: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20   page number is 
8290: 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 20  the b-tree page 
82a0: 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73 20 74 68  that.contains th
82b0: 65 20 63 65 6c 6c 20 77 68 6f 73 65 20 63 6f 6e  e cell whose con
82c0: 74 65 6e 74 20 68 61 73 20 6f 76 65 72 66 6c 6f  tent has overflo
82d0: 77 65 64 2e 0a 3c 6c 69 3e 41 20 70 61 67 65 20  wed..<li>A page 
82e0: 69 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 63  in an overflow c
82f0: 68 61 69 6e 0a 6f 74 68 65 72 20 74 68 61 6e 20  hain.other than 
8300: 74 68 65 20 66 69 72 73 74 20 70 61 67 65 2e 20  the first page. 
8310: 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72   The page number
8320: 20 69 73 20 74 68 65 20 70 72 69 6f 72 20 70 61   is the prior pa
8330: 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66 6c  ge of the.overfl
8340: 6f 77 20 63 68 61 69 6e 2e 0a 3c 6c 69 3e 41 20  ow chain..<li>A 
8350: 6e 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20  non-root b-tree 
8360: 70 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20  page.  The.page 
8370: 6e 75 6d 62 65 72 20 69 73 20 74 68 65 20 70 61  number is the pa
8380: 72 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65  rent b-tree page
8390: 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 49 6e 20 61  ..</ol>..<p>In a
83a0: 6e 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ny database file
83b0: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 70   that contains p
83c0: 74 72 6d 61 70 20 70 61 67 65 73 2c 20 61 6c 6c  trmap pages, all
83d0: 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70 61 67   b-tree root pag
83e0: 65 73 20 0a 6d 75 73 74 20 63 6f 6d 65 20 62 65  es .must come be
83f0: 66 6f 72 65 20 61 6e 79 20 6e 6f 6e 2d 72 6f 6f  fore any non-roo
8400: 74 20 62 2d 74 72 65 65 20 70 61 67 65 2c 20 63  t b-tree page, c
8410: 65 6c 6c 20 70 61 79 6c 6f 61 64 20 6f 76 65 72  ell payload over
8420: 66 6c 6f 77 20 70 61 67 65 2c 20 6f 72 0a 66 72  flow page, or.fr
8430: 65 65 6c 69 73 74 20 70 61 67 65 2e 3c 2f 70 3e  eelist page.</p>
8440: 0a 0a 3c 68 32 3e 32 2e 30 20 53 63 68 65 6d 61  ..<h2>2.0 Schema
8450: 20 4c 61 79 65 72 3c 2f 68 32 3e 0a 0a 3c 70 3e   Layer</h2>..<p>
8460: 54 68 65 20 66 6f 72 65 67 6f 69 6e 67 20 74 65  The foregoing te
8470: 78 74 20 64 65 73 63 72 69 62 65 73 20 6c 6f 77  xt describes low
8480: 2d 6c 65 76 65 6c 20 61 73 70 65 63 74 73 20 6f  -level aspects o
8490: 66 20 74 68 65 20 53 51 4c 69 74 65 20 66 69 6c  f the SQLite fil
84a0: 65 0a 66 6f 72 6d 61 74 2e 20 20 54 68 65 20 62  e.format.  The b
84b0: 2d 74 72 65 65 20 6d 65 63 68 61 6e 69 73 6d 20  -tree mechanism 
84c0: 70 72 6f 76 69 64 65 73 20 70 6f 77 65 72 66 75  provides powerfu
84d0: 6c 20 61 6e 64 20 65 66 66 69 63 69 65 6e 74 20  l and efficient 
84e0: 6d 65 61 6e 73 20 6f 66 0a 61 63 63 65 73 73 69  means of.accessi
84f0: 6e 67 20 61 20 6c 61 72 67 65 20 64 61 74 61 20  ng a large data 
8500: 73 65 74 2e 20 20 54 68 69 73 20 73 65 63 74 69  set.  This secti
8510: 6f 6e 20 77 69 6c 6c 20 64 65 73 63 72 69 62 65  on will describe
8520: 20 68 6f 77 20 74 68 65 0a 6c 6f 77 2d 6c 65 76   how the.low-lev
8530: 65 6c 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  el b-tree layer 
8540: 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
8550: 6d 65 6e 74 20 68 69 67 68 65 72 2d 6c 65 76 65  ment higher-leve
8560: 6c 20 53 51 4c 0a 63 61 70 61 62 69 6c 69 74 69  l SQL.capabiliti
8570: 65 73 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  es.</p>..<tcl>hd
8580: 5f 66 72 61 67 6d 65 6e 74 20 72 65 63 6f 72 64  _fragment record
8590: 5f 66 6f 72 6d 61 74 20 7b 72 65 63 6f 72 64 20  _format {record 
85a0: 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  format}</tcl>.<h
85b0: 33 3e 32 2e 31 20 52 65 63 6f 72 64 20 46 6f 72  3>2.1 Record For
85c0: 6d 61 74 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65  mat</h3>..<p>The
85d0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61   content of a ta
85e0: 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20  ble b-tree leaf 
85f0: 70 61 67 65 20 61 6e 64 20 74 68 65 20 6b 65 79  page and the key
8600: 0a 6f 66 20 61 6e 79 20 69 6e 64 65 78 20 62 2d  .of any index b-
8610: 74 72 65 65 20 70 61 67 65 20 77 61 73 20 63 68  tree page was ch
8620: 61 72 61 63 74 65 72 69 7a 65 64 20 61 62 6f 76  aracterized abov
8630: 65 0a 61 73 20 61 6e 20 61 72 62 69 74 72 61 72  e.as an arbitrar
8640: 79 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79  y sequence of by
8650: 74 65 73 2e 0a 54 68 65 20 70 72 69 6f 72 20 64  tes..The prior d
8660: 69 73 63 75 73 73 69 6f 6e 20 6d 65 6e 74 69 6f  iscussion mentio
8670: 6e 65 64 20 6f 6e 65 20 6b 65 79 20 62 65 69 6e  ned one key bein
8680: 67 20 6c 65 73 73 20 74 68 61 6e 20 61 6e 6f 74  g less than anot
8690: 68 65 72 2c 20 62 75 74 0a 64 69 64 20 6e 6f 74  her, but.did not
86a0: 20 64 65 66 69 6e 65 20 77 68 61 74 20 22 6c 65   define what "le
86b0: 73 73 20 74 68 61 6e 22 20 6d 65 61 6e 74 2e 20  ss than" meant. 
86c0: 20 54 68 65 20 63 75 72 72 65 6e 74 20 73 65 63   The current sec
86d0: 74 69 6f 6e 20 77 69 6c 6c 20 61 64 64 72 65 73  tion will addres
86e0: 73 0a 74 68 65 73 65 20 64 65 66 69 63 69 65 6e  s.these deficien
86f0: 63 69 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 50 61  cies.</p>..<p>Pa
8700: 79 6c 6f 61 64 2c 20 62 65 20 69 74 20 74 61 62  yload, be it tab
8710: 6c 65 20 63 6f 6e 74 65 6e 74 20 6f 72 20 69 6e  le content or in
8720: 64 65 78 20 6b 65 79 73 2c 20 69 73 20 61 6c 77  dex keys, is alw
8730: 61 79 73 20 69 6e 20 74 68 65 20 22 72 65 63 6f  ays in the "reco
8740: 72 64 0a 66 6f 72 6d 61 74 22 2e 20 20 54 68 65  rd.format".  The
8750: 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 64   record format d
8760: 65 66 69 6e 65 73 20 61 20 73 65 71 75 65 6e 63  efines a sequenc
8770: 65 20 6f 66 20 76 61 6c 75 65 73 20 63 6f 72 72  e of values corr
8780: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0a 74 6f 20  esponding to.to 
8790: 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62  columns in a tab
87a0: 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54 68  le or index.  Th
87b0: 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20  e record format 
87c0: 73 70 65 63 69 66 69 65 73 20 74 68 65 20 6e 75  specifies the nu
87d0: 6d 62 65 72 0a 6f 66 20 63 6f 6c 75 6d 6e 73 2c  mber.of columns,
87e0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
87f0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 6e   each column, an
8800: 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  d the content of
8810: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 3c 2f 70   each column.</p
8820: 3e 0a 0a 3c 70 3e 54 68 65 20 72 65 63 6f 72 64  >..<p>The record
8830: 20 66 6f 72 6d 61 74 20 6d 61 6b 65 73 20 65 78   format makes ex
8840: 74 65 6e 73 69 76 65 20 75 73 65 20 6f 66 20 74  tensive use of t
8850: 68 65 20 0a 5b 76 61 72 69 61 62 6c 65 2d 6c 65  he .[variable-le
8860: 6e 67 74 68 20 69 6e 74 65 67 65 72 5d 20 6f 72  ngth integer] or
8870: 20 5b 76 61 72 69 6e 74 5d 0a 72 65 70 72 65 73   [varint].repres
8880: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 36 34 2d 62  entation of 64-b
8890: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
88a0: 72 73 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65  rs defined above
88b0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
88c0: 72 61 67 6d 65 6e 74 20 73 65 72 69 61 6c 74 79  ragment serialty
88d0: 70 65 20 7b 73 65 72 69 61 6c 20 74 79 70 65 7d  pe {serial type}
88e0: 20 7b 73 65 72 69 61 6c 20 74 79 70 65 73 7d 3c   {serial types}<
88f0: 2f 74 63 6c 3e 0a 3c 70 3e 41 20 72 65 63 6f 72  /tcl>.<p>A recor
8900: 64 20 63 6f 6e 74 61 69 6e 73 20 61 20 68 65 61  d contains a hea
8910: 64 65 72 20 61 6e 64 20 61 20 62 6f 64 79 2c 20  der and a body, 
8920: 69 6e 20 74 68 61 74 20 6f 72 64 65 72 2e 20 20  in that order.  
8930: 0a 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69  .The header begi
8940: 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ns with a single
8950: 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 64 65   varint which de
8960: 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74  termines the tot
8970: 61 6c 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74  al number.of byt
8980: 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  es in the header
8990: 2e 20 20 54 68 65 20 76 61 72 69 6e 74 20 76 61  .  The varint va
89a0: 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20  lue is the size 
89b0: 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e  of the header in
89c0: 0a 62 79 74 65 20 69 6e 63 6c 75 64 69 6e 67 20  .byte including 
89d0: 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20  the size varint 
89e0: 69 74 73 65 6c 66 2e 20 20 46 6f 6c 6c 6f 77 69  itself.  Followi
89f0: 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69  ng the size vari
8a00: 6e 74 20 61 72 65 0a 6f 6e 65 20 6f 72 20 6d 6f  nt are.one or mo
8a10: 72 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61  re additional va
8a20: 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63  rints, one per c
8a30: 6f 6c 75 6d 6e 2e 20 20 54 68 65 73 65 20 61 64  olumn.  These ad
8a40: 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73  ditional varints
8a50: 0a 61 72 65 20 63 61 6c 6c 65 64 20 22 73 65 72  .are called "ser
8a60: 69 61 6c 20 74 79 70 65 22 20 6e 75 6d 62 65 72  ial type" number
8a70: 73 20 61 6e 64 0a 64 65 74 65 72 6d 69 6e 65 20  s and.determine 
8a80: 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
8a90: 65 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 63 63  each column, acc
8aa0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66 6f  ording to the fo
8ab0: 6c 6c 6f 77 69 6e 67 20 6b 65 79 3a 3c 2f 70 3e  llowing key:</p>
8ac0: 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 53 65  ..<center>.<i>Se
8ad0: 72 69 61 6c 20 54 79 70 65 20 43 6f 64 65 73 20  rial Type Codes 
8ae0: 4f 66 20 54 68 65 20 52 65 63 6f 72 64 20 46 6f  Of The Record Fo
8af0: 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
8b00: 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22 20  ble width="80%" 
8b10: 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74  border=1>.<tr><t
8b20: 68 3e 53 65 72 69 61 6c 20 54 79 70 65 3c 74 68  h>Serial Type<th
8b30: 3e 43 6f 6e 74 65 6e 74 20 53 69 7a 65 3c 74 68  >Content Size<th
8b40: 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e 3c 74 64  >Meaning.<tr><td
8b50: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
8b60: 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76 61  n=center>0<td va
8b70: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
8b80: 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e  enter>0<td align
8b90: 3d 6c 65 66 74 3e 0a 4e 55 4c 4c 0a 3c 74 72 3e  =left>.NULL.<tr>
8ba0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
8bb0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
8bc0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
8bd0: 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c  n=center>1<td al
8be0: 69 67 6e 3d 6c 65 66 74 3e 0a 38 2d 62 69 74 20  ign=left>.8-bit 
8bf0: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
8c00: 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20  integer.<tr><td 
8c10: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
8c20: 3d 63 65 6e 74 65 72 3e 32 3c 74 64 20 76 61 6c  =center>2<td val
8c30: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
8c40: 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d  nter>2<td align=
8c50: 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e  left>.Big-endian
8c60: 20 31 36 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d   16-bit twos-com
8c70: 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a  plement integer.
8c80: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
8c90: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
8ca0: 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  3<td valign=top 
8cb0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74  align=center>3<t
8cc0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69  d align=left>.Bi
8cd0: 67 2d 65 6e 64 69 61 6e 20 32 34 2d 62 69 74 20  g-endian 24-bit 
8ce0: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
8cf0: 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20  integer.<tr><td 
8d00: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
8d10: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61 6c  =center>4<td val
8d20: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
8d30: 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d  nter>4<td align=
8d40: 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e  left>.Big-endian
8d50: 20 33 32 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d   32-bit twos-com
8d60: 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a  plement integer.
8d70: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
8d80: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
8d90: 35 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  5<td valign=top 
8da0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74  align=center>6<t
8db0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69  d align=left>.Bi
8dc0: 67 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69 74 20  g-endian 48-bit 
8dd0: 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  twos-complement 
8de0: 69 6e 74 65 67 65 72 0a 3c 74 72 3e 3c 74 64 20  integer.<tr><td 
8df0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
8e00: 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 76 61 6c  =center>6<td val
8e10: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
8e20: 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67 6e 3d  nter>8<td align=
8e30: 6c 65 66 74 3e 0a 42 69 67 2d 65 6e 64 69 61 6e  left>.Big-endian
8e40: 20 36 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d   64-bit twos-com
8e50: 70 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 0a  plement integer.
8e60: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
8e70: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
8e80: 37 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  7<td valign=top 
8e90: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74  align=center>8<t
8ea0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 69  d align=left>.Bi
8eb0: 67 2d 65 6e 64 69 61 6e 20 49 45 45 45 20 37 35  g-endian IEEE 75
8ec0: 34 2d 32 30 30 38 20 36 34 2d 62 69 74 20 66 6c  4-2008 64-bit fl
8ed0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
8ee0: 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  ber.<tr><td vali
8ef0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
8f00: 74 65 72 3e 38 3c 74 64 20 76 61 6c 69 67 6e 3d  ter>8<td valign=
8f10: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
8f20: 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >0<td align=left
8f30: 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61  >.Integer consta
8f40: 6e 74 20 30 2e 20 20 4f 6e 6c 79 20 61 76 61 69  nt 0.  Only avai
8f50: 6c 61 62 6c 65 20 66 6f 72 20 73 63 68 65 6d 61  lable for schema
8f60: 20 66 6f 72 6d 61 74 20 34 20 61 6e 64 20 68 69   format 4 and hi
8f70: 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  gher..<tr><td va
8f80: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
8f90: 65 6e 74 65 72 3e 39 3c 74 64 20 76 61 6c 69 67  enter>9<td valig
8fa0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
8fb0: 65 72 3e 30 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>0<td align=le
8fc0: 66 74 3e 0a 49 6e 74 65 67 65 72 20 63 6f 6e 73  ft>.Integer cons
8fd0: 74 61 6e 74 20 31 2e 20 20 4f 6e 6c 79 20 61 76  tant 1.  Only av
8fe0: 61 69 6c 61 62 6c 65 20 66 6f 72 20 73 63 68 65  ailable for sche
8ff0: 6d 61 20 66 6f 72 6d 61 74 20 34 20 61 6e 64 20  ma format 4 and 
9000: 68 69 67 68 65 72 2e 0a 3c 74 72 3e 3c 74 64 20  higher..<tr><td 
9010: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
9020: 3d 63 65 6e 74 65 72 3e 31 30 2c 31 31 0a 20 20  =center>10,11.  
9030: 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
9040: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 26 6e   align=center>&n
9050: 62 73 70 3b 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  bsp;<td align=le
9060: 66 74 3e 0a 3c 69 3e 4e 6f 74 20 75 73 65 64 2e  ft>.<i>Not used.
9070: 20 20 52 65 73 65 72 76 65 64 20 66 6f 72 20 65    Reserved for e
9080: 78 70 61 6e 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74  xpansion.</i>.<t
9090: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
90a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 26   align=center>N&
90b0: 23 78 32 32 36 35 3b 31 32 20 61 6e 64 20 65 76  #x2265;12 and ev
90c0: 65 6e 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67  en.    <td valig
90d0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
90e0: 65 72 3e 28 4e 2d 31 32 29 2f 32 3c 74 64 20 61  er>(N-12)/2<td a
90f0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 41 20 73 74 72  lign=left>.A str
9100: 69 6e 67 20 69 6e 20 74 68 65 20 64 61 74 61 62  ing in the datab
9110: 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 61 6e 64  ase encoding and
9120: 20 28 4e 2d 31 32 29 2f 32 20 62 79 74 65 73 20   (N-12)/2 bytes 
9130: 69 6e 20 6c 65 6e 67 74 68 2e 0a 54 68 65 20 6e  in length..The n
9140: 75 6c 20 74 65 72 6d 69 6e 61 74 6f 72 20 69 73  ul terminator is
9150: 20 6f 6d 69 74 74 65 64 2e 0a 3c 74 72 3e 3c 74   omitted..<tr><t
9160: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
9170: 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32  gn=center>N&#x22
9180: 36 35 3b 31 33 20 61 6e 64 20 6f 64 64 0a 20 20  65;13 and odd.  
9190: 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
91a0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28 4e   align=center>(N
91b0: 2d 31 33 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d  -13)/2<td align=
91c0: 6c 65 66 74 3e 0a 41 20 42 4c 4f 42 20 74 68 61  left>.A BLOB tha
91d0: 74 20 69 73 20 28 4e 2d 31 33 29 2f 32 20 62 79  t is (N-13)/2 by
91e0: 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 0a 3c 2f  tes in length.</
91f0: 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a  table></center>.
9200: 0a 3c 70 3e 4e 6f 74 65 20 74 68 61 74 20 62 65  .<p>Note that be
9210: 63 61 75 73 65 20 6f 66 20 74 68 65 20 77 61 79  cause of the way
9220: 20 76 61 72 69 6e 74 73 20 61 72 65 20 64 65 66   varints are def
9230: 69 6e 65 64 2c 20 74 68 65 20 68 65 61 64 65 72  ined, the header
9240: 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 61 6e 64   size varint.and
9250: 20 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72   serial type var
9260: 69 6e 74 73 20 77 69 6c 6c 20 75 73 75 61 6c 6c  ints will usuall
9270: 79 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20 73  y consist of a s
9280: 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
9290: 0a 73 65 72 69 61 6c 20 74 79 70 65 20 76 61 72  .serial type var
92a0: 69 6e 74 73 20 66 6f 72 20 6c 61 72 67 65 20 73  ints for large s
92b0: 74 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42 73  trings and BLOBs
92c0: 20 6d 69 67 68 74 20 65 78 74 65 6e 64 20 74 6f   might extend to
92d0: 20 74 77 6f 20 6f 72 20 74 68 72 65 65 0a 62 79   two or three.by
92e0: 74 65 20 76 61 72 69 6e 74 73 2c 20 62 75 74 20  te varints, but 
92f0: 74 68 61 74 20 69 73 20 74 68 65 20 65 78 63 65  that is the exce
9300: 70 74 69 6f 6e 20 72 61 74 68 65 72 20 74 68 61  ption rather tha
9310: 6e 20 74 68 65 20 72 75 6c 65 2e 20 0a 54 68 65  n the rule. .The
9320: 20 76 61 72 69 6e 74 20 66 6f 72 6d 61 74 20 69   varint format i
9330: 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e 74  s very efficient
9340: 20 61 74 20 63 6f 64 69 6e 67 20 74 68 65 20 72   at coding the r
9350: 65 63 6f 72 64 20 68 65 61 64 65 72 2e 3c 2f 70  ecord header.</p
9360: 3e 0a 0a 3c 70 3e 54 68 65 20 76 61 6c 75 65 73  >..<p>The values
9370: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
9380: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   in the record i
9390: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
93a0: 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a 4e 6f  w the header..No
93b0: 74 65 20 74 68 61 74 20 66 6f 72 20 73 65 72 69  te that for seri
93c0: 61 6c 20 74 79 70 65 73 20 30 2c 20 38 2c 20 39  al types 0, 8, 9
93d0: 2c 20 31 32 2c 20 61 6e 64 20 31 33 2c 20 74 68  , 12, and 13, th
93e0: 65 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 20  e value is zero 
93f0: 62 79 74 65 73 20 69 6e 0a 6c 65 6e 67 74 68 2e  bytes in.length.
9400: 20 20 49 66 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73    If all columns
9410: 20 61 72 65 20 6f 66 20 74 68 65 73 65 20 74 79   are of these ty
9420: 70 65 73 20 74 68 65 6e 20 74 68 65 20 62 6f 64  pes then the bod
9430: 79 20 73 65 63 74 69 6f 6e 20 6f 66 20 74 68 65  y section of the
9440: 0a 72 65 63 6f 72 64 20 69 73 20 65 6d 70 74 79  .record is empty
9450: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 32 20 52  .</p>..<h3>2.2 R
9460: 65 63 6f 72 64 20 53 6f 72 74 20 4f 72 64 65 72  ecord Sort Order
9470: 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 6f 72  </h3>..<p>The or
9480: 64 65 72 20 6f 66 20 6b 65 79 73 20 69 6e 20 61  der of keys in a
9490: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69  n index b-tree i
94a0: 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
94b0: 74 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6f  the sort order o
94c0: 66 0a 74 68 65 20 72 65 63 6f 72 64 73 20 74 68  f.the records th
94d0: 61 74 20 74 68 65 20 6b 65 79 73 20 72 65 70 72  at the keys repr
94e0: 65 73 65 6e 74 2e 20 20 52 65 63 6f 72 64 20 63  esent.  Record c
94f0: 6f 6d 70 61 72 69 73 6f 6e 20 70 72 6f 63 65 65  omparison procee
9500: 64 73 20 63 6f 6c 75 6d 6e 0a 62 79 20 63 6f 6c  ds column.by col
9510: 75 6d 6e 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f 66  umn.  Columns of
9520: 20 61 20 72 65 63 6f 72 64 20 61 72 65 20 65 78   a record are ex
9530: 61 6d 69 6e 65 64 20 66 72 6f 6d 20 6c 65 66 74  amined from left
9540: 20 74 6f 20 72 69 67 68 74 2e 20 20 54 68 65 0a   to right.  The.
9550: 66 69 72 73 74 20 70 61 69 72 20 6f 66 20 63 6f  first pair of co
9560: 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 6e  lumns that are n
9570: 6f 74 20 65 71 75 61 6c 20 64 65 74 65 72 6d 69  ot equal determi
9580: 6e 65 73 20 74 68 65 20 72 65 6c 61 74 69 76 65  nes the relative
9590: 20 6f 72 64 65 72 0a 6f 66 20 74 68 65 20 74 77   order.of the tw
95a0: 6f 20 72 65 63 6f 72 64 73 2e 20 20 54 68 65 20  o records.  The 
95b0: 73 6f 72 74 20 6f 72 64 65 72 20 6f 66 20 69 6e  sort order of in
95c0: 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73  dividual columns
95d0: 20 69 73 20 61 73 0a 66 6f 6c 6c 6f 77 73 3a 3c   is as.follows:<
95e0: 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 4e 55  /p>..<ol>.<li>NU
95f0: 4c 4c 20 76 61 6c 75 65 73 20 28 73 65 72 69 61  LL values (seria
9600: 6c 20 74 79 70 65 20 30 29 20 73 6f 72 74 20 66  l type 0) sort f
9610: 69 72 73 74 0a 3c 6c 69 3e 4e 75 6d 65 72 69 63  irst.<li>Numeric
9620: 20 76 61 6c 75 65 73 20 28 73 65 72 69 61 6c 20   values (serial 
9630: 74 79 70 65 73 20 31 20 74 68 72 6f 75 67 68 20  types 1 through 
9640: 39 29 20 73 6f 72 74 20 6e 65 78 74 20 61 6e 64  9) sort next and
9650: 20 69 6e 20 6e 75 6d 65 72 69 63 20 6f 72 64 65   in numeric orde
9660: 72 0a 3c 6c 69 3e 54 65 78 74 20 76 61 6c 75 65  r.<li>Text value
9670: 73 20 28 65 76 65 6e 20 73 65 72 69 61 6c 20 74  s (even serial t
9680: 79 70 65 73 20 31 32 20 61 6e 64 20 6c 61 72 67  ypes 12 and larg
9690: 65 72 29 20 73 6f 72 74 20 6e 65 78 74 20 69 6e  er) sort next in
96a0: 20 74 68 65 20 6f 72 64 65 72 0a 20 20 20 20 64   the order.    d
96b0: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
96c0: 20 63 6f 6c 75 6d 6e 73 20 63 6f 6c 6c 61 74 69   columns collati
96d0: 6e 67 20 66 75 6e 63 74 69 6f 6e 0a 3c 6c 69 3e  ng function.<li>
96e0: 42 4c 4f 42 20 76 61 6c 75 65 73 20 28 6f 64 64  BLOB values (odd
96f0: 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 31 33   serial types 13
9700: 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72   and larger) sor
9710: 74 20 6c 61 73 74 20 69 6e 20 6f 72 64 65 72 20  t last in order 
9720: 0a 20 20 20 20 64 65 74 65 72 6d 69 6e 65 64 20  .    determined 
9730: 62 79 20 6d 65 6d 63 6d 70 28 29 2e 0a 3c 2f 6f  by memcmp()..</o
9740: 6c 3e 0a 0a 3c 70 3e 41 20 63 6f 6c 6c 61 74 69  l>..<p>A collati
9750: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ng function for 
9760: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 20 6e  each column is n
9770: 65 63 65 73 73 61 72 79 20 69 6e 20 6f 72 64 65  ecessary in orde
9780: 72 20 74 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65  r to compute.the
9790: 20 6f 72 64 65 72 20 6f 66 20 74 65 78 74 20 66   order of text f
97a0: 69 65 6c 64 73 2e 20 20 53 51 4c 69 74 65 20 64  ields.  SQLite d
97b0: 65 66 69 6e 65 73 20 74 68 72 65 65 20 62 75 69  efines three bui
97c0: 6c 74 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20  lt-in collating 
97d0: 66 75 6e 63 74 69 6f 6e 73 3a 0a 3c 2f 70 3e 0a  functions:.</p>.
97e0: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61  .<blockquote><ta
97f0: 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
9800: 6c 73 70 61 63 69 6e 67 3d 31 30 3e 0a 3c 74 72  lspacing=10>.<tr
9810: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  ><td valign=top>
9820: 42 49 4e 41 52 59 0a 20 20 20 20 3c 74 64 3e 53  BINARY.    <td>S
9830: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6d 70 61  trings are compa
9840: 72 69 65 64 20 62 79 74 65 20 62 79 20 62 79 74  ried byte by byt
9850: 65 20 75 73 69 6e 67 20 74 68 65 20 6d 65 6d 63  e using the memc
9860: 6d 70 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20  mp() function.  
9870: 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 73        from the s
9880: 74 61 6e 64 61 72 64 20 43 20 6c 69 62 72 61 72  tandard C librar
9890: 79 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  y..<tr><td valig
98a0: 6e 3d 74 6f 70 3e 4e 4f 43 41 53 45 0a 20 20 20  n=top>NOCASE.   
98b0: 20 3c 74 64 3e 4c 69 6b 65 20 42 49 4e 41 52 59   <td>Like BINARY
98c0: 20 65 78 63 65 70 74 20 74 68 61 74 20 75 70 70   except that upp
98d0: 65 72 63 61 73 65 20 41 53 43 49 49 20 63 68 61  ercase ASCII cha
98e0: 72 61 63 74 65 72 73 20 28 27 41 27 20 74 68 72  racters ('A' thr
98f0: 6f 75 67 68 20 27 5a 27 29 0a 20 20 20 20 20 20  ough 'Z').      
9900: 20 20 61 72 65 20 66 6f 6c 64 65 64 20 69 6e 74    are folded int
9910: 6f 20 74 68 65 69 72 20 6c 6f 77 65 72 63 61 73  o their lowercas
9920: 65 20 65 71 75 69 76 61 6c 65 6e 74 73 20 70 72  e equivalents pr
9930: 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 74  ior to running t
9940: 68 65 0a 20 20 20 20 20 20 20 20 63 6f 6d 70 61  he.        compa
9950: 72 69 73 6f 6e 2e 20 20 4e 6f 74 65 20 74 68 61  rison.  Note tha
9960: 74 20 6f 6e 6c 79 20 41 53 43 49 49 20 63 68 61  t only ASCII cha
9970: 72 61 63 74 65 72 73 20 61 72 65 20 63 61 73 65  racters are case
9980: 2d 66 6f 6c 64 65 64 2e 20 20 4e 4f 43 41 53 45  -folded.  NOCASE
9990: 0a 20 20 20 20 20 20 20 20 64 6f 65 73 20 6e 6f  .        does no
99a0: 74 20 69 6d 70 6c 65 6d 65 6e 74 20 61 20 67 65  t implement a ge
99b0: 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 20 75 6e  neral purpose un
99c0: 69 63 6f 64 65 20 63 61 73 65 6c 65 73 73 20 63  icode caseless c
99d0: 6f 6d 70 61 72 69 73 6f 6e 2e 0a 3c 74 72 3e 3c  omparison..<tr><
99e0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 52 54  td valign=top>RT
99f0: 52 49 4d 0a 20 20 20 20 3c 74 64 3e 4c 69 6b 65  RIM.    <td>Like
9a00: 20 42 49 4e 41 52 59 20 65 78 63 65 70 74 20 74   BINARY except t
9a10: 68 61 74 20 73 70 61 63 65 73 20 61 74 20 74 68  hat spaces at th
9a20: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 73 74 72  e end of the str
9a30: 69 6e 67 20 61 72 65 20 65 6c 69 64 65 64 0a 20  ing are elided. 
9a40: 20 20 20 20 20 20 20 70 72 69 6f 72 20 74 6f 20         prior to 
9a50: 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 3c 2f 74 61  comparison..</ta
9a60: 62 6c 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65  ble></blockquote
9a70: 3e 0a 0a 3c 70 3e 41 64 64 69 74 69 6f 6e 61 6c  >..<p>Additional
9a80: 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 73 70 65   application-spe
9a90: 63 69 66 69 63 20 63 6f 6c 6c 61 74 69 6e 67 20  cific collating 
9aa0: 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 62 65  functions can be
9ab0: 20 61 64 64 65 64 20 74 6f 0a 53 51 4c 69 74 65   added to.SQLite
9ac0: 20 75 73 69 6e 67 20 74 68 65 20 5b 73 71 6c 69   using the [sqli
9ad0: 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61  te3_create_colla
9ae0: 74 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66 61 63  tion()] interfac
9af0: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 64  e.</p>..<p>The d
9b00: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
9b10: 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c   function for al
9b20: 6c 20 73 74 72 69 6e 67 73 20 69 73 20 42 49 4e  l strings is BIN
9b30: 41 52 59 2e 0a 41 6c 74 65 72 6e 61 74 69 76 65  ARY..Alternative
9b40: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
9b50: 69 6f 6e 73 20 66 6f 72 20 74 61 62 6c 65 20 63  ions for table c
9b60: 6f 6c 75 6d 6e 73 20 63 61 6e 20 62 65 20 73 70  olumns can be sp
9b70: 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b  ecified in the.[
9b80: 43 52 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74  CREATE TABLE] st
9b90: 61 74 65 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  atement using th
9ba0: 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  e COLLATE clause
9bb0: 20 6f 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64   on the column d
9bc0: 65 66 69 6e 69 74 69 6f 6e 2e 0a 57 68 65 6e 20  efinition..When 
9bd0: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 69 6e 64 65  a column is inde
9be0: 78 65 64 2c 20 74 68 65 20 73 61 6d 65 20 63 6f  xed, the same co
9bf0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
9c00: 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
9c10: 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45 5d  e.[CREATE TABLE]
9c20: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75 73   statement is us
9c30: 65 64 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ed for the colum
9c40: 6e 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2c 20  n in the index, 
9c50: 62 79 20 64 65 66 61 75 6c 74 2c 0a 74 68 6f 75  by default,.thou
9c60: 67 68 20 74 68 69 73 20 63 61 6e 20 62 65 20 6f  gh this can be o
9c70: 76 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20  verridden using 
9c80: 61 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65  a COLLATE clause
9c90: 20 69 6e 20 74 68 65 20 0a 5b 43 52 45 41 54 45   in the .[CREATE
9ca0: 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65 6e   INDEX] statemen
9cb0: 74 2e 0a 0a 3c 68 33 3e 32 2e 33 20 52 65 70 72  t...<h3>2.3 Repr
9cc0: 65 73 65 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51  esentation Of SQ
9cd0: 4c 20 54 61 62 6c 65 73 3c 2f 68 33 3e 0a 0a 3c  L Tables</h3>..<
9ce0: 70 3e 45 61 63 68 20 6f 72 64 69 6e 61 72 79 20  p>Each ordinary 
9cf0: 53 51 4c 20 74 61 62 6c 65 20 69 6e 20 74 68 65  SQL table in the
9d00: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
9d10: 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
9d20: 6f 6e 20 64 69 73 6b 0a 62 79 20 61 20 74 61 62  on disk.by a tab
9d30: 6c 65 20 62 2d 74 72 65 65 2e 20 20 45 61 63 68  le b-tree.  Each
9d40: 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61   entry in the ta
9d50: 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65  ble b-tree corre
9d60: 73 70 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a  sponds to a row.
9d70: 6f 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65  of the SQL table
9d80: 2e 20 20 54 68 65 20 5b 72 6f 77 69 64 5d 20 6f  .  The [rowid] o
9d90: 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20  f the SQL table 
9da0: 69 73 20 74 68 65 20 36 34 2d 62 69 74 20 73 69  is the 64-bit si
9db0: 67 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b 65 79  gned.integer key
9dc0: 20 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79 20   for each entry 
9dd0: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d 74  in the table b-t
9de0: 72 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65  ree.</p>..<p>The
9df0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68   content of each
9e00: 20 53 51 4c 20 74 61 62 6c 65 20 72 6f 77 20 69   SQL table row i
9e10: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
9e20: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 62 79  database file by
9e30: 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e 69 6e 67  .first combining
9e40: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 74   the values in t
9e50: 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6c 75 6d  he various colum
9e60: 6e 73 20 69 6e 74 6f 20 61 20 62 79 74 65 20 61  ns into a byte a
9e70: 72 72 61 79 0a 69 6e 20 74 68 65 20 72 65 63 6f  rray.in the reco
9e80: 72 64 20 66 6f 72 6d 61 74 2c 20 74 68 65 6e 20  rd format, then 
9e90: 73 74 6f 72 69 6e 67 20 74 68 61 74 20 62 79 74  storing that byt
9ea0: 65 20 61 72 72 61 79 20 61 73 20 74 68 65 20 70  e array as the p
9eb0: 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20 65 6e 74  ayload in.an ent
9ec0: 72 79 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ry in the table 
9ed0: 62 2d 74 72 65 65 2e 20 20 54 68 65 20 6f 72 64  b-tree.  The ord
9ee0: 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  er of values in 
9ef0: 74 68 65 20 72 65 63 6f 72 64 20 69 73 0a 74 68  the record is.th
9f00: 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6f 72  e same as the or
9f10: 64 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  der of columns i
9f20: 6e 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65 20  n the SQL table 
9f30: 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 57 68 65 6e  definition..When
9f40: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 74 68   an SQL table th
9f50: 61 74 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b  at includes an.[
9f60: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
9f70: 4b 45 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69  KEY] column (whi
9f80: 63 68 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b  ch aliases the [
9f90: 72 6f 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61  rowid]) then tha
9fa0: 74 0a 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73  t.column appears
9fb0: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
9fc0: 73 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20  s a NULL value. 
9fd0: 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 6b 6e 6f   SQLite will kno
9fe0: 77 20 74 6f 20 75 73 65 0a 74 68 65 20 74 61 62  w to use.the tab
9ff0: 6c 65 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61  le b-tree key ra
a000: 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55  ther than the NU
a010: 4c 4c 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65  LL value when re
a020: 66 65 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49  ferencing the.[I
a030: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
a040: 45 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a  EY] column.</p>.
a050: 0a 3c 70 3e 49 66 20 74 68 65 20 5b 61 66 66 69  .<p>If the [affi
a060: 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  nity] of a colum
a070: 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20 74 68  n is REAL and th
a080: 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  at column contai
a090: 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61 74 20  ns a.value that 
a0a0: 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74 65 64  can be converted
a0b0: 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77   to an integer w
a0c0: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69  ithout loss of i
a0d0: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66 20 74  nformation.(if t
a0e0: 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  he value contain
a0f0: 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20  s no fractional 
a100: 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f 74 20  part and is not 
a110: 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62 65 0a  too large to be.
a120: 72 65 70 72 65 73 65 6e 74 65 64 20 61 73 20 61  represented as a
a130: 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65 6e 20  n integer) then 
a140: 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79 20 62  the column may b
a150: 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
a160: 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69 6e 74  record.as an int
a170: 65 67 65 72 2e 20 20 53 51 4c 69 74 65 20 77 69  eger.  SQLite wi
a180: 6c 6c 20 6b 6e 6f 77 20 74 6f 20 63 6f 6e 76 65  ll know to conve
a190: 72 74 20 74 68 65 20 76 61 6c 75 65 20 62 61 63  rt the value bac
a1a0: 6b 20 74 6f 20 66 6c 6f 61 74 69 6e 67 0a 70 6f  k to floating.po
a1b0: 69 6e 74 20 77 68 65 6e 20 65 78 74 72 61 63 74  int when extract
a1c0: 69 6e 67 20 69 74 20 66 72 6f 6d 20 74 68 65 20  ing it from the 
a1d0: 72 65 63 6f 72 64 2e 3c 2f 70 3e 0a 0a 0a 3c 68  record.</p>...<h
a1e0: 33 3e 32 2e 34 20 52 65 70 72 65 73 65 6e 74 61  3>2.4 Representa
a1f0: 74 69 6f 6e 20 4f 66 20 53 51 4c 20 49 6e 64 69  tion Of SQL Indi
a200: 63 65 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 45 61 63  ces</h3>..<p>Eac
a210: 68 20 53 51 4c 20 69 6e 64 65 78 2c 20 77 68 65  h SQL index, whe
a220: 74 68 65 72 20 65 78 70 6c 69 63 69 74 6c 79 20  ther explicitly 
a230: 64 65 63 6c 61 72 65 64 20 76 69 61 20 61 20 5b  declared via a [
a240: 43 52 45 41 54 45 20 49 4e 44 45 58 5d 20 73 74  CREATE INDEX] st
a250: 61 74 65 6d 65 6e 74 0a 6f 72 20 69 6d 70 6c 69  atement.or impli
a260: 65 64 20 62 79 20 61 20 55 4e 49 51 55 45 20 63  ed by a UNIQUE c
a270: 6f 6e 73 74 72 61 69 6e 74 2c 20 63 6f 72 72 65  onstraint, corre
a280: 73 70 6f 6e 64 73 20 74 6f 20 61 6e 20 69 6e 64  sponds to an ind
a290: 65 78 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65  ex b-tree in the
a2a0: 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a  .database file..
a2b0: 54 68 65 72 65 20 69 73 20 6f 6e 65 20 65 6e 74  There is one ent
a2c0: 72 79 20 69 6e 20 69 6e 64 65 78 20 62 2d 74 72  ry in index b-tr
a2d0: 65 65 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ee for each row 
a2e0: 69 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  in the correspon
a2f0: 64 69 6e 67 20 74 61 62 6c 65 2e 0a 54 68 65 20  ding table..The 
a300: 6b 65 79 20 74 6f 20 61 6e 20 69 6e 64 65 78 20  key to an index 
a310: 62 2d 74 72 65 65 20 69 73 0a 61 20 72 65 63 6f  b-tree is.a reco
a320: 72 64 20 63 6f 6d 70 6f 73 65 64 20 6f 66 20 74  rd composed of t
a330: 68 65 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  he columns that 
a340: 61 72 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  are being indexe
a350: 64 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68  d followed by th
a360: 65 0a 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65  e.[rowid] of the
a370: 20 74 61 62 6c 65 20 72 6f 77 2e 20 20 42 65 63   table row.  Bec
a380: 61 75 73 65 20 65 76 65 72 79 20 72 6f 77 20 69  ause every row i
a390: 6e 20 61 20 74 61 62 6c 65 20 68 61 73 20 61 20  n a table has a 
a3a0: 75 6e 69 71 75 65 0a 72 6f 77 69 64 20 61 6e 64  unique.rowid and
a3b0: 20 61 6c 6c 20 6b 65 79 73 20 69 6e 20 61 6e 20   all keys in an 
a3c0: 69 6e 64 65 78 20 63 6f 6e 74 61 69 6e 20 74 68  index contain th
a3d0: 65 20 72 6f 77 69 64 2c 20 61 6c 6c 20 6b 65 79  e rowid, all key
a3e0: 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 0a 61 72  s in an index.ar
a3f0: 65 20 75 6e 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c  e unique.</p>..<
a400: 70 3e 54 68 65 72 65 20 69 73 20 61 20 6f 6e 65  p>There is a one
a410: 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67 20  -to-one mapping 
a420: 62 65 74 77 65 65 6e 20 72 6f 77 73 20 69 6e 20  between rows in 
a430: 61 20 74 61 62 6c 65 20 61 6e 64 0a 65 6e 74 72  a table and.entr
a440: 69 65 73 20 69 6e 20 65 61 63 68 20 69 6e 64 65  ies in each inde
a450: 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
a460: 68 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 43 6f  h that table..Co
a470: 72 72 65 73 70 6f 6e 64 69 6e 67 20 72 6f 77 73  rresponding rows
a480: 20 69 6e 74 20 74 68 65 20 69 6e 64 65 78 20 61   int the index a
a490: 6e 64 20 74 61 62 6c 65 20 62 2d 74 72 65 65 73  nd table b-trees
a4a0: 20 73 68 61 72 65 20 74 68 65 20 73 61 6d 65 20   share the same 
a4b0: 72 6f 77 69 64 0a 76 61 6c 75 65 2c 20 61 6e 64  rowid.value, and
a4c0: 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61 6d   contain the sam
a4d0: 65 20 76 61 6c 75 65 20 66 6f 72 20 61 6c 6c 20  e value for all 
a4e0: 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 2e  indexed columns.
a4f0: 3c 2f 70 3e 0a 0a 3c 68 33 3e 32 2e 35 20 53 74  </p>..<h3>2.5 St
a500: 6f 72 61 67 65 20 4f 66 20 54 68 65 20 53 51 4c  orage Of The SQL
a510: 20 44 61 74 61 62 61 73 65 20 53 63 68 65 6d 61   Database Schema
a520: 3c 2f 68 33 3e 0a 0a 3c 70 3e 50 61 67 65 20 31  </h3>..<p>Page 1
a530: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 20 66   of a database f
a540: 69 6c 65 20 69 73 20 74 68 65 20 72 6f 6f 74 20  ile is the root 
a550: 70 61 67 65 20 6f 66 20 61 20 74 61 62 6c 65 20  page of a table 
a560: 62 2d 74 72 65 65 20 74 68 61 74 0a 68 6f 6c 64  b-tree that.hold
a570: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
a580: 65 20 6e 61 6d 65 64 20 22 73 71 6c 69 74 65 5f  e named "sqlite_
a590: 6d 61 73 74 65 72 22 20 28 6f 72 20 22 73 71 6c  master" (or "sql
a5a0: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
a5b0: 20 69 6e 0a 74 68 65 20 63 61 73 65 20 6f 66 20   in.the case of 
a5c0: 61 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 29  a TEMP database)
a5d0: 20 77 68 69 63 68 20 73 74 6f 72 65 73 20 74 68   which stores th
a5e0: 65 20 63 6f 6d 70 6c 65 74 65 0a 64 61 74 61 62  e complete.datab
a5f0: 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 68 65  ase schema.  The
a600: 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
a610: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
a620: 74 61 62 6c 65 20 69 73 20 61 73 0a 69 66 20 69  table is as.if i
a630: 74 20 68 61 64 20 62 65 65 6e 20 63 72 65 61 74  t had been creat
a640: 65 64 20 75 73 69 6e 67 20 74 68 65 20 66 6f 6c  ed using the fol
a650: 6c 6f 77 69 6e 67 20 53 51 4c 3a 3c 2f 70 3e 0a  lowing SQL:</p>.
a660: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
a670: 65 3e 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20  e>.CREATE TABLE 
a680: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 28 0a 20  sqlite_master(. 
a690: 20 74 79 70 65 20 74 65 78 74 2c 0a 20 20 6e 61   type text,.  na
a6a0: 6d 65 20 74 65 78 74 2c 0a 20 20 74 62 6c 5f 6e  me text,.  tbl_n
a6b0: 61 6d 65 20 74 65 78 74 2c 0a 20 20 72 6f 6f 74  ame text,.  root
a6c0: 70 61 67 65 20 69 6e 74 65 67 65 72 2c 0a 20 20  page integer,.  
a6d0: 73 71 6c 20 74 65 78 74 0a 29 3b 0a 3c 2f 70 72  sql text.);.</pr
a6e0: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
a6f0: 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d  .<p>The sqlite_m
a700: 61 73 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74  aster table cont
a710: 61 69 6e 73 20 61 20 72 6f 77 20 66 6f 72 20 65  ains a row for e
a720: 61 63 68 20 74 61 62 6c 65 2c 20 69 6e 64 65 78  ach table, index
a730: 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74 72 69 67  , view,.and trig
a740: 67 65 72 20 69 6e 20 74 68 65 20 64 61 74 61 62  ger in the datab
a750: 61 73 65 20 73 63 68 65 6d 61 2c 20 65 78 63 65  ase schema, exce
a760: 70 74 20 74 68 65 72 65 20 69 73 20 6e 6f 20 65  pt there is no e
a770: 6e 74 72 79 20 66 6f 72 20 74 68 65 0a 73 71 6c  ntry for the.sql
a780: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
a790: 20 69 74 73 65 6c 66 2e 3c 2f 70 3e 0a 0a 3c 70   itself.</p>..<p
a7a0: 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74  >The sqlite_mast
a7b0: 65 72 2e 74 79 70 65 20 63 6f 6c 75 6d 6e 20 77  er.type column w
a7c0: 69 6c 6c 20 62 65 20 6f 6e 65 0a 6f 66 20 74 68  ill be one.of th
a7d0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74  e following text
a7e0: 20 73 74 72 69 6e 67 73 3a 20 20 27 74 61 62 6c   strings:  'tabl
a7f0: 65 27 2c 20 27 69 6e 64 65 78 27 2c 20 27 76 69  e', 'index', 'vi
a800: 65 77 27 2c 20 6f 72 20 27 74 72 69 67 67 65 72  ew', or 'trigger
a810: 27 0a 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  '.according to t
a820: 68 65 20 74 79 70 65 20 6f 66 20 6f 62 6a 65 63  he type of objec
a830: 74 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 20  t defined.  The 
a840: 27 74 61 62 6c 65 27 20 73 74 72 69 6e 67 20 69  'table' string i
a850: 73 20 75 73 65 64 0a 66 6f 72 20 62 6f 74 68 20  s used.for both 
a860: 6f 72 64 69 6e 61 72 79 20 61 6e 64 20 5b 76 69  ordinary and [vi
a870: 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e 3c 2f  rtual tables].</
a880: 70 3e 0a 0a 3c 2f 70 3e 54 68 65 20 73 71 6c 69  p>..</p>The sqli
a890: 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65 20 63  te_master.name c
a8a0: 6f 6c 75 6d 6e 20 77 69 6c 6c 20 68 6f 6c 64 20  olumn will hold 
a8b0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
a8c0: 6f 62 6a 65 63 74 2e 0a 46 6f 72 20 69 6e 64 69  object..For indi
a8d0: 63 65 73 20 74 68 61 74 20 61 72 65 20 61 75 74  ces that are aut
a8e0: 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
a8f0: 65 64 20 62 79 20 55 4e 49 51 55 45 20 63 6f 6e  ed by UNIQUE con
a900: 73 74 72 61 69 6e 74 73 2c 20 74 68 65 0a 6e 61  straints, the.na
a910: 6d 65 20 69 73 20 22 73 71 6c 69 74 65 5f 61 75  me is "sqlite_au
a920: 74 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22  toindex_TABLE_N"
a930: 20 77 68 65 72 65 20 54 41 42 4c 45 20 69 73 20   where TABLE is 
a940: 72 65 70 6c 61 63 65 64 20 62 79 20 74 68 65 20  replaced by the 
a950: 6e 61 6d 65 0a 6f 66 20 74 68 65 20 74 61 62 6c  name.of the tabl
a960: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
a970: 74 68 65 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  the UNIQUE const
a980: 72 61 69 6e 74 20 61 6e 64 20 4e 20 69 73 20 61  raint and N is a
a990: 6e 20 69 6e 74 65 67 65 72 20 62 65 67 69 6e 6e  n integer beginn
a9a0: 69 6e 67 0a 77 69 74 68 20 31 20 61 6e 64 20 69  ing.with 1 and i
a9b0: 6e 63 72 65 61 73 69 6e 67 20 62 79 20 6f 6e 65  ncreasing by one
a9c0: 20 77 69 74 68 20 65 61 63 68 20 55 4e 49 51 55   with each UNIQU
a9d0: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 73 65 65  E constraint see
a9e0: 6e 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 73  n.</p>..<p>The s
a9f0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 74 62 6c  qlite_master.tbl
aa00: 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c  _name column hol
aa10: 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  ds the name of a
aa20: 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 0a 74   table or view.t
aa30: 68 61 74 20 74 68 65 20 6f 62 6a 65 63 74 20 69  hat the object i
aa40: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
aa50: 68 2e 20 20 46 6f 72 20 61 20 74 61 62 6c 65 20  h.  For a table 
aa60: 6f 72 20 76 69 65 77 2c 20 74 68 65 0a 74 62 6c  or view, the.tbl
aa70: 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e 20 69 73 20  _name column is 
aa80: 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6e 61  a copy of the na
aa90: 6d 65 20 63 6f 6c 75 6d 6e 2e 20 20 46 6f 72 20  me column.  For 
aaa0: 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 20 74 62  an index, the tb
aab0: 6c 5f 6e 61 6d 65 0a 69 73 20 74 68 65 20 6e 61  l_name.is the na
aac0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
aad0: 74 68 61 74 20 69 73 20 69 6e 64 65 78 65 64 2e  that is indexed.
aae0: 20 20 46 6f 72 20 61 20 74 72 69 67 67 65 72 2c    For a trigger,
aaf0: 20 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 63 6f   the tbl_name.co
ab00: 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74 68 65 20  lumn stores the 
ab10: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
ab20: 65 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 63  e or view that c
ab30: 61 75 73 65 73 20 74 68 65 20 74 72 69 67 67 65  auses the trigge
ab40: 72 20 0a 74 6f 20 66 69 72 65 2e 3c 2f 70 3e 0a  r .to fire.</p>.
ab50: 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d  .<p>The sqlite_m
ab60: 61 73 74 65 72 2e 72 6f 6f 74 70 61 67 65 20 63  aster.rootpage c
ab70: 6f 6c 75 6d 6e 20 73 74 6f 72 65 73 20 74 68 65  olumn stores the
ab80: 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
ab90: 74 68 65 20 72 6f 6f 74 0a 62 2d 74 72 65 65 20  the root.b-tree 
aba0: 70 61 67 65 20 66 6f 72 20 74 61 62 6c 65 73 20  page for tables 
abb0: 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 46 6f  and indices.  Fo
abc0: 72 20 72 6f 77 73 20 74 68 61 74 20 64 65 66 69  r rows that defi
abd0: 6e 65 20 76 69 65 77 73 2c 20 74 72 69 67 67 65  ne views, trigge
abe0: 72 73 2c 0a 61 6e 64 20 76 69 72 74 75 61 6c 20  rs,.and virtual 
abf0: 74 61 62 6c 65 73 2c 20 74 68 65 20 72 6f 6f 74  tables, the root
ac00: 70 61 67 65 20 63 6f 6c 75 6d 6e 20 69 73 20 30  page column is 0
ac10: 20 6f 72 20 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c   or NULL.</p>..<
ac20: 70 3e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  p>The sqlite_mas
ac30: 74 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 73  ter.sql column s
ac40: 74 6f 72 65 73 20 53 51 4c 20 74 65 78 74 20 74  tores SQL text t
ac50: 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
ac60: 65 0a 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20  e.object.  This 
ac70: 53 51 4c 20 74 65 78 74 20 69 73 20 61 20 5b 43  SQL text is a [C
ac80: 52 45 41 54 45 20 54 41 42 4c 45 5d 2c 20 5b 43  REATE TABLE], [C
ac90: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
aca0: 42 4c 45 5d 2c 0a 5b 43 52 45 41 54 45 20 49 4e  BLE],.[CREATE IN
acb0: 44 45 58 5d 2c 0a 5b 43 52 45 41 54 45 20 56 49  DEX],.[CREATE VI
acc0: 45 57 5d 2c 20 6f 72 20 5b 43 52 45 41 54 45 20  EW], or [CREATE 
acd0: 54 52 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65  TRIGGER] stateme
ace0: 6e 74 20 74 68 61 74 20 69 66 20 65 76 61 6c 75  nt that if evalu
acf0: 61 74 65 64 20 61 67 61 69 6e 73 74 0a 74 68 65  ated against.the
ad00: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
ad10: 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6d 61  hen it is the ma
ad20: 69 6e 20 64 61 74 61 62 61 73 65 20 6f 66 20 61  in database of a
ad30: 20 5b 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65   [database conne
ad40: 63 74 69 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65 63  ction].would rec
ad50: 72 65 61 74 65 64 20 74 68 65 20 6f 62 6a 65 63  reated the objec
ad60: 74 2e 20 20 54 68 65 20 74 65 78 74 20 69 73 20  t.  The text is 
ad70: 75 73 75 61 6c 6c 79 20 61 20 63 6f 70 79 20 6f  usually a copy o
ad80: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 73  f the original.s
ad90: 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 74 6f  tatement used to
ada0: 20 63 72 65 61 74 65 20 74 68 65 20 6f 62 6a 65   create the obje
adb0: 63 74 20 62 75 74 20 77 69 74 68 20 6e 6f 72 6d  ct but with norm
adc0: 61 6c 69 7a 61 74 69 6f 6e 73 20 61 70 70 6c 69  alizations appli
add0: 65 64 20 73 6f 0a 74 68 61 74 20 74 68 65 20 74  ed so.that the t
ade0: 65 78 74 20 63 6f 6e 66 6f 72 6d 73 20 74 6f 20  ext conforms to 
adf0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 75  the following ru
ae00: 6c 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 54  les:..<ul>.<li>T
ae10: 68 65 20 43 52 45 41 54 45 2c 20 54 41 42 4c 45  he CREATE, TABLE
ae20: 2c 20 56 49 45 57 2c 20 54 52 49 47 47 45 52 2c  , VIEW, TRIGGER,
ae30: 20 61 6e 64 20 49 4e 44 45 58 20 6b 65 79 77 6f   and INDEX keywo
ae40: 72 64 73 20 61 74 20 74 68 65 20 62 65 67 69 6e  rds at the begin
ae50: 6e 69 6e 67 0a 6f 66 20 74 68 65 20 73 74 61 74  ning.of the stat
ae60: 65 6d 65 6e 74 20 61 72 65 20 63 6f 6e 76 65 72  ement are conver
ae70: 74 65 64 20 74 6f 20 61 6c 6c 20 75 70 70 65 72  ted to all upper
ae80: 20 63 61 73 65 20 6c 65 74 74 65 72 73 2e 0a 3c   case letters..<
ae90: 6c 69 3e 54 68 65 20 54 45 4d 50 20 6f 72 20 54  li>The TEMP or T
aea0: 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72 64  EMPORARY keyword
aeb0: 20 69 73 20 72 65 6d 6f 76 65 64 20 69 66 20 69   is removed if i
aec0: 74 20 6f 63 63 75 72 73 20 61 66 74 65 72 20 74  t occurs after t
aed0: 68 65 20 0a 69 6e 69 74 69 61 6c 20 43 52 45 41  he .initial CREA
aee0: 54 45 20 6b 65 79 77 6f 72 64 2e 0a 3c 6c 69 3e  TE keyword..<li>
aef0: 41 6e 79 20 64 61 74 61 62 61 73 65 20 6e 61 6d  Any database nam
af00: 65 20 71 75 61 6c 69 66 69 65 72 20 74 68 61 74  e qualifier that
af10: 20 6f 63 63 75 72 73 20 70 72 69 6f 72 20 74 6f   occurs prior to
af20: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
af30: 0a 6f 62 6a 65 63 74 20 62 65 69 6e 67 20 63 72  .object being cr
af40: 65 61 74 65 64 20 69 73 20 72 65 6d 6f 76 65 64  eated is removed
af50: 2e 0a 3c 6c 69 3e 4c 65 61 64 69 6e 67 20 73 70  ..<li>Leading sp
af60: 61 63 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64  aces are removed
af70: 2e 0a 3c 6c 69 3e 41 6c 6c 20 73 70 61 63 65 73  ..<li>All spaces
af80: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20 66   following the f
af90: 69 72 73 74 20 74 77 6f 20 6b 65 79 77 6f 72 64  irst two keyword
afa0: 73 20 61 72 65 20 63 6f 6e 76 65 72 74 65 64 20  s are converted 
afb0: 69 6e 74 6f 20 61 20 73 69 6e 67 6c 65 0a 73 70  into a single.sp
afc0: 61 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 54  ace..</ul>..<p>T
afd0: 68 65 20 74 65 78 74 20 69 6e 20 74 68 65 20 73  he text in the s
afe0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c  qlite_master.sql
aff0: 20 63 6f 6c 75 6d 6e 20 69 73 20 61 20 63 6f 70   column is a cop
b000: 79 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61  y of the origina
b010: 6c 0a 43 52 45 41 54 45 20 73 74 61 74 65 6d 65  l.CREATE stateme
b020: 6e 74 20 74 65 78 74 20 74 68 61 74 20 63 72 65  nt text that cre
b030: 61 74 65 64 20 74 68 65 20 6f 62 6a 65 63 74 2c  ated the object,
b040: 20 65 78 63 65 70 74 20 6e 6f 72 6d 61 6c 69 7a   except normaliz
b050: 65 64 20 61 73 0a 64 65 73 63 72 69 62 65 64 20  ed as.described 
b060: 61 62 6f 76 65 20 61 6e 64 20 61 73 20 6d 6f 64  above and as mod
b070: 69 66 69 65 64 20 62 79 20 73 75 62 73 65 71 75  ified by subsequ
b080: 65 6e 74 20 5b 41 4c 54 45 52 20 54 41 42 4c 45  ent [ALTER TABLE
b090: 5d 20 73 74 61 74 65 6d 65 6e 74 73 2e 3c 2f 70  ] statements.</p
b0a0: 3e 0a 0a 3c 70 3e 46 6f 72 20 69 6e 64 69 63 65  >..<p>For indice
b0b0: 73 20 74 68 61 74 20 61 72 65 20 61 75 74 6f 6d  s that are autom
b0c0: 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
b0d0: 20 62 79 20 55 4e 49 51 55 45 20 63 6f 6e 73 74   by UNIQUE const
b0e0: 72 61 69 6e 74 73 2c 0a 74 68 65 20 73 71 6c 69  raints,.the sqli
b0f0: 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 66 69  te_master.sql fi
b100: 65 6c 64 20 69 73 20 4e 55 4c 4c 2e 3c 2f 70 3e  eld is NULL.</p>
b110: 0a 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  ...<tcl>hd_fragm
b120: 65 6e 74 20 72 6f 6c 6c 62 61 63 6b 6a 6f 75 72  ent rollbackjour
b130: 6e 61 6c 20 7b 72 6f 6c 6c 62 61 63 6b 20 6a 6f  nal {rollback jo
b140: 75 72 6e 61 6c 20 66 6f 72 6d 61 74 7d 3c 2f 74  urnal format}</t
b150: 63 6c 3e 0a 3c 68 32 3e 33 2e 30 20 54 68 65 20  cl>.<h2>3.0 The 
b160: 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c  Rollback Journal
b170: 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 72 6f  </h2>..<p>The ro
b180: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69  llback journal i
b190: 73 20 61 20 66 69 6c 65 20 61 73 73 6f 63 69 61  s a file associa
b1a0: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 53 51  ted with each SQ
b1b0: 4c 69 74 65 20 64 61 74 61 62 61 73 65 0a 66 61  Lite database.fa
b1c0: 69 6c 20 74 68 61 74 20 68 6f 6c 64 20 69 6e 66  il that hold inf
b1d0: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 74 6f  ormation used to
b1e0: 20 72 65 73 74 6f 72 65 20 74 68 65 20 64 61 74   restore the dat
b1f0: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 69 74  abase file to it
b200: 73 20 69 6e 69 74 69 61 6c 0a 73 74 61 74 65 20  s initial.state 
b210: 64 75 72 69 6e 67 20 74 68 65 20 63 6f 75 72 73  during the cours
b220: 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69  e of a transacti
b230: 6f 6e 2e 0a 54 68 65 20 72 6f 6c 6c 62 61 63 6b  on..The rollback
b240: 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 69 73   journal file is
b250: 20 61 6c 77 61 79 73 20 6c 6f 63 61 74 65 64 20   always located 
b260: 69 6e 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  in the directory
b270: 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65   as the database
b280: 0a 66 69 6c 65 20 61 6e 64 20 68 61 73 20 74 68  .file and has th
b290: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 74  e same name as t
b2a0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
b2b0: 20 62 75 74 20 77 69 74 68 20 74 68 65 20 73 74   but with the st
b2c0: 72 69 6e 67 0a 22 3c 74 74 3e 2d 6a 6f 75 72 6e  ring."<tt>-journ
b2d0: 61 6c 3c 2f 74 74 3e 22 20 61 70 70 65 6e 64 65  al</tt>" appende
b2e0: 64 2e 20 20 54 68 65 72 65 20 63 61 6e 20 6f 6e  d.  There can on
b2f0: 6c 79 20 62 65 20 61 20 73 69 6e 67 6c 65 20 72  ly be a single r
b300: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a  ollback journal.
b310: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
b320: 61 20 67 69 76 65 20 64 61 74 61 62 61 73 65 20  a give database 
b330: 61 6e 64 20 68 65 6e 63 65 20 74 68 65 72 65 20  and hence there 
b340: 63 61 6e 20 6f 6e 6c 79 20 62 65 20 6f 6e 65 20  can only be one 
b350: 77 72 69 74 65 0a 74 72 61 6e 73 61 63 74 69 6f  write.transactio
b360: 6e 20 6f 70 65 6e 20 61 67 61 69 6e 73 74 20 61  n open against a
b370: 20 73 69 6e 67 6c 65 20 64 61 74 61 62 61 73 65   single database
b380: 20 61 74 20 6f 6e 65 20 74 69 6d 65 2e 3c 2f 70   at one time.</p
b390: 3e 0a 0a 3c 70 3e 49 66 20 61 20 74 72 61 6e 73  >..<p>If a trans
b3a0: 61 63 74 69 6f 6e 20 69 73 20 61 62 6f 72 74 65  action is aborte
b3b0: 64 20 64 75 65 20 74 6f 20 61 6e 20 61 70 70 6c  d due to an appl
b3c0: 69 63 61 74 69 6f 6e 20 63 72 61 73 68 2c 20 61  ication crash, a
b3d0: 6e 20 6f 70 65 72 61 74 69 6e 67 0a 73 79 73 74  n operating.syst
b3e0: 65 6d 20 63 72 61 73 68 2c 20 6f 72 20 61 20 68  em crash, or a h
b3f0: 61 72 64 77 61 72 65 20 70 6f 77 65 72 20 66 61  ardware power fa
b400: 69 6c 75 72 65 20 6f 72 20 63 72 61 73 68 2c 20  ilure or crash, 
b410: 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
b420: 65 20 6d 61 79 0a 62 65 20 6c 65 66 74 20 69 6e  e may.be left in
b430: 20 61 6e 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74   an inconsistent
b440: 20 73 74 61 74 65 2e 20 20 54 68 65 20 6e 65 78   state.  The nex
b450: 74 20 74 69 6d 65 20 53 51 4c 69 74 65 20 61 74  t time SQLite at
b460: 74 65 6d 70 74 73 20 74 6f 20 6f 70 65 6e 0a 74  tempts to open.t
b470: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
b480: 2c 20 74 68 65 20 70 72 65 73 65 6e 63 65 20 6f  , the presence o
b490: 66 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 6a  f the rollback j
b4a0: 6f 75 72 6e 61 6c 20 66 69 6c 65 20 77 69 6c 6c  ournal file will
b4b0: 20 62 65 20 0a 64 65 74 65 63 74 65 64 20 61 6e   be .detected an
b4c0: 64 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 77 69  d the journal wi
b4d0: 6c 6c 20 62 65 20 61 75 74 6f 6d 61 74 69 63 61  ll be automatica
b4e0: 6c 6c 79 20 70 6c 61 79 65 64 20 62 61 63 6b 20  lly played back 
b4f0: 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65 0a 64  to restore the.d
b500: 61 74 61 62 61 73 65 20 74 6f 20 69 74 73 20 73  atabase to its s
b510: 74 61 74 65 20 61 74 20 74 68 65 20 73 74 61 72  tate at the star
b520: 74 20 6f 66 20 74 68 65 20 69 6e 63 6f 6d 70 6c  t of the incompl
b530: 65 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ete transaction.
b540: 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 72 6f 6c 6c 62  </p>..<p>A rollb
b550: 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 69 73 20 6f  ack journal is o
b560: 6e 6c 79 20 63 6f 6e 73 69 64 65 72 65 64 20 74  nly considered t
b570: 6f 20 62 65 20 76 61 6c 69 64 20 69 66 20 69 74  o be valid if it
b580: 20 65 78 69 73 74 73 20 61 6e 64 0a 63 6f 6e 74   exists and.cont
b590: 61 69 6e 73 20 61 20 76 61 6c 69 64 20 68 65 61  ains a valid hea
b5a0: 64 65 72 2e 20 20 48 65 6e 63 65 20 61 20 74 72  der.  Hence a tr
b5b0: 61 6e 73 61 63 74 69 6f 6e 20 63 61 6e 20 62 65  ansaction can be
b5c0: 20 63 6f 6d 6d 69 74 74 65 64 20 69 6e 20 6f 6e   committed in on
b5d0: 65 0a 6f 66 20 74 68 72 65 65 20 77 61 79 73 3a  e.of three ways:
b5e0: 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68 65 20 72 6f  .<ol>.<li>The ro
b5f0: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
b600: 69 6c 65 20 63 61 6e 20 62 65 20 64 65 6c 65 74  ile can be delet
b610: 65 64 2c 0a 3c 6c 69 3e 54 68 65 20 72 6f 6c 6c  ed,.<li>The roll
b620: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  back journal fil
b630: 65 20 63 61 6e 20 62 65 20 74 72 75 6e 63 61 74  e can be truncat
b640: 65 64 20 74 6f 20 7a 65 72 6f 20 6c 65 6e 67 74  ed to zero lengt
b650: 68 2c 20 6f 72 0a 3c 6c 69 3e 54 68 65 20 68 65  h, or.<li>The he
b660: 61 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6c 6c  ader of the roll
b670: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61 6e  back journal can
b680: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
b690: 77 69 74 68 0a 69 6e 76 61 6c 69 64 20 68 65 61  with.invalid hea
b6a0: 64 65 72 20 74 65 78 74 20 28 66 6f 72 20 65 78  der text (for ex
b6b0: 61 6d 70 6c 65 2c 20 61 6c 6c 20 7a 65 72 6f 73  ample, all zeros
b6c0: 29 2e 0a 3c 2f 6f 6c 3e 0a 54 68 65 73 65 20 74  )..</ol>.These t
b6d0: 68 72 65 65 20 77 61 79 73 20 6f 66 20 63 6f 6d  hree ways of com
b6e0: 6d 69 74 74 69 6e 67 20 61 20 74 72 61 6e 73 61  mitting a transa
b6f0: 63 74 69 6f 6e 20 63 6f 72 72 65 73 70 6f 6e 64  ction correspond
b700: 20 74 6f 20 74 68 65 20 44 45 4c 45 54 45 2c 0a   to the DELETE,.
b710: 54 52 55 4e 43 41 54 45 2c 20 61 6e 64 20 50 45  TRUNCATE, and PE
b720: 52 53 49 53 54 20 73 65 74 74 69 6e 67 73 2c 20  RSIST settings, 
b730: 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 6f 66  respectively, of
b740: 20 74 68 65 20 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f   the [journal_mo
b750: 64 65 20 70 72 61 67 6d 61 5d 2e 0a 3c 2f 70 3e  de pragma]..</p>
b760: 0a 0a 0a 3c 70 3e 41 20 76 61 6c 69 64 20 72 6f  ...<p>A valid ro
b770: 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 62  llback journal b
b780: 65 67 69 6e 73 20 77 69 74 68 20 61 20 68 65 61  egins with a hea
b790: 64 65 72 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  der in the follo
b7a0: 77 69 6e 67 20 66 6f 72 6d 61 74 3a 3c 2f 70 3e  wing format:</p>
b7b0: 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f  ..<center>.<i>Ro
b7c0: 6c 6c 62 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 48  llback Journal H
b7d0: 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e  eader Format</i>
b7e0: 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  <br>.<table widt
b7f0: 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31  h="80%" border=1
b800: 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74  >.<tr><th>Offset
b810: 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63  <th>Size<th>Desc
b820: 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20  ription.<tr><td 
b830: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b840: 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74  =center>0.    <t
b850: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b860: 67 6e 3d 63 65 6e 74 65 72 3e 38 0a 20 20 20 20  gn=center>8.    
b870: 3c 74 64 3e 48 65 61 64 65 72 20 73 74 72 69 6e  <td>Header strin
b880: 67 3a 20 20 30 78 64 39 2c 20 30 78 64 35 2c 20  g:  0xd9, 0xd5, 
b890: 30 78 30 35 2c 20 30 78 66 39 2c 20 30 78 32 30  0x05, 0xf9, 0x20
b8a0: 2c 20 30 78 61 31 2c 20 30 78 36 33 2c 20 30 78  , 0xa1, 0x63, 0x
b8b0: 64 37 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  d7.<tr><td valig
b8c0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
b8d0: 65 72 3e 38 0a 20 20 20 20 3c 74 64 20 76 61 6c  er>8.    <td val
b8e0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b8f0: 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54  nter>4.    <td>T
b900: 68 65 20 22 50 61 67 65 20 43 6f 75 6e 74 22 20  he "Page Count" 
b910: 2d 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  - The number of 
b920: 70 61 67 65 73 20 69 6e 20 74 68 65 20 6e 65 78  pages in the nex
b930: 74 20 73 65 67 6d 65 6e 74 20 6f 66 20 74 68 65  t segment of the
b940: 20 0a 20 20 20 20 20 20 20 20 6a 6f 75 72 6e 61   .        journa
b950: 6c 2c 20 6f 72 20 2d 31 20 74 6f 0a 20 20 20 20  l, or -1 to.    
b960: 20 20 20 20 6d 65 61 6e 20 61 6c 6c 20 63 6f 6e      mean all con
b970: 74 65 6e 74 20 74 6f 20 74 68 65 20 65 6e 64 20  tent to the end 
b980: 6f 66 20 74 68 65 20 66 69 6c 65 0a 3c 74 72 3e  of the file.<tr>
b990: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b9a0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 32 0a 20  lign=center>12. 
b9b0: 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
b9c0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
b9d0: 0a 20 20 20 20 3c 74 64 3e 41 20 72 61 6e 64 6f  .    <td>A rando
b9e0: 6d 20 6e 6f 6e 63 65 20 66 6f 72 20 74 68 65 20  m nonce for the 
b9f0: 63 68 65 63 6b 73 75 6d 0a 3c 74 72 3e 3c 74 64  checksum.<tr><td
ba00: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
ba10: 6e 3d 63 65 6e 74 65 72 3e 31 36 0a 20 20 20 20  n=center>16.    
ba20: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
ba30: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
ba40: 20 20 3c 74 64 3e 49 6e 69 74 69 61 6c 20 73 69    <td>Initial si
ba50: 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ze of the databa
ba60: 73 65 20 69 6e 20 70 61 67 65 73 0a 3c 74 72 3e  se in pages.<tr>
ba70: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
ba80: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32 30 0a 20  lign=center>20. 
ba90: 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
baa0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
bab0: 0a 20 20 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66  .    <td>Size of
bac0: 20 61 20 64 69 73 6b 20 73 65 63 74 6f 72 20 61   a disk sector a
bad0: 73 73 75 6d 65 64 20 62 79 20 74 68 65 20 70 72  ssumed by the pr
bae0: 6f 63 65 73 73 20 74 68 61 74 20 77 72 6f 74 65  ocess that wrote
baf0: 20 74 68 69 73 0a 20 20 20 20 20 20 20 20 6a 6f   this.        jo
bb00: 75 72 6e 61 6c 2e 0a 3c 74 72 3e 3c 74 64 20 76  urnal..<tr><td v
bb10: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
bb20: 63 65 6e 74 65 72 3e 32 34 0a 20 20 20 20 3c 74  center>24.    <t
bb30: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
bb40: 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
bb50: 3c 74 64 3e 53 69 7a 65 20 6f 66 20 70 61 67 65  <td>Size of page
bb60: 73 20 69 6e 20 74 68 69 73 20 6a 6f 75 72 6e 61  s in this journa
bb70: 6c 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65  l..</table>.</ce
bb80: 6e 74 65 72 3e 0a 0a 3c 70 3e 41 20 72 6f 6c 6c  nter>..<p>A roll
bb90: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 68 65 61  back journal hea
bba0: 64 65 72 20 69 73 20 70 61 64 64 65 64 20 77 69  der is padded wi
bbb0: 74 68 20 7a 65 72 6f 73 20 6f 75 74 20 74 6f 20  th zeros out to 
bbc0: 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20 0a 73  the size of a .s
bbd0: 69 6e 67 6c 65 20 73 65 63 74 6f 72 20 28 61 73  ingle sector (as
bbe0: 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 65 20   defined by the 
bbf0: 73 65 63 74 6f 72 20 73 69 7a 65 20 69 6e 74 65  sector size inte
bc00: 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 32 30  ger at offset 20
bc10: 29 2e 0a 54 68 65 20 68 65 61 64 65 72 20 69 73  )..The header is
bc20: 20 69 6e 20 61 20 73 65 63 74 6f 72 20 62 79 20   in a sector by 
bc30: 69 74 73 65 6c 66 20 73 6f 20 74 68 61 74 20 69  itself so that i
bc40: 66 20 61 20 70 6f 77 65 72 20 6c 6f 73 73 20 6f  f a power loss o
bc50: 63 63 75 72 73 20 77 68 69 6c 65 0a 77 72 69 74  ccurs while.writ
bc60: 69 6e 67 20 74 68 65 20 73 65 63 74 6f 72 2c 20  ing the sector, 
bc70: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
bc80: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 68 65 61   follows the hea
bc90: 64 65 72 20 77 69 6c 6c 20 62 65 0a 28 68 6f 70  der will be.(hop
bca0: 65 66 75 6c 6c 79 29 20 75 6e 64 61 6d 61 67 65  efully) undamage
bcb0: 64 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 66 74 65 72  d.</p>..<p>After
bcc0: 20 74 68 65 20 68 65 61 64 65 72 20 61 6e 64 20   the header and 
bcd0: 7a 65 72 6f 20 70 61 64 64 69 6e 67 20 61 72 65  zero padding are
bce0: 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61   zero or more pa
bcf0: 67 65 20 72 65 63 6f 72 64 73 2e 20 20 45 61 63  ge records.  Eac
bd00: 68 0a 70 61 67 65 20 72 65 63 6f 72 64 20 73 74  h.page record st
bd10: 6f 72 65 73 20 61 20 63 6f 70 79 20 6f 66 20 74  ores a copy of t
bd20: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
bd30: 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61  page from the da
bd40: 74 61 62 61 73 65 20 66 69 6c 65 0a 62 65 66 6f  tabase file.befo
bd50: 72 65 20 69 74 20 77 61 73 20 63 68 61 6e 67 65  re it was change
bd60: 64 2e 20 20 54 68 65 20 73 61 6d 65 20 70 61 67  d.  The same pag
bd70: 65 20 6d 61 79 20 6e 6f 74 20 61 70 70 65 61 72  e may not appear
bd80: 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 0a   more than once.
bd90: 77 69 74 68 69 6e 20 61 20 73 69 6e 67 6c 65 20  within a single 
bda0: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
bdb0: 2e 0a 54 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  ..To rollback an
bdc0: 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61 6e   incomplete tran
bdd0: 73 61 63 74 69 6f 6e 2c 20 61 20 70 72 6f 63 65  saction, a proce
bde0: 73 73 0a 68 61 73 20 6d 65 72 65 6c 79 20 74 6f  ss.has merely to
bdf0: 20 72 65 61 64 20 74 68 65 20 72 6f 6c 6c 62 61   read the rollba
be00: 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 72 6f 6d 20  ck journal from 
be10: 62 65 67 69 6e 6e 69 6e 67 20 74 6f 20 65 6e 64  beginning to end
be20: 20 61 6e 64 0a 77 72 69 74 65 20 70 61 67 65 73   and.write pages
be30: 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 6a 6f   found in the jo
be40: 75 72 6e 61 6c 20 62 61 63 6b 20 69 6e 74 6f 20  urnal back into 
be50: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
be60: 65 20 61 74 20 74 68 65 0a 61 70 70 72 6f 70 72  e at the.appropr
be70: 69 61 74 65 20 6c 6f 63 61 74 69 6f 6e 2e 3c 2f  iate location.</
be80: 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 64  p>..<p>Let the d
be90: 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a  atabase page siz
bea0: 65 20 28 74 68 65 20 76 61 6c 75 65 20 6f 66 20  e (the value of 
beb0: 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f  the integer at o
bec0: 66 66 73 65 74 20 32 34 20 0a 69 6e 20 74 68 65  ffset 24 .in the
bed0: 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 29   journal header)
bee0: 20 62 65 20 4e 2e 0a 54 68 65 6e 20 74 68 65 20   be N..Then the 
bef0: 66 6f 72 6d 61 74 20 6f 66 20 61 20 70 61 67 65  format of a page
bf00: 20 72 65 63 6f 72 64 20 69 73 20 61 73 20 66 6f   record is as fo
bf10: 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 63 65 6e  llows:</p>..<cen
bf20: 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63 6b  ter>.<i>Rollback
bf30: 20 4a 6f 75 72 6e 61 6c 20 50 61 67 65 20 52 65   Journal Page Re
bf40: 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c  cord Format</i><
bf50: 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68  br>.<table width
bf60: 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e  ="80%" border=1>
bf70: 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c  .<tr><th>Offset<
bf80: 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72  th>Size<th>Descr
bf90: 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76  iption.<tr><td v
bfa0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
bfb0: 63 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74 64  center>0.    <td
bfc0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
bfd0: 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
bfe0: 74 64 3e 54 68 65 20 70 61 67 65 20 6e 75 6d 62  td>The page numb
bff0: 65 72 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  er in the databa
c000: 73 65 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64 20  se file.<tr><td 
c010: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
c020: 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74  =center>4.    <t
c030: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
c040: 67 6e 3d 63 65 6e 74 65 72 3e 4e 0a 20 20 20 20  gn=center>N.    
c050: 3c 74 64 3e 4f 72 69 67 69 6e 61 6c 20 63 6f 6e  <td>Original con
c060: 74 65 6e 74 20 6f 66 20 74 68 65 20 70 61 67 65  tent of the page
c070: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 73 74   prior to the st
c080: 61 72 74 20 6f 66 20 74 68 65 20 74 72 61 6e 73  art of the trans
c090: 61 63 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76  action.<tr><td v
c0a0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
c0b0: 63 65 6e 74 65 72 3e 4e 2b 34 0a 20 20 20 20 3c  center>N+4.    <
c0c0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
c0d0: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
c0e0: 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 0a 3c 2f   <td>Checksum.</
c0f0: 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72 3e  table>.</center>
c100: 0a 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63 6b 73  ...<p>The checks
c110: 75 6d 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65  um is an unsigne
c120: 64 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72  d 32-bit integer
c130: 20 63 6f 6d 70 75 74 65 64 20 61 73 20 66 6f 6c   computed as fol
c140: 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  lows:</p>..<ol>.
c150: 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65 20 74  <li>Initialize t
c160: 68 65 20 63 68 65 63 6b 73 75 6d 20 74 6f 20 74  he checksum to t
c170: 68 65 20 63 68 65 63 6b 73 75 6d 20 6e 6f 6e 63  he checksum nonc
c180: 65 20 76 61 6c 75 65 20 66 6f 75 6e 64 20 69 6e  e value found in
c190: 20 74 68 65 0a 6a 6f 75 72 6e 61 6c 20 68 65 61   the.journal hea
c1a0: 64 65 72 20 61 74 20 6f 66 66 73 65 74 20 31 32  der at offset 12
c1b0: 2e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a 65  ..<li>Initialize
c1c0: 20 69 6e 64 65 78 20 58 20 74 6f 20 62 65 20 4e   index X to be N
c1d0: 2d 32 30 30 20 28 77 68 65 72 65 20 4e 20 69 73  -200 (where N is
c1e0: 20 74 68 65 20 73 69 7a 65 20 6f 66 20 61 20 64   the size of a d
c1f0: 61 74 61 62 61 73 65 20 70 61 67 65 0a 69 6e 20  atabase page.in 
c200: 62 79 74 65 73 2e 0a 3c 6c 69 3e 49 6e 74 65 72  bytes..<li>Inter
c210: 70 72 65 74 20 74 68 65 20 66 6f 75 72 20 62 79  pret the four by
c220: 74 65 73 20 61 74 20 6f 66 66 73 65 74 20 58 20  tes at offset X 
c230: 69 6e 74 6f 20 74 68 65 20 70 61 67 65 20 61 73  into the page as
c240: 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e   a 4-byte big-en
c250: 64 69 61 6e 0a 75 6e 73 69 67 6e 65 64 20 69 6e  dian.unsigned in
c260: 74 65 67 65 72 2e 20 20 41 64 64 20 74 68 65 20  teger.  Add the 
c270: 76 61 6c 75 65 20 6f 66 20 74 68 61 74 20 69 6e  value of that in
c280: 74 65 67 65 72 20 74 6f 20 74 68 65 20 63 68 65  teger to the che
c290: 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53 75 62 74 72  cksum..<li>Subtr
c2a0: 61 63 65 20 32 30 30 20 66 72 6f 6d 20 58 2e 0a  ace 200 from X..
c2b0: 3c 6c 69 3e 49 66 20 58 20 69 73 20 67 72 65 61  <li>If X is grea
c2c0: 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
c2d0: 6c 20 74 6f 20 7a 65 72 6f 2c 20 67 6f 20 62 61  l to zero, go ba
c2e0: 63 6b 20 74 6f 20 73 74 65 70 20 33 2e 0a 3c 2f  ck to step 3..</
c2f0: 6f 6c 3e 0a 0a 3c 70 3e 54 68 65 20 63 68 65 63  ol>..<p>The chec
c300: 6b 73 75 6d 20 76 61 6c 75 65 20 69 73 20 75 73  ksum value is us
c310: 65 64 20 74 6f 20 67 75 61 72 64 20 61 67 61 69  ed to guard agai
c320: 6e 73 74 20 69 6e 63 6f 6d 70 6c 65 74 65 20 77  nst incomplete w
c330: 72 69 74 65 73 20 6f 66 0a 61 20 6a 6f 75 72 6e  rites of.a journ
c340: 61 6c 20 70 61 67 65 20 72 65 63 6f 72 64 20 66  al page record f
c350: 6f 6c 6c 6f 77 69 6e 67 20 61 20 70 6f 77 65 72  ollowing a power
c360: 20 66 61 69 6c 75 72 65 2e 20 20 41 20 64 69 66   failure.  A dif
c370: 66 65 72 65 6e 74 20 72 61 6e 64 6f 6d 20 6e 6f  ferent random no
c380: 6e 63 65 0a 69 73 20 75 73 65 64 20 65 61 63 68  nce.is used each
c390: 20 74 69 6d 65 20 61 20 74 72 61 73 61 63 74 69   time a trasacti
c3a0: 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 69 6e  on is started in
c3b0: 20 6f 72 64 65 72 20 74 6f 20 6d 69 6e 69 6d 69   order to minimi
c3c0: 7a 65 20 74 68 65 20 72 69 73 6b 0a 74 68 61 74  ze the risk.that
c3d0: 20 75 6e 77 72 69 74 74 65 6e 20 73 65 63 74 6f   unwritten secto
c3e0: 72 73 20 6d 69 67 68 74 20 62 79 20 63 68 61 6e  rs might by chan
c3f0: 63 65 20 63 6f 6e 74 61 69 6e 20 64 61 74 61 20  ce contain data 
c400: 66 72 6f 6d 20 74 68 65 20 73 61 6d 65 20 70 61  from the same pa
c410: 67 65 0a 74 68 61 74 20 77 61 73 20 61 20 70 61  ge.that was a pa
c420: 72 74 20 6f 66 20 70 72 69 6f 72 20 6a 6f 75 72  rt of prior jour
c430: 6e 61 6c 73 2e 20 20 42 79 20 63 68 61 6e 67 69  nals.  By changi
c440: 6e 67 20 74 68 65 20 6e 6f 6e 63 65 20 66 6f 72  ng the nonce for
c450: 20 65 61 63 68 0a 74 72 61 6e 73 61 63 74 69 6f   each.transactio
c460: 6e 2c 20 73 74 61 6c 65 20 64 61 74 61 20 6f 6e  n, stale data on
c470: 20 64 69 73 6b 20 77 69 6c 6c 20 73 74 69 6c 6c   disk will still
c480: 20 67 65 6e 65 72 61 74 65 20 61 6e 20 69 6e 63   generate an inc
c490: 6f 72 72 65 63 74 20 63 68 65 63 6b 73 75 6d 0a  orrect checksum.
c4a0: 61 6e 64 20 62 65 20 64 65 74 65 63 74 65 64 20  and be detected 
c4b0: 77 69 74 68 20 68 69 67 68 20 70 72 6f 62 61 62  with high probab
c4c0: 69 6c 69 74 79 2e 20 20 54 68 65 20 63 68 65 63  ility.  The chec
c4d0: 6b 73 75 6d 20 6f 6e 6c 79 20 75 73 65 73 20 61  ksum only uses a
c4e0: 20 73 70 61 72 63 65 20 73 61 6d 70 6c 65 0a 6f   sparce sample.o
c4f0: 66 20 33 32 2d 62 69 74 20 77 6f 72 64 73 20 66  f 32-bit words f
c500: 72 6f 6d 20 74 68 65 20 64 61 74 61 20 72 65 63  rom the data rec
c510: 6f 72 64 20 66 6f 72 20 70 65 72 66 6f 72 6d 61  ord for performa
c520: 6e 63 65 20 72 65 61 73 6f 6e 73 20 2d 20 64 65  nce reasons - de
c530: 73 69 67 6e 20 73 74 75 64 69 65 73 20 0a 64 75  sign studies .du
c540: 72 69 6e 67 20 74 68 65 20 70 6c 61 6e 6e 69 6e  ring the plannin
c550: 67 20 70 68 61 73 65 73 20 6f 66 20 53 51 4c 69  g phases of SQLi
c560: 74 65 20 33 2e 30 2e 30 20 73 68 6f 77 65 64 0a  te 3.0.0 showed.
c570: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
c580: 72 66 6f 72 6d 61 6e 63 65 20 68 69 74 20 69 6e  rformance hit in
c590: 20 63 68 65 63 6b 73 75 6d 6d 69 6e 67 20 74 68   checksumming th
c5a0: 65 20 65 6e 74 69 72 65 20 70 61 67 65 2e 3c 2f  e entire page.</
c5b0: 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20 70  p>..<p>Let the p
c5c0: 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20  age count value 
c5d0: 61 74 20 6f 66 66 73 65 74 20 38 20 69 6e 20 74  at offset 8 in t
c5e0: 68 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  he journal heade
c5f0: 72 20 62 79 20 4d 2e 0a 49 66 20 4d 20 69 73 20  r by M..If M is 
c600: 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
c610: 6f 20 74 68 65 6e 20 61 66 74 65 72 20 4d 20 70  o then after M p
c620: 61 67 65 20 72 65 63 6f 72 64 73 20 74 68 65 20  age records the 
c630: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 0a 6d 61 79  journal file.may
c640: 20 62 65 20 7a 65 72 6f 20 70 61 64 64 65 64 20   be zero padded 
c650: 6f 75 74 20 74 6f 20 74 68 65 20 6e 65 78 74 20  out to the next 
c660: 6d 75 6c 74 69 70 6c 65 20 6f 66 20 74 68 65 20  multiple of the 
c670: 73 65 63 74 6f 72 20 73 69 7a 65 20 61 6e 64 20  sector size and 
c680: 61 6e 6f 74 68 65 72 0a 6a 6f 75 72 6e 61 6c 20  another.journal 
c690: 68 65 61 64 65 72 20 6d 61 79 20 62 65 20 69 6e  header may be in
c6a0: 73 65 72 74 65 64 2e 20 20 41 6c 6c 20 6a 6f 75  serted.  All jou
c6b0: 72 6e 61 6c 20 68 65 61 64 65 72 73 20 77 69 74  rnal headers wit
c6c0: 68 69 6e 20 74 68 65 20 73 61 6d 65 0a 6a 6f 75  hin the same.jou
c6d0: 72 6e 61 6c 20 6d 75 73 74 20 63 6f 6e 74 61 69  rnal must contai
c6e0: 6e 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  n the same datab
c6f0: 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 61 6e  ase page size an
c700: 64 20 73 65 63 74 6f 72 20 73 69 7a 65 2e 3c 2f  d sector size.</
c710: 70 3e 0a 0a 3c 70 3e 49 66 20 4d 20 69 73 20 2d  p>..<p>If M is -
c720: 31 20 69 6e 20 74 68 65 20 69 6e 69 74 69 61 6c  1 in the initial
c730: 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 2c   journal header,
c740: 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65 72   then the number
c750: 20 6f 66 20 70 61 67 65 20 72 65 63 6f 72 64 73   of page records
c760: 0a 74 68 61 74 20 66 6f 6c 6c 6f 77 20 69 73 20  .that follow is 
c770: 63 6f 6d 70 75 74 65 64 20 62 79 20 66 69 67 75  computed by figu
c780: 72 65 20 6f 75 74 20 68 6f 77 20 6d 61 6e 79 20  re out how many 
c790: 70 61 67 65 20 72 65 63 6f 72 64 73 20 77 69 6c  page records wil
c7a0: 6c 20 66 69 74 20 69 6e 0a 74 68 65 20 61 76 61  l fit in.the ava
c7b0: 69 6c 61 62 6c 65 20 73 70 61 63 65 20 6f 66 20  ilable space of 
c7c0: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  the remainder of
c7d0: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c   the journal fil
c7e0: 65 2e 3c 2f 70 3e 0a                             e.</p>.