Documentation Source Text

Hex Artifact Content
Login

Artifact 987a723fbd403f2b172d87f9fee5afd2a4014b7d:


0000: 3c 74 69 74 6c 65 3e 46 69 6c 65 20 46 6f 72 6d  <title>File Form
0010: 61 74 20 46 6f 72 20 53 51 4c 69 74 65 20 44 61  at For SQLite Da
0020: 74 61 62 61 73 65 73 3c 2f 74 69 74 6c 65 3e 0a  tabases</title>.
0030: 3c 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73  <tcl>hd_keywords
0040: 20 7b 66 69 6c 65 20 66 6f 72 6d 61 74 7d 20 7b   {file format} {
0050: 73 65 63 6f 6e 64 20 65 64 69 74 69 6f 6e 20 66  second edition f
0060: 69 6c 65 20 66 6f 72 6d 61 74 20 64 6f 63 75 6d  ile format docum
0070: 65 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 74 61 62  ent}</tcl>..<tab
0080: 6c 65 5f 6f 66 5f 63 6f 6e 74 65 6e 74 73 3e 0a  le_of_contents>.
0090: 0a 3c 70 3e 54 68 69 73 20 64 6f 63 75 6d 65 6e  .<p>This documen
00a0: 74 20 64 65 73 63 72 69 62 65 73 20 61 6e 64 20  t describes and 
00b0: 64 65 66 69 6e 65 73 20 74 68 65 20 6f 6e 2d 64  defines the on-d
00c0: 69 73 6b 20 64 61 74 61 62 61 73 65 20 66 69 6c  isk database fil
00d0: 65 0a 66 6f 72 6d 61 74 20 75 73 65 64 20 62 79  e.format used by
00e0: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 68   SQLite.</p>..<h
00f0: 31 3e 54 68 65 20 44 61 74 61 62 61 73 65 20 46  1>The Database F
0100: 69 6c 65 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65  ile</h1>..<p>The
0110: 20 63 6f 6d 70 6c 65 74 65 20 73 74 61 74 65 20   complete state 
0120: 6f 66 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74  of an SQLite dat
0130: 61 62 61 73 65 20 69 73 20 75 73 75 61 6c 6c 79  abase is usually
0140: 0a 63 6f 6e 74 61 69 6e 65 64 20 61 20 73 69 6e  .contained a sin
0150: 67 6c 65 20 66 69 6c 65 20 6f 6e 20 64 69 73 6b  gle file on disk
0160: 20 63 61 6c 6c 65 64 20 74 68 65 20 22 6d 61 69   called the "mai
0170: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 22  n database file"
0180: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 44 75 72 69 6e 67  .</p>..<p>During
0190: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20   a transaction, 
01a0: 53 51 4c 69 74 65 20 73 74 6f 72 65 73 20 61 64  SQLite stores ad
01b0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
01c0: 74 69 6f 6e 20 0a 69 6e 20 61 20 73 65 63 6f 6e  tion .in a secon
01d0: 64 20 66 69 6c 65 20 63 61 6c 6c 65 64 20 74 68  d file called th
01e0: 65 20 22 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  e "rollback jour
01f0: 6e 61 6c 22 2c 20 6f 72 20 69 66 20 53 51 4c 69  nal", or if SQLi
0200: 74 65 20 69 73 20 69 6e 0a 5b 57 41 4c 20 6d 6f  te is in.[WAL mo
0210: 64 65 5d 2c 20 61 20 77 72 69 74 65 2d 61 68 65  de], a write-ahe
0220: 61 64 20 6c 6f 67 20 66 69 6c 65 2e 0a 49 66 20  ad log file..If 
0230: 74 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  the application 
0240: 6f 72 0a 68 6f 73 74 20 63 6f 6d 70 75 74 65 72  or.host computer
0250: 20 63 72 61 73 68 65 73 20 62 65 66 6f 72 65 20   crashes before 
0260: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
0270: 63 6f 6d 70 6c 65 74 65 73 2c 20 74 68 65 6e 20  completes, then 
0280: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 0a 6a 6f 75  the rollback.jou
0290: 72 6e 61 6c 20 6f 72 20 77 72 69 74 65 2d 61 68  rnal or write-ah
02a0: 65 61 64 20 6c 6f 67 20 63 6f 6e 74 61 69 6e 73  ead log contains
02b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
02c0: 64 65 64 20 0a 74 6f 20 72 65 73 74 6f 72 65 20  ded .to restore 
02d0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
02e0: 65 20 66 69 6c 65 20 74 6f 20 61 20 63 6f 6e 73  e file to a cons
02f0: 69 73 74 65 6e 74 20 73 74 61 74 65 2e 20 20 57  istent state.  W
0300: 68 65 6e 20 61 20 72 6f 6c 6c 62 61 63 6b 20 0a  hen a rollback .
0310: 6a 6f 75 72 6e 61 6c 20 6f 72 20 77 72 69 74 65  journal or write
0320: 2d 61 68 65 61 64 20 6c 6f 67 20 63 6f 6e 74 61  -ahead log conta
0330: 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
0340: 6e 65 63 65 73 73 61 72 79 20 66 6f 72 20 72 65  necessary for re
0350: 63 6f 76 65 72 69 6e 67 20 0a 74 68 65 20 73 74  covering .the st
0360: 61 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ate of the datab
0370: 61 73 65 2c 20 74 68 65 79 20 61 72 65 20 63 61  ase, they are ca
0380: 6c 6c 65 64 20 61 20 22 68 6f 74 20 6a 6f 75 72  lled a "hot jour
0390: 6e 61 6c 22 20 6f 72 20 22 68 6f 74 20 57 41 4c  nal" or "hot WAL
03a0: 20 66 69 6c 65 22 2e 0a 48 6f 74 20 6a 6f 75 72   file"..Hot jour
03b0: 6e 61 6c 73 20 61 6e 64 20 57 41 4c 20 66 69 6c  nals and WAL fil
03c0: 65 73 20 61 72 65 20 6f 6e 6c 79 20 61 20 66 61  es are only a fa
03d0: 63 74 6f 72 20 64 75 72 69 6e 67 20 65 72 72 6f  ctor during erro
03e0: 72 20 72 65 63 6f 76 65 72 79 0a 73 63 65 6e 61  r recovery.scena
03f0: 72 69 6f 73 20 61 6e 64 20 73 6f 20 61 72 65 20  rios and so are 
0400: 75 6e 63 6f 6d 6d 6f 6e 2c 20 62 75 74 20 74 68  uncommon, but th
0410: 65 79 20 61 72 65 20 70 61 72 74 20 6f 66 20 74  ey are part of t
0420: 68 65 20 73 74 61 74 65 20 6f 66 20 61 6e 20 53  he state of an S
0430: 51 4c 69 74 65 0a 64 61 74 61 62 61 73 65 20 61  QLite.database a
0440: 6e 64 20 73 6f 20 63 61 6e 6e 6f 74 20 62 65 20  nd so cannot be 
0450: 69 67 6e 6f 72 65 64 2e 20 20 54 68 69 73 20 64  ignored.  This d
0460: 6f 63 75 6d 65 6e 74 20 64 65 66 69 6e 65 73 20  ocument defines 
0470: 74 68 65 20 66 6f 72 6d 61 74 0a 6f 66 20 61 20  the format.of a 
0480: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
0490: 20 61 6e 64 20 74 68 65 20 77 72 69 74 65 2d 61   and the write-a
04a0: 68 65 61 64 20 6c 6f 67 20 66 69 6c 65 2c 20 62  head log file, b
04b0: 75 74 20 74 68 65 20 66 6f 63 75 73 20 69 73 0a  ut the focus is.
04c0: 6f 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  on the main data
04d0: 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  base file.</p>..
04e0: 3c 68 32 3e 50 61 67 65 73 3c 2f 68 32 3e 0a 0a  <h2>Pages</h2>..
04f0: 3c 70 3e 54 68 65 20 6d 61 69 6e 20 64 61 74 61  <p>The main data
0500: 62 61 73 65 20 66 69 6c 65 20 63 6f 6e 73 69 73  base file consis
0510: 74 73 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  ts of one or mor
0520: 65 20 70 61 67 65 73 2e 20 20 5e 54 68 65 20 73  e pages.  ^The s
0530: 69 7a 65 20 6f 66 20 61 0a 70 61 67 65 20 69 73  ize of a.page is
0540: 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20   a power of two 
0550: 62 65 74 77 65 65 6e 20 35 31 32 20 61 6e 64 20  between 512 and 
0560: 36 35 35 33 36 20 69 6e 63 6c 75 73 69 76 65 2e  65536 inclusive.
0570: 20 20 41 6c 6c 20 70 61 67 65 73 20 77 69 74 68    All pages with
0580: 69 6e 0a 74 68 65 20 73 61 6d 65 20 64 61 74 61  in.the same data
0590: 62 61 73 65 20 61 72 65 20 74 68 65 20 73 61 6d  base are the sam
05a0: 65 20 73 69 7a 65 2e 20 20 5e 54 68 65 20 70 61  e size.  ^The pa
05b0: 67 65 20 73 69 7a 65 20 66 6f 72 20 61 20 64 61  ge size for a da
05c0: 74 61 62 61 73 65 20 66 69 6c 65 0a 69 73 20 64  tabase file.is d
05d0: 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
05e0: 20 32 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   2-byte integer 
05f0: 6c 6f 63 61 74 65 64 20 61 74 20 61 6e 20 6f 66  located at an of
0600: 66 73 65 74 20 6f 66 0a 31 36 20 62 79 74 65 73  fset of.16 bytes
0610: 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
0620: 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62  ing of the datab
0630: 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c  ase file.</p>..<
0640: 70 3e 50 61 67 65 73 20 61 72 65 20 6e 75 6d 62  p>Pages are numb
0650: 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  ered beginning w
0660: 69 74 68 20 31 2e 20 20 54 68 65 20 6d 61 78 69  ith 1.  The maxi
0670: 6d 75 6d 20 70 61 67 65 20 6e 75 6d 62 65 72 20  mum page number 
0680: 69 73 0a 32 31 34 37 34 38 33 36 34 36 20 28 32  is.2147483646 (2
0690: 3c 73 75 70 3e 3c 73 6d 61 6c 6c 3e 33 31 3c 2f  <sup><small>31</
06a0: 73 6d 61 6c 6c 3e 3c 2f 73 75 70 3e 20 2d 20 32  small></sup> - 2
06b0: 29 2e 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20  ).  The minimum 
06c0: 73 69 7a 65 0a 53 51 4c 69 74 65 20 64 61 74 61  size.SQLite data
06d0: 62 61 73 65 20 69 73 20 61 20 73 69 6e 67 6c 65  base is a single
06e0: 20 35 31 32 2d 62 79 74 65 20 70 61 67 65 2e 0a   512-byte page..
06f0: 54 68 65 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65  The maximum size
0700: 20 64 61 74 61 62 61 73 65 20 77 6f 75 6c 64 20   database would 
0710: 62 65 20 32 31 34 37 34 38 33 36 34 36 20 70 61  be 2147483646 pa
0720: 67 65 73 20 61 74 20 36 35 35 33 36 20 62 79 74  ges at 65536 byt
0730: 65 73 20 70 65 72 0a 70 61 67 65 20 6f 72 20 31  es per.page or 1
0740: 34 30 2c 37 33 37 2c 34 38 38 2c 32 32 34 2c 32  40,737,488,224,2
0750: 35 36 20 62 79 74 65 73 20 28 61 62 6f 75 74 20  56 bytes (about 
0760: 31 34 30 20 74 65 72 61 62 79 74 65 73 29 2e 20  140 terabytes). 
0770: 20 55 73 75 61 6c 6c 79 20 53 51 4c 69 74 65 20   Usually SQLite 
0780: 77 69 6c 6c 0a 68 69 74 20 74 68 65 20 6d 61 78  will.hit the max
0790: 69 6d 75 6d 20 66 69 6c 65 20 73 69 7a 65 20 6c  imum file size l
07a0: 69 6d 69 74 20 6f 66 20 74 68 65 20 75 6e 64 65  imit of the unde
07b0: 72 6c 79 69 6e 67 20 66 69 6c 65 73 79 73 74 65  rlying filesyste
07c0: 6d 20 6f 72 20 64 69 73 6b 0a 68 61 72 64 77 61  m or disk.hardwa
07d0: 72 65 20 6c 6f 6e 67 20 62 65 66 6f 72 65 20 69  re long before i
07e0: 74 20 68 69 74 73 20 69 74 73 20 6f 77 6e 20 69  t hits its own i
07f0: 6e 74 65 72 6e 61 6c 20 73 69 7a 65 20 6c 69 6d  nternal size lim
0800: 69 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e 20 63  it.</p>..<p>In c
0810: 6f 6d 6d 6f 6e 20 75 73 65 2c 20 53 51 4c 69 74  ommon use, SQLit
0820: 65 20 64 61 74 61 62 61 73 65 73 20 74 65 6e 64  e databases tend
0830: 20 74 6f 20 72 61 6e 67 65 20 69 6e 20 73 69 7a   to range in siz
0840: 65 20 66 72 6f 6d 20 61 20 66 65 77 20 6b 69 6c  e from a few kil
0850: 6f 62 79 74 65 73 0a 74 6f 20 61 20 66 65 77 20  obytes.to a few 
0860: 67 69 67 61 62 79 74 65 73 2e 3c 2f 70 3e 0a 0a  gigabytes.</p>..
0870: 3c 70 3e 41 74 20 61 6e 79 20 70 6f 69 6e 74 20  <p>At any point 
0880: 69 6e 20 74 69 6d 65 2c 20 65 76 65 72 79 20 70  in time, every p
0890: 61 67 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  age in the main 
08a0: 64 61 74 61 62 61 73 65 20 68 61 73 20 61 20 73  database has a s
08b0: 69 6e 67 6c 65 0a 75 73 65 20 77 68 69 63 68 20  ingle.use which 
08c0: 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  is one of the fo
08d0: 6c 6c 6f 77 69 6e 67 3a 0a 3c 75 6c 3e 0a 3c 6c  llowing:.<ul>.<l
08e0: 69 3e 54 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20  i>The lock-byte 
08f0: 70 61 67 65 0a 3c 6c 69 3e 41 20 66 72 65 65 6c  page.<li>A freel
0900: 69 73 74 20 70 61 67 65 0a 3c 75 6c 3e 0a 3c 6c  ist page.<ul>.<l
0910: 69 3e 41 20 66 72 65 65 6c 69 73 74 20 74 72 75  i>A freelist tru
0920: 6e 6b 20 70 61 67 65 0a 3c 6c 69 3e 41 20 66 72  nk page.<li>A fr
0930: 65 65 6c 69 73 74 20 6c 65 61 66 20 70 61 67 65  eelist leaf page
0940: 0a 3c 2f 75 6c 3e 0a 3c 6c 69 3e 41 20 62 2d 74  .</ul>.<li>A b-t
0950: 72 65 65 20 70 61 67 65 0a 3c 75 6c 3e 0a 3c 6c  ree page.<ul>.<l
0960: 69 3e 41 20 74 61 62 6c 65 20 62 2d 74 72 65 65  i>A table b-tree
0970: 20 69 6e 74 65 72 69 6f 72 20 70 61 67 65 0a 3c   interior page.<
0980: 6c 69 3e 41 20 74 61 62 6c 65 20 62 2d 74 72 65  li>A table b-tre
0990: 65 20 6c 65 61 66 20 70 61 67 65 0a 3c 6c 69 3e  e leaf page.<li>
09a0: 41 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  An index b-tree 
09b0: 69 6e 74 65 72 69 6f 72 20 70 61 67 65 0a 3c 6c  interior page.<l
09c0: 69 3e 41 6e 20 69 6e 64 65 78 20 62 2d 74 72 65  i>An index b-tre
09d0: 65 20 6c 65 61 66 20 70 61 67 65 0a 3c 2f 75 6c  e leaf page.</ul
09e0: 3e 0a 3c 6c 69 3e 41 20 70 61 79 6c 6f 61 64 20  >.<li>A payload 
09f0: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 0a 3c 6c  overflow page.<l
0a00: 69 3e 41 20 70 6f 69 6e 74 65 72 20 6d 61 70 20  i>A pointer map 
0a10: 70 61 67 65 0a 3c 2f 75 6c 3e 0a 3c 2f 70 3e 0a  page.</ul>.</p>.
0a20: 0a 3c 70 3e 5e 41 6c 6c 20 72 65 61 64 73 20 66  .<p>^All reads f
0a30: 72 6f 6d 20 61 6e 64 20 77 72 69 74 65 73 20 74  rom and writes t
0a40: 6f 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  o the main datab
0a50: 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 20 61  ase file begin a
0a60: 74 20 61 20 70 61 67 65 0a 62 6f 75 6e 64 61 72  t a page.boundar
0a70: 79 20 61 6e 64 20 61 6c 6c 20 77 72 69 74 65 73  y and all writes
0a80: 20 61 72 65 20 61 6e 20 69 6e 74 65 67 65 72 20   are an integer 
0a90: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
0aa0: 69 6e 20 73 69 7a 65 2e 20 20 5e 52 65 61 64 73  in size.  ^Reads
0ab0: 0a 61 72 65 20 61 6c 73 6f 20 75 73 75 61 6c 6c  .are also usuall
0ac0: 79 20 61 6e 20 69 6e 74 65 67 65 72 20 6e 75 6d  y an integer num
0ad0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
0ae0: 73 69 7a 65 2c 20 77 69 74 68 20 74 68 65 20 6f  size, with the o
0af0: 6e 65 20 65 78 63 65 70 74 69 6f 6e 0a 74 68 61  ne exception.tha
0b00: 74 20 77 68 65 6e 20 74 68 65 20 64 61 74 61 62  t when the datab
0b10: 61 73 65 20 69 73 20 66 69 72 73 74 20 6f 70 65  ase is first ope
0b20: 6e 65 64 2c 20 74 68 65 20 66 69 72 73 74 20 31  ned, the first 1
0b30: 30 30 20 62 79 74 65 73 20 6f 66 20 74 68 65 0a  00 bytes of the.
0b40: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 28 74  database file (t
0b50: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
0b60: 20 68 65 61 64 65 72 29 20 61 72 65 20 72 65 61   header) are rea
0b70: 64 20 61 73 20 61 20 73 75 62 2d 70 61 67 65 20  d as a sub-page 
0b80: 73 69 7a 65 20 75 6e 69 74 2e 3c 2f 70 3e 0a 0a  size unit.</p>..
0b90: 3c 70 3e 5e 42 65 66 6f 72 65 20 61 6e 79 20 69  <p>^Before any i
0ba0: 6e 66 6f 72 6d 61 74 69 6f 6e 2d 62 65 61 72 69  nformation-beari
0bb0: 6e 67 20 70 61 67 65 20 6f 66 20 74 68 65 20 64  ng page of the d
0bc0: 61 74 61 62 61 73 65 20 69 73 20 6d 6f 64 69 66  atabase is modif
0bd0: 69 65 64 2c 20 0a 74 68 65 20 6f 72 69 67 69 6e  ied, .the origin
0be0: 61 6c 20 75 6e 6d 6f 64 69 66 69 65 64 20 63 6f  al unmodified co
0bf0: 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 70 61  ntent of that pa
0c00: 67 65 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e  ge is written in
0c10: 74 6f 20 74 68 65 20 0a 72 6f 6c 6c 62 61 63 6b  to the .rollback
0c20: 20 6a 6f 75 72 6e 61 6c 2e 20 20 49 66 20 61 20   journal.  If a 
0c30: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 69  transaction is i
0c40: 6e 74 65 72 72 75 70 74 65 64 20 61 6e 64 20 6e  nterrupted and n
0c50: 65 65 64 73 20 74 6f 20 62 65 20 0a 72 6f 6c 6c  eeds to be .roll
0c60: 65 64 20 62 61 63 6b 2c 20 74 68 65 20 72 6f 6c  ed back, the rol
0c70: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 63 61  lback journal ca
0c80: 6e 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 74  n then be used t
0c90: 6f 20 72 65 73 74 6f 72 65 20 74 68 65 0a 64 61  o restore the.da
0ca0: 74 61 62 61 73 65 20 74 6f 20 69 74 73 20 6f 72  tabase to its or
0cb0: 69 67 69 6e 61 6c 20 73 74 61 74 65 2e 20 20 5e  iginal state.  ^
0cc0: 46 72 65 65 6c 69 73 74 20 6c 65 61 66 20 70 61  Freelist leaf pa
0cd0: 67 65 73 20 62 65 61 72 20 6e 6f 0a 69 6e 66 6f  ges bear no.info
0ce0: 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 77 6f 75  rmation that wou
0cf0: 6c 64 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65  ld need to be re
0d00: 73 74 6f 72 65 64 20 6f 6e 20 61 20 72 6f 6c 6c  stored on a roll
0d10: 62 61 63 6b 20 61 6e 64 20 73 6f 20 74 68 65 79  back and so they
0d20: 0a 61 72 65 20 6e 6f 74 20 77 72 69 74 74 65 6e  .are not written
0d30: 20 74 6f 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20   to the journal 
0d40: 70 72 69 6f 72 20 74 6f 20 6d 6f 64 69 66 69 63  prior to modific
0d50: 61 74 69 6f 6e 2c 20 69 6e 20 6f 72 64 65 72 20  ation, in order 
0d60: 74 6f 0a 72 65 64 75 63 65 20 64 69 73 6b 20 49  to.reduce disk I
0d70: 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  /O.</p>..<tcl>hd
0d80: 5f 66 72 61 67 6d 65 6e 74 20 64 61 74 61 62 61  _fragment databa
0d90: 73 65 5f 68 65 61 64 65 72 20 7b 64 61 74 61 62  se_header {datab
0da0: 61 73 65 20 68 65 61 64 65 72 7d 3c 2f 74 63 6c  ase header}</tcl
0db0: 3e 0a 3c 68 32 3e 54 68 65 20 44 61 74 61 62 61  >.<h2>The Databa
0dc0: 73 65 20 48 65 61 64 65 72 3c 2f 68 32 3e 0a 0a  se Header</h2>..
0dd0: 3c 70 3e 54 68 65 20 66 69 72 73 74 20 31 30 30  <p>The first 100
0de0: 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 64 61   bytes of the da
0df0: 74 61 62 61 73 65 20 66 69 6c 65 20 63 6f 6d 70  tabase file comp
0e00: 72 69 73 65 20 74 68 65 20 64 61 74 61 62 61 73  rise the databas
0e10: 65 20 66 69 6c 65 20 0a 68 65 61 64 65 72 2e 20  e file .header. 
0e20: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66 69   The database fi
0e30: 6c 65 20 68 65 61 64 65 72 20 69 73 20 64 69 76  le header is div
0e40: 69 64 65 64 20 69 6e 74 6f 20 66 69 65 6c 64 73  ided into fields
0e50: 20 61 73 20 73 68 6f 77 6e 20 62 79 0a 74 68 65   as shown by.the
0e60: 20 74 61 62 6c 65 20 62 65 6c 6f 77 2e 20 20 41   table below.  A
0e70: 6c 6c 20 6d 75 6c 74 69 62 79 74 65 20 66 69 65  ll multibyte fie
0e80: 6c 64 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  lds in the datab
0e90: 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20  ase file header 
0ea0: 61 72 65 0a 73 74 6f 72 65 64 20 77 69 74 68 20  are.stored with 
0eb0: 74 68 65 20 6d 6f 73 74 20 73 69 67 6e 69 66 69  the most signifi
0ec0: 63 61 6e 74 20 62 79 74 65 20 66 69 72 73 74 20  cant byte first 
0ed0: 28 62 69 67 2d 65 6e 64 69 61 6e 29 2e 3c 2f 70  (big-endian).</p
0ee0: 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 44  >..<center>.<i>D
0ef0: 61 74 61 62 61 73 65 20 48 65 61 64 65 72 20 46  atabase Header F
0f00: 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74  ormat</i><br>.<t
0f10: 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30 25 22  able width="80%"
0f20: 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c   border=1>.<tr><
0f30: 74 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a  th>Offset<th>Siz
0f40: 65 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e  e<th>Description
0f50: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
0f60: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
0f70: 3e 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  >0<td valign=top
0f80: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36   align=center>16
0f90: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
0fa0: 54 68 65 20 68 65 61 64 65 72 20 73 74 72 69 6e  The header strin
0fb0: 67 3a 20 22 53 51 4c 69 74 65 20 66 6f 72 6d 61  g: "SQLite forma
0fc0: 74 20 33 5c 30 30 30 22 0a 3c 74 72 3e 3c 74 64  t 3\000".<tr><td
0fd0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
0fe0: 6e 3d 63 65 6e 74 65 72 3e 31 36 3c 74 64 20 76  n=center>16<td v
0ff0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1000: 63 65 6e 74 65 72 3e 32 3c 74 64 20 61 6c 69 67  center>2<td alig
1010: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 64 61 74 61  n=left>.The data
1020: 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 69  base page size i
1030: 6e 20 62 79 74 65 73 2e 20 20 4d 75 73 74 20 62  n bytes.  Must b
1040: 65 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  e a power of two
1050: 20 62 65 74 77 65 65 6e 20 35 31 32 0a 61 6e 64   between 512.and
1060: 20 33 32 37 36 38 20 69 6e 63 6c 75 73 69 76 65   32768 inclusive
1070: 2c 20 6f 72 20 74 68 65 20 76 61 6c 75 65 20 31  , or the value 1
1080: 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 61 20   representing a 
1090: 70 61 67 65 20 73 69 7a 65 20 6f 66 20 36 35 35  page size of 655
10a0: 33 36 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  36..<tr><td vali
10b0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
10c0: 74 65 72 3e 31 38 3c 74 64 20 76 61 6c 69 67 6e  ter>18<td valign
10d0: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
10e0: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
10f0: 74 3e 0a 46 69 6c 65 20 66 6f 72 6d 61 74 20 77  t>.File format w
1100: 72 69 74 65 20 76 65 72 73 69 6f 6e 2e 20 20 31  rite version.  1
1110: 20 66 6f 72 20 6c 65 67 61 63 79 3b 20 32 20 66   for legacy; 2 f
1120: 6f 72 20 5b 57 41 4c 5d 2e 0a 3c 74 72 3e 3c 74  or [WAL]..<tr><t
1130: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1140: 67 6e 3d 63 65 6e 74 65 72 3e 31 39 3c 74 64 20  gn=center>19<td 
1150: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1160: 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c 69  =center>1<td ali
1170: 67 6e 3d 6c 65 66 74 3e 0a 46 69 6c 65 20 66 6f  gn=left>.File fo
1180: 72 6d 61 74 20 72 65 61 64 20 76 65 72 73 69 6f  rmat read versio
1190: 6e 2e 20 20 31 20 66 6f 72 20 6c 65 67 61 63 79  n.  1 for legacy
11a0: 3b 20 32 20 66 6f 72 20 5b 57 41 4c 5d 2e 0a 3c  ; 2 for [WAL]..<
11b0: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
11c0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 32  p align=center>2
11d0: 30 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  0<td valign=top 
11e0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74  align=center>1<t
11f0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 42 79  d align=left>.By
1200: 74 65 73 20 6f 66 20 75 6e 75 73 65 64 20 22 72  tes of unused "r
1210: 65 73 65 72 76 65 64 22 20 73 70 61 63 65 20 61  eserved" space a
1220: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65 61 63  t the end of eac
1230: 68 20 70 61 67 65 2e 20 20 55 73 75 61 6c 6c 79  h page.  Usually
1240: 20 30 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69   0..<tr><td vali
1250: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
1260: 74 65 72 3e 32 31 3c 74 64 20 76 61 6c 69 67 6e  ter>21<td valign
1270: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1280: 72 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>1<td align=lef
1290: 74 3e 0a 4d 61 78 69 6d 75 6d 20 65 6d 62 65 64  t>.Maximum embed
12a0: 64 65 64 20 70 61 79 6c 6f 61 64 20 66 72 61 63  ded payload frac
12b0: 74 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 36  tion.  Must be 6
12c0: 34 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  4..<tr><td valig
12d0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
12e0: 65 72 3e 32 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>22<td valign=
12f0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
1300: 3e 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >1<td align=left
1310: 3e 0a 4d 69 6e 69 6d 75 6d 20 65 6d 62 65 64 64  >.Minimum embedd
1320: 65 64 20 70 61 79 6c 6f 61 64 20 66 72 61 63 74  ed payload fract
1330: 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65 20 33 32  ion.  Must be 32
1340: 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  ..<tr><td valign
1350: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
1360: 72 3e 32 33 3c 74 64 20 76 61 6c 69 67 6e 3d 74  r>23<td valign=t
1370: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
1380: 31 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e  1<td align=left>
1390: 0a 4c 65 61 66 20 70 61 79 6c 6f 61 64 20 66 72  .Leaf payload fr
13a0: 61 63 74 69 6f 6e 2e 20 20 4d 75 73 74 20 62 65  action.  Must be
13b0: 20 33 32 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c   32..<tr><td val
13c0: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
13d0: 6e 74 65 72 3e 32 34 3c 74 64 20 76 61 6c 69 67  nter>24<td valig
13e0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13f0: 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>4<td align=le
1400: 66 74 3e 0a 46 69 6c 65 20 63 68 61 6e 67 65 20  ft>.File change 
1410: 63 6f 75 6e 74 65 72 2e 0a 3c 74 72 3e 3c 74 64  counter..<tr><td
1420: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1430: 6e 3d 63 65 6e 74 65 72 3e 32 38 3c 74 64 20 76  n=center>28<td v
1440: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1450: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1460: 6e 3d 6c 65 66 74 3e 0a 53 69 7a 65 20 6f 66 20  n=left>.Size of 
1470: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1480: 65 20 69 6e 20 70 61 67 65 73 2e 20 20 54 68 65  e in pages.  The
1490: 20 22 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61   "in-header data
14a0: 62 61 73 65 20 73 69 7a 65 22 2e 0a 3c 74 72 3e  base size"..<tr>
14b0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
14c0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 33 32 3c 74  lign=center>32<t
14d0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
14e0: 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61  gn=center>4<td a
14f0: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 50 61 67 65 20  lign=left>.Page 
1500: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 66 69  number of the fi
1510: 72 73 74 20 66 72 65 65 6c 69 73 74 20 74 72 75  rst freelist tru
1520: 6e 6b 20 70 61 67 65 2e 0a 3c 74 72 3e 3c 74 64  nk page..<tr><td
1530: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1540: 6e 3d 63 65 6e 74 65 72 3e 33 36 3c 74 64 20 76  n=center>36<td v
1550: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1560: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1570: 6e 3d 6c 65 66 74 3e 0a 54 6f 74 61 6c 20 6e 75  n=left>.Total nu
1580: 6d 62 65 72 20 6f 66 20 66 72 65 65 6c 69 73 74  mber of freelist
1590: 20 70 61 67 65 73 2e 0a 3c 74 72 3e 3c 74 64 20   pages..<tr><td 
15a0: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
15b0: 3d 63 65 6e 74 65 72 3e 34 30 3c 74 64 20 76 61  =center>40<td va
15c0: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
15d0: 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67 6e  enter>4<td align
15e0: 3d 6c 65 66 74 3e 0a 54 68 65 20 73 63 68 65 6d  =left>.The schem
15f0: 61 20 63 6f 6f 6b 69 65 2e 0a 3c 74 72 3e 3c 74  a cookie..<tr><t
1600: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
1610: 67 6e 3d 63 65 6e 74 65 72 3e 34 34 3c 74 64 20  gn=center>44<td 
1620: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
1630: 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69  =center>4<td ali
1640: 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 73 63 68  gn=left>.The sch
1650: 65 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65  ema format numbe
1660: 72 2e 20 20 53 75 70 70 6f 72 74 65 64 20 73 63  r.  Supported sc
1670: 68 65 6d 61 20 66 6f 72 6d 61 74 73 20 61 72 65  hema formats are
1680: 20 31 2c 20 32 2c 20 33 2c 20 61 6e 64 20 34 2e   1, 2, 3, and 4.
1690: 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
16a0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
16b0: 3e 34 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >48<td valign=to
16c0: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
16d0: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
16e0: 44 65 66 61 75 6c 74 20 70 61 67 65 20 63 61 63  Default page cac
16f0: 68 65 20 73 69 7a 65 2e 0a 3c 74 72 3e 3c 74 64  he size..<tr><td
1700: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
1710: 6e 3d 63 65 6e 74 65 72 3e 35 32 3c 74 64 20 76  n=center>52<td v
1720: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1730: 63 65 6e 74 65 72 3e 34 3c 74 64 20 61 6c 69 67  center>4<td alig
1740: 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 70 61 67 65  n=left>.The page
1750: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6c   number of the l
1760: 61 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72  argest root b-tr
1770: 65 65 20 70 61 67 65 20 77 68 65 6e 20 69 6e 20  ee page when in 
1780: 61 75 74 6f 2d 76 61 63 75 75 6d 20 6f 72 0a 69  auto-vacuum or.i
1790: 6e 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63 75 75  ncremental-vacuu
17a0: 6d 20 6d 6f 64 65 73 2c 20 6f 72 20 7a 65 72 6f  m modes, or zero
17b0: 20 6f 74 68 65 72 77 69 73 65 2e 0a 3c 74 72 3e   otherwise..<tr>
17c0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
17d0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 35 36 3c 74  lign=center>56<t
17e0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
17f0: 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 61  gn=center>4<td a
1800: 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65 20 64  lign=left>.The d
1810: 61 74 61 62 61 73 65 20 74 65 78 74 20 65 6e 63  atabase text enc
1820: 6f 64 69 6e 67 2e 20 20 41 20 76 61 6c 75 65 20  oding.  A value 
1830: 6f 66 20 31 20 6d 65 61 6e 73 20 55 54 46 2d 38  of 1 means UTF-8
1840: 2e 20 20 41 20 76 61 6c 75 65 20 6f 66 20 32 0a  .  A value of 2.
1850: 6d 65 61 6e 73 20 55 54 46 2d 31 36 6c 65 2e 20  means UTF-16le. 
1860: 20 41 20 76 61 6c 75 65 20 6f 66 20 33 20 6d 65   A value of 3 me
1870: 61 6e 73 20 55 54 46 2d 31 36 62 65 2e 0a 3c 74  ans UTF-16be..<t
1880: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1890: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 30   align=center>60
18a0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
18b0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
18c0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65   align=left>.The
18d0: 20 22 75 73 65 72 20 76 65 72 73 69 6f 6e 22 20   "user version" 
18e0: 61 73 20 72 65 61 64 20 61 6e 64 20 73 65 74 20  as read and set 
18f0: 62 79 20 74 68 65 20 5b 75 73 65 72 5f 76 65 72  by the [user_ver
1900: 73 69 6f 6e 20 70 72 61 67 6d 61 5d 2e 0a 3c 74  sion pragma]..<t
1910: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1920: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 36 34   align=center>64
1930: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1940: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
1950: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 72 75   align=left>.Tru
1960: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 66 6f 72  e (non-zero) for
1970: 20 69 6e 63 72 65 6d 65 6e 74 61 6c 2d 76 61 63   incremental-vac
1980: 75 75 6d 20 6d 6f 64 65 2e 20 20 46 61 6c 73 65  uum mode.  False
1990: 20 28 7a 65 72 6f 29 20 6f 74 68 65 72 77 69 73   (zero) otherwis
19a0: 65 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  e..<tr><td valig
19b0: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
19c0: 65 72 3e 36 38 3c 74 64 20 76 61 6c 69 67 6e 3d  er>68<td valign=
19d0: 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
19e0: 3e 34 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74  >4<td align=left
19f0: 3e 0a 54 68 65 20 22 41 70 70 6c 69 63 61 74 69  >.The "Applicati
1a00: 6f 6e 20 49 44 22 20 73 65 74 20 62 79 20 5b 50  on ID" set by [P
1a10: 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74 69 6f  RAGMA applicatio
1a20: 6e 5f 69 64 5d 2e 0a 3c 74 72 3e 3c 74 64 20 76  n_id]..<tr><td v
1a30: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
1a40: 63 65 6e 74 65 72 3e 37 32 3c 74 64 20 76 61 6c  center>72<td val
1a50: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
1a60: 6e 74 65 72 3e 32 30 3c 74 64 20 61 6c 69 67 6e  nter>20<td align
1a70: 3d 6c 65 66 74 3e 0a 52 65 73 65 72 76 65 64 20  =left>.Reserved 
1a80: 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e 2e 20 20  for expansion.  
1a90: 4d 75 73 74 20 62 65 20 7a 65 72 6f 2e 0a 3c 74  Must be zero..<t
1aa0: 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70  r><td valign=top
1ab0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 39 32   align=center>92
1ac0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
1ad0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64  lign=center>4<td
1ae0: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 54 68 65   align=left>.The
1af0: 20 5b 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d   [version-valid-
1b00: 66 6f 72 20 6e 75 6d 62 65 72 5d 2e 0a 3c 74 72  for number]..<tr
1b10: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
1b20: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 39 36 3c  align=center>96<
1b30: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
1b40: 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20  ign=center>4<td 
1b50: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5b 53 51 4c  align=left>.[SQL
1b60: 49 54 45 5f 56 45 52 53 49 4f 4e 5f 4e 55 4d 42  ITE_VERSION_NUMB
1b70: 45 52 5d 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65  ER].</table></ce
1b80: 6e 74 65 72 3e 0a 0a 3c 68 33 3e 4d 61 67 69 63  nter>..<h3>Magic
1b90: 20 48 65 61 64 65 72 20 53 74 72 69 6e 67 3c 2f   Header String</
1ba0: 68 33 3e 0a 0a 3c 70 3e 5e 45 76 65 72 79 20 76  h3>..<p>^Every v
1bb0: 61 6c 69 64 20 53 51 4c 69 74 65 20 64 61 74 61  alid SQLite data
1bc0: 62 61 73 65 20 66 69 6c 65 20 62 65 67 69 6e 73  base file begins
1bd0: 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c 6f 77   with the follow
1be0: 69 6e 67 20 31 36 20 62 79 74 65 73 20 0a 28 69  ing 16 bytes .(i
1bf0: 6e 20 68 65 78 29 3a 20 35 33 20 35 31 20 34 63  n hex): 53 51 4c
1c00: 20 36 39 20 37 34 20 36 35 20 32 30 20 36 36 20   69 74 65 20 66 
1c10: 36 66 20 37 32 20 36 64 20 36 31 20 37 34 20 32  6f 72 6d 61 74 2
1c20: 30 20 33 33 20 30 30 2e 20 20 54 68 69 73 20 62  0 33 00.  This b
1c30: 79 74 65 20 73 65 71 75 65 6e 63 65 0a 63 6f 72  yte sequence.cor
1c40: 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
1c50: 55 54 46 2d 38 20 73 74 72 69 6e 67 20 22 53 51  UTF-8 string "SQ
1c60: 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 22 20 69  Lite format 3" i
1c70: 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 6e 75 6c  ncluding the nul
1c80: 0a 74 65 72 6d 69 6e 61 74 6f 72 20 63 68 61 72  .terminator char
1c90: 61 63 74 65 72 20 61 74 20 74 68 65 20 65 6e 64  acter at the end
1ca0: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 50 61 67 65 20  .</p>..<h3>Page 
1cb0: 53 69 7a 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68  Size</h3>..<p>Th
1cc0: 65 20 74 77 6f 2d 62 79 74 65 20 76 61 6c 75 65  e two-byte value
1cd0: 20 62 65 67 69 6e 6e 69 6e 67 20 61 74 20 6f 66   beginning at of
1ce0: 66 73 65 74 20 31 36 20 64 65 74 65 72 6d 69 6e  fset 16 determin
1cf0: 65 73 20 74 68 65 20 70 61 67 65 20 73 69 7a 65  es the page size
1d00: 20 6f 66 20 0a 74 68 65 20 64 61 74 61 62 61 73   of .the databas
1d10: 65 2e 20 20 46 6f 72 20 53 51 4c 69 74 65 20 76  e.  For SQLite v
1d20: 65 72 73 69 6f 6e 73 20 33 2e 37 2e 30 2e 31 20  ersions 3.7.0.1 
1d30: 61 6e 64 20 65 61 72 6c 69 65 72 2c 20 74 68 69  and earlier, thi
1d40: 73 20 76 61 6c 75 65 20 69 73 20 0a 69 6e 74 65  s value is .inte
1d50: 72 70 72 65 74 65 64 20 61 73 20 61 20 62 69 67  rpreted as a big
1d60: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
1d70: 61 6e 64 20 6d 75 73 74 20 62 65 20 61 20 70 6f  and must be a po
1d80: 77 65 72 20 6f 66 20 74 77 6f 20 62 65 74 77 65  wer of two betwe
1d90: 65 6e 0a 35 31 32 20 61 6e 64 20 33 32 37 36 38  en.512 and 32768
1da0: 2c 20 69 6e 63 6c 75 73 69 76 65 2e 20 20 42 65  , inclusive.  Be
1db0: 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 53 51 4c  ginning with SQL
1dc0: 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e  ite version 3.7.
1dd0: 31 2c 20 61 20 70 61 67 65 0a 73 69 7a 65 20 6f  1, a page.size o
1de0: 66 20 36 35 35 33 36 20 62 79 74 65 73 20 69 73  f 65536 bytes is
1df0: 20 73 75 70 70 6f 72 74 65 64 2e 20 20 54 68 65   supported.  The
1e00: 20 76 61 6c 75 65 20 36 35 35 33 36 20 77 69 6c   value 65536 wil
1e10: 6c 20 6e 6f 74 20 66 69 74 20 69 6e 20 61 0a 74  l not fit in a.t
1e20: 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65 72 2c  wo-byte integer,
1e30: 20 73 6f 20 74 6f 20 73 70 65 63 69 66 79 20 61   so to specify a
1e40: 20 36 35 35 33 36 2d 62 79 74 65 20 70 61 67 65   65536-byte page
1e50: 20 73 69 7a 65 2c 20 74 68 65 20 76 61 6c 75 65   size, the value
1e60: 0a 61 74 20 6f 66 66 73 65 74 20 31 36 20 69 73  .at offset 16 is
1e70: 20 30 78 30 30 20 30 78 30 31 2e 0a 54 68 69 73   0x00 0x01..This
1e80: 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 69 6e   value can be in
1e90: 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20 62  terpreted as a b
1ea0: 69 67 2d 65 6e 64 69 61 6e 0a 31 20 61 6e 64 20  ig-endian.1 and 
1eb0: 74 68 6f 75 67 68 74 20 6f 66 20 69 73 20 61 73  thought of is as
1ec0: 20 61 20 6d 61 67 69 63 20 6e 75 6d 62 65 72 20   a magic number 
1ed0: 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65  to represent the
1ee0: 20 36 35 35 33 36 20 70 61 67 65 20 73 69 7a 65   65536 page size
1ef0: 2e 0a 4f 72 20 6f 6e 65 20 63 61 6e 20 76 69 65  ..Or one can vie
1f00: 77 20 74 68 65 20 74 77 6f 2d 62 79 74 65 20 66  w the two-byte f
1f10: 69 65 6c 64 20 61 73 20 61 20 6c 69 74 74 6c 65  ield as a little
1f20: 20 65 6e 64 69 61 6e 20 6e 75 6d 62 65 72 20 61   endian number a
1f30: 6e 64 20 73 61 79 0a 74 68 61 74 20 69 74 20 72  nd say.that it r
1f40: 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 70 61  epresents the pa
1f50: 67 65 20 73 69 7a 65 20 64 69 76 69 64 65 64 20  ge size divided 
1f60: 62 79 20 32 35 36 2e 20 20 54 68 65 73 65 20 74  by 256.  These t
1f70: 77 6f 20 0a 69 6e 74 65 72 70 72 65 74 61 74 69  wo .interpretati
1f80: 6f 6e 73 20 6f 66 20 74 68 65 20 70 61 67 65 2d  ons of the page-
1f90: 73 69 7a 65 20 66 69 65 6c 64 20 61 72 65 20 65  size field are e
1fa0: 71 75 69 76 61 6c 65 6e 74 2e 3c 2f 70 3e 0a 0a  quivalent.</p>..
1fb0: 3c 68 33 3e 46 69 6c 65 20 66 6f 72 6d 61 74 20  <h3>File format 
1fc0: 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 3c  version numbers<
1fd0: 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 66 69 6c  /h3>..<p>The fil
1fe0: 65 20 66 6f 72 6d 61 74 20 77 72 69 74 65 20 76  e format write v
1ff0: 65 72 73 69 6f 6e 20 61 6e 64 20 66 69 6c 65 20  ersion and file 
2000: 66 6f 72 6d 61 74 20 72 65 61 64 20 76 65 72 73  format read vers
2010: 69 6f 6e 20 61 74 20 6f 66 66 73 65 74 73 0a 31  ion at offsets.1
2020: 38 20 61 6e 64 20 31 39 20 61 72 65 20 69 6e 74  8 and 19 are int
2030: 65 6e 64 65 64 20 74 6f 20 61 6c 6c 6f 77 20 66  ended to allow f
2040: 6f 72 20 65 6e 68 61 6e 63 65 6d 65 6e 74 73 20  or enhancements 
2050: 6f 66 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d  of the file form
2060: 61 74 0a 69 6e 20 66 75 74 75 72 65 20 76 65 72  at.in future ver
2070: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2e  sions of SQLite.
2080: 20 20 49 6e 20 63 75 72 72 65 6e 74 20 76 65 72    In current ver
2090: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 2c  sions of SQLite,
20a0: 20 62 6f 74 68 20 6f 66 0a 74 68 65 73 65 20 76   both of.these v
20b0: 61 6c 75 65 73 20 61 72 65 20 31 20 66 6f 72 20  alues are 1 for 
20c0: 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
20d0: 6c 69 6e 67 20 6d 6f 64 65 73 20 61 6e 64 20 32  ling modes and 2
20e0: 20 66 6f 72 20 5b 57 41 4c 5d 0a 6a 6f 75 72 6e   for [WAL].journ
20f0: 61 6c 6c 69 6e 67 20 6d 6f 64 65 2e 20 20 49 66  alling mode.  If
2100: 20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51   a version of SQ
2110: 4c 69 74 65 20 63 6f 64 65 64 20 74 6f 20 74 68  Lite coded to th
2120: 65 20 63 75 72 72 65 6e 74 0a 66 69 6c 65 20 66  e current.file f
2130: 6f 72 6d 61 74 20 73 70 65 63 69 66 69 63 61 74  ormat specificat
2140: 69 6f 6e 20 65 6e 63 6f 75 6e 74 65 72 73 20 61  ion encounters a
2150: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 77   database file w
2160: 68 65 72 65 20 74 68 65 20 72 65 61 64 0a 76 65  here the read.ve
2170: 72 73 69 6f 6e 20 69 73 20 31 20 6f 72 20 32 20  rsion is 1 or 2 
2180: 62 75 74 20 74 68 65 20 77 72 69 74 65 20 76 65  but the write ve
2190: 72 73 69 6f 6e 20 69 73 20 67 72 65 61 74 65 72  rsion is greater
21a0: 20 74 68 61 6e 20 32 2c 20 74 68 65 6e 20 74 68   than 2, then th
21b0: 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20  e database.file 
21c0: 6d 75 73 74 20 62 65 20 74 72 65 61 74 65 64 20  must be treated 
21d0: 61 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 49  as read-only.  I
21e0: 66 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  f a database fil
21f0: 65 20 77 69 74 68 20 61 20 72 65 61 64 20 76 65  e with a read ve
2200: 72 73 69 6f 6e 0a 67 72 65 61 74 65 72 20 74 68  rsion.greater th
2210: 61 6e 20 32 20 69 73 20 65 6e 63 6f 75 6e 74 65  an 2 is encounte
2220: 72 65 64 2c 20 74 68 65 6e 20 74 68 61 74 20 64  red, then that d
2230: 61 74 61 62 61 73 65 20 63 61 6e 6e 6f 74 20 62  atabase cannot b
2240: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
2250: 6e 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 52 65 73 65  n.</p>..<h3>Rese
2260: 72 76 65 64 20 62 79 74 65 73 20 70 65 72 20 70  rved bytes per p
2270: 61 67 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 53 51 4c  age</h3>..<p>SQL
2280: 69 74 65 20 68 61 73 20 74 68 65 20 61 62 69 6c  ite has the abil
2290: 69 74 79 20 74 6f 20 73 65 74 20 61 73 69 64 65  ity to set aside
22a0: 20 61 20 73 6d 61 6c 6c 20 6e 75 6d 62 65 72 20   a small number 
22b0: 6f 66 20 65 78 74 72 61 20 62 79 74 65 73 20 61  of extra bytes a
22c0: 74 0a 74 68 65 20 65 6e 64 20 6f 66 20 65 76 65  t.the end of eve
22d0: 72 79 20 70 61 67 65 20 66 6f 72 20 75 73 65 20  ry page for use 
22e0: 62 79 20 65 78 74 65 6e 73 69 6f 6e 73 2e 20 20  by extensions.  
22f0: 54 68 65 73 65 20 65 78 74 72 61 20 62 79 74 65  These extra byte
2300: 73 20 61 72 65 0a 75 73 65 64 2c 20 66 6f 72 20  s are.used, for 
2310: 65 78 61 6d 70 6c 65 2c 20 62 79 20 74 68 65 20  example, by the 
2320: 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74 69 6f  SQLite Encryptio
2330: 6e 20 45 78 74 65 6e 73 69 6f 6e 20 74 6f 20 73  n Extension to s
2340: 74 6f 72 65 20 61 20 6e 6f 6e 63 65 0a 61 6e 64  tore a nonce.and
2350: 2f 6f 72 20 63 72 79 70 74 6f 67 72 61 70 68 69  /or cryptographi
2360: 63 20 63 68 65 63 6b 73 75 6d 20 61 73 73 6f 63  c checksum assoc
2370: 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68 20  iated with each 
2380: 70 61 67 65 2e 20 20 5e 54 68 65 20 0a 22 72 65  page.  ^The ."re
2390: 73 65 72 76 65 64 20 73 70 61 63 65 22 20 73 69  served space" si
23a0: 7a 65 20 69 6e 20 74 68 65 20 31 2d 62 79 74 65  ze in the 1-byte
23b0: 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73   integer at offs
23c0: 65 74 20 32 30 20 69 73 20 74 68 65 20 6e 75 6d  et 20 is the num
23d0: 62 65 72 0a 6f 66 20 62 79 74 65 73 20 6f 66 20  ber.of bytes of 
23e0: 73 70 61 63 65 20 61 74 20 74 68 65 20 65 6e 64  space at the end
23f0: 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 74 6f   of each page to
2400: 20 72 65 73 65 72 76 65 20 66 6f 72 20 65 78 74   reserve for ext
2410: 65 6e 73 69 6f 6e 73 2e 0a 54 68 69 73 20 76 61  ensions..This va
2420: 6c 75 65 20 69 73 20 75 73 75 61 6c 6c 79 20 30  lue is usually 0
2430: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e  .  The value can
2440: 20 62 65 20 6f 64 64 2e 3c 2f 70 3e 0a 0a 3c 74   be odd.</p>..<t
2450: 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 75  cl>hd_fragment u
2460: 73 61 62 6c 65 5f 73 69 7a 65 20 7b 75 73 61 62  sable_size {usab
2470: 6c 65 20 73 69 7a 65 7d 3c 2f 74 63 6c 3e 0a 3c  le size}</tcl>.<
2480: 70 3e 54 68 65 20 22 75 73 61 62 6c 65 20 73 69  p>The "usable si
2490: 7a 65 22 20 6f 66 20 61 20 64 61 74 61 62 61 73  ze" of a databas
24a0: 65 20 70 61 67 65 20 69 73 20 74 68 65 20 70 61  e page is the pa
24b0: 67 65 20 73 69 7a 65 20 73 70 65 63 69 66 79 20  ge size specify 
24c0: 62 79 20 74 68 65 0a 32 2d 62 79 74 65 20 69 6e  by the.2-byte in
24d0: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
24e0: 31 36 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  16 in the header
24f0: 20 6c 65 73 73 20 74 68 65 20 22 72 65 73 65 72   less the "reser
2500: 76 65 64 22 20 73 70 61 63 65 20 73 69 7a 65 0a  ved" space size.
2510: 72 65 63 6f 72 64 65 64 20 69 6e 20 74 68 65 20  recorded in the 
2520: 31 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61  1-byte integer a
2530: 74 20 6f 66 66 73 65 74 20 32 30 20 69 6e 20 74  t offset 20 in t
2540: 68 65 20 68 65 61 64 65 72 2e 20 20 54 68 65 20  he header.  The 
2550: 75 73 61 62 6c 65 0a 73 69 7a 65 20 6f 66 20 61  usable.size of a
2560: 20 70 61 67 65 20 6d 69 67 68 74 20 62 65 20 61   page might be a
2570: 6e 20 6f 64 64 20 6e 75 6d 62 65 72 2e 20 20 5e  n odd number.  ^
2580: 28 48 6f 77 65 76 65 72 2c 20 74 68 65 20 75 73  (However, the us
2590: 61 62 6c 65 20 73 69 7a 65 20 69 73 20 6e 6f 74  able size is not
25a0: 0a 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c  .allowed to be l
25b0: 65 73 73 20 74 68 61 6e 20 34 38 30 2e 20 20 49  ess than 480.  I
25c0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
25d0: 66 20 74 68 65 20 70 61 67 65 20 73 69 7a 65 20  f the page size 
25e0: 69 73 20 35 31 32 2c 0a 74 68 65 6e 20 74 68 65  is 512,.then the
25f0: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20   reserved space 
2600: 73 69 7a 65 20 63 61 6e 6e 6f 74 20 65 78 63 65  size cannot exce
2610: 65 64 20 33 32 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68  ed 32.)^</p>..<h
2620: 33 3e 50 61 79 6c 6f 61 64 20 66 72 61 63 74 69  3>Payload fracti
2630: 6f 6e 73 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ons</h3>..<p>^Th
2640: 65 20 6d 61 78 69 6d 75 6d 20 61 6e 64 20 6d 69  e maximum and mi
2650: 6e 69 6d 75 6d 20 65 6d 62 65 64 64 65 64 20 70  nimum embedded p
2660: 61 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 73  ayload fractions
2670: 20 61 6e 64 20 74 68 65 20 6c 65 61 66 0a 70 61   and the leaf.pa
2680: 79 6c 6f 61 64 20 66 72 61 63 74 69 6f 6e 20 76  yload fraction v
2690: 61 6c 75 65 73 20 6d 75 73 74 20 62 65 20 36 34  alues must be 64
26a0: 2c 20 33 32 2c 20 61 6e 64 20 33 32 2e 20 20 54  , 32, and 32.  T
26b0: 68 65 73 65 20 76 61 6c 75 65 73 20 77 65 72 65  hese values were
26c0: 0a 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 74 65  .originally inte
26d0: 6e 64 65 64 20 74 6f 20 62 65 20 74 75 6e 61 62  nded to be tunab
26e0: 6c 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 68  le parameters th
26f0: 61 74 20 63 6f 75 6c 64 20 62 65 20 75 73 65 64  at could be used
2700: 20 74 6f 0a 6d 6f 64 69 66 79 20 74 68 65 20 73   to.modify the s
2710: 74 6f 72 61 67 65 20 66 6f 72 6d 61 74 20 6f 66  torage format of
2720: 20 74 68 65 20 62 2d 74 72 65 65 20 61 6c 67 6f   the b-tree algo
2730: 72 69 74 68 6d 2e 20 20 48 6f 77 65 76 65 72 2c  rithm.  However,
2740: 20 74 68 61 74 0a 66 75 6e 63 74 69 6f 6e 61 6c   that.functional
2750: 69 74 79 20 69 73 20 6e 6f 74 20 73 75 70 70 6f  ity is not suppo
2760: 72 74 65 64 20 61 6e 64 20 74 68 65 72 65 20 61  rted and there a
2770: 72 65 20 6e 6f 20 63 75 72 72 65 6e 74 20 70 6c  re no current pl
2780: 61 6e 73 20 74 6f 20 61 64 64 0a 73 75 70 70 6f  ans to add.suppo
2790: 72 74 20 69 6e 20 74 68 65 20 66 75 74 75 72 65  rt in the future
27a0: 2e 20 20 48 65 6e 63 65 2c 20 74 68 65 73 65 20  .  Hence, these 
27b0: 74 68 72 65 65 20 62 79 74 65 73 20 61 72 65 20  three bytes are 
27c0: 66 69 78 65 64 20 61 74 20 74 68 65 0a 76 61 6c  fixed at the.val
27d0: 75 65 73 20 73 70 65 63 69 66 69 65 64 2e 3c 2f  ues specified.</
27e0: 70 3e 0a 0a 3c 68 33 3e 46 69 6c 65 20 63 68 61  p>..<h3>File cha
27f0: 6e 67 65 20 63 6f 75 6e 74 65 72 3c 2f 68 33 3e  nge counter</h3>
2800: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
2810: 6e 74 20 63 68 6e 67 63 74 72 20 7b 63 68 61 6e  nt chngctr {chan
2820: 67 65 20 63 6f 75 6e 74 65 72 7d 3c 2f 74 63 6c  ge counter}</tcl
2830: 3e 0a 3c 70 3e 5e 54 68 65 20 66 69 6c 65 20 63  >.<p>^The file c
2840: 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2850: 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e   a 4-byte big-en
2860: 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 0a  dian integer at.
2870: 6f 66 66 73 65 74 20 32 34 20 74 68 61 74 20 69  offset 24 that i
2880: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68  s incremented wh
2890: 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
28a0: 61 73 65 20 66 69 6c 65 20 69 73 20 75 6e 6c 6f  ase file is unlo
28b0: 63 6b 65 64 0a 61 66 74 65 72 20 68 61 76 69 6e  cked.after havin
28c0: 67 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 2e  g been modified.
28d0: 0a 57 68 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72  .When two or mor
28e0: 65 20 70 72 6f 63 65 73 73 65 73 20 61 72 65 20  e processes are 
28f0: 72 65 61 64 69 6e 67 20 74 68 65 20 73 61 6d 65  reading the same
2900: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20   database file, 
2910: 65 61 63 68 20 0a 70 72 6f 63 65 73 73 20 63 61  each .process ca
2920: 6e 20 64 65 74 65 63 74 20 64 61 74 61 62 61 73  n detect databas
2930: 65 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 6f  e changes from o
2940: 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 62  ther processes b
2950: 79 20 6d 6f 6e 69 74 6f 72 69 6e 67 20 0a 74 68  y monitoring .th
2960: 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
2970: 2e 0a 41 20 70 72 6f 63 65 73 73 20 77 69 6c 6c  ..A process will
2980: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 20 74   normally want t
2990: 6f 20 66 6c 75 73 68 20 69 74 73 20 64 61 74 61  o flush its data
29a0: 62 61 73 65 20 70 61 67 65 20 63 61 63 68 65 20  base page cache 
29b0: 77 68 65 6e 0a 61 6e 6f 74 68 65 72 20 70 72 6f  when.another pro
29c0: 63 65 73 73 20 6d 6f 64 69 66 69 65 64 20 74 68  cess modified th
29d0: 65 20 64 61 74 61 62 61 73 65 2c 20 73 69 6e 63  e database, sinc
29e0: 65 20 74 68 65 20 63 61 63 68 65 20 68 61 73 20  e the cache has 
29f0: 62 65 63 6f 6d 65 20 73 74 61 6c 65 2e 0a 54 68  become stale..Th
2a00: 65 20 66 69 6c 65 20 63 68 61 6e 67 65 20 63 6f  e file change co
2a10: 75 6e 74 65 72 20 66 61 63 69 6c 69 74 61 74 65  unter facilitate
2a20: 73 20 74 68 69 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  s this.</p>..<p>
2a30: 49 6e 20 57 41 4c 20 6d 6f 64 65 2c 20 63 68 61  In WAL mode, cha
2a40: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 61 74 61  nges to the data
2a50: 62 61 73 65 20 61 72 65 20 64 65 74 65 63 74 65  base are detecte
2a60: 64 20 75 73 69 6e 67 20 74 68 65 20 77 61 6c 2d  d using the wal-
2a70: 69 6e 64 65 78 0a 61 6e 64 20 73 6f 20 74 68 65  index.and so the
2a80: 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2a90: 69 73 20 6e 6f 74 20 6e 65 65 64 65 64 2e 20 20  is not needed.  
2aa0: 48 65 6e 63 65 2c 20 74 68 65 20 63 68 61 6e 67  Hence, the chang
2ab0: 65 20 63 6f 75 6e 74 65 72 20 6d 69 67 68 74 0a  e counter might.
2ac0: 6e 6f 74 20 62 65 20 69 6e 63 72 65 6d 65 6e 74  not be increment
2ad0: 65 64 20 6f 6e 20 65 61 63 68 20 74 72 61 6e 73  ed on each trans
2ae0: 61 63 74 69 6f 6e 20 69 6e 20 57 41 4c 20 6d 6f  action in WAL mo
2af0: 64 65 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 49 6e 2d  de.</p>..<h3>In-
2b00: 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20  header database 
2b10: 73 69 7a 65 3c 2f 68 33 3e 0a 0a 3c 74 63 6c 3e  size</h3>..<tcl>
2b20: 68 64 5f 66 72 61 67 6d 65 6e 74 20 66 69 6c 65  hd_fragment file
2b30: 73 69 7a 65 20 7b 69 6e 2d 68 65 61 64 65 72 20  size {in-header 
2b40: 64 61 74 61 62 61 73 65 20 73 69 7a 65 7d 3c 2f  database size}</
2b50: 74 63 6c 3e 0a 3c 70 3e 5e 54 68 65 20 34 2d 62  tcl>.<p>^The 4-b
2b60: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
2b70: 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74  nteger at offset
2b80: 20 32 38 20 69 6e 74 6f 20 74 68 65 20 68 65 61   28 into the hea
2b90: 64 65 72 20 0a 73 74 6f 72 65 73 20 74 68 65 20  der .stores the 
2ba0: 73 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61  size of the data
2bb0: 62 61 73 65 20 66 69 6c 65 20 69 6e 20 70 61 67  base file in pag
2bc0: 65 73 2e 20 20 5e 49 66 20 74 68 69 73 20 69 6e  es.  ^If this in
2bd0: 2d 68 65 61 64 65 72 0a 64 61 74 61 73 69 7a 65  -header.datasize
2be0: 20 73 69 7a 65 20 69 73 20 6e 6f 74 20 76 61 6c   size is not val
2bf0: 69 64 20 28 73 65 65 20 74 68 65 20 6e 65 78 74  id (see the next
2c00: 20 70 61 72 61 67 72 61 70 68 29 2c 20 74 68 65   paragraph), the
2c10: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 0a  n the database .
2c20: 73 69 7a 65 20 69 73 20 63 6f 6d 70 75 74 65 64  size is computed
2c30: 20 62 79 20 6c 6f 6f 6b 69 6e 67 0a 61 74 20 74   by looking.at t
2c40: 68 65 20 61 63 74 75 61 6c 20 73 69 7a 65 20 6f  he actual size o
2c50: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
2c60: 69 6c 65 2e 20 4f 6c 64 65 72 20 76 65 72 73 69  ile. Older versi
2c70: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 0a 69 67  ons of SQLite.ig
2c80: 6e 6f 72 65 64 20 74 68 65 20 69 6e 2d 68 65 61  nored the in-hea
2c90: 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69 7a  der database siz
2ca0: 65 20 61 6e 64 20 75 73 65 64 20 74 68 65 20 61  e and used the a
2cb0: 63 74 75 61 6c 20 66 69 6c 65 20 73 69 7a 65 0a  ctual file size.
2cc0: 65 78 63 6c 75 73 69 76 65 6c 79 2e 20 20 5e 4e  exclusively.  ^N
2cd0: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
2ce0: 20 53 51 4c 69 74 65 20 75 73 65 20 74 68 65 20   SQLite use the 
2cf0: 69 6e 2d 68 65 61 64 65 72 20 64 61 74 61 62 61  in-header databa
2d00: 73 65 0a 73 69 7a 65 20 69 66 20 69 74 20 69 73  se.size if it is
2d10: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 74 20 66   available but f
2d20: 61 6c 6c 20 62 61 63 6b 20 74 6f 20 74 68 65 20  all back to the 
2d30: 61 63 74 75 61 6c 20 66 69 6c 65 20 73 69 7a 65  actual file size
2d40: 20 69 66 0a 74 68 65 20 69 6e 2d 68 65 61 64 65   if.the in-heade
2d50: 72 20 64 61 74 61 62 61 73 65 20 73 69 7a 65 20  r database size 
2d60: 69 73 20 6e 6f 74 20 76 61 6c 69 64 2e 3c 2f 70  is not valid.</p
2d70: 3e 0a 0a 3c 70 3e 5e 54 68 65 20 69 6e 2d 68 65  >..<p>^The in-he
2d80: 61 64 65 72 20 64 61 74 61 62 61 73 65 20 73 69  ader database si
2d90: 7a 65 20 69 73 20 6f 6e 6c 79 20 63 6f 6e 73 69  ze is only consi
2da0: 64 65 72 65 64 20 74 6f 20 62 65 20 76 61 6c 69  dered to be vali
2db0: 64 20 69 66 0a 69 74 20 69 73 20 6e 6f 6e 2d 7a  d if.it is non-z
2dc0: 65 72 6f 20 61 6e 64 20 69 66 20 74 68 65 20 34  ero and if the 4
2dd0: 2d 62 79 74 65 20 5b 63 68 61 6e 67 65 20 63 6f  -byte [change co
2de0: 75 6e 74 65 72 5d 20 61 74 20 6f 66 66 73 65 74  unter] at offset
2df0: 20 32 34 0a 65 78 61 63 74 6c 79 20 6d 61 74 63   24.exactly matc
2e00: 68 65 73 20 74 68 65 20 34 2d 62 79 74 65 20 5b  hes the 4-byte [
2e10: 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f  version-valid-fo
2e20: 72 20 6e 75 6d 62 65 72 5d 20 61 74 20 6f 66 66  r number] at off
2e30: 73 65 74 20 39 32 2e 0a 5e 28 54 68 65 20 69 6e  set 92..^(The in
2e40: 2d 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65  -header database
2e50: 20 73 69 7a 65 20 69 73 20 61 6c 77 61 79 73 20   size is always 
2e60: 76 61 6c 69 64 20 0a 77 68 65 6e 20 74 68 65 20  valid .when the 
2e70: 64 61 74 61 62 61 73 65 20 69 73 20 6f 6e 6c 79  database is only
2e80: 20 6d 6f 64 69 66 69 65 64 20 75 73 69 6e 67 20   modified using 
2e90: 72 65 63 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  recent versions 
2ea0: 6f 66 20 53 51 4c 69 74 65 0a 28 76 65 72 73 69  of SQLite.(versi
2eb0: 6f 6e 73 20 33 2e 37 2e 30 20 61 6e 64 20 6c 61  ons 3.7.0 and la
2ec0: 74 65 72 29 2e 29 5e 0a 49 66 20 61 20 6c 65 67  ter).)^.If a leg
2ed0: 61 63 79 20 76 65 72 73 69 6f 6e 20 6f 66 20 53  acy version of S
2ee0: 51 4c 69 74 65 20 77 72 69 74 65 73 20 74 6f 20  QLite writes to 
2ef0: 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 69 74  the database, it
2f00: 20 77 69 6c 6c 20 6e 6f 74 0a 6b 6e 6f 77 20 74   will not.know t
2f10: 6f 20 75 70 64 61 74 65 20 74 68 65 20 69 6e 2d  o update the in-
2f20: 68 65 61 64 65 72 20 64 61 74 61 62 61 73 65 20  header database 
2f30: 73 69 7a 65 20 61 6e 64 20 73 6f 20 74 68 65 20  size and so the 
2f40: 69 6e 2d 68 65 61 64 65 72 0a 64 61 74 61 62 61  in-header.databa
2f50: 73 65 20 73 69 7a 65 20 63 6f 75 6c 64 20 62 65  se size could be
2f60: 20 69 6e 63 6f 72 72 65 63 74 2e 20 20 42 75 74   incorrect.  But
2f70: 20 6c 65 67 61 63 79 20 76 65 72 73 69 6f 6e 73   legacy versions
2f80: 20 6f 66 20 53 51 4c 69 74 65 0a 77 69 6c 6c 20   of SQLite.will 
2f90: 61 6c 73 6f 20 6c 65 61 76 65 20 74 68 65 20 76  also leave the v
2fa0: 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f 72  ersion-valid-for
2fb0: 20 6e 75 6d 62 65 72 20 61 74 20 6f 66 66 73 65   number at offse
2fc0: 74 20 39 32 20 75 6e 63 68 61 6e 67 65 64 0a 73  t 92 unchanged.s
2fd0: 6f 20 69 74 20 77 69 6c 6c 20 6e 6f 74 20 6d 61  o it will not ma
2fe0: 74 63 68 20 74 68 65 20 63 68 61 6e 67 65 2d 63  tch the change-c
2ff0: 6f 75 6e 74 65 72 2e 20 20 48 65 6e 63 65 2c 20  ounter.  Hence, 
3000: 69 6e 76 61 6c 69 64 20 69 6e 2d 68 65 61 64 65  invalid in-heade
3010: 72 0a 64 61 74 61 62 61 73 65 20 73 69 7a 65 73  r.database sizes
3020: 20 63 61 6e 20 62 65 20 64 65 74 65 63 74 65 64   can be detected
3030: 20 28 61 6e 64 20 69 67 6e 6f 72 65 64 29 20 62   (and ignored) b
3040: 79 20 6f 62 73 65 72 76 69 6e 67 20 77 68 65 6e  y observing when
3050: 0a 74 68 65 20 63 68 61 6e 67 65 2d 63 6f 75 6e  .the change-coun
3060: 74 65 72 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  ter does not mat
3070: 63 68 20 74 68 65 20 76 65 72 73 69 6f 6e 2d 76  ch the version-v
3080: 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65 72 2e  alid-for number.
3090: 3c 2f 70 3e 0a 0a 3c 68 33 3e 46 72 65 65 20 70  </p>..<h3>Free p
30a0: 61 67 65 20 6c 69 73 74 3c 2f 68 33 3e 0a 0a 3c  age list</h3>..<
30b0: 70 3e 55 6e 75 73 65 64 20 70 61 67 65 73 20 69  p>Unused pages i
30c0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
30d0: 69 6c 65 20 61 72 65 20 73 74 6f 72 65 64 20 6f  ile are stored o
30e0: 6e 20 61 20 66 72 65 65 6c 69 73 74 2e 20 20 5e  n a freelist.  ^
30f0: 54 68 65 0a 34 2d 62 79 74 65 20 62 69 67 2d 65  The.4-byte big-e
3100: 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74  ndian integer at
3110: 20 6f 66 66 73 65 74 20 33 32 20 73 74 6f 72 65   offset 32 store
3120: 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65  s the page numbe
3130: 72 20 6f 66 0a 74 68 65 20 66 69 72 73 74 20 70  r of.the first p
3140: 61 67 65 20 6f 66 20 74 68 65 20 66 72 65 65 6c  age of the freel
3150: 69 73 74 2c 20 6f 72 20 7a 65 72 6f 20 69 66 20  ist, or zero if 
3160: 74 68 65 20 66 72 65 65 6c 69 73 74 20 69 73 20  the freelist is 
3170: 65 6d 70 74 79 2e 0a 5e 54 68 65 20 34 2d 62 79  empty..^The 4-by
3180: 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e  te big-endian in
3190: 74 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20  teger at offset 
31a0: 33 36 20 73 74 6f 72 65 73 20 73 74 6f 72 65 73  36 stores stores
31b0: 20 74 68 65 20 74 6f 74 61 6c 20 0a 6e 75 6d 62   the total .numb
31c0: 65 72 20 6f 66 20 70 61 67 65 73 20 6f 6e 20 74  er of pages on t
31d0: 68 65 20 66 72 65 65 6c 69 73 74 2e 3c 2f 70 3e  he freelist.</p>
31e0: 0a 0a 3c 68 33 3e 53 63 68 65 6d 61 20 63 6f 6f  ..<h3>Schema coo
31f0: 6b 69 65 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  kie</h3>..<p>^Th
3200: 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
3210: 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67 2d  is a 4-byte big-
3220: 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20 61  endian integer a
3230: 74 20 6f 66 66 73 65 74 20 34 30 0a 74 68 61 74  t offset 40.that
3240: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
3250: 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
3260: 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
3270: 6e 67 65 73 2e 20 20 41 20 0a 70 72 65 70 61 72  nges.  A .prepar
3280: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
3290: 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74  compiled against
32a0: 20 61 20 73 70 65 63 69 66 69 63 20 76 65 72 73   a specific vers
32b0: 69 6f 6e 20 6f 66 20 74 68 65 0a 64 61 74 61 62  ion of the.datab
32c0: 61 73 65 20 73 63 68 65 6d 61 2e 20 20 57 68 65  ase schema.  Whe
32d0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
32e0: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
32f0: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 6d 75 73  he statement.mus
3300: 74 20 62 65 20 72 65 70 72 65 70 61 72 65 64 2e  t be reprepared.
3310: 20 20 5e 57 68 65 6e 20 61 20 70 72 65 70 61 72    ^When a prepar
3320: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e  ed statement run
3330: 73 2c 20 69 74 20 66 69 72 73 74 20 63 68 65 63  s, it first chec
3340: 6b 73 0a 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks.the schema co
3350: 6f 6b 69 65 20 74 6f 20 65 6e 73 75 72 65 20 74  okie to ensure t
3360: 68 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  he value is the 
3370: 73 61 6d 65 20 61 73 20 77 68 65 6e 20 74 68 65  same as when the
3380: 20 73 74 61 74 65 6d 65 6e 74 0a 77 61 73 20 70   statement.was p
3390: 72 65 70 61 72 65 64 20 61 6e 64 20 69 66 20 74  repared and if t
33a0: 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
33b0: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 74 68   has changed, th
33c0: 65 20 73 74 61 74 65 6d 65 6e 74 20 65 69 74 68  e statement eith
33d0: 65 72 0a 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  er.automatically
33e0: 20 72 65 70 72 65 70 61 72 65 73 20 61 6e 64 20   reprepares and 
33f0: 72 65 72 75 6e 73 20 6f 72 20 69 74 20 61 62 6f  reruns or it abo
3400: 72 74 73 20 77 69 74 68 20 61 6e 20 5b 53 51 4c  rts with an [SQL
3410: 49 54 45 5f 53 43 48 45 4d 41 5d 20 0a 65 72 72  ITE_SCHEMA] .err
3420: 6f 72 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  or.</p>..<tcl>hd
3430: 5f 66 72 61 67 6d 65 6e 74 20 7b 73 63 68 65 6d  _fragment {schem
3440: 61 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61  aformat} {schema
3450: 20 66 6f 72 6d 61 74 7d 20 7b 73 63 68 65 6d 61   format} {schema
3460: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 7d 3c   format number}<
3470: 2f 74 63 6c 3e 0a 3c 68 33 3e 53 63 68 65 6d 61  /tcl>.<h3>Schema
3480: 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 3c 2f   format number</
3490: 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 63 68 65  h3>..<p>The sche
34a0: 6d 61 20 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72  ma format number
34b0: 20 69 73 20 61 20 34 2d 62 79 74 65 20 62 69 67   is a 4-byte big
34c0: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
34d0: 61 74 20 6f 66 66 73 65 74 20 34 34 2e 0a 54 68  at offset 44..Th
34e0: 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  e schema format 
34f0: 6e 75 6d 62 65 72 20 69 73 20 73 69 6d 69 6c 61  number is simila
3500: 72 20 74 6f 20 74 68 65 20 66 69 6c 65 20 66 6f  r to the file fo
3510: 72 6d 61 74 20 72 65 61 64 20 61 6e 64 20 77 72  rmat read and wr
3520: 69 74 65 0a 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ite.version numb
3530: 65 72 73 20 61 74 20 6f 66 66 73 65 74 73 20 31  ers at offsets 1
3540: 38 20 61 6e 64 20 31 39 20 65 78 63 65 70 74 20  8 and 19 except 
3550: 74 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 20  that the schema 
3560: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 0a 72 65  format number.re
3570: 66 65 72 73 20 74 6f 20 74 68 65 20 68 69 67 68  fers to the high
3580: 2d 6c 65 76 65 6c 20 53 51 4c 20 66 6f 72 6d 61  -level SQL forma
3590: 74 74 69 6e 67 20 72 61 74 68 65 72 20 74 68 61  tting rather tha
35a0: 6e 20 74 68 65 20 6c 6f 77 2d 6c 65 76 65 6c 20  n the low-level 
35b0: 62 2d 74 72 65 65 0a 66 6f 72 6d 61 74 74 69 6e  b-tree.formattin
35c0: 67 2e 20 20 46 6f 75 72 20 73 63 68 65 6d 61 20  g.  Four schema 
35d0: 66 6f 72 6d 61 74 20 6e 75 6d 62 65 72 73 20 61  format numbers a
35e0: 72 65 20 63 75 72 72 65 6e 74 6c 79 20 64 65 66  re currently def
35f0: 69 6e 65 64 3a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a  ined:</p>..<ol>.
3600: 3c 6c 69 20 76 61 6c 75 65 3d 31 3e 46 6f 72 6d  <li value=1>Form
3610: 61 74 20 31 20 69 73 20 75 6e 64 65 72 73 74 6f  at 1 is understo
3620: 6f 64 20 62 79 20 61 6c 6c 20 76 65 72 73 69 6f  od by all versio
3630: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 62 61 63  ns of SQLite bac
3640: 6b 20 74 6f 0a 76 65 72 73 69 6f 6e 20 33 2e 30  k to.version 3.0
3650: 2e 30 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c  .0.</li>.<li val
3660: 75 65 3d 32 3e 46 6f 72 6d 61 74 20 32 20 61 64  ue=2>Format 2 ad
3670: 64 73 20 74 68 65 20 61 62 69 6c 69 74 79 20 6f  ds the ability o
3680: 66 20 72 6f 77 73 20 77 69 74 68 69 6e 20 74 68  f rows within th
3690: 65 20 73 61 6d 65 20 74 61 62 6c 65 0a 74 6f 20  e same table.to 
36a0: 68 61 76 65 20 61 20 76 61 72 79 69 6e 67 20 6e  have a varying n
36b0: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
36c0: 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 73 75  , in order to su
36d0: 70 70 6f 72 74 20 74 68 65 0a 5b 41 4c 54 45 52  pport the.[ALTER
36e0: 20 54 41 42 4c 45 20 7c 20 41 4c 54 45 52 20 54   TABLE | ALTER T
36f0: 41 42 4c 45 20 2e 2e 2e 20 41 44 44 20 43 4f 4c  ABLE ... ADD COL
3700: 55 4d 4e 5d 20 66 75 6e 63 74 69 6f 6e 61 6c 69  UMN] functionali
3710: 74 79 2e 20 20 53 75 70 70 6f 72 74 20 66 6f 72  ty.  Support for
3720: 0a 72 65 61 64 69 6e 67 20 61 6e 64 20 77 72 69  .reading and wri
3730: 74 69 6e 67 20 66 6f 72 6d 61 74 20 32 20 77 61  ting format 2 wa
3740: 73 20 61 64 64 65 64 20 69 6e 20 53 51 4c 69 74  s added in SQLit
3750: 65 20 76 65 72 73 69 6f 6e 20 33 2e 31 2e 33 20  e version 3.1.3 
3760: 0a 6f 6e 20 32 30 30 35 2d 30 32 2d 31 39 2e 3c  .on 2005-02-19.<
3770: 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c 75 65 3d 33  /li>.<li value=3
3780: 3e 46 6f 72 6d 61 74 20 33 20 61 64 64 73 20 74  >Format 3 adds t
3790: 68 65 20 61 62 69 6c 69 74 79 20 6f 66 20 65 78  he ability of ex
37a0: 74 72 61 20 63 6f 6c 75 6d 6e 73 20 61 64 64 65  tra columns adde
37b0: 64 20 62 79 0a 5b 41 4c 54 45 52 20 54 41 42 4c  d by.[ALTER TABL
37c0: 45 20 7c 20 41 4c 54 45 52 20 54 41 42 4c 45 20  E | ALTER TABLE 
37d0: 2e 2e 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20  ... ADD COLUMN] 
37e0: 74 6f 20 68 61 76 65 20 6e 6f 6e 2d 4e 55 4c 4c  to have non-NULL
37f0: 20 64 65 66 61 75 6c 74 0a 76 61 6c 75 65 73 2e   default.values.
3800: 20 20 54 68 69 73 20 63 61 70 61 62 69 6c 69 74    This capabilit
3810: 79 20 77 61 73 20 61 64 64 65 64 20 69 6e 20 53  y was added in S
3820: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33 2e  QLite version 3.
3830: 31 2e 34 20 0a 6f 6e 20 32 30 30 35 2d 30 33 2d  1.4 .on 2005-03-
3840: 31 31 2e 3c 2f 6c 69 3e 0a 3c 6c 69 20 76 61 6c  11.</li>.<li val
3850: 75 65 3d 34 3e 5e 46 6f 72 6d 61 74 20 34 20 63  ue=4>^Format 4 c
3860: 61 75 73 65 73 20 53 51 4c 69 74 65 20 74 6f 20  auses SQLite to 
3870: 72 65 73 70 65 63 74 20 74 68 65 0a 5b 64 65 73  respect the.[des
3880: 63 65 6e 64 69 6e 67 20 69 6e 64 65 78 65 73 20  cending indexes 
3890: 7c 20 44 45 53 43 20 6b 65 79 77 6f 72 64 5d 20  | DESC keyword] 
38a0: 6f 6e 0a 69 6e 64 65 78 20 64 65 63 6c 61 72 61  on.index declara
38b0: 74 69 6f 6e 73 2e 20 20 28 5e 54 68 65 20 44 45  tions.  (^The DE
38c0: 53 43 20 6b 65 79 77 6f 72 64 20 69 73 20 69 67  SC keyword is ig
38d0: 6e 6f 72 65 64 20 69 6e 20 69 6e 64 65 78 65 73  nored in indexes
38e0: 20 66 6f 72 20 0a 66 6f 72 6d 61 74 73 20 31 2c   for .formats 1,
38f0: 20 32 2c 20 61 6e 64 20 33 2e 29 0a 5e 46 6f 72   2, and 3.).^For
3900: 6d 61 74 20 34 20 61 6c 73 6f 20 61 64 64 73 20  mat 4 also adds 
3910: 74 77 6f 20 6e 65 77 20 62 6f 6f 6c 65 61 6e 20  two new boolean 
3920: 72 65 63 6f 72 64 20 74 79 70 65 20 76 61 6c 75  record type valu
3930: 65 73 20 28 5b 73 65 72 69 61 6c 20 74 79 70 65  es ([serial type
3940: 73 5d 0a 38 20 61 6e 64 20 39 29 2e 20 20 53 75  s].8 and 9).  Su
3950: 70 70 6f 72 74 20 66 6f 72 20 66 6f 72 6d 61 74  pport for format
3960: 20 34 20 77 61 73 20 61 64 64 65 64 20 69 6e 20   4 was added in 
3970: 53 51 4c 69 74 65 20 33 2e 33 2e 30 20 6f 6e 0a  SQLite 3.3.0 on.
3980: 32 30 30 36 2d 30 31 2d 31 30 2e 3c 2f 6c 69 3e  2006-01-10.</li>
3990: 0a 3c 2f 6f 6c 3e 0a 0a 3c 70 3e 5e 4e 65 77 20  .</ol>..<p>^New 
39a0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63  database files c
39b0: 72 65 61 74 65 64 20 62 79 20 53 51 4c 69 74 65  reated by SQLite
39c0: 20 75 73 65 20 66 6f 72 6d 61 74 20 34 20 62 79   use format 4 by
39d0: 20 64 65 66 61 75 6c 74 2e 0a 5e 54 68 65 20 5b   default..^The [
39e0: 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d  legacy_file_form
39f0: 61 74 20 70 72 61 67 6d 61 5d 20 63 61 6e 20 62  at pragma] can b
3a00: 65 20 75 73 65 64 20 74 6f 20 63 61 75 73 65 20  e used to cause 
3a10: 53 51 4c 69 74 65 0a 74 6f 20 63 72 65 61 74 65  SQLite.to create
3a20: 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69   new database fi
3a30: 6c 65 73 20 75 73 69 6e 67 20 66 6f 72 6d 61 74  les using format
3a40: 20 31 2e 0a 54 68 65 20 66 6f 72 6d 61 74 20 76   1..The format v
3a50: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 63 61  ersion number ca
3a60: 6e 20 62 65 20 6d 61 64 65 20 74 6f 20 64 65 66  n be made to def
3a70: 61 75 6c 74 20 74 6f 20 31 20 69 6e 73 74 65 61  ault to 1 instea
3a80: 64 20 6f 66 20 34 20 62 79 0a 73 65 74 74 69 6e  d of 4 by.settin
3a90: 67 20 5b 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  g [SQLITE_DEFAUL
3aa0: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 5d 3d 31  T_FILE_FORMAT]=1
3ab0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
3ac0: 2e 0a 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 75 67 67  ..</p>..<h3>Sugg
3ad0: 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a 65  ested cache size
3ae0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 34 2d  </h3>..<p>The 4-
3af0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
3b00: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 61  signed integer a
3b10: 74 20 6f 66 66 73 65 74 20 34 38 20 69 73 20 74  t offset 48 is t
3b20: 68 65 20 73 75 67 67 65 73 74 65 64 0a 63 61 63  he suggested.cac
3b30: 68 65 20 73 69 7a 65 20 69 6e 20 70 61 67 65 73  he size in pages
3b40: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
3b50: 65 20 66 69 6c 65 2e 20 20 54 68 65 20 76 61 6c  e file.  The val
3b60: 75 65 20 69 73 20 61 20 73 75 67 67 65 73 74 69  ue is a suggesti
3b70: 6f 6e 0a 6f 6e 6c 79 20 61 6e 64 20 53 51 4c 69  on.only and SQLi
3b80: 74 65 20 69 73 20 75 6e 64 65 72 20 6e 6f 20 6f  te is under no o
3b90: 62 6c 69 67 61 74 69 6f 6e 20 74 6f 20 68 6f 6e  bligation to hon
3ba0: 6f 72 20 69 74 2e 20 20 54 68 65 20 61 62 73 6f  or it.  The abso
3bb0: 6c 75 74 65 20 76 61 6c 75 65 0a 6f 66 20 74 68  lute value.of th
3bc0: 65 20 69 6e 74 65 67 65 72 20 69 73 20 75 73 65  e integer is use
3bd0: 64 20 61 73 20 74 68 65 20 73 75 67 67 65 73 74  d as the suggest
3be0: 65 64 20 73 69 7a 65 2e 20 20 54 68 65 20 73 75  ed size.  The su
3bf0: 67 67 65 73 74 65 64 20 63 61 63 68 65 20 73 69  ggested cache si
3c00: 7a 65 0a 63 61 6e 20 62 65 20 73 65 74 20 75 73  ze.can be set us
3c10: 69 6e 67 20 74 68 65 20 5b 64 65 66 61 75 6c 74  ing the [default
3c20: 5f 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67  _cache_size prag
3c30: 6d 61 5d 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 49 6e  ma].</p>..<h3>In
3c40: 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d  cremental vacuum
3c50: 20 73 65 74 74 69 6e 67 73 3c 2f 68 33 3e 0a 0a   settings</h3>..
3c60: 3c 70 3e 54 68 65 20 74 77 6f 20 34 2d 62 79 74  <p>The two 4-byt
3c70: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
3c80: 65 67 65 72 73 20 61 74 20 6f 66 66 73 65 74 73  egers at offsets
3c90: 20 35 32 20 61 6e 64 20 36 34 20 61 72 65 20 75   52 and 64 are u
3ca0: 73 65 64 0a 74 6f 20 6d 61 6e 61 67 65 20 74 68  sed.to manage th
3cb0: 65 20 5b 61 75 74 6f 5f 76 61 63 75 75 6d 5d 20  e [auto_vacuum] 
3cc0: 61 6e 64 20 5b 69 6e 63 72 65 6d 65 6e 74 61 6c  and [incremental
3cd0: 5f 76 61 63 75 75 6d 5d 20 6d 6f 64 65 73 2e 20  _vacuum] modes. 
3ce0: 20 5e 49 66 0a 74 68 65 20 69 6e 74 65 67 65 72   ^If.the integer
3cf0: 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 73   at offset 52 is
3d00: 20 7a 65 72 6f 20 74 68 65 6e 20 70 6f 69 6e 74   zero then point
3d10: 65 72 2d 6d 61 70 20 28 70 74 72 6d 61 70 29 20  er-map (ptrmap) 
3d20: 70 61 67 65 73 20 61 72 65 0a 6f 6d 69 74 74 65  pages are.omitte
3d30: 64 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  d from the datab
3d40: 61 73 65 20 66 69 6c 65 20 61 6e 64 20 6e 65 69  ase file and nei
3d50: 74 68 65 72 20 61 75 74 6f 5f 76 61 63 75 75 6d  ther auto_vacuum
3d60: 20 6e 6f 72 0a 69 6e 63 72 65 6d 65 6e 74 61 6c   nor.incremental
3d70: 5f 76 61 63 75 75 6d 20 61 72 65 20 73 75 70 70  _vacuum are supp
3d80: 6f 72 74 65 64 2e 20 20 5e 49 66 20 74 68 65 20  orted.  ^If the 
3d90: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3da0: 74 20 35 32 20 69 73 0a 6e 6f 6e 2d 7a 65 72 6f  t 52 is.non-zero
3db0: 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65 20   then it is the 
3dc0: 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
3dd0: 68 65 20 6c 61 72 67 65 73 74 20 72 6f 6f 74 20  he largest root 
3de0: 70 61 67 65 20 69 6e 20 74 68 65 0a 64 61 74 61  page in the.data
3df0: 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65 20 64  base file, the d
3e00: 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 69 6c  atabase file wil
3e10: 6c 20 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70  l contain ptrmap
3e20: 20 70 61 67 65 73 2c 20 61 6e 64 20 74 68 65 0a   pages, and the.
3e30: 6d 6f 64 65 20 6d 75 73 74 20 62 65 20 65 69 74  mode must be eit
3e40: 68 65 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 20  her auto_vacuum 
3e50: 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  or incremental_v
3e60: 61 63 75 75 6d 2e 20 20 5e 49 6e 20 74 68 69 73  acuum.  ^In this
3e70: 20 6c 61 74 74 65 72 0a 63 61 73 65 2c 20 74 68   latter.case, th
3e80: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
3e90: 73 65 74 20 36 34 20 69 73 20 74 72 75 65 20 66  set 64 is true f
3ea0: 6f 72 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  or incremental_v
3eb0: 61 63 75 75 6d 20 61 6e 64 0a 66 61 6c 73 65 20  acuum and.false 
3ec0: 66 6f 72 20 61 75 74 6f 5f 76 61 63 75 75 6d 2e  for auto_vacuum.
3ed0: 20 20 5e 49 66 20 74 68 65 20 69 6e 74 65 67 65    ^If the intege
3ee0: 72 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69  r at offset 52 i
3ef0: 73 20 7a 65 72 6f 20 74 68 65 6e 0a 74 68 65 20  s zero then.the 
3f00: 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66 73 65  integer at offse
3f10: 74 20 36 34 20 6d 75 73 74 20 61 6c 73 6f 20 62  t 64 must also b
3f20: 65 20 7a 65 72 6f 2e 3c 2f 70 3e 0a 0a 3c 74 63  e zero.</p>..<tc
3f30: 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74 20 65 6e  l>hd_fragment en
3f40: 63 20 7b 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  c {text encoding
3f50: 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54 65 78 74  }</tcl>.<h3>Text
3f60: 20 65 6e 63 6f 64 69 6e 67 3c 2f 68 33 3e 0a 0a   encoding</h3>..
3f70: 3c 70 3e 5e 54 68 65 20 34 2d 62 79 74 65 20 62  <p>^The 4-byte b
3f80: 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65  ig-endian intege
3f90: 72 20 61 74 20 6f 66 66 73 65 74 20 35 36 20 64  r at offset 56 d
3fa0: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 65 6e  etermines the en
3fb0: 63 6f 64 69 6e 67 0a 75 73 65 64 20 66 6f 72 20  coding.used for 
3fc0: 61 6c 6c 20 74 65 78 74 20 73 74 72 69 6e 67 73  all text strings
3fd0: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64   stored in the d
3fe0: 61 74 61 62 61 73 65 2e 20 20 0a 5e 41 20 76 61  atabase.  .^A va
3ff0: 6c 75 65 20 6f 66 20 31 20 6d 65 61 6e 73 20 55  lue of 1 means U
4000: 54 46 2d 38 2e 0a 5e 41 20 76 61 6c 75 65 20 6f  TF-8..^A value o
4010: 66 20 32 20 6d 65 61 6e 73 20 55 54 46 2d 31 36  f 2 means UTF-16
4020: 6c 65 2e 0a 5e 41 20 76 61 6c 75 65 20 6f 66 20  le..^A value of 
4030: 33 20 6d 65 61 6e 73 20 55 54 46 2d 31 36 62 65  3 means UTF-16be
4040: 2e 0a 4e 6f 20 6f 74 68 65 72 20 76 61 6c 75 65  ..No other value
4050: 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2e 0a 5e  s are allowed..^
4060: 28 54 68 65 20 73 71 6c 69 74 65 33 2e 68 20 68  (The sqlite3.h h
4070: 65 61 64 65 72 20 66 69 6c 65 20 64 65 66 69 6e  eader file defin
4080: 65 73 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f  es C-preprocesso
4090: 72 20 6d 61 63 72 6f 73 20 53 51 4c 49 54 45 5f  r macros SQLITE_
40a0: 55 54 46 38 20 61 73 20 31 2c 0a 53 51 4c 49 54  UTF8 as 1,.SQLIT
40b0: 45 5f 55 54 46 31 36 4c 45 20 61 73 20 32 2c 20  E_UTF16LE as 2, 
40c0: 61 6e 64 20 53 51 4c 49 54 45 5f 55 54 46 31 36  and SQLITE_UTF16
40d0: 42 45 20 61 73 20 33 2c 20 74 6f 20 75 73 65 20  BE as 3, to use 
40e0: 69 6e 20 70 6c 61 63 65 20 6f 66 0a 74 68 65 20  in place of.the 
40f0: 6e 75 6d 65 72 69 63 20 63 6f 64 65 73 20 66 6f  numeric codes fo
4100: 72 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64  r the text encod
4110: 69 6e 67 2e 29 5e 3c 2f 70 3e 0a 0a 3c 68 33 3e  ing.)^</p>..<h3>
4120: 55 73 65 72 20 76 65 72 73 69 6f 6e 20 6e 75 6d  User version num
4130: 62 65 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68  ber</h3>..<p>^Th
4140: 65 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  e 4-byte big-end
4150: 69 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f  ian integer at o
4160: 66 66 73 65 74 20 36 30 20 69 73 20 74 68 65 20  ffset 60 is the 
4170: 75 73 65 72 20 76 65 72 73 69 6f 6e 20 77 68 69  user version whi
4180: 63 68 0a 69 73 20 73 65 74 20 61 6e 64 20 71 75  ch.is set and qu
4190: 65 72 69 65 64 20 62 79 20 74 68 65 20 5b 75 73  eried by the [us
41a0: 65 72 5f 76 65 72 73 69 6f 6e 20 70 72 61 67 6d  er_version pragm
41b0: 61 5d 2e 20 20 54 68 65 20 75 73 65 72 20 76 65  a].  The user ve
41c0: 72 73 69 6f 6e 20 69 73 0a 6e 6f 74 20 75 73 65  rsion is.not use
41d0: 64 20 62 79 20 53 51 4c 69 74 65 2e 3c 2f 70 3e  d by SQLite.</p>
41e0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
41f0: 6e 74 20 61 70 70 69 64 20 7b 41 70 70 6c 69 63  nt appid {Applic
4200: 61 74 69 6f 6e 20 49 44 7d 3c 2f 74 63 6c 3e 0a  ation ID}</tcl>.
4210: 3c 68 33 3e 41 70 70 6c 69 63 61 74 69 6f 6e 20  <h3>Application 
4220: 49 44 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65  ID</h3>..<p>^The
4230: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
4240: 61 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66  an integer at of
4250: 66 73 65 74 20 36 38 20 69 73 20 61 6e 20 22 41  fset 68 is an "A
4260: 70 70 6c 69 63 61 74 69 6f 6e 20 49 44 22 20 74  pplication ID" t
4270: 68 61 74 0a 63 61 6e 20 62 65 20 73 65 74 20 62  hat.can be set b
4280: 79 20 74 68 65 20 5b 50 52 41 47 4d 41 20 61 70  y the [PRAGMA ap
4290: 70 6c 69 63 61 74 69 6f 6e 5f 69 64 5d 20 63 6f  plication_id] co
42a0: 6d 6d 61 6e 64 20 69 6e 20 6f 72 64 65 72 20 74  mmand in order t
42b0: 6f 20 69 64 65 6e 74 69 66 79 20 74 68 65 0a 64  o identify the.d
42c0: 61 74 61 62 61 73 65 20 61 73 20 62 65 6c 6f 6e  atabase as belon
42d0: 67 69 6e 67 20 74 6f 20 6f 72 20 61 73 73 6f 63  ging to or assoc
42e0: 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61 72  iated with a par
42f0: 74 69 63 75 6c 61 72 20 61 70 70 6c 69 63 61 74  ticular applicat
4300: 69 6f 6e 2e 0a 54 68 65 20 61 70 70 6c 69 63 61  ion..The applica
4310: 74 69 6f 6e 20 49 44 20 69 73 20 69 6e 74 65 6e  tion ID is inten
4320: 64 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65  ded for database
4330: 20 66 69 6c 65 73 20 75 73 65 64 20 61 73 20 61   files used as a
4340: 6e 0a 5b 61 70 70 6c 69 63 61 74 69 6f 6e 20 66  n.[application f
4350: 69 6c 65 2d 66 6f 72 6d 61 74 5d 2e 20 20 54 68  ile-format].  Th
4360: 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 49 44  e application ID
4370: 20 63 61 6e 20 62 65 20 75 73 65 64 20 62 79 20   can be used by 
4380: 75 74 69 6c 69 74 69 65 73 20 0a 73 75 63 68 20  utilities .such 
4390: 61 73 20 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 64  as [http://www.d
43a0: 61 72 77 69 6e 73 79 73 2e 63 6f 6d 2f 66 69 6c  arwinsys.com/fil
43b0: 65 2f 20 7c 20 66 69 6c 65 28 31 29 5d 20 74 6f  e/ | file(1)] to
43c0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 73   determine the s
43d0: 70 65 63 69 66 69 63 0a 66 69 6c 65 20 74 79 70  pecific.file typ
43e0: 65 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75  e rather than ju
43f0: 73 74 20 72 65 70 6f 72 74 69 6e 67 20 22 53 51  st reporting "SQ
4400: 4c 69 74 65 33 20 44 61 74 61 62 61 73 65 22 2e  Lite3 Database".
4410: 20 20 41 20 6c 69 73 74 20 6f 66 0a 61 73 73 69    A list of.assi
4420: 67 6e 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e  gned application
4430: 20 49 44 73 20 63 61 6e 20 62 65 20 73 65 65 6e   IDs can be seen
4440: 20 62 79 20 63 6f 6e 73 75 6c 74 69 6e 67 20 74   by consulting t
4450: 68 65 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 73  he.[http://www.s
4460: 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 61 72  qlite.org/src/ar
4470: 74 69 66 61 63 74 3f 63 69 3d 74 72 75 6e 6b 26  tifact?ci=trunk&
4480: 66 69 6c 65 6e 61 6d 65 3d 6d 61 67 69 63 2e 74  filename=magic.t
4490: 78 74 7c 6d 61 67 69 63 2e 74 78 74 5d 0a 66 69  xt|magic.txt].fi
44a0: 6c 65 20 69 6e 20 74 68 65 20 53 51 4c 69 74 65  le in the SQLite
44b0: 20 73 6f 75 72 63 65 20 72 65 70 6f 73 69 74 6f   source reposito
44c0: 72 79 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64  ry.</p>..<tcl>hd
44d0: 5f 66 72 61 67 6d 65 6e 74 20 76 61 6c 69 64 66  _fragment validf
44e0: 6f 72 20 7b 76 65 72 73 69 6f 6e 2d 76 61 6c 69  or {version-vali
44f0: 64 2d 66 6f 72 20 6e 75 6d 62 65 72 7d 3c 2f 74  d-for number}</t
4500: 63 6c 3e 0a 3c 68 33 3e 57 72 69 74 65 20 6c 69  cl>.<h3>Write li
4510: 62 72 61 72 79 20 76 65 72 73 69 6f 6e 20 6e 75  brary version nu
4520: 6d 62 65 72 20 61 6e 64 20 76 65 72 73 69 6f 6e  mber and version
4530: 2d 76 61 6c 69 64 2d 66 6f 72 20 6e 75 6d 62 65  -valid-for numbe
4540: 72 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20  r</h3>..<p>^The 
4550: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
4560: 6e 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  n integer at off
4570: 73 65 74 20 39 36 20 73 74 6f 72 65 73 20 74 68  set 96 stores th
4580: 65 20 0a 5b 53 51 4c 49 54 45 5f 56 45 52 53 49  e .[SQLITE_VERSI
4590: 4f 4e 5f 4e 55 4d 42 45 52 5d 20 76 61 6c 75 65  ON_NUMBER] value
45a0: 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
45b0: 6c 69 62 72 61 72 79 20 74 68 61 74 20 6d 6f 73  library that mos
45c0: 74 0a 72 65 63 65 6e 74 6c 79 20 6d 6f 64 69 66  t.recently modif
45d0: 69 65 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ied the database
45e0: 20 66 69 6c 65 2e 20 20 5e 54 68 65 20 34 2d 62   file.  ^The 4-b
45f0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
4600: 6e 74 65 67 65 72 20 61 74 0a 6f 66 66 73 65 74  nteger at.offset
4610: 20 39 32 20 69 73 20 74 68 65 20 76 61 6c 75 65   92 is the value
4620: 20 6f 66 20 74 68 65 20 5b 63 68 61 6e 67 65 20   of the [change 
4630: 63 6f 75 6e 74 65 72 5d 20 77 68 65 6e 20 74 68  counter] when th
4640: 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  e version number
4650: 0a 77 61 73 20 73 74 6f 72 65 64 2e 20 20 54 68  .was stored.  Th
4660: 65 20 69 6e 74 65 67 65 72 20 61 74 20 6f 66 66  e integer at off
4670: 73 65 74 20 39 32 20 69 6e 64 69 63 61 74 65 73  set 92 indicates
4680: 20 77 68 69 63 68 20 74 72 61 6e 73 61 63 74 69   which transacti
4690: 6f 6e 0a 74 68 65 20 76 65 72 73 69 6f 6e 20 6e  on.the version n
46a0: 75 6d 62 65 72 20 69 73 20 76 61 6c 69 64 20 66  umber is valid f
46b0: 6f 72 20 61 6e 64 20 69 73 20 73 6f 6d 65 74 69  or and is someti
46c0: 6d 65 73 20 63 61 6c 6c 65 64 20 74 68 65 0a 22  mes called the."
46d0: 76 65 72 73 69 6f 6e 2d 76 61 6c 69 64 2d 66 6f  version-valid-fo
46e0: 72 20 6e 75 6d 62 65 72 22 2e 0a 0a 3c 68 33 3e  r number"...<h3>
46f0: 48 65 61 64 65 72 20 73 70 61 63 65 20 72 65 73  Header space res
4700: 65 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e 73  erved for expans
4710: 69 6f 6e 3c 2f 68 33 3e 0a 0a 3c 70 3e 41 6c 6c  ion</h3>..<p>All
4720: 20 6f 74 68 65 72 20 62 79 74 65 73 20 6f 66 20   other bytes of 
4730: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
4740: 65 20 68 65 61 64 65 72 20 61 72 65 20 72 65 73  e header are res
4750: 65 72 76 65 64 20 66 6f 72 0a 66 75 74 75 72 65  erved for.future
4760: 20 65 78 70 61 6e 73 69 6f 6e 20 61 6e 64 20 6d   expansion and m
4770: 75 73 74 20 62 65 20 73 65 74 20 74 6f 20 7a 65  ust be set to ze
4780: 72 6f 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 54 68 65  ro.</p>..<h2>The
4790: 20 4c 6f 63 6b 2d 42 79 74 65 20 50 61 67 65 3c   Lock-Byte Page<
47a0: 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f 63  /h2>..<p>The loc
47b0: 6b 2d 62 79 74 65 20 70 61 67 65 20 69 73 20 74  k-byte page is t
47c0: 68 65 20 73 69 6e 67 6c 65 20 70 61 67 65 20 6f  he single page o
47d0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
47e0: 69 6c 65 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e  ile.that contain
47f0: 73 20 74 68 65 20 62 79 74 65 73 20 61 74 20 6f  s the bytes at o
4800: 66 66 73 65 74 73 20 62 65 74 77 65 65 6e 20 31  ffsets between 1
4810: 30 37 33 37 34 31 38 32 34 20 61 6e 64 20 31 30  073741824 and 10
4820: 37 33 37 34 32 33 33 35 2c 0a 69 6e 63 6c 75 73  73742335,.inclus
4830: 69 76 65 2e 20 20 41 20 64 61 74 61 62 61 73 65  ive.  A database
4840: 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 6c 65   file that is le
4850: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
4860: 20 74 6f 20 31 30 37 33 37 34 31 38 32 34 20 62   to 1073741824 b
4870: 79 74 65 73 20 0a 69 6e 20 73 69 7a 65 20 63 6f  ytes .in size co
4880: 6e 74 61 69 6e 73 20 6e 6f 20 6c 6f 63 6b 2d 62  ntains no lock-b
4890: 79 74 65 20 70 61 67 65 2e 20 20 41 20 64 61 74  yte page.  A dat
48a0: 61 62 61 73 65 20 66 69 6c 65 20 6c 61 72 67 65  abase file large
48b0: 72 20 74 68 61 6e 0a 31 30 37 33 37 34 31 38 32  r than.107374182
48c0: 34 20 63 6f 6e 74 61 69 6e 73 20 65 78 61 63 74  4 contains exact
48d0: 6c 79 20 6f 6e 65 20 6c 6f 63 6b 2d 62 79 74 65  ly one lock-byte
48e0: 20 70 61 67 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e   page..</p>..<p>
48f0: 54 68 65 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61  The lock-byte pa
4900: 67 65 20 69 73 20 73 65 74 20 61 73 69 64 65 20  ge is set aside 
4910: 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 6f  for use by the o
4920: 70 65 72 61 74 69 6e 67 2d 73 79 73 74 65 6d 20  perating-system 
4930: 73 70 65 63 69 66 69 63 0a 5b 56 46 53 5d 20 69  specific.[VFS] i
4940: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6e  mplementation in
4950: 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
4960: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
4970: 6c 6f 63 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  locking primitiv
4980: 65 73 2e 0a 5e 53 51 4c 69 74 65 20 64 6f 65 73  es..^SQLite does
4990: 20 6e 6f 74 20 75 73 65 20 74 68 65 20 6c 6f 63   not use the loc
49a0: 6b 2d 62 79 74 65 20 70 61 67 65 2e 20 20 5e 54  k-byte page.  ^T
49b0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 0a  he SQLite core .
49c0: 77 69 6c 6c 20 6e 65 76 65 72 20 72 65 61 64 20  will never read 
49d0: 6f 72 20 77 72 69 74 65 20 74 68 65 20 6c 6f 63  or write the loc
49e0: 6b 2d 62 79 74 65 20 70 61 67 65 2c 0a 74 68 6f  k-byte page,.tho
49f0: 75 67 68 20 6f 70 65 72 61 74 69 6e 67 2d 73 79  ugh operating-sy
4a00: 73 74 65 6d 20 73 70 65 63 69 66 69 63 20 5b 56  stem specific [V
4a10: 46 53 5d 20 0a 69 6d 70 6c 65 6d 65 6e 74 61 74  FS] .implementat
4a20: 69 6f 6e 73 20 6d 61 79 20 63 68 6f 6f 73 65 20  ions may choose 
4a30: 74 6f 20 72 65 61 64 20 6f 72 20 77 72 69 74 65  to read or write
4a40: 20 62 79 74 65 73 20 6f 6e 20 74 68 65 20 6c 6f   bytes on the lo
4a50: 63 6b 2d 62 79 74 65 20 0a 70 61 67 65 20 61 63  ck-byte .page ac
4a60: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 0a  cording to the .
4a70: 6e 65 65 64 73 20 61 6e 64 20 70 72 6f 63 6c 69  needs and procli
4a80: 76 69 74 69 65 73 20 6f 66 20 74 68 65 20 75 6e  vities of the un
4a90: 64 65 72 6c 79 69 6e 67 20 73 79 73 74 65 6d 2e  derlying system.
4aa0: 20 20 54 68 65 20 75 6e 69 78 20 61 6e 64 20 77    The unix and w
4ab0: 69 6e 33 32 0a 5b 56 46 53 5d 20 69 6d 70 6c 65  in32.[VFS] imple
4ac0: 6d 65 6e 74 61 74 69 6f 6e 73 20 74 68 61 74 20  mentations that 
4ad0: 63 6f 6d 65 20 62 75 69 6c 74 20 69 6e 74 6f 20  come built into 
4ae0: 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 77 72  SQLite do not wr
4af0: 69 74 65 20 74 6f 20 74 68 65 0a 6c 6f 63 6b 2d  ite to the.lock-
4b00: 62 79 74 65 20 70 61 67 65 2c 20 62 75 74 20 74  byte page, but t
4b10: 68 69 72 64 2d 70 61 72 74 79 20 56 46 53 20 69  hird-party VFS i
4b20: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 66  mplementations f
4b30: 6f 72 0a 6f 74 68 65 72 20 6f 70 65 72 61 74 69  or.other operati
4b40: 6e 67 20 73 79 73 74 65 6d 73 20 6d 69 67 68 74  ng systems might
4b50: 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6c 6f  .</p>..<p>The lo
4b60: 63 6b 2d 62 79 74 65 20 70 61 67 65 20 61 72 6f  ck-byte page aro
4b70: 73 65 20 66 72 6f 6d 20 74 68 65 20 6e 65 65 64  se from the need
4b80: 20 74 6f 20 73 75 70 70 6f 72 74 20 57 69 6e 39   to support Win9
4b90: 35 20 77 68 69 63 68 20 68 61 64 0a 6f 6e 6c 79  5 which had.only
4ba0: 20 6d 61 6e 64 69 74 6f 72 79 20 66 69 6c 65 20   manditory file 
4bb0: 6c 6f 63 6b 69 6e 67 2e 20 20 41 6c 6c 20 6d 6f  locking.  All mo
4bc0: 64 65 72 6e 20 6f 70 65 72 61 74 69 6e 67 20 73  dern operating s
4bd0: 79 73 74 65 6d 73 20 74 68 61 74 20 77 65 20 6b  ystems that we k
4be0: 6e 6f 77 20 6f 66 0a 73 75 70 70 6f 72 74 20 61  now of.support a
4bf0: 64 76 69 73 6f 72 79 20 66 69 6c 65 20 6c 6f 63  dvisory file loc
4c00: 6b 69 6e 67 2c 20 61 6e 64 20 73 6f 20 74 68 65  king, and so the
4c10: 20 6c 6f 63 6b 2d 62 79 74 65 20 70 61 67 65 20   lock-byte page 
4c20: 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79 0a 6e 65  is not really.ne
4c30: 65 64 65 64 20 61 6e 79 20 6d 6f 72 65 2c 20 62  eded any more, b
4c40: 75 74 20 69 73 20 72 65 74 61 69 6e 65 64 20 66  ut is retained f
4c50: 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
4c60: 70 61 74 69 62 69 6c 69 74 79 2e 3c 2f 70 3e 0a  patibility.</p>.
4c70: 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e  .<tcl>hd_fragmen
4c80: 74 20 7b 66 72 65 65 6c 69 73 74 7d 20 7b 66 72  t {freelist} {fr
4c90: 65 65 6c 69 73 74 7d 20 7b 66 72 65 65 2d 70 61  eelist} {free-pa
4ca0: 67 65 20 6c 69 73 74 7d 3c 2f 74 63 6c 3e 0a 3c  ge list}</tcl>.<
4cb0: 68 32 3e 54 68 65 20 46 72 65 65 6c 69 73 74 3c  h2>The Freelist<
4cc0: 2f 68 32 3e 0a 0a 3c 70 3e 41 20 64 61 74 61 62  /h2>..<p>A datab
4cd0: 61 73 65 20 66 69 6c 65 20 6d 69 67 68 74 20 63  ase file might c
4ce0: 6f 6e 74 61 69 6e 20 6f 6e 65 20 6f 72 20 6d 6f  ontain one or mo
4cf0: 72 65 20 70 61 67 65 73 20 74 68 61 74 20 61 72  re pages that ar
4d00: 65 20 6e 6f 74 20 69 6e 0a 61 63 74 69 76 65 20  e not in.active 
4d10: 75 73 65 2e 20 20 55 6e 75 73 65 64 20 70 61 67  use.  Unused pag
4d20: 65 73 20 63 61 6e 20 63 6f 6d 65 20 61 62 6f 75  es can come abou
4d30: 74 2c 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20  t, for example, 
4d40: 77 68 65 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  when information
4d50: 0a 69 73 20 64 65 6c 65 74 65 64 20 66 72 6f 6d  .is deleted from
4d60: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
4d70: 55 6e 75 73 65 64 20 70 61 67 65 73 20 61 72 65  Unused pages are
4d80: 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 66   stored on the f
4d90: 72 65 65 6c 69 73 74 0a 61 6e 64 20 61 72 65 20  reelist.and are 
4da0: 72 65 75 73 65 64 20 77 68 65 6e 20 61 64 64 69  reused when addi
4db0: 74 69 6f 6e 61 6c 20 70 61 67 65 73 20 61 72 65  tional pages are
4dc0: 20 72 65 71 75 69 72 65 64 2e 3c 2f 70 3e 0a 0a   required.</p>..
4dd0: 3c 70 3e 54 68 65 20 66 72 65 65 6c 69 73 74 20  <p>The freelist 
4de0: 69 73 20 6f 72 67 61 6e 69 7a 65 64 20 61 73 20  is organized as 
4df0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
4e00: 20 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20   freelist trunk 
4e10: 70 61 67 65 73 0a 77 69 74 68 20 65 61 63 68 20  pages.with each 
4e20: 74 72 75 6e 6b 20 70 61 67 65 73 20 63 6f 6e 74  trunk pages cont
4e30: 61 69 6e 69 6e 67 20 70 61 67 65 20 6e 75 6d 62  aining page numb
4e40: 65 72 73 20 66 6f 72 20 7a 65 72 6f 20 6f 72 20  ers for zero or 
4e50: 6d 6f 72 65 20 66 72 65 65 6c 69 73 74 0a 6c 65  more freelist.le
4e60: 61 66 20 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c  af pages.</p>..<
4e70: 70 3e 41 20 66 72 65 65 6c 69 73 74 20 74 72 75  p>A freelist tru
4e80: 6e 6b 20 70 61 67 65 20 63 6f 6e 73 69 73 74 73  nk page consists
4e90: 20 6f 66 20 61 6e 20 61 72 72 61 79 20 6f 66 20   of an array of 
4ea0: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
4eb0: 6e 20 69 6e 74 65 67 65 72 73 2e 0a 54 68 65 20  n integers..The 
4ec0: 73 69 7a 65 20 6f 66 20 74 68 65 20 61 72 72 61  size of the arra
4ed0: 79 20 69 73 20 61 73 20 6d 61 6e 79 20 69 6e 74  y is as many int
4ee0: 65 67 65 72 73 20 61 73 20 77 69 6c 6c 20 66 69  egers as will fi
4ef0: 74 20 69 6e 20 74 68 65 20 75 73 61 62 6c 65 20  t in the usable 
4f00: 73 70 61 63 65 0a 6f 66 20 61 20 70 61 67 65 2e  space.of a page.
4f10: 20 20 54 68 65 20 6d 69 6e 69 6d 75 6d 20 75 73    The minimum us
4f20: 61 62 6c 65 20 73 70 61 63 65 20 69 73 20 34 38  able space is 48
4f30: 30 20 62 79 74 65 73 20 73 6f 20 74 68 65 20 61  0 bytes so the a
4f40: 72 72 61 79 20 77 69 6c 6c 20 61 6c 77 61 79 73  rray will always
4f50: 0a 62 65 20 61 74 20 6c 65 61 73 74 20 31 32 30  .be at least 120
4f60: 20 65 6e 74 72 69 65 73 20 69 6e 20 6c 65 6e 67   entries in leng
4f70: 74 68 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  th.  ^The first 
4f80: 69 6e 74 65 67 65 72 20 6f 6e 20 61 20 66 72 65  integer on a fre
4f90: 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70 61 67 65  elist trunk.page
4fa0: 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d   is the page num
4fb0: 62 65 72 20 6f 66 20 74 68 65 20 6e 65 78 74 20  ber of the next 
4fc0: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70  freelist trunk p
4fd0: 61 67 65 20 69 6e 20 74 68 65 20 6c 69 73 74 20  age in the list 
4fe0: 6f 72 20 7a 65 72 6f 20 0a 69 66 20 74 68 69 73  or zero .if this
4ff0: 20 69 73 20 74 68 65 20 6c 61 73 74 20 66 72 65   is the last fre
5000: 65 6c 69 73 74 20 74 72 75 6e 6b 20 70 61 67 65  elist trunk page
5010: 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20 69  .  ^The second i
5020: 6e 74 65 67 65 72 20 6f 6e 20 61 20 66 72 65 65  nteger on a free
5030: 6c 69 73 74 0a 74 72 75 6e 6b 20 70 61 67 65 20  list.trunk page 
5040: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
5050: 20 6c 65 61 66 20 70 61 67 65 20 70 6f 69 6e 74   leaf page point
5060: 65 72 73 20 74 6f 20 66 6f 6c 6c 6f 77 2e 20 20  ers to follow.  
5070: 0a 5e 28 43 61 6c 6c 20 74 68 65 20 73 65 63 6f  .^(Call the seco
5080: 6e 64 20 69 6e 74 65 67 65 72 20 6f 6e 20 61 20  nd integer on a 
5090: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 20 70  freelist trunk p
50a0: 61 67 65 20 4c 2e 0a 49 66 20 4c 20 69 73 20 67  age L..If L is g
50b0: 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
50c0: 20 74 68 65 6e 20 69 6e 74 65 67 65 72 73 20 77   then integers w
50d0: 69 74 68 20 61 72 72 61 79 20 69 6e 64 65 78 65  ith array indexe
50e0: 73 20 62 65 74 77 65 65 6e 20 32 20 61 6e 64 0a  s between 2 and.
50f0: 4c 2b 31 20 69 6e 63 6c 75 73 69 76 65 20 63 6f  L+1 inclusive co
5100: 6e 74 61 69 6e 20 70 61 67 65 20 6e 75 6d 62 65  ntain page numbe
5110: 72 73 20 66 6f 72 20 66 72 65 65 6c 69 73 74 20  rs for freelist 
5120: 6c 65 61 66 20 70 61 67 65 73 2e 29 5e 3c 2f 70  leaf pages.)^</p
5130: 3e 0a 0a 3c 70 3e 46 72 65 65 6c 69 73 74 20 6c  >..<p>Freelist l
5140: 65 61 66 20 70 61 67 65 73 20 63 6f 6e 74 61 69  eaf pages contai
5150: 6e 20 6e 6f 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  n no information
5160: 2e 20 20 5e 53 51 4c 69 74 65 20 61 76 6f 69 64  .  ^SQLite avoid
5170: 73 20 72 65 61 64 69 6e 67 20 6f 72 0a 77 72 69  s reading or.wri
5180: 74 69 6e 67 20 66 72 65 65 6c 69 73 74 20 6c 65  ting freelist le
5190: 61 66 20 70 61 67 65 73 20 69 6e 20 6f 72 64 65  af pages in orde
51a0: 72 20 74 6f 20 72 65 64 75 63 65 20 64 69 73 6b  r to reduce disk
51b0: 20 49 2f 4f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 41 20   I/O.</p>..<p>A 
51c0: 62 75 67 20 69 6e 20 53 51 4c 69 74 65 20 76 65  bug in SQLite ve
51d0: 72 73 69 6f 6e 73 20 70 72 69 6f 72 20 74 6f 20  rsions prior to 
51e0: 33 2e 36 2e 30 20 63 61 75 73 65 64 20 74 68 65  3.6.0 caused the
51f0: 20 64 61 74 61 62 61 73 65 20 74 6f 20 62 65 0a   database to be.
5200: 72 65 70 6f 72 74 65 64 20 61 73 20 63 6f 72 72  reported as corr
5210: 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
5220: 65 20 6c 61 73 74 20 36 20 65 6e 74 72 69 65 73  e last 6 entries
5230: 20 69 6e 20 74 68 65 20 66 72 65 65 6c 69 73 74   in the freelist
5240: 20 74 72 75 6e 6b 20 70 61 67 65 20 0a 61 72 72   trunk page .arr
5250: 61 79 20 63 6f 6e 74 61 69 6e 65 64 20 6e 6f 6e  ay contained non
5260: 2d 7a 65 72 6f 20 76 61 6c 75 65 73 2e 20 20 4e  -zero values.  N
5270: 65 77 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  ewer versions of
5280: 20 53 51 4c 69 74 65 20 64 6f 20 6e 6f 74 20 68   SQLite do not h
5290: 61 76 65 0a 74 68 69 73 20 70 72 6f 62 6c 65 6d  ave.this problem
52a0: 2e 20 20 5e 48 6f 77 65 76 65 72 2c 20 6e 65 77  .  ^However, new
52b0: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
52c0: 51 4c 69 74 65 20 73 74 69 6c 6c 20 61 76 6f 69  QLite still avoi
52d0: 64 20 75 73 69 6e 67 20 74 68 65 20 0a 6c 61 73  d using the .las
52e0: 74 20 73 69 78 20 65 6e 74 72 69 65 73 20 69 6e  t six entries in
52f0: 20 74 68 65 20 66 72 65 65 6c 69 73 74 20 74 72   the freelist tr
5300: 75 6e 6b 20 70 61 67 65 20 61 72 72 61 79 20 69  unk page array i
5310: 6e 20 6f 72 64 65 72 20 74 68 61 74 20 64 61 74  n order that dat
5320: 61 62 61 73 65 0a 66 69 6c 65 73 20 63 72 65 61  abase.files crea
5330: 74 65 64 20 62 79 20 6e 65 77 65 72 20 76 65 72  ted by newer ver
5340: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
5350: 63 61 6e 20 62 65 20 72 65 61 64 20 62 79 20 6f  can be read by o
5360: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 0a 6f 66  lder versions.of
5370: 20 53 51 4c 69 74 65 2e 3c 2f 70 3e 0a 0a 3c 70   SQLite.</p>..<p
5380: 3e 5e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  >^The number of 
5390: 66 72 65 65 6c 69 73 74 20 70 61 67 65 73 20 69  freelist pages i
53a0: 73 20 73 74 6f 72 65 64 20 61 73 20 61 20 34 2d  s stored as a 4-
53b0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
53c0: 69 6e 74 65 67 65 72 0a 69 6e 20 74 68 65 20 64  integer.in the d
53d0: 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 61  atabase header a
53e0: 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20 33  t an offset of 3
53f0: 36 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  6 from the begin
5400: 6e 69 6e 67 20 6f 66 20 74 68 65 20 66 69 6c 65  ning of the file
5410: 2e 0a 5e 54 68 65 20 64 61 74 61 62 61 73 65 20  ..^The database 
5420: 68 65 61 64 65 72 20 61 6c 73 6f 20 73 74 6f 72  header also stor
5430: 65 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d 62  es the page numb
5440: 65 72 20 6f 66 20 74 68 65 20 66 69 72 73 74 20  er of the first 
5450: 66 72 65 65 6c 69 73 74 20 74 72 75 6e 6b 0a 70  freelist trunk.p
5460: 61 67 65 20 61 73 20 61 20 34 2d 62 79 74 65 20  age as a 4-byte 
5470: 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67  big-endian integ
5480: 65 72 20 61 74 20 61 6e 20 6f 66 66 73 65 74 20  er at an offset 
5490: 6f 66 20 33 32 20 66 72 6f 6d 20 74 68 65 20 62  of 32 from the b
54a0: 65 67 69 6e 6e 69 6e 67 0a 6f 66 20 74 68 65 20  eginning.of the 
54b0: 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  file.</p>..<tcl>
54c0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 62 74 72 65  hd_fragment btre
54d0: 65 20 7b 42 2a 2d 54 72 65 65 73 7d 20 7b 42 2d  e {B*-Trees} {B-
54e0: 74 72 65 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e  tree}</tcl>.<h2>
54f0: 42 2d 74 72 65 65 20 50 61 67 65 73 3c 2f 68 32  B-tree Pages</h2
5500: 3e 0a 0a 3c 70 3e 54 68 65 20 62 2d 74 72 65 65  >..<p>The b-tree
5510: 20 61 6c 67 6f 72 69 74 68 6d 20 70 72 6f 76 69   algorithm provi
5520: 64 65 73 20 6b 65 79 2f 64 61 74 61 20 73 74 6f  des key/data sto
5530: 72 61 67 65 20 77 69 74 68 20 75 6e 69 71 75 65  rage with unique
5540: 20 61 6e 64 0a 6f 72 64 65 72 65 64 20 6b 65 79   and.ordered key
5550: 73 20 6f 6e 20 70 61 67 65 2d 6f 72 69 65 6e 74  s on page-orient
5560: 65 64 20 73 74 6f 72 61 67 65 20 64 65 76 69 63  ed storage devic
5570: 65 73 2e 0a 46 6f 72 20 62 61 63 6b 67 72 6f 75  es..For backgrou
5580: 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  nd information o
5590: 6e 20 62 2d 74 72 65 65 73 2c 20 73 65 65 0a 4b  n b-trees, see.K
55a0: 6e 75 74 68 2c 20 3c 75 3e 54 68 65 20 41 72 74  nuth, <u>The Art
55b0: 20 4f 66 20 43 6f 6d 70 75 74 65 72 20 50 72 6f   Of Computer Pro
55c0: 67 72 61 6d 6d 69 6e 67 3c 2f 75 3e 2c 20 56 6f  gramming</u>, Vo
55d0: 6c 75 6d 65 20 33 20 22 53 6f 72 74 69 6e 67 0a  lume 3 "Sorting.
55e0: 61 6e 64 20 53 65 61 72 63 68 69 6e 67 22 2c 20  and Searching", 
55f0: 70 61 67 65 73 20 34 37 31 2d 34 37 39 2e 20 20  pages 471-479.  
5600: 54 77 6f 20 6b 69 6e 64 73 20 6f 66 20 62 2d 74  Two kinds of b-t
5610: 72 65 65 73 20 61 72 65 20 75 73 65 64 20 62 79  rees are used by
5620: 0a 53 51 4c 69 74 65 2e 20 20 54 68 65 20 61 6c  .SQLite.  The al
5630: 67 6f 72 69 74 68 6d 20 74 68 61 74 20 4b 6e 75  gorithm that Knu
5640: 74 68 20 63 61 6c 6c 73 20 22 42 2a 2d 54 72 65  th calls "B*-Tre
5650: 65 22 20 73 74 6f 72 65 73 20 61 6c 6c 20 64 61  e" stores all da
5660: 74 61 0a 69 6e 20 74 68 65 20 6c 65 61 76 65 73  ta.in the leaves
5670: 20 6f 66 20 74 68 65 20 74 72 65 65 2e 20 20 53   of the tree.  S
5680: 51 4c 69 74 65 20 63 61 6c 6c 73 20 74 68 69 73  QLite calls this
5690: 20 76 61 72 69 65 74 79 20 6f 66 20 62 2d 74 72   variety of b-tr
56a0: 65 65 0a 61 20 22 74 61 62 6c 65 20 62 2d 74 72  ee.a "table b-tr
56b0: 65 65 22 2e 20 54 68 65 20 61 6c 67 6f 72 69 74  ee". The algorit
56c0: 68 6d 20 74 68 61 74 20 4b 6e 75 74 68 20 63 61  hm that Knuth ca
56d0: 6c 6c 73 20 73 69 6d 70 6c 79 20 22 42 2d 54 72  lls simply "B-Tr
56e0: 65 65 22 0a 73 74 6f 72 65 73 20 62 6f 74 68 20  ee".stores both 
56f0: 74 68 65 20 6b 65 79 20 61 6e 64 20 74 68 65 20  the key and the 
5700: 64 61 74 61 20 74 6f 67 65 74 68 65 72 20 69 6e  data together in
5710: 20 62 6f 74 68 20 6c 65 61 76 65 73 0a 61 6e 64   both leaves.and
5720: 20 69 6e 20 69 6e 74 65 72 69 6f 72 20 70 61 67   in interior pag
5730: 65 73 2e 20 20 49 6e 20 74 68 65 20 53 51 4c 69  es.  In the SQLi
5740: 74 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  te implementatio
5750: 6e 2c 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a  n, the original.
5760: 42 2d 54 72 65 65 20 61 6c 67 6f 72 69 74 68 6d  B-Tree algorithm
5770: 20 73 74 6f 72 65 73 20 6b 65 79 73 20 6f 6e 6c   stores keys onl
5780: 79 2c 20 6f 6d 69 74 74 69 6e 67 20 74 68 65 20  y, omitting the 
5790: 64 61 74 61 20 65 6e 74 69 72 65 6c 79 2c 20 61  data entirely, a
57a0: 6e 64 0a 69 73 20 63 61 6c 6c 65 64 20 61 6e 20  nd.is called an 
57b0: 22 69 6e 64 65 78 20 62 2d 74 72 65 65 22 2e 0a  "index b-tree"..
57c0: 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61 67  .<p>A b-tree pag
57d0: 65 20 69 73 20 65 69 74 68 65 72 20 61 6e 20 69  e is either an i
57e0: 6e 74 65 72 69 6f 72 20 70 61 67 65 20 6f 72 20  nterior page or 
57f0: 61 20 6c 65 61 66 20 70 61 67 65 2e 0a 41 20 6c  a leaf page..A l
5800: 65 61 66 20 70 61 67 65 20 63 6f 6e 74 61 69 6e  eaf page contain
5810: 73 20 6b 65 79 73 20 61 6e 64 20 69 6e 20 74 68  s keys and in th
5820: 65 20 63 61 73 65 20 6f 66 20 61 20 74 61 62 6c  e case of a tabl
5830: 65 20 62 2d 74 72 65 65 20 65 61 63 68 0a 6b 65  e b-tree each.ke
5840: 79 20 68 61 73 20 61 73 73 6f 63 69 61 74 65 64  y has associated
5850: 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 74 65 72   data.  An inter
5860: 69 6f 72 20 70 61 67 65 20 63 6f 6e 74 61 69 6e  ior page contain
5870: 73 0a 4b 20 6b 65 79 73 20 74 6f 67 65 74 68 65  s.K keys togethe
5880: 72 20 77 69 74 68 20 4b 2b 31 20 70 6f 69 6e 74  r with K+1 point
5890: 65 72 73 20 74 6f 20 63 68 69 6c 64 20 62 2d 74  ers to child b-t
58a0: 72 65 65 20 70 61 67 65 73 2e 0a 41 20 22 70 6f  ree pages..A "po
58b0: 69 6e 74 65 72 22 20 69 6e 20 61 6e 20 69 6e 74  inter" in an int
58c0: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
58d0: 65 20 69 73 20 6a 75 73 74 20 74 68 65 20 33 31  e is just the 31
58e0: 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 70 61 67  -bit integer.pag
58f0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
5900: 63 68 69 6c 64 20 70 61 67 65 2e 3c 2f 70 3e 0a  child page.</p>.
5910: 0a 3c 70 3e 44 65 66 69 6e 65 20 74 68 65 20 64  .<p>Define the d
5920: 65 70 74 68 0a 6f 66 20 61 20 6c 65 61 66 20 62  epth.of a leaf b
5930: 2d 74 72 65 65 20 74 6f 20 62 65 20 31 20 61 6e  -tree to be 1 an
5940: 64 20 74 68 65 20 64 65 70 74 68 20 6f 66 20 61  d the depth of a
5950: 6e 79 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72  ny interior b-tr
5960: 65 65 20 74 6f 20 62 65 20 6f 6e 65 0a 6d 6f 72  ee to be one.mor
5970: 65 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d  e than the maxim
5980: 75 6d 20 64 65 70 74 68 20 6f 66 20 61 6e 79 20  um depth of any 
5990: 6f 66 20 69 74 73 20 63 68 69 6c 64 72 65 6e 2e  of its children.
59a0: 20 20 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72    ^In a well-for
59b0: 6d 65 64 0a 64 61 74 61 62 61 73 65 2c 20 61 6c  med.database, al
59c0: 6c 20 63 68 69 6c 64 72 65 6e 20 6f 66 20 61 6e  l children of an
59d0: 20 69 6e 74 65 72 69 6f 72 20 62 2d 74 72 65 65   interior b-tree
59e0: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 64   have the same d
59f0: 65 70 74 68 2e 3c 2f 70 3e 0a 0a 3c 70 3e 49 6e  epth.</p>..<p>In
5a00: 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d 74   an interior b-t
5a10: 72 65 65 20 70 61 67 65 2c 20 74 68 65 20 70 6f  ree page, the po
5a20: 69 6e 74 65 72 73 20 61 6e 64 20 6b 65 79 73 20  inters and keys 
5a30: 6c 6f 67 69 63 61 6c 6c 79 20 61 6c 74 65 72 6e  logically altern
5a40: 61 74 65 20 0a 77 69 74 68 20 61 20 70 6f 69 6e  ate .with a poin
5a50: 74 65 72 20 6f 6e 20 62 6f 74 68 20 65 6e 64 73  ter on both ends
5a60: 2e 20 28 54 68 65 20 70 72 65 76 69 6f 75 73 20  . (The previous 
5a70: 73 65 6e 74 65 6e 63 65 20 69 73 20 74 6f 20 62  sentence is to b
5a80: 65 20 75 6e 64 65 72 73 74 6f 6f 64 0a 63 6f 6e  e understood.con
5a90: 63 65 70 74 75 61 6c 6c 79 20 2d 20 74 68 65 20  ceptually - the 
5aa0: 61 63 74 75 61 6c 20 6c 61 79 6f 75 74 20 6f 66  actual layout of
5ab0: 20 74 68 65 20 6b 65 79 73 20 61 6e 64 0a 70 6f   the keys and.po
5ac0: 69 6e 74 65 72 73 20 77 69 74 68 69 6e 20 74 68  inters within th
5ad0: 65 20 70 61 67 65 20 69 73 20 6d 6f 72 65 20 63  e page is more c
5ae0: 6f 6d 70 6c 69 63 61 74 65 64 20 61 6e 64 20 77  omplicated and w
5af0: 69 6c 6c 20 62 65 20 64 65 73 63 72 69 62 65 64  ill be described
5b00: 20 69 6e 0a 74 68 65 20 73 65 71 75 65 6c 2e 29   in.the sequel.)
5b10: 20 20 41 6c 6c 20 6b 65 79 73 20 77 69 74 68 69    All keys withi
5b20: 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67 65 20  n the same page 
5b30: 61 72 65 20 75 6e 69 71 75 65 20 61 6e 64 20 61  are unique and a
5b40: 72 65 20 6c 6f 67 69 63 61 6c 6c 79 0a 6f 72 67  re logically.org
5b50: 61 6e 69 7a 65 64 20 69 6e 20 61 73 63 65 6e 64  anized in ascend
5b60: 69 6e 67 20 6f 72 64 65 72 20 66 72 6f 6d 20 6c  ing order from l
5b70: 65 66 74 20 74 6f 20 72 69 67 68 74 2e 20 20 28  eft to right.  (
5b80: 41 67 61 69 6e 2c 20 74 68 69 73 20 6f 72 64 65  Again, this orde
5b90: 72 69 6e 67 0a 69 73 20 6c 6f 67 69 63 61 6c 2c  ring.is logical,
5ba0: 20 6e 6f 74 20 70 68 79 73 69 63 61 6c 2e 20 20   not physical.  
5bb0: 54 68 65 20 61 63 74 75 61 6c 20 6c 6f 63 61 74  The actual locat
5bc0: 69 6f 6e 20 6f 66 20 6b 65 79 73 20 77 69 74 68  ion of keys with
5bd0: 69 6e 20 74 68 65 20 70 61 67 65 0a 69 73 20 61  in the page.is a
5be0: 72 62 69 74 72 61 72 79 2e 29 20 5e 46 6f 72 20  rbitrary.) ^For 
5bf0: 61 6e 79 20 6b 65 79 20 58 2c 20 70 6f 69 6e 74  any key X, point
5c00: 65 72 73 20 74 6f 20 74 68 65 20 6c 65 66 74 0a  ers to the left.
5c10: 6f 66 20 61 20 58 20 72 65 66 65 72 20 74 6f 20  of a X refer to 
5c20: 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e 20  b-tree pages on 
5c30: 77 68 69 63 68 20 61 6c 6c 20 6b 65 79 73 20 61  which all keys a
5c40: 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  re less than or 
5c50: 65 71 75 61 6c 20 74 6f 20 58 2e 0a 5e 50 6f 69  equal to X..^Poi
5c60: 6e 74 65 72 73 20 74 6f 20 74 68 65 20 72 69 67  nters to the rig
5c70: 68 74 20 6f 66 20 58 20 72 65 66 65 72 20 74 6f  ht of X refer to
5c80: 20 70 61 67 65 73 20 77 68 65 72 65 20 61 6c 6c   pages where all
5c90: 20 6b 65 79 73 20 61 72 65 20 0a 67 72 65 61 74   keys are .great
5ca0: 65 72 20 74 68 61 6e 20 58 2e 3c 2f 70 3e 0a 0a  er than X.</p>..
5cb0: 3c 70 3e 57 69 74 68 69 6e 20 61 6e 20 69 6e 74  <p>Within an int
5cc0: 65 72 69 6f 72 20 62 2d 74 72 65 65 20 70 61 67  erior b-tree pag
5cd0: 65 2c 20 65 61 63 68 20 6b 65 79 20 61 6e 64 20  e, each key and 
5ce0: 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 69  the pointer to i
5cf0: 74 73 0a 69 6d 6d 65 64 69 61 74 65 20 6c 65 66  ts.immediate lef
5d00: 74 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20 69  t are combined i
5d10: 6e 74 6f 20 61 20 73 74 72 75 63 74 75 72 65 20  nto a structure 
5d20: 63 61 6c 6c 65 64 20 61 20 22 63 65 6c 6c 22 2e  called a "cell".
5d30: 20 20 54 68 65 0a 72 69 67 68 74 2d 6d 6f 73 74    The.right-most
5d40: 20 70 6f 69 6e 74 65 72 20 69 73 20 68 65 6c 64   pointer is held
5d50: 20 73 65 70 61 72 61 74 65 6c 79 2e 20 20 41 20   separately.  A 
5d60: 6c 65 61 66 20 62 2d 74 72 65 65 20 70 61 67 65  leaf b-tree page
5d70: 20 68 61 73 20 6e 6f 0a 70 6f 69 6e 74 65 72 73   has no.pointers
5d80: 2c 20 62 75 74 20 69 74 20 73 74 69 6c 6c 20 75  , but it still u
5d90: 73 65 73 20 74 68 65 20 63 65 6c 6c 20 73 74 72  ses the cell str
5da0: 75 63 74 75 72 65 20 74 6f 20 68 6f 6c 64 20 6b  ucture to hold k
5db0: 65 79 73 20 66 6f 72 0a 69 6e 64 65 78 20 62 2d  eys for.index b-
5dc0: 74 72 65 65 73 20 6f 72 20 6b 65 79 73 20 61 6e  trees or keys an
5dd0: 64 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 61  d content for ta
5de0: 62 6c 65 20 62 2d 74 72 65 65 73 2e 20 20 44 61  ble b-trees.  Da
5df0: 74 61 20 69 73 20 61 6c 73 6f 0a 63 6f 6e 74 61  ta is also.conta
5e00: 69 6e 65 64 20 69 6e 20 74 68 65 20 63 65 6c 6c  ined in the cell
5e10: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 45 76 65 72 79  ..</p>..<p>Every
5e20: 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 61 73   b-tree page has
5e30: 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 70 61 72   at most one par
5e40: 65 6e 74 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ent b-tree page.
5e50: 0a 41 20 62 2d 74 72 65 65 20 70 61 67 65 20 77  .A b-tree page w
5e60: 69 74 68 6f 75 74 20 61 20 70 61 72 65 6e 74 20  ithout a parent 
5e70: 69 73 20 63 61 6c 6c 65 64 20 61 20 72 6f 6f 74  is called a root
5e80: 20 70 61 67 65 2e 20 20 41 20 72 6f 6f 74 20 62   page.  A root b
5e90: 2d 74 72 65 65 20 70 61 67 65 0a 74 6f 67 65 74  -tree page.toget
5ea0: 68 65 72 20 77 69 74 68 20 74 68 65 20 63 6c 6f  her with the clo
5eb0: 73 75 72 65 20 6f 66 20 69 74 73 20 63 68 69 6c  sure of its chil
5ec0: 64 72 65 6e 20 66 6f 72 6d 20 61 20 63 6f 6d 70  dren form a comp
5ed0: 6c 65 74 65 20 62 2d 74 72 65 65 2e 0a 49 74 20  lete b-tree..It 
5ee0: 69 73 20 70 6f 73 73 69 62 6c 65 20 28 61 6e 64  is possible (and
5ef0: 20 69 6e 20 66 61 63 74 20 72 61 74 68 65 72 20   in fact rather 
5f00: 63 6f 6d 6d 6f 6e 29 20 74 6f 20 68 61 76 65 20  common) to have 
5f10: 61 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74 72 65  a complete b-tre
5f20: 65 0a 74 68 61 74 20 63 6f 6e 73 69 73 74 73 20  e.that consists 
5f30: 6f 66 20 61 20 73 69 6e 67 6c 65 20 70 61 67 65  of a single page
5f40: 20 74 68 61 74 20 69 73 20 62 6f 74 68 20 61 20   that is both a 
5f50: 6c 65 61 66 20 61 6e 64 20 74 68 65 20 72 6f 6f  leaf and the roo
5f60: 74 2e 0a 42 65 63 61 75 73 65 20 74 68 65 72 65  t..Because there
5f70: 20 61 72 65 20 70 6f 69 6e 74 65 72 73 20 66 72   are pointers fr
5f80: 6f 6d 20 70 61 72 65 6e 74 73 20 74 6f 20 63 68  om parents to ch
5f90: 69 6c 64 72 65 6e 2c 20 65 76 65 72 79 20 70 61  ildren, every pa
5fa0: 67 65 20 6f 66 20 61 0a 63 6f 6d 70 6c 65 74 65  ge of a.complete
5fb0: 20 62 2d 74 72 65 65 20 63 61 6e 20 62 65 20 6c   b-tree can be l
5fc0: 6f 63 61 74 65 64 20 69 66 20 6f 6e 6c 79 20 74  ocated if only t
5fd0: 68 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20  he root page is 
5fe0: 6b 6e 6f 77 6e 2e 20 20 48 65 6e 63 65 2c 0a 62  known.  Hence,.b
5ff0: 2d 74 72 65 65 73 20 61 72 65 20 69 64 65 6e 74  -trees are ident
6000: 69 66 69 65 64 20 62 79 20 74 68 65 69 72 20 72  ified by their r
6010: 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  oot page number.
6020: 3c 2f 70 3e 0a 0a 3c 70 3e 41 20 62 2d 74 72 65  </p>..<p>A b-tre
6030: 65 20 70 61 67 65 20 69 73 20 65 69 74 68 65 72  e page is either
6040: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
6050: 70 61 67 65 20 6f 72 20 61 6e 20 69 6e 64 65 78  page or an index
6060: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a 41 6c   b-tree page..Al
6070: 6c 20 70 61 67 65 73 20 77 69 74 68 69 6e 20 65  l pages within e
6080: 61 63 68 20 63 6f 6d 70 6c 65 74 65 20 62 2d 74  ach complete b-t
6090: 72 65 65 20 61 72 65 20 6f 66 20 74 68 65 20 73  ree are of the s
60a0: 61 6d 65 20 74 79 70 65 3a 20 65 69 74 68 65 72  ame type: either
60b0: 20 74 61 62 6c 65 0a 6f 72 20 69 6e 64 65 78 2e   table.or index.
60c0: 20 20 54 68 65 72 65 20 69 73 20 6f 6e 65 20 74    There is one t
60d0: 61 62 6c 65 20 62 2d 74 72 65 65 73 20 69 6e 20  able b-trees in 
60e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
60f0: 65 0a 66 6f 72 20 65 61 63 68 20 72 6f 77 69 64  e.for each rowid
6100: 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20 64 61   table in the da
6110: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 69  tabase schema, i
6120: 6e 63 6c 75 64 69 6e 67 20 73 79 73 74 65 6d 20  ncluding system 
6130: 74 61 62 6c 65 73 0a 73 75 63 68 20 61 73 20 73  tables.such as s
6140: 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 20 20 54  qlite_master.  T
6150: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 64 65  here is one inde
6160: 78 20 62 2d 74 72 65 65 0a 69 6e 20 74 68 65 20  x b-tree.in the 
6170: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f  database file fo
6180: 72 20 65 61 63 68 20 69 6e 64 65 78 20 69 6e 20  r each index in 
6190: 74 68 65 20 73 63 68 65 6d 61 2c 20 69 6e 63 6c  the schema, incl
61a0: 75 64 69 6e 67 20 69 6d 70 6c 69 65 64 20 69 6e  uding implied in
61b0: 64 65 78 65 73 0a 63 72 65 61 74 65 64 20 62 79  dexes.created by
61c0: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 73   uniqueness cons
61d0: 74 72 61 69 6e 74 73 2e 20 20 54 68 65 72 65 20  traints.  There 
61e0: 61 72 65 20 6e 6f 20 62 2d 74 72 65 65 73 20 61  are no b-trees a
61f0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 5b  ssociated with.[
6200: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 5d 2e  virtual tables].
6210: 20 20 53 70 65 63 69 66 69 63 20 76 69 72 74 75    Specific virtu
6220: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
6230: 6e 74 61 74 69 6f 6e 73 20 6d 69 67 68 74 20 6d  ntations might m
6240: 61 6b 65 20 75 73 65 0a 6f 66 20 5b 73 68 61 64  ake use.of [shad
6250: 6f 77 20 74 61 62 6c 65 73 5d 20 66 6f 72 20 73  ow tables] for s
6260: 74 6f 72 61 67 65 2c 20 62 75 74 20 74 68 6f 73  torage, but thos
6270: 65 20 73 68 61 64 6f 77 20 74 61 62 6c 65 73 20  e shadow tables 
6280: 77 69 6c 6c 20 68 61 76 65 20 73 65 70 61 72 61  will have separa
6290: 74 65 0a 65 6e 74 72 69 65 73 20 69 6e 20 74 68  te.entries in th
62a0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
62b0: 61 2e 20 20 5b 57 49 54 48 4f 55 54 20 52 4f 57  a.  [WITHOUT ROW
62c0: 49 44 5d 20 74 61 62 6c 65 73 20 75 73 65 20 69  ID] tables use i
62d0: 6e 64 65 78 20 62 2d 74 72 65 65 73 0a 72 61 74  ndex b-trees.rat
62e0: 68 65 72 20 74 68 61 6e 20 61 20 74 61 62 6c 65  her than a table
62f0: 20 62 2d 74 72 65 65 73 2c 20 73 6f 20 74 68 65   b-trees, so the
6300: 72 65 20 69 73 20 6f 6e 65 0a 69 6e 64 65 78 20  re is one.index 
6310: 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 64 61  b-tree in the da
6320: 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
6330: 65 61 63 68 20 5b 57 49 54 48 4f 55 54 20 52 4f  each [WITHOUT RO
6340: 57 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20  WID] table..The 
6350: 62 2d 74 72 65 65 20 63 6f 72 72 65 73 70 6f 6e  b-tree correspon
6360: 64 69 6e 67 20 74 6f 20 74 68 65 20 73 71 6c 69  ding to the sqli
6370: 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table 
6380: 69 73 20 61 6c 77 61 79 73 20 61 20 74 61 62 6c  is always a tabl
6390: 65 0a 62 2d 74 72 65 65 20 61 6e 64 20 61 6c 77  e.b-tree and alw
63a0: 61 79 73 20 68 61 73 20 61 20 72 6f 6f 74 20 70  ays has a root p
63b0: 61 67 65 20 6f 66 20 31 2e 0a 54 68 65 20 73 71  age of 1..The sq
63c0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
63d0: 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  e contains the r
63e0: 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
63f0: 66 6f 72 20 65 76 65 72 79 20 6f 74 68 65 72 20  for every other 
6400: 0a 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78  .table and index
6410: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
6420: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 45   file.</p>..<p>E
6430: 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61 20 74  ach entry in a t
6440: 61 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 6e 73  able b-tree cons
6450: 69 73 74 73 20 6f 66 20 61 20 36 34 2d 62 69 74  ists of a 64-bit
6460: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
6470: 6b 65 79 0a 61 6e 64 20 75 70 20 74 6f 20 32 31  key.and up to 21
6480: 34 37 34 38 33 36 34 37 20 62 79 74 65 73 20 6f  47483647 bytes o
6490: 66 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  f arbitrary data
64a0: 2e 20 20 28 54 68 65 20 6b 65 79 20 6f 66 20 61  .  (The key of a
64b0: 20 74 61 62 6c 65 20 62 2d 74 72 65 65 0a 63 6f   table b-tree.co
64c0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
64d0: 20 5b 72 6f 77 69 64 5d 20 6f 66 20 74 68 65 20   [rowid] of the 
64e0: 53 51 4c 20 74 61 62 6c 65 20 74 68 61 74 20 74  SQL table that t
64f0: 68 65 20 62 2d 74 72 65 65 20 69 6d 70 6c 65 6d  he b-tree implem
6500: 65 6e 74 73 2e 29 0a 49 6e 74 65 72 69 6f 72 20  ents.).Interior 
6510: 74 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68 6f  table b-trees ho
6520: 6c 64 20 6f 6e 6c 79 20 6b 65 79 73 20 61 6e 64  ld only keys and
6530: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 63 68 69   pointers to chi
6540: 6c 64 72 65 6e 2e 0a 41 6c 6c 20 64 61 74 61 20  ldren..All data 
6550: 69 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  is contained in 
6560: 74 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65  the table b-tree
6570: 20 6c 65 61 76 65 73 2e 3c 2f 70 3e 0a 0a 3c 70   leaves.</p>..<p
6580: 3e 45 61 63 68 20 65 6e 74 72 79 20 69 6e 20 61  >Each entry in a
6590: 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 63  n index b-tree c
65a0: 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61 72  onsists of an ar
65b0: 62 69 74 72 61 72 79 20 6b 65 79 20 6f 66 20 75  bitrary key of u
65c0: 70 0a 74 6f 20 32 31 34 37 34 38 33 36 34 37 20  p.to 2147483647 
65d0: 62 79 74 65 73 20 69 6e 20 6c 65 6e 67 74 68 20  bytes in length 
65e0: 61 6e 64 20 6e 6f 20 64 61 74 61 2e 3c 2f 70 3e  and no data.</p>
65f0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
6600: 6e 74 20 63 65 6c 6c 5f 70 61 79 6c 6f 61 64 20  nt cell_payload 
6610: 7b 63 65 6c 6c 20 70 61 79 6c 6f 61 64 7d 3c 2f  {cell payload}</
6620: 74 63 6c 3e 0a 3c 70 3e 44 65 66 69 6e 65 20 74  tcl>.<p>Define t
6630: 68 65 20 22 70 61 79 6c 6f 61 64 22 20 6f 66 20  he "payload" of 
6640: 61 20 63 65 6c 6c 20 74 6f 20 62 65 20 74 68 65  a cell to be the
6650: 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e 67 74   arbitrary lengt
6660: 68 20 73 65 63 74 69 6f 6e 0a 6f 66 20 74 68 65  h section.of the
6670: 20 63 65 6c 6c 2e 20 20 46 6f 72 20 61 6e 20 69   cell.  For an i
6680: 6e 64 65 78 20 62 2d 74 72 65 65 2c 20 74 68 65  ndex b-tree, the
6690: 20 6b 65 79 20 69 73 20 61 6c 77 61 79 73 20 61   key is always a
66a0: 72 62 69 74 72 61 72 79 20 69 6e 20 6c 65 6e 67  rbitrary in leng
66b0: 74 68 0a 61 6e 64 20 68 65 6e 63 65 20 74 68 65  th.and hence the
66c0: 20 70 61 79 6c 6f 61 64 20 69 73 20 74 68 65 20   payload is the 
66d0: 6b 65 79 2e 20 20 54 68 65 72 65 20 61 72 65 20  key.  There are 
66e0: 6e 6f 20 61 72 62 69 74 72 61 72 79 20 6c 65 6e  no arbitrary len
66f0: 67 74 68 20 65 6c 65 6d 65 6e 74 73 0a 69 6e 20  gth elements.in 
6700: 74 68 65 20 63 65 6c 6c 73 20 6f 66 20 69 6e 74  the cells of int
6710: 65 72 69 6f 72 20 74 61 62 6c 65 20 62 2d 74 72  erior table b-tr
6720: 65 65 20 70 61 67 65 73 20 61 6e 64 20 73 6f 20  ee pages and so 
6730: 74 68 6f 73 65 20 63 65 6c 6c 73 20 68 61 76 65  those cells have
6740: 20 6e 6f 0a 70 61 79 6c 6f 61 64 2e 20 20 54 61   no.payload.  Ta
6750: 62 6c 65 20 62 2d 74 72 65 65 20 6c 65 61 66 20  ble b-tree leaf 
6760: 70 61 67 65 73 20 63 6f 6e 74 61 69 6e 20 61 72  pages contain ar
6770: 62 69 74 72 61 72 79 20 6c 65 6e 67 74 68 20 63  bitrary length c
6780: 6f 6e 74 65 6e 74 20 61 6e 64 0a 73 6f 20 66 6f  ontent and.so fo
6790: 72 20 63 65 6c 6c 73 20 6f 6e 20 74 68 6f 73 65  r cells on those
67a0: 20 70 61 67 65 73 20 74 68 65 20 70 61 79 6c 6f   pages the paylo
67b0: 61 64 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e  ad is the conten
67c0: 74 2e 0a 3c 70 3e 57 68 65 6e 20 74 68 65 20 73  t..<p>When the s
67d0: 69 7a 65 20 6f 66 20 70 61 79 6c 6f 61 64 20 66  ize of payload f
67e0: 6f 72 20 61 20 63 65 6c 6c 20 65 78 63 65 65 64  or a cell exceed
67f0: 73 20 61 20 63 65 72 74 61 69 6e 20 74 68 72 65  s a certain thre
6800: 73 68 6f 6c 64 20 28 74 6f 0a 62 65 20 64 65 66  shold (to.be def
6810: 69 6e 65 64 20 6c 61 74 65 72 29 20 74 68 65 6e  ined later) then
6820: 20 6f 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20   only the first 
6830: 66 65 77 20 62 79 74 65 73 20 6f 66 20 74 68 65  few bytes of the
6840: 20 70 61 79 6c 6f 61 64 0a 61 72 65 20 73 74 6f   payload.are sto
6850: 72 65 64 20 6f 6e 20 74 68 65 20 62 2d 74 72 65  red on the b-tre
6860: 65 20 70 61 67 65 20 61 6e 64 20 74 68 65 20 62  e page and the b
6870: 61 6c 61 6e 63 65 20 69 73 20 73 74 6f 72 65 64  alance is stored
6880: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   in a linked lis
6890: 74 0a 6f 66 20 63 6f 6e 74 65 6e 74 20 6f 76 65  t.of content ove
68a0: 72 66 6c 6f 77 20 70 61 67 65 73 2e 3c 2f 70 3e  rflow pages.</p>
68b0: 0a 0a 3c 70 3e 41 20 62 2d 74 72 65 65 20 70 61  ..<p>A b-tree pa
68c0: 67 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  ge is divided in
68d0: 74 6f 20 72 65 67 69 6f 6e 73 20 69 6e 20 74 68  to regions in th
68e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 72 64 65  e following orde
68f0: 72 3a 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 54 68 65  r:..<ol>.<li>The
6900: 20 31 30 30 2d 62 79 74 65 20 64 61 74 61 62 61   100-byte databa
6910: 73 65 20 66 69 6c 65 20 68 65 61 64 65 72 20 28  se file header (
6920: 66 6f 75 6e 64 20 6f 6e 20 70 61 67 65 20 31 20  found on page 1 
6930: 6f 6e 6c 79 29 0a 3c 6c 69 3e 54 68 65 20 38 20  only).<li>The 8 
6940: 6f 72 20 31 32 20 62 79 74 65 20 62 2d 74 72 65  or 12 byte b-tre
6950: 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 3c 6c  e page header.<l
6960: 69 3e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74  i>The cell point
6970: 65 72 20 61 72 72 61 79 0a 3c 6c 69 3e 55 6e 61  er array.<li>Una
6980: 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 0a 3c  llocated space.<
6990: 6c 69 3e 54 68 65 20 63 65 6c 6c 20 63 6f 6e 74  li>The cell cont
69a0: 65 6e 74 20 61 72 65 61 0a 3c 6c 69 3e 54 68 65  ent area.<li>The
69b0: 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f 6e   reserved region
69c0: 2e 0a 3c 2f 6f 6c 3e 0a 3c 2f 70 3e 0a 0a 3c 70  ..</ol>.</p>..<p
69d0: 3e 54 68 65 20 31 30 30 2d 62 79 74 65 20 64 61  >The 100-byte da
69e0: 74 61 62 61 73 65 20 66 69 6c 65 20 68 65 61 64  tabase file head
69f0: 65 72 20 69 73 20 66 6f 75 6e 64 20 6f 6e 6c 79  er is found only
6a00: 20 6f 6e 20 70 61 67 65 20 31 2c 20 77 68 69 63   on page 1, whic
6a10: 68 20 69 73 0a 61 6c 77 61 79 73 20 61 20 74 61  h is.always a ta
6a20: 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e  ble b-tree page.
6a30: 20 20 41 6c 6c 20 6f 74 68 65 72 20 62 2d 74 72    All other b-tr
6a40: 65 65 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ee pages in the 
6a50: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 6f 6d  database file.om
6a60: 69 74 20 74 68 69 73 20 31 30 30 2d 62 79 74 65  it this 100-byte
6a70: 20 68 65 61 64 65 72 2e 3c 2f 70 3e 0a 0a 3c 70   header.</p>..<p
6a80: 3e 54 68 65 20 72 65 73 65 72 76 65 64 20 72 65  >The reserved re
6a90: 67 69 6f 6e 20 69 73 20 61 6e 20 61 72 65 61 20  gion is an area 
6aa0: 6f 66 20 75 6e 75 73 65 64 20 73 70 61 63 65 20  of unused space 
6ab0: 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 65 76  at the end of ev
6ac0: 65 72 79 0a 70 61 67 65 20 28 65 78 63 65 70 74  ery.page (except
6ad0: 20 74 68 65 20 6c 6f 63 6b 69 6e 67 20 70 61 67   the locking pag
6ae0: 65 29 20 74 68 61 74 20 65 78 74 65 6e 73 69 6f  e) that extensio
6af0: 6e 73 20 63 61 6e 20 75 73 65 20 74 6f 20 68 6f  ns can use to ho
6b00: 6c 64 20 70 65 72 2d 70 61 67 65 0a 69 6e 66 6f  ld per-page.info
6b10: 72 6d 61 74 69 6f 6e 2e 20 20 5e 54 68 65 20 73  rmation.  ^The s
6b20: 69 7a 65 20 6f 66 20 74 68 65 20 72 65 73 65 72  ize of the reser
6b30: 76 65 64 20 72 65 67 69 6f 6e 20 69 73 20 64 65  ved region is de
6b40: 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
6b50: 6f 6e 65 2d 62 79 74 65 0a 75 6e 73 69 67 6e 65  one-byte.unsigne
6b60: 64 20 69 6e 74 65 67 65 72 20 66 6f 75 6e 64 20  d integer found 
6b70: 61 74 20 61 6e 20 6f 66 66 73 65 74 20 6f 66 20  at an offset of 
6b80: 32 30 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  20 into the data
6b90: 62 61 73 65 20 66 69 6c 65 20 68 65 61 64 65 72  base file header
6ba0: 2e 0a 54 68 65 20 73 69 7a 65 20 6f 66 20 74 68  ..The size of th
6bb0: 65 20 72 65 73 65 72 76 65 64 20 72 65 67 69 6f  e reserved regio
6bc0: 6e 20 69 73 20 75 73 75 61 6c 6c 79 20 7a 65 72  n is usually zer
6bd0: 6f 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 62  o.</p>..<p>The b
6be0: 2d 74 72 65 65 20 70 61 67 65 20 68 65 61 64 65  -tree page heade
6bf0: 72 20 69 73 20 38 20 62 79 74 65 73 20 69 6e 20  r is 8 bytes in 
6c00: 73 69 7a 65 20 66 6f 72 20 6c 65 61 66 20 70 61  size for leaf pa
6c10: 67 65 73 20 61 6e 64 20 31 32 0a 62 79 74 65 73  ges and 12.bytes
6c20: 20 66 6f 72 20 69 6e 74 65 72 69 6f 72 20 70 61   for interior pa
6c30: 67 65 73 2e 20 20 41 6c 6c 20 6d 75 6c 74 69 62  ges.  All multib
6c40: 79 74 65 20 76 61 6c 75 65 73 20 69 6e 20 74 68  yte values in th
6c50: 65 20 70 61 67 65 20 68 65 61 64 65 72 0a 61 72  e page header.ar
6c60: 65 20 62 69 67 2d 65 6e 64 69 61 6e 2e 0a 54 68  e big-endian..Th
6c70: 65 20 62 2d 74 72 65 65 20 70 61 67 65 20 68 65  e b-tree page he
6c80: 61 64 65 72 20 69 73 20 63 6f 6d 70 6f 73 65 64  ader is composed
6c90: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
6ca0: 67 20 66 69 65 6c 64 73 3a 3c 2f 70 3e 0a 0a 3c  g fields:</p>..<
6cb0: 63 65 6e 74 65 72 3e 0a 3c 69 3e 42 2d 74 72 65  center>.<i>B-tre
6cc0: 65 20 50 61 67 65 20 48 65 61 64 65 72 20 46 6f  e Page Header Fo
6cd0: 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61  rmat</i><br>.<ta
6ce0: 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64  ble border=1 wid
6cf0: 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74  th="80%">.<tr><t
6d00: 68 3e 4f 66 66 73 65 74 3c 74 68 3e 53 69 7a 65  h>Offset<th>Size
6d10: 3c 74 68 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a  <th>Description.
6d20: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
6d30: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
6d40: 30 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  0<td align=cente
6d50: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c 74  r valign=top>1<t
6d60: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54  d align=left>.^T
6d70: 68 65 20 6f 6e 65 2d 62 79 74 65 20 66 6c 61 67  he one-byte flag
6d80: 20 61 74 20 6f 66 66 73 65 74 20 30 20 69 6e 64   at offset 0 ind
6d90: 69 63 61 74 69 6e 67 20 74 68 65 20 62 2d 74 72  icating the b-tr
6da0: 65 65 20 70 61 67 65 20 74 79 70 65 2e 3c 75 6c  ee page type.<ul
6db0: 3e 0a 3c 6c 69 3e 5e 41 20 76 61 6c 75 65 20 6f  >.<li>^A value o
6dc0: 66 20 32 20 28 30 78 30 32 29 20 6d 65 61 6e 73  f 2 (0x02) means
6dd0: 20 74 68 65 20 70 61 67 65 20 69 73 20 61 6e 20   the page is an 
6de0: 69 6e 74 65 72 69 6f 72 20 69 6e 64 65 78 20 62  interior index b
6df0: 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 6c 69 3e  -tree page..<li>
6e00: 5e 41 20 76 61 6c 75 65 20 6f 66 20 35 20 28 30  ^A value of 5 (0
6e10: 78 30 35 29 20 6d 65 61 6e 73 20 74 68 65 20 70  x05) means the p
6e20: 61 67 65 20 69 73 20 61 6e 20 69 6e 74 65 72 69  age is an interi
6e30: 6f 72 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  or table b-tree 
6e40: 70 61 67 65 2e 0a 3c 6c 69 3e 5e 41 20 76 61 6c  page..<li>^A val
6e50: 75 65 20 6f 66 20 31 30 20 28 30 78 30 61 29 20  ue of 10 (0x0a) 
6e60: 6d 65 61 6e 73 20 74 68 65 20 70 61 67 65 20 69  means the page i
6e70: 73 20 61 20 6c 65 61 66 20 69 6e 64 65 78 20 62  s a leaf index b
6e80: 2d 74 72 65 65 20 70 61 67 65 2e 0a 3c 6c 69 3e  -tree page..<li>
6e90: 5e 41 20 76 61 6c 75 65 20 6f 66 20 31 33 20 28  ^A value of 13 (
6ea0: 30 78 30 64 29 20 6d 65 61 6e 73 20 74 68 65 20  0x0d) means the 
6eb0: 70 61 67 65 20 69 73 20 61 20 6c 65 61 66 20 74  page is a leaf t
6ec0: 61 62 6c 65 20 62 2d 74 72 65 65 20 70 61 67 65  able b-tree page
6ed0: 2e 3c 2f 75 6c 3e 0a 5e 41 6e 79 20 6f 74 68 65  .</ul>.^Any othe
6ee0: 72 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  r value for the 
6ef0: 62 2d 74 72 65 65 20 70 61 67 65 20 74 79 70 65  b-tree page type
6f00: 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 3c 74   is an error..<t
6f10: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
6f20: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 31 3c  er valign=top>1<
6f30: 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20  td align=center 
6f40: 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74 64 20  valign=top>2<td 
6f50: 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65  align=left>.^The
6f60: 20 74 77 6f 2d 62 79 74 65 20 69 6e 74 65 67 65   two-byte intege
6f70: 72 20 61 74 20 6f 66 66 73 65 74 20 31 20 67 69  r at offset 1 gi
6f80: 76 65 73 20 74 68 65 20 73 74 61 72 74 20 6f 66  ves the start of
6f90: 20 74 68 65 0a 66 69 72 73 74 20 66 72 65 65 62   the.first freeb
6fa0: 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 70 61 67 65  lock on the page
6fb0: 2c 20 6f 72 20 69 73 20 7a 65 72 6f 20 69 66 20  , or is zero if 
6fc0: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65  there are no fre
6fd0: 65 62 6c 6f 63 6b 73 2e 0a 3c 74 72 3e 3c 74 64  eblocks..<tr><td
6fe0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
6ff0: 6c 69 67 6e 3d 74 6f 70 3e 33 3c 74 64 20 61 6c  lign=top>3<td al
7000: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
7010: 6e 3d 74 6f 70 3e 32 3c 74 64 20 61 6c 69 67 6e  n=top>2<td align
7020: 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 74 77 6f 2d  =left>.^The two-
7030: 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74 20  byte integer at 
7040: 6f 66 66 73 65 74 20 33 20 67 69 76 65 73 20 74  offset 3 gives t
7050: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c  he number of cel
7060: 6c 73 20 6f 6e 20 74 68 65 20 70 61 67 65 2e 0a  ls on the page..
7070: 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65  <tr><td align=ce
7080: 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  nter valign=top>
7090: 35 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65  5<td align=cente
70a0: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 32 3c 74  r valign=top>2<t
70b0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 28  d align=left>.^(
70c0: 54 68 65 20 74 77 6f 2d 62 79 74 65 20 69 6e 74  The two-byte int
70d0: 65 67 65 72 20 61 74 20 6f 66 66 73 65 74 20 35  eger at offset 5
70e0: 20 64 65 73 69 67 6e 61 74 65 73 20 74 68 65 20   designates the 
70f0: 73 74 61 72 74 20 6f 66 20 74 68 65 20 63 65 6c  start of the cel
7100: 6c 20 63 6f 6e 74 65 6e 74 0a 61 72 65 61 2e 20  l content.area. 
7110: 20 41 20 7a 65 72 6f 20 76 61 6c 75 65 20 66 6f   A zero value fo
7120: 72 20 74 68 69 73 20 69 6e 74 65 67 65 72 20 69  r this integer i
7130: 73 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  s interpreted as
7140: 20 36 35 35 33 36 2e 29 5e 0a 3c 74 72 3e 3c 74   65536.)^.<tr><t
7150: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
7160: 61 6c 69 67 6e 3d 74 6f 70 3e 37 3c 74 64 20 61  align=top>7<td a
7170: 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69  lign=center vali
7180: 67 6e 3d 74 6f 70 3e 31 3c 74 64 20 61 6c 69 67  gn=top>1<td alig
7190: 6e 3d 6c 65 66 74 3e 0a 5e 54 68 65 20 6f 6e 65  n=left>.^The one
71a0: 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 61 74  -byte integer at
71b0: 20 6f 66 66 73 65 74 20 37 20 67 69 76 65 73 20   offset 7 gives 
71c0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 72  the number of fr
71d0: 61 67 6d 65 6e 74 65 64 20 66 72 65 65 0a 62 79  agmented free.by
71e0: 74 65 73 20 77 69 74 68 69 6e 20 74 68 65 20 63  tes within the c
71f0: 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61  ell content area
7200: 2e 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d  ..<tr><td align=
7210: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
7220: 70 3e 38 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  p>8<td align=cen
7230: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34  ter valign=top>4
7240: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
7250: 5e 28 54 68 65 20 66 6f 75 72 2d 62 79 74 65 20  ^(The four-byte 
7260: 70 61 67 65 20 6e 75 6d 62 65 72 20 61 74 20 6f  page number at o
7270: 66 66 73 65 74 20 38 20 69 73 20 74 68 65 20 72  ffset 8 is the r
7280: 69 67 68 74 2d 6d 6f 73 74 20 70 6f 69 6e 74 65  ight-most pointe
7290: 72 2e 20 20 54 68 69 73 0a 76 61 6c 75 65 20 61  r.  This.value a
72a0: 70 70 65 61 72 73 20 69 6e 20 74 68 65 20 68 65  ppears in the he
72b0: 61 64 65 72 20 6f 66 20 69 6e 74 65 72 69 6f 72  ader of interior
72c0: 20 62 2d 74 72 65 65 20 70 61 67 65 73 20 6f 6e   b-tree pages on
72d0: 6c 79 20 61 6e 64 20 69 73 20 6f 6d 69 74 74 65  ly and is omitte
72e0: 64 20 66 72 6f 6d 0a 61 6c 6c 20 6f 74 68 65 72  d from.all other
72f0: 20 70 61 67 65 73 2e 29 5e 0a 3c 2f 74 61 62 6c   pages.)^.</tabl
7300: 65 3e 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e  e></center>..<p>
7310: 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e 74 65  ^The cell pointe
7320: 72 20 61 72 72 61 79 20 6f 66 20 61 20 62 2d 74  r array of a b-t
7330: 72 65 65 20 70 61 67 65 20 69 6d 6d 65 64 69 61  ree page immedia
7340: 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65  tely follows the
7350: 20 62 2d 74 72 65 65 0a 70 61 67 65 20 68 65 61   b-tree.page hea
7360: 64 65 72 2e 20 20 4c 65 74 20 4b 20 62 65 20 74  der.  Let K be t
7370: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 65 6c  he number of cel
7380: 6c 73 20 6f 6e 20 74 68 65 20 62 74 72 65 65 2e  ls on the btree.
7390: 20 20 5e 54 68 65 20 63 65 6c 6c 20 70 6f 69 6e    ^The cell poin
73a0: 74 65 72 0a 61 72 72 61 79 20 63 6f 6e 73 69 73  ter.array consis
73b0: 74 73 20 6f 66 20 4b 20 32 2d 62 79 74 65 20 69  ts of K 2-byte i
73c0: 6e 74 65 67 65 72 20 6f 66 66 73 65 74 73 20 74  nteger offsets t
73d0: 6f 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  o the cell conte
73e0: 6e 74 73 2e 20 20 5e 54 68 65 0a 63 65 6c 6c 20  nts.  ^The.cell 
73f0: 70 6f 69 6e 74 65 72 73 20 61 72 65 20 61 72 72  pointers are arr
7400: 61 6e 67 65 64 20 69 6e 20 6b 65 79 20 6f 72 64  anged in key ord
7410: 65 72 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f 73  er with left-mos
7420: 74 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c  t cell (the cell
7430: 20 77 69 74 68 20 74 68 65 0a 73 6d 61 6c 6c 65   with the.smalle
7440: 73 74 20 6b 65 79 29 20 66 69 72 73 74 20 61 6e  st key) first an
7450: 64 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  d the right-most
7460: 20 63 65 6c 6c 20 28 74 68 65 20 63 65 6c 6c 20   cell (the cell 
7470: 77 69 74 68 20 74 68 65 20 6c 61 72 67 65 73 74  with the largest
7480: 0a 6b 65 79 29 20 6c 61 73 74 2e 3c 2f 70 3e 0a  .key) last.</p>.
7490: 0a 3c 70 3e 43 65 6c 6c 20 63 6f 6e 74 65 6e 74  .<p>Cell content
74a0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
74b0: 65 20 63 65 6c 6c 20 63 6f 6e 74 65 6e 74 20 72  e cell content r
74c0: 65 67 69 6f 6e 20 6f 66 20 74 68 65 20 62 2d 74  egion of the b-t
74d0: 72 65 65 20 70 61 67 65 2e 0a 53 51 4c 69 74 65  ree page..SQLite
74e0: 20 73 74 72 69 76 65 73 20 74 6f 20 70 6c 61 63   strives to plac
74f0: 65 20 63 65 6c 6c 73 20 61 73 20 66 61 72 20 74  e cells as far t
7500: 6f 77 61 72 64 20 74 68 65 20 65 6e 64 20 6f 66  oward the end of
7510: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
7520: 20 61 73 0a 69 74 20 63 61 6e 2c 20 69 6e 20 6f   as.it can, in o
7530: 72 64 65 72 20 74 6f 20 6c 65 61 76 65 20 73 70  rder to leave sp
7540: 61 63 65 20 66 6f 72 20 66 75 74 75 72 65 20 67  ace for future g
7550: 72 6f 77 74 68 20 6f 66 20 74 68 65 20 63 65 6c  rowth of the cel
7560: 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79 2e  l pointer array.
7570: 0a 54 68 65 20 61 72 65 61 20 69 6e 20 62 65 74  .The area in bet
7580: 77 65 65 6e 20 74 68 65 20 6c 61 73 74 20 63 65  ween the last ce
7590: 6c 6c 20 70 6f 69 6e 74 65 72 20 61 72 72 61 79  ll pointer array
75a0: 20 65 6e 74 72 79 20 61 6e 64 20 74 68 65 20 62   entry and the b
75b0: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 74 68 65 20  eginning of.the 
75c0: 66 69 72 73 74 20 63 65 6c 6c 20 69 73 20 74 68  first cell is th
75d0: 65 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 72 65  e unallocated re
75e0: 67 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 5e  gion..</p>..<p>^
75f0: 49 66 20 61 20 70 61 67 65 20 63 6f 6e 74 61 69  If a page contai
7600: 6e 73 20 6e 6f 20 63 65 6c 6c 73 20 28 77 68 69  ns no cells (whi
7610: 63 68 20 69 73 20 6f 6e 6c 79 20 70 6f 73 73 69  ch is only possi
7620: 62 6c 65 20 66 6f 72 20 61 20 72 6f 6f 74 20 70  ble for a root p
7630: 61 67 65 0a 6f 66 20 61 20 74 61 62 6c 65 20 74  age.of a table t
7640: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  hat contains no 
7650: 72 6f 77 73 29 20 74 68 65 6e 20 74 68 65 20 6f  rows) then the o
7660: 66 66 73 65 74 20 74 6f 20 74 68 65 0a 63 65 6c  ffset to the.cel
7670: 6c 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 20 77  l content area w
7680: 69 6c 6c 20 65 71 75 61 6c 20 74 68 65 20 70 61  ill equal the pa
7690: 67 65 20 73 69 7a 65 20 6d 69 6e 75 73 20 74 68  ge size minus th
76a0: 65 20 62 79 74 65 73 20 6f 66 20 72 65 73 65 72  e bytes of reser
76b0: 76 65 64 20 73 70 61 63 65 2e 0a 5e 28 49 66 20  ved space..^(If 
76c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
76d0: 73 20 61 20 36 35 35 33 36 2d 62 79 74 65 20 70  s a 65536-byte p
76e0: 61 67 65 20 73 69 7a 65 20 61 6e 64 20 74 68 65  age size and the
76f0: 20 72 65 73 65 72 76 65 64 20 73 70 61 63 65 20   reserved space 
7700: 69 73 20 7a 65 72 6f 0a 28 74 68 65 20 75 73 75  is zero.(the usu
7710: 61 6c 20 76 61 6c 75 65 20 66 6f 72 20 72 65 73  al value for res
7720: 65 72 76 65 64 20 73 70 61 63 65 29 20 74 68 65  erved space) the
7730: 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  n the cell conte
7740: 6e 74 20 6f 66 66 73 65 74 20 6f 66 20 61 6e 0a  nt offset of an.
7750: 65 6d 70 74 79 20 70 61 67 65 20 77 61 6e 74 73  empty page wants
7760: 20 74 6f 20 62 65 20 36 35 35 33 36 2e 20 20 0a   to be 65536.  .
7770: 48 6f 77 65 76 65 72 2c 20 74 68 61 74 20 69 6e  However, that in
7780: 74 65 67 65 72 20 69 73 20 74 6f 6f 20 6c 61 72  teger is too lar
7790: 67 65 20 74 6f 20 62 65 20 73 74 6f 72 65 64 20  ge to be stored 
77a0: 69 6e 20 61 0a 32 2d 62 79 74 65 20 75 6e 73 69  in a.2-byte unsi
77b0: 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 73 6f  gned integer, so
77c0: 20 61 20 76 61 6c 75 65 20 6f 66 20 30 20 69 73   a value of 0 is
77d0: 20 75 73 65 64 20 69 6e 20 69 74 73 20 70 6c 61   used in its pla
77e0: 63 65 2e 29 5e 0a 0a 3c 70 3e 41 20 66 72 65 65  ce.)^..<p>A free
77f0: 62 6c 6f 63 6b 20 69 73 20 61 20 73 74 72 75 63  block is a struc
7800: 74 75 72 65 20 75 73 65 64 20 74 6f 20 69 64 65  ture used to ide
7810: 6e 74 69 66 79 20 75 6e 61 6c 6c 6f 63 61 74 65  ntify unallocate
7820: 64 20 73 70 61 63 65 20 77 69 74 68 69 6e 0a 61  d space within.a
7830: 20 62 2d 74 72 65 65 20 70 61 67 65 2e 20 20 46   b-tree page.  F
7840: 72 65 65 62 6c 6f 63 6b 73 20 61 72 65 20 6f 72  reeblocks are or
7850: 67 61 6e 69 7a 65 64 20 61 73 20 61 20 63 68 61  ganized as a cha
7860: 69 6e 2e 20 20 5e 54 68 65 20 66 69 72 73 74 20  in.  ^The first 
7870: 32 20 62 79 74 65 73 20 6f 66 0a 61 20 66 72 65  2 bytes of.a fre
7880: 65 62 6c 6f 63 6b 20 61 72 65 20 61 20 62 69 67  eblock are a big
7890: 2d 65 6e 64 69 61 6e 20 69 6e 74 65 67 65 72 20  -endian integer 
78a0: 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
78b0: 73 65 74 20 69 6e 20 74 68 65 20 62 2d 74 72 65  set in the b-tre
78c0: 65 20 70 61 67 65 0a 6f 66 20 74 68 65 20 6e 65  e page.of the ne
78d0: 78 74 20 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20  xt freeblock in 
78e0: 74 68 65 20 63 68 61 69 6e 2c 20 6f 72 20 7a 65  the chain, or ze
78f0: 72 6f 20 69 66 20 74 68 65 20 66 72 65 65 62 6c  ro if the freebl
7900: 6f 63 6b 20 69 73 20 74 68 65 20 6c 61 73 74 20  ock is the last 
7910: 6f 6e 0a 74 68 65 20 63 68 61 69 6e 2e 20 20 5e  on.the chain.  ^
7920: 54 68 65 20 74 68 69 72 64 20 61 6e 64 20 66 6f  The third and fo
7930: 75 72 74 68 20 62 79 74 65 73 20 6f 66 20 65 61  urth bytes of ea
7940: 63 68 20 66 72 65 65 62 6c 6f 63 6b 20 66 6f 72  ch freeblock for
7950: 6d 0a 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  m.a big-endian i
7960: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
7970: 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
7980: 66 72 65 65 62 6c 6f 63 6b 20 69 6e 20 62 79 74  freeblock in byt
7990: 65 73 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 74 68  es, including.th
79a0: 65 20 34 2d 62 79 74 65 20 68 65 61 64 65 72 2e  e 4-byte header.
79b0: 20 20 5e 46 72 65 65 62 6c 6f 63 6b 73 20 61 72    ^Freeblocks ar
79c0: 65 20 61 6c 77 61 79 73 20 63 6f 6e 6e 65 63 74  e always connect
79d0: 65 64 20 69 6e 20 6f 72 64 65 72 20 0a 6f 66 20  ed in order .of 
79e0: 69 6e 63 72 65 61 73 69 6e 67 20 6f 66 66 73 65  increasing offse
79f0: 74 2e 20 20 5e 54 68 65 20 73 65 63 6f 6e 64 20  t.  ^The second 
7a00: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74  field of the b-t
7a10: 72 65 65 20 70 61 67 65 20 68 65 61 64 65 72 20  ree page header 
7a20: 69 73 20 74 68 65 0a 6f 66 66 73 65 74 20 6f 66  is the.offset of
7a30: 20 74 68 65 20 66 69 72 73 74 20 66 72 65 65 62   the first freeb
7a40: 6c 6f 63 6b 2c 20 6f 72 20 7a 65 72 6f 20 69 66  lock, or zero if
7a50: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72   there are no fr
7a60: 65 65 62 6c 6f 63 6b 73 20 6f 6e 20 74 68 65 0a  eeblocks on the.
7a70: 70 61 67 65 2e 20 20 5e 49 6e 20 61 20 77 65 6c  page.  ^In a wel
7a80: 6c 2d 66 6f 72 6d 65 64 20 62 2d 74 72 65 65 20  l-formed b-tree 
7a90: 70 61 67 65 2c 20 74 68 65 72 65 20 77 69 6c 6c  page, there will
7aa0: 20 61 6c 77 61 79 73 20 62 65 20 61 74 20 6c 65   always be at le
7ab0: 61 73 74 20 6f 6e 65 20 63 65 6c 6c 0a 62 65 66  ast one cell.bef
7ac0: 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 66 72  ore the first fr
7ad0: 65 65 62 6c 6f 63 6b 2e 3c 2f 70 3e 0a 0a 3c 70  eeblock.</p>..<p
7ae0: 3e 41 20 66 72 65 65 62 6c 6f 63 6b 20 72 65 71  >A freeblock req
7af0: 75 69 72 65 73 20 61 74 20 6c 65 61 73 74 20 34  uires at least 4
7b00: 20 62 79 74 65 73 20 6f 66 20 73 70 61 63 65 2e   bytes of space.
7b10: 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e    If there is an
7b20: 20 69 73 6f 6c 61 74 65 64 0a 67 72 6f 75 70 20   isolated.group 
7b30: 6f 66 20 31 2c 20 32 2c 20 6f 72 20 33 20 75 6e  of 1, 2, or 3 un
7b40: 75 73 65 64 20 62 79 74 65 73 20 77 69 74 68 69  used bytes withi
7b50: 6e 20 74 68 65 20 63 65 6c 6c 20 63 6f 6e 74 65  n the cell conte
7b60: 6e 74 20 61 72 65 61 2c 20 74 68 6f 73 65 20 62  nt area, those b
7b70: 79 74 65 73 0a 63 6f 6d 70 72 69 73 65 20 61 20  ytes.comprise a 
7b80: 66 72 61 67 6d 65 6e 74 2e 20 20 5e 54 68 65 20  fragment.  ^The 
7b90: 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
7ba0: 62 79 74 65 73 20 69 6e 20 61 6c 6c 20 66 72 61  bytes in all fra
7bb0: 67 6d 65 6e 74 73 20 69 73 20 73 74 6f 72 65 64  gments is stored
7bc0: 0a 69 6e 20 74 68 65 20 66 69 66 74 68 20 66 69  .in the fifth fi
7bd0: 65 6c 64 20 6f 66 20 74 68 65 20 62 2d 74 72 65  eld of the b-tre
7be0: 65 20 70 61 67 65 20 68 65 61 64 65 72 2e 20 20  e page header.  
7bf0: 5e 49 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65  ^In a well-forme
7c00: 64 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a 74  d b-tree page,.t
7c10: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
7c20: 6f 66 20 62 79 74 65 73 20 69 6e 20 66 72 61 67  of bytes in frag
7c30: 6d 65 6e 74 73 20 6d 61 79 20 6e 6f 74 20 65 78  ments may not ex
7c40: 63 65 65 64 20 36 30 2e 3c 2f 70 3e 0a 0a 3c 70  ceed 60.</p>..<p
7c50: 3e 54 68 65 20 74 6f 74 61 6c 20 61 6d 6f 75 6e  >The total amoun
7c60: 74 20 6f 66 20 66 72 65 65 20 73 70 61 63 65 20  t of free space 
7c70: 6f 6e 20 61 20 62 2d 74 72 65 65 20 70 61 67 65  on a b-tree page
7c80: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
7c90: 20 73 69 7a 65 0a 6f 66 20 74 68 65 20 75 6e 61   size.of the una
7ca0: 6c 6c 6f 63 61 74 65 64 20 72 65 67 69 6f 6e 20  llocated region 
7cb0: 70 6c 75 73 20 74 68 65 20 74 6f 74 61 6c 20 73  plus the total s
7cc0: 69 7a 65 20 6f 66 20 61 6c 6c 20 66 72 65 65 62  ize of all freeb
7cd0: 6c 6f 63 6b 73 20 70 6c 75 73 20 74 68 65 0a 6e  locks plus the.n
7ce0: 75 6d 62 65 72 20 6f 66 20 66 72 61 67 6d 65 6e  umber of fragmen
7cf0: 74 65 64 20 66 72 65 65 20 62 79 74 65 73 2e 20  ted free bytes. 
7d00: 20 5e 53 51 4c 69 74 65 20 6d 61 79 20 66 72 6f   ^SQLite may fro
7d10: 6d 20 74 69 6d 65 20 74 6f 20 74 69 6d 65 20 72  m time to time r
7d20: 65 6f 72 67 61 6e 69 7a 65 0a 61 20 62 2d 74 72  eorganize.a b-tr
7d30: 65 65 20 70 61 67 65 20 73 6f 20 74 68 61 74 20  ee page so that 
7d40: 74 68 65 72 65 20 61 72 65 20 6e 6f 20 66 72 65  there are no fre
7d50: 65 62 6c 6f 63 6b 73 20 6f 72 20 66 72 61 67 6d  eblocks or fragm
7d60: 65 6e 74 20 62 79 74 65 73 2c 20 61 6c 6c 0a 75  ent bytes, all.u
7d70: 6e 75 73 65 64 20 62 79 74 65 73 20 61 72 65 20  nused bytes are 
7d80: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
7d90: 20 75 6e 61 6c 6c 6f 63 61 74 65 64 20 73 70 61   unallocated spa
7da0: 63 65 20 72 65 67 69 6f 6e 2c 20 61 6e 64 20 61  ce region, and a
7db0: 6c 6c 0a 63 65 6c 6c 73 20 61 72 65 20 70 61 63  ll.cells are pac
7dc0: 6b 65 64 20 74 69 67 68 74 6c 79 20 61 74 20 74  ked tightly at t
7dd0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61  he end of the pa
7de0: 67 65 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  ge.  This is cal
7df0: 6c 65 64 20 0a 22 64 65 66 72 61 67 6d 65 6e 74  led ."defragment
7e00: 69 6e 67 22 20 74 68 65 20 62 2d 74 72 65 65 20  ing" the b-tree 
7e10: 70 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e  page.</p>..<tcl>
7e20: 68 64 5f 66 72 61 67 6d 65 6e 74 20 76 61 72 69  hd_fragment vari
7e30: 6e 74 20 7b 76 61 72 69 61 62 6c 65 2d 6c 65 6e  nt {variable-len
7e40: 67 74 68 20 69 6e 74 65 67 65 72 7d 20 7b 76 61  gth integer} {va
7e50: 72 69 6e 74 7d 3c 2f 74 63 6c 3e 0a 0a 3c 70 3e  rint}</tcl>..<p>
7e60: 41 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  A variable-lengt
7e70: 68 20 69 6e 74 65 67 65 72 20 6f 72 20 22 76 61  h integer or "va
7e80: 72 69 6e 74 22 20 69 73 20 61 20 73 74 61 74 69  rint" is a stati
7e90: 63 20 48 75 66 66 6d 61 6e 20 65 6e 63 6f 64 69  c Huffman encodi
7ea0: 6e 67 0a 6f 66 20 36 34 2d 62 69 74 20 74 77 6f  ng.of 64-bit two
7eb0: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
7ec0: 65 67 65 72 73 20 74 68 61 74 20 75 73 65 73 20  egers that uses 
7ed0: 6c 65 73 73 20 73 70 61 63 65 20 66 6f 72 20 73  less space for s
7ee0: 6d 61 6c 6c 20 70 6f 73 69 74 69 76 65 20 0a 76  mall positive .v
7ef0: 61 6c 75 65 73 2e 20 0a 41 20 76 61 72 69 6e 74  alues. .A varint
7f00: 20 69 73 20 62 65 74 77 65 65 6e 20 31 20 61 6e   is between 1 an
7f10: 64 20 39 20 62 79 74 65 73 20 69 6e 20 6c 65 6e  d 9 bytes in len
7f20: 67 74 68 2e 20 20 54 68 65 20 76 61 72 69 6e 74  gth.  The varint
7f30: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 65 69 74   consists of eit
7f40: 68 65 72 0a 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  her.zero or more
7f50: 20 62 79 74 65 73 20 77 68 69 63 68 20 68 61 76   bytes which hav
7f60: 65 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  e the high-order
7f70: 20 62 69 74 20 73 65 74 20 66 6f 6c 6c 6f 77 65   bit set followe
7f80: 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 62 79  d by a single by
7f90: 74 65 0a 77 69 74 68 20 74 68 65 20 68 69 67 68  te.with the high
7fa0: 2d 6f 72 64 65 72 20 62 69 74 20 63 6c 65 61 72  -order bit clear
7fb0: 2c 20 6f 72 20 6e 69 6e 65 20 62 79 74 65 73 2c  , or nine bytes,
7fc0: 20 77 68 69 63 68 65 76 65 72 20 69 73 20 73 68   whichever is sh
7fd0: 6f 72 74 65 72 2e 0a 54 68 65 20 6c 6f 77 65 72  orter..The lower
7fe0: 20 73 65 76 65 6e 20 62 69 74 73 20 6f 66 20 65   seven bits of e
7ff0: 61 63 68 20 6f 66 20 74 68 65 20 66 69 72 73 74  ach of the first
8000: 20 65 69 67 68 74 20 62 79 74 65 73 20 61 6e 64   eight bytes and
8010: 20 61 6c 6c 20 38 20 62 69 74 73 20 6f 66 0a 74   all 8 bits of.t
8020: 68 65 20 6e 69 6e 74 68 20 62 79 74 65 20 61 72  he ninth byte ar
8030: 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f 6e 73  e used to recons
8040: 74 72 75 63 74 20 74 68 65 20 36 34 2d 62 69 74  truct the 64-bit
8050: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
8060: 20 69 6e 74 65 67 65 72 2e 0a 56 61 72 69 6e 74   integer..Varint
8070: 73 20 61 72 65 20 62 69 67 2d 65 6e 64 69 61 6e  s are big-endian
8080: 3a 20 62 69 74 73 20 74 61 6b 65 6e 20 66 72 6f  : bits taken fro
8090: 6d 20 74 68 65 20 65 61 72 6c 69 65 72 20 62 79  m the earlier by
80a0: 74 65 20 6f 66 20 74 68 65 20 76 61 72 69 6e 74  te of the varint
80b0: 0a 61 72 65 20 74 68 65 20 6d 6f 72 65 20 73 69  .are the more si
80c0: 67 6e 69 66 69 63 61 6e 74 20 74 68 61 6e 20 62  gnificant than b
80d0: 69 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 74  its taken from t
80e0: 68 65 20 6c 61 74 65 72 20 62 79 74 65 73 2e 20  he later bytes. 
80f0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f 72  </p>..<p>The for
8100: 6d 61 74 20 6f 66 20 61 20 63 65 6c 6c 20 64 65  mat of a cell de
8110: 70 65 6e 64 73 20 6f 6e 20 77 68 69 63 68 20 6b  pends on which k
8120: 69 6e 64 20 6f 66 20 62 2d 74 72 65 65 20 70 61  ind of b-tree pa
8130: 67 65 20 74 68 65 20 63 65 6c 6c 0a 61 70 70 65  ge the cell.appe
8140: 61 72 73 20 6f 6e 2e 20 20 54 68 65 20 66 6f 6c  ars on.  The fol
8150: 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 73 68 6f  lowing table sho
8160: 77 73 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20  ws the elements 
8170: 6f 66 20 61 20 63 65 6c 6c 2c 20 69 6e 0a 6f 72  of a cell, in.or
8180: 64 65 72 20 6f 66 20 61 70 70 65 61 72 61 6e 63  der of appearanc
8190: 65 2c 20 66 6f 72 20 74 68 65 20 76 61 72 69 6f  e, for the vario
81a0: 75 73 20 62 2d 74 72 65 65 20 70 61 67 65 20 74  us b-tree page t
81b0: 79 70 65 73 2e 0a 0a 3c 64 6c 3e 0a 3c 64 74 3e  ypes...<dl>.<dt>
81c0: 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65 20  <p>Table B-Tree 
81d0: 4c 65 61 66 20 43 65 6c 6c 20 28 68 65 61 64 65  Leaf Cell (heade
81e0: 72 20 30 78 30 64 29 3a 3c 2f 70 3e 3c 2f 64 74  r 0x0d):</p></dt
81f0: 3e 0a 3c 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c  >.<dd><p><ul>.<l
8200: 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68  i>A varint which
8210: 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
8220: 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
8230: 20 70 61 79 6c 6f 61 64 2c 20 69 6e 63 6c 75 64   payload, includ
8240: 69 6e 67 20 61 6e 79 0a 6f 76 65 72 66 6c 6f 77  ing any.overflow
8250: 0a 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68  .<li>A varint wh
8260: 69 63 68 20 69 73 20 74 68 65 20 69 6e 74 65 67  ich is the integ
8270: 65 72 20 6b 65 79 2c 20 61 2e 6b 2e 61 2e 20 22  er key, a.k.a. "
8280: 5b 72 6f 77 69 64 5d 22 0a 3c 6c 69 3e 54 68 65  [rowid]".<li>The
8290: 20 69 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e   initial portion
82a0: 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20   of the payload 
82b0: 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70  that does not sp
82c0: 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a  ill to overflow.
82d0: 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62  pages..<li>A 4-b
82e0: 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69  yte big-endian i
82f0: 6e 74 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62  nteger page numb
8300: 65 72 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  er for the first
8310: 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65   page of the.ove
8320: 72 66 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20  rflow page list 
8330: 2d 20 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c  - omitted if all
8340: 20 70 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e   payload fits on
8350: 20 74 68 65 20 62 2d 74 72 65 65 20 70 61 67 65   the b-tree page
8360: 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e  ..</ul></p></dd>
8370: 0a 0a 3c 64 74 3e 3c 70 3e 54 61 62 6c 65 20 42  ..<dt><p>Table B
8380: 2d 54 72 65 65 20 49 6e 74 65 72 69 6f 72 20 43  -Tree Interior C
8390: 65 6c 6c 20 28 68 65 61 64 65 72 20 30 78 30 35  ell (header 0x05
83a0: 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e  ):</p></dt>.<dd>
83b0: 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 34 2d  <p><ul>.<li>A 4-
83c0: 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61 6e 20  byte big-endian 
83d0: 70 61 67 65 20 6e 75 6d 62 65 72 20 77 68 69 63  page number whic
83e0: 68 20 69 73 20 74 68 65 20 6c 65 66 74 20 63 68  h is the left ch
83f0: 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a 3c 6c 69  ild pointer..<li
8400: 3e 41 20 76 61 72 69 6e 74 20 77 68 69 63 68 20  >A varint which 
8410: 69 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 6b  is the integer k
8420: 65 79 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64  ey.</ul></p></dd
8430: 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78 20  >..<dt><p>Index 
8440: 42 2d 54 72 65 65 20 4c 65 61 66 20 43 65 6c 6c  B-Tree Leaf Cell
8450: 20 28 68 65 61 64 65 72 20 30 78 30 61 29 3a 3c   (header 0x0a):<
8460: 2f 70 3e 3c 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e  /p></dt>.<dd><p>
8470: 3c 75 6c 3e 0a 3c 6c 69 3e 41 20 76 61 72 69 6e  <ul>.<li>A varin
8480: 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 74  t which is the t
8490: 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62  otal number of b
84a0: 79 74 65 73 20 6f 66 20 6b 65 79 20 70 61 79 6c  ytes of key payl
84b0: 6f 61 64 2c 20 69 6e 63 6c 75 64 69 6e 67 20 61  oad, including a
84c0: 6e 79 0a 6f 76 65 72 66 6c 6f 77 0a 3c 6c 69 3e  ny.overflow.<li>
84d0: 54 68 65 20 69 6e 69 74 69 61 6c 20 70 6f 72 74  The initial port
84e0: 69 6f 6e 20 6f 66 20 74 68 65 20 70 61 79 6c 6f  ion of the paylo
84f0: 61 64 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74  ad that does not
8500: 20 73 70 69 6c 6c 20 74 6f 20 6f 76 65 72 66 6c   spill to overfl
8510: 6f 77 0a 70 61 67 65 73 2e 0a 3c 6c 69 3e 41 20  ow.pages..<li>A 
8520: 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69 61  4-byte big-endia
8530: 6e 20 69 6e 74 65 67 65 72 20 70 61 67 65 20 6e  n integer page n
8540: 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 66 69  umber for the fi
8550: 72 73 74 20 70 61 67 65 20 6f 66 20 74 68 65 0a  rst page of the.
8560: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 6c 69  overflow page li
8570: 73 74 20 2d 20 6f 6d 69 74 74 65 64 20 69 66 20  st - omitted if 
8580: 61 6c 6c 20 70 61 79 6c 6f 61 64 20 66 69 74 73  all payload fits
8590: 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70   on the b-tree p
85a0: 61 67 65 2e 0a 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f  age..</ul></p></
85b0: 64 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65  dd>..<dt><p>Inde
85c0: 78 20 42 2d 54 72 65 65 20 49 6e 74 65 72 69 6f  x B-Tree Interio
85d0: 72 20 43 65 6c 6c 20 28 68 65 61 64 65 72 20 30  r Cell (header 0
85e0: 78 30 32 29 3a 3c 2f 70 3e 3c 2f 64 74 3e 0a 3c  x02):</p></dt>.<
85f0: 64 64 3e 3c 70 3e 3c 75 6c 3e 0a 3c 6c 69 3e 41  dd><p><ul>.<li>A
8600: 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64 69   4-byte big-endi
8610: 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 20 77  an page number w
8620: 68 69 63 68 20 69 73 20 74 68 65 20 6c 65 66 74  hich is the left
8630: 20 63 68 69 6c 64 20 70 6f 69 6e 74 65 72 2e 0a   child pointer..
8640: 3c 6c 69 3e 41 20 76 61 72 69 6e 74 20 77 68 69  <li>A varint whi
8650: 63 68 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20  ch is the total 
8660: 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
8670: 6f 66 20 6b 65 79 20 70 61 79 6c 6f 61 64 2c 20  of key payload, 
8680: 69 6e 63 6c 75 64 69 6e 67 20 61 6e 79 0a 6f 76  including any.ov
8690: 65 72 66 6c 6f 77 0a 3c 6c 69 3e 54 68 65 20 69  erflow.<li>The i
86a0: 6e 69 74 69 61 6c 20 70 6f 72 74 69 6f 6e 20 6f  nitial portion o
86b0: 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 74 68  f the payload th
86c0: 61 74 20 64 6f 65 73 20 6e 6f 74 20 73 70 69 6c  at does not spil
86d0: 6c 20 74 6f 20 6f 76 65 72 66 6c 6f 77 0a 70 61  l to overflow.pa
86e0: 67 65 73 2e 0a 3c 6c 69 3e 41 20 34 2d 62 79 74  ges..<li>A 4-byt
86f0: 65 20 62 69 67 2d 65 6e 64 69 61 6e 20 69 6e 74  e big-endian int
8700: 65 67 65 72 20 70 61 67 65 20 6e 75 6d 62 65 72  eger page number
8710: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 70   for the first p
8720: 61 67 65 20 6f 66 20 74 68 65 0a 6f 76 65 72 66  age of the.overf
8730: 6c 6f 77 20 70 61 67 65 20 6c 69 73 74 20 2d 20  low page list - 
8740: 6f 6d 69 74 74 65 64 20 69 66 20 61 6c 6c 20 70  omitted if all p
8750: 61 79 6c 6f 61 64 20 66 69 74 73 20 6f 6e 20 74  ayload fits on t
8760: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2e 0a  he b-tree page..
8770: 3c 2f 75 6c 3e 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c  </ul></p></dd>.<
8780: 2f 64 6c 3e 0a 0a 3c 70 3e 54 68 65 20 69 6e 66  /dl>..<p>The inf
8790: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 76 65 20 63  ormation above c
87a0: 61 6e 20 62 65 20 72 65 63 61 73 74 20 69 6e 74  an be recast int
87b0: 6f 20 61 20 74 61 62 6c 65 20 66 6f 72 6d 61 74  o a table format
87c0: 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e   as follows:</p>
87d0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
87e0: 6e 74 20 63 65 6c 6c 66 6f 72 6d 61 74 20 7b 63  nt cellformat {c
87f0: 65 6c 6c 20 66 6f 72 6d 61 74 20 73 75 6d 6d 61  ell format summa
8800: 72 79 7d 3c 2f 74 63 6c 3e 0a 3c 63 65 6e 74 65  ry}</tcl>.<cente
8810: 72 3e 0a 3c 69 3e 42 2d 74 72 65 65 20 43 65 6c  r>.<i>B-tree Cel
8820: 6c 20 46 6f 72 6d 61 74 3c 2f 69 3e 0a 3c 74 61  l Format</i>.<ta
8830: 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 77 69 64  ble border=1 wid
8840: 74 68 3d 22 38 30 25 22 3e 0a 3c 74 72 3e 3c 74  th="80%">.<tr><t
8850: 68 20 72 6f 77 73 70 61 6e 3d 32 3e 44 61 74 61  h rowspan=2>Data
8860: 74 79 70 65 0a 20 20 20 20 3c 74 68 20 63 6f 6c  type.    <th col
8870: 73 70 61 6e 3d 34 3e 41 70 70 65 61 72 73 20 69  span=4>Appears i
8880: 6e 2e 2e 2e 0a 20 20 20 20 3c 74 68 20 72 6f 77  n....    <th row
8890: 73 70 61 6e 3d 32 3e 44 65 73 63 72 69 70 74 69  span=2>Descripti
88a0: 6f 6e 0a 3c 74 72 3e 3c 74 68 3e 54 61 62 6c 65  on.<tr><th>Table
88b0: 20 4c 65 61 66 20 28 30 78 30 64 29 0a 20 20 20   Leaf (0x0d).   
88c0: 20 3c 74 68 3e 54 61 62 6c 65 20 49 6e 74 65 72   <th>Table Inter
88d0: 69 6f 72 20 28 30 78 30 35 29 0a 20 20 20 20 3c  ior (0x05).    <
88e0: 74 68 3e 49 6e 64 65 78 20 4c 65 61 66 20 28 30  th>Index Leaf (0
88f0: 78 30 61 29 0a 20 20 20 20 3c 74 68 3e 49 6e 64  x0a).    <th>Ind
8900: 65 78 20 49 6e 74 65 72 69 6f 72 20 28 30 78 30  ex Interior (0x0
8910: 32 29 0a 3c 74 72 3e 3c 74 64 20 61 6c 69 67 6e  2).<tr><td align
8920: 3d 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74  =center valign=t
8930: 6f 70 3e 34 2d 62 79 74 65 20 69 6e 74 65 67 65  op>4-byte intege
8940: 72 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  r.    <td align=
8950: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
8960: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
8970: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
8980: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
8990: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
89a0: 63 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f  center valign=to
89b0: 70 3e 26 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64  p>&nbsp;.    <td
89c0: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76 61   align=center va
89d0: 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34  lign=top>&#x2714
89e0: 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d  ;.    <td align=
89f0: 6c 65 66 74 3e 50 61 67 65 20 6e 75 6d 62 65 72  left>Page number
8a00: 20 6f 66 20 6c 65 66 74 20 63 68 69 6c 64 0a 3c   of left child.<
8a10: 74 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e  tr><td align=cen
8a20: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 76  ter valign=top>v
8a30: 61 72 69 6e 74 0a 20 20 20 20 3c 74 64 20 61 6c  arint.    <td al
8a40: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8a50: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8a60: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8a70: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8a80: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
8a90: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8aa0: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8ab0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8ac0: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8ad0: 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20  #x2714;.    <td 
8ae0: 61 6c 69 67 6e 3d 6c 65 66 74 3e 4e 75 6d 62 65  align=left>Numbe
8af0: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 70 61  r of bytes of pa
8b00: 79 6c 6f 61 64 0a 3c 74 72 3e 3c 74 64 20 61 6c  yload.<tr><td al
8b10: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8b20: 6e 3d 74 6f 70 3e 76 61 72 69 6e 74 0a 20 20 20  n=top>varint.   
8b30: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8b40: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8b50: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8b60: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8b70: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8b80: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e     <td align=cen
8b90: 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26  ter valign=top>&
8ba0: 6e 62 73 70 3b 0a 20 20 20 20 3c 74 64 20 61 6c  nbsp;.    <td al
8bb0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8bc0: 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20  n=top>&nbsp;.   
8bd0: 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e   <td align=left>
8be0: 52 6f 77 69 64 0a 3c 74 72 3e 3c 74 64 20 61 6c  Rowid.<tr><td al
8bf0: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8c00: 6e 3d 74 6f 70 3e 62 79 74 65 20 61 72 72 61 79  n=top>byte array
8c10: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8c20: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8c30: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8c40: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8c50: 61 6c 69 67 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b  align=top>&nbsp;
8c60: 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 63  .    <td align=c
8c70: 65 6e 74 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70  enter valign=top
8c80: 3e 26 23 78 32 37 31 34 3b 0a 20 20 20 20 3c 74  >&#x2714;.    <t
8c90: 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 20 76  d align=center v
8ca0: 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78 32 37 31  align=top>&#x271
8cb0: 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c 69 67 6e  4;.    <td align
8cc0: 3d 6c 65 66 74 3e 50 61 79 6c 6f 61 64 0a 3c 74  =left>Payload.<t
8cd0: 72 3e 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74  r><td align=cent
8ce0: 65 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 34 2d  er valign=top>4-
8cf0: 62 79 74 65 20 69 6e 74 65 67 65 72 0a 20 20 20  byte integer.   
8d00: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8d10: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8d20: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8d30: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8d40: 6e 3d 74 6f 70 3e 26 6e 62 73 70 3b 0a 20 20 20  n=top>&nbsp;.   
8d50: 20 3c 74 64 20 61 6c 69 67 6e 3d 63 65 6e 74 65   <td align=cente
8d60: 72 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 26 23 78  r valign=top>&#x
8d70: 32 37 31 34 3b 0a 20 20 20 20 3c 74 64 20 61 6c  2714;.    <td al
8d80: 69 67 6e 3d 63 65 6e 74 65 72 20 76 61 6c 69 67  ign=center valig
8d90: 6e 3d 74 6f 70 3e 26 23 78 32 37 31 34 3b 0a 20  n=top>&#x2714;. 
8da0: 20 20 20 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66     <td align=lef
8db0: 74 3e 50 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t>Page number of
8dc0: 20 66 69 72 73 74 20 6f 76 65 72 66 6c 6f 77 20   first overflow 
8dd0: 70 61 67 65 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63  page.</table></c
8de0: 65 6e 74 65 72 3e 0a 0a 0a 3c 70 3e 54 68 65 20  enter>...<p>The 
8df0: 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79 6c 6f 61  amount of payloa
8e00: 64 20 74 68 61 74 20 73 70 69 6c 6c 73 20 6f 6e  d that spills on
8e10: 74 6f 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  to overflow page
8e20: 73 20 61 6c 73 6f 20 64 65 70 65 6e 64 73 20 6f  s also depends o
8e30: 6e 0a 74 68 65 20 70 61 67 65 20 74 79 70 65 2e  n.the page type.
8e40: 20 20 46 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77    For the follow
8e50: 69 6e 67 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73  ing computations
8e60: 2c 20 6c 65 74 20 55 20 62 65 20 74 68 65 20 75  , let U be the u
8e70: 73 61 62 6c 65 20 73 69 7a 65 0a 6f 66 20 61 20  sable size.of a 
8e80: 64 61 74 61 62 61 73 65 20 70 61 67 65 2c 20 74  database page, t
8e90: 68 65 20 74 6f 74 61 6c 20 70 61 67 65 20 73 69  he total page si
8ea0: 7a 65 20 6c 65 73 73 20 74 68 65 20 72 65 73 65  ze less the rese
8eb0: 72 76 65 64 20 73 70 61 63 65 20 61 74 20 74 68  rved space at th
8ec0: 65 0a 65 6e 64 20 6f 66 20 65 61 63 68 20 70 61  e.end of each pa
8ed0: 67 65 2e 20 20 41 6e 64 20 6c 65 74 20 50 20 62  ge.  And let P b
8ee0: 65 20 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69  e the payload si
8ef0: 7a 65 2e 20 20 49 6e 20 74 68 65 20 66 6f 6c 6c  ze.  In the foll
8f00: 6f 77 69 6e 67 2c 0a 73 79 6d 62 6f 6c 20 58 20  owing,.symbol X 
8f10: 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6d  represents the m
8f20: 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66  aximum amount of
8f30: 20 70 61 79 6c 6f 61 64 20 74 68 61 74 20 63 61   payload that ca
8f40: 6e 20 62 65 20 73 74 6f 72 65 64 20 64 69 72 65  n be stored dire
8f50: 63 74 6c 79 0a 6f 6e 20 74 68 65 20 62 2d 74 72  ctly.on the b-tr
8f60: 65 65 20 70 61 67 65 20 77 69 74 68 6f 75 74 20  ee page without 
8f70: 73 70 69 6c 6c 69 6e 67 20 6f 6e 74 6f 20 61 6e  spilling onto an
8f80: 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 61   overflow page a
8f90: 6e 64 20 73 79 6d 62 6f 6c 20 4d 0a 72 65 70 72  nd symbol M.repr
8fa0: 65 73 65 6e 74 73 20 74 68 65 20 6d 69 6e 69 6d  esents the minim
8fb0: 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 70 61 79  um amount of pay
8fc0: 6c 6f 61 64 20 74 68 61 74 20 6d 75 73 74 20 62  load that must b
8fd0: 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  e stored on the 
8fe0: 62 74 72 65 65 0a 70 61 67 65 20 62 65 66 6f 72  btree.page befor
8ff0: 65 20 73 70 69 6c 6c 69 6e 67 20 69 73 20 61 6c  e spilling is al
9000: 6c 6f 77 65 64 2e 0a 0a 3c 64 6c 3e 0a 3c 64 74  lowed...<dl>.<dt
9010: 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65  ><p>Table B-Tree
9020: 20 4c 65 61 66 20 43 65 6c 6c 3a 3c 2f 64 74 3e   Leaf Cell:</dt>
9030: 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65 74 20 58  .<dd><p>.^(Let X
9040: 20 62 65 20 55 2d 33 35 2e 20 20 49 66 20 74 68   be U-35.  If th
9050: 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65 20 50  e payload size P
9060: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
9070: 20 65 71 75 61 6c 20 74 6f 20 58 20 74 68 65 6e   equal to X then
9080: 0a 74 68 65 20 65 6e 74 69 72 65 20 70 61 79 6c  .the entire payl
9090: 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  oad is stored on
90a0: 20 74 68 65 20 62 2d 74 72 65 65 20 6c 65 61 66   the b-tree leaf
90b0: 20 70 61 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d   page.)^.^(Let M
90c0: 20 62 65 20 28 28 55 2d 31 32 29 2a 33 32 2f 32   be ((U-12)*32/2
90d0: 35 35 29 2d 32 33 20 61 6e 64 20 6c 65 74 20 4b  55)-23 and let K
90e0: 20 62 65 20 4d 2b 28 28 50 2d 4d 29 25 28 55 2d   be M+((P-M)%(U-
90f0: 34 29 29 2e 0a 49 66 20 50 20 69 73 20 67 72 65  4))..If P is gre
9100: 61 74 65 72 20 74 68 61 6e 20 58 0a 74 68 65 6e  ater than X.then
9110: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
9120: 79 74 65 73 20 73 74 6f 72 65 64 20 6f 6e 20 74  ytes stored on t
9130: 68 65 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20  he table b-tree 
9140: 6c 65 61 66 20 70 61 67 65 20 69 73 20 4b 0a 69  leaf page is K.i
9150: 66 20 4b 20 69 73 20 6c 65 73 73 20 6f 72 20 65  f K is less or e
9160: 71 75 61 6c 20 74 6f 20 58 20 6f 72 20 4d 20 6f  qual to X or M o
9170: 74 68 65 72 77 69 73 65 2e 29 5e 0a 5e 28 54 68  therwise.)^.^(Th
9180: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
9190: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
91a0: 6c 65 61 66 20 70 61 67 65 20 69 73 20 6e 65 76  leaf page is nev
91b0: 65 72 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29  er less than M.)
91c0: 5e 0a 3c 2f 70 3e 3c 2f 64 64 3e 0a 0a 3c 64 74  ^.</p></dd>..<dt
91d0: 3e 3c 70 3e 54 61 62 6c 65 20 42 2d 54 72 65 65  ><p>Table B-Tree
91e0: 20 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c   Interior Cell:<
91f0: 2f 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 49 6e 74  /dt>.<dd><p>.Int
9200: 65 72 69 6f 72 20 70 61 67 65 73 20 6f 66 20 74  erior pages of t
9210: 61 62 6c 65 20 62 2d 74 72 65 65 73 20 68 61 76  able b-trees hav
9220: 65 20 6e 6f 20 70 61 79 6c 6f 61 64 20 61 6e 64  e no payload and
9230: 20 73 6f 20 74 68 65 72 65 20 69 73 20 6e 65 76   so there is nev
9240: 65 72 0a 61 6e 79 20 70 61 79 6c 6f 61 64 20 74  er.any payload t
9250: 6f 20 73 70 69 6c 6c 2e 0a 3c 2f 70 3e 3c 2f 64  o spill..</p></d
9260: 64 3e 0a 0a 3c 64 74 3e 3c 70 3e 49 6e 64 65 78  d>..<dt><p>Index
9270: 20 42 2d 54 72 65 65 20 4c 65 61 66 20 4f 72 20   B-Tree Leaf Or 
9280: 49 6e 74 65 72 69 6f 72 20 43 65 6c 6c 3a 3c 2f  Interior Cell:</
9290: 64 74 3e 0a 3c 64 64 3e 3c 70 3e 0a 5e 28 4c 65  dt>.<dd><p>.^(Le
92a0: 74 20 58 20 62 65 20 28 28 55 2d 31 32 29 2a 36  t X be ((U-12)*6
92b0: 34 2f 32 35 35 29 2d 32 33 29 2e 20 20 49 66 20  4/255)-23).  If 
92c0: 74 68 65 20 70 61 79 6c 6f 61 64 20 73 69 7a 65  the payload size
92d0: 20 50 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a   P is less than.
92e0: 6f 72 20 65 71 75 61 6c 20 74 6f 20 58 20 74 68  or equal to X th
92f0: 65 6e 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  en the entire pa
9300: 79 6c 6f 61 64 20 69 73 20 73 74 6f 72 65 64 20  yload is stored 
9310: 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20 70 61  on the b-tree pa
9320: 67 65 2e 29 5e 0a 5e 28 4c 65 74 20 4d 20 62 65  ge.)^.^(Let M be
9330: 20 28 28 55 2d 31 32 29 2a 33 32 2f 32 35 35 29   ((U-12)*32/255)
9340: 2d 32 33 20 61 6e 64 20 6c 65 74 20 4b 20 62 65  -23 and let K be
9350: 20 4d 2b 28 28 50 2d 4d 29 25 28 55 2d 34 29 29   M+((P-M)%(U-4))
9360: 2e 0a 49 66 20 50 20 69 73 20 67 72 65 61 74 65  ..If P is greate
9370: 72 20 74 68 61 6e 20 58 20 74 68 65 6e 20 74 68  r than X then th
9380: 65 20 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65  e number.of byte
9390: 73 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  s stored on the 
93a0: 69 6e 64 65 78 20 62 2d 74 72 65 65 20 70 61 67  index b-tree pag
93b0: 65 20 69 73 20 4b 20 69 66 20 4b 20 69 73 20 6c  e is K if K is l
93c0: 65 73 73 20 74 68 61 6e 20 6f 72 0a 65 71 75 61  ess than or.equa
93d0: 6c 20 74 6f 20 58 20 6f 72 20 4d 20 6f 74 68 65  l to X or M othe
93e0: 72 77 69 73 65 2e 29 5e 0a 5e 28 54 68 65 20 6e  rwise.)^.^(The n
93f0: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 73  umber of bytes s
9400: 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 69 6e 64  tored on the ind
9410: 65 78 20 70 61 67 65 20 69 73 20 6e 65 76 65 72  ex page is never
9420: 20 6c 65 73 73 20 74 68 61 6e 20 4d 2e 29 5e 0a   less than M.)^.
9430: 3c 2f 70 3e 3c 2f 64 64 3e 0a 3c 2f 64 6c 3e 0a  </p></dd>.</dl>.
9440: 0a 3c 70 3e 48 65 72 65 20 69 73 20 61 6e 20 61  .<p>Here is an a
9450: 6c 74 65 72 6e 61 74 69 76 65 20 64 65 73 63 72  lternative descr
9460: 69 70 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 61  iption of the sa
9470: 6d 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 3a 0a  me computation:.
9480: 0a 3c 75 6c 3e 0a 3c 6c 69 3e 58 20 69 73 20 55  .<ul>.<li>X is U
9490: 2d 33 35 20 66 6f 72 20 74 61 62 6c 65 20 62 74  -35 for table bt
94a0: 72 65 65 20 6c 65 61 66 20 70 61 67 65 73 20 6f  ree leaf pages o
94b0: 72 0a 20 20 20 20 28 28 55 2d 31 32 29 2a 36 34  r.    ((U-12)*64
94c0: 2f 32 35 35 29 2d 32 33 20 66 6f 72 20 69 6e 64  /255)-23 for ind
94d0: 65 78 20 70 61 67 65 73 2e 0a 3c 6c 69 3e 4d 20  ex pages..<li>M 
94e0: 69 73 20 61 6c 77 61 79 73 20 28 28 55 2d 31 32  is always ((U-12
94f0: 29 2a 33 32 2f 32 35 35 29 2d 32 33 2e 0a 3c 6c  )*32/255)-23..<l
9500: 69 3e 4c 65 74 20 4b 20 62 65 20 4d 2b 28 28 50  i>Let K be M+((P
9510: 2d 4d 29 25 28 55 2d 34 29 29 2e 0a 3c 6c 69 3e  -M)%(U-4))..<li>
9520: 5e 49 66 20 50 26 6c 74 3b 3d 58 20 74 68 65 6e  ^If P&lt;=X then
9530: 20 61 6c 6c 20 50 20 62 79 74 65 73 20 6f 66 20   all P bytes of 
9540: 70 61 79 6c 6f 61 64 20 61 72 65 20 73 74 6f 72  payload are stor
9550: 65 64 20 64 69 72 65 63 74 6c 79 20 6f 6e 20 74  ed directly on t
9560: 68 65 20 0a 20 20 20 20 62 74 72 65 65 20 70 61  he .    btree pa
9570: 67 65 20 77 69 74 68 6f 75 74 20 6f 76 65 72 66  ge without overf
9580: 6c 6f 77 2e 0a 3c 6c 69 3e 5e 49 66 20 50 26 67  low..<li>^If P&g
9590: 74 3b 58 20 61 6e 64 20 4b 26 6c 74 3b 3d 58 20  t;X and K&lt;=X 
95a0: 74 68 65 6e 20 74 68 65 20 66 69 72 73 74 20 4b  then the first K
95b0: 20 62 79 74 65 73 20 6f 66 20 50 20 61 72 65 20   bytes of P are 
95c0: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 0a 20  stored on the . 
95d0: 20 20 20 62 74 72 65 65 20 70 61 67 65 20 61 6e     btree page an
95e0: 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  d the remaining 
95f0: 50 2d 4b 20 62 79 74 65 73 20 61 72 65 20 73 74  P-K bytes are st
9600: 6f 72 65 64 20 6f 6e 20 6f 76 65 72 66 6c 6f 77  ored on overflow
9610: 20 70 61 67 65 73 2e 0a 3c 6c 69 3e 5e 49 66 20   pages..<li>^If 
9620: 50 26 67 74 3b 58 20 61 6e 64 20 4b 26 67 74 3b  P&gt;X and K&gt;
9630: 58 20 74 68 65 6e 20 74 68 65 20 66 69 72 73 74  X then the first
9640: 20 4d 20 62 79 74 65 73 20 6f 66 20 50 20 61 72   M bytes of P ar
9650: 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 0a  e stored on the.
9660: 20 20 20 20 62 74 72 65 65 20 70 61 67 65 20 61      btree page a
9670: 6e 64 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67  nd the remaining
9680: 20 50 2d 4d 20 62 79 74 65 73 20 61 72 65 20 73   P-M bytes are s
9690: 74 6f 72 65 64 20 6f 6e 20 6f 76 65 72 66 6c 6f  tored on overflo
96a0: 77 20 70 61 67 65 73 2e 0a 3c 2f 75 6c 3e 0a 0a  w pages..</ul>..
96b0: 3c 70 3e 54 68 65 20 6f 76 65 72 66 6c 6f 77 20  <p>The overflow 
96c0: 74 68 72 65 73 68 6f 6c 64 73 20 61 72 65 20 64  thresholds are d
96d0: 65 73 69 67 6e 65 64 20 74 6f 20 67 69 76 65 20  esigned to give 
96e0: 61 20 6d 69 6e 69 6d 75 6d 20 66 61 6e 6f 75 74  a minimum fanout
96f0: 20 6f 66 0a 34 20 66 6f 72 20 69 6e 64 65 78 20   of.4 for index 
9700: 62 2d 74 72 65 65 73 20 61 6e 64 20 74 6f 20 6d  b-trees and to m
9710: 61 6b 65 20 73 75 72 65 20 65 6e 6f 75 67 68 20  ake sure enough 
9720: 6f 66 20 74 68 65 20 70 61 79 6c 6f 61 64 0a 69  of the payload.i
9730: 73 20 6f 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s on the b-tree 
9740: 70 61 67 65 20 74 68 61 74 20 74 68 65 20 72 65  page that the re
9750: 63 6f 72 64 20 68 65 61 64 65 72 20 63 61 6e 20  cord header can 
9760: 75 73 75 61 6c 6c 79 20 62 65 20 61 63 63 65 73  usually be acces
9770: 73 65 64 0a 77 69 74 68 6f 75 74 20 63 6f 6e 73  sed.without cons
9780: 75 6c 74 69 6e 67 20 61 6e 20 6f 76 65 72 66 6c  ulting an overfl
9790: 6f 77 20 70 61 67 65 2e 20 20 49 6e 20 68 69 6e  ow page.  In hin
97a0: 64 73 69 67 68 74 2c 20 74 68 65 20 64 65 73 69  dsight, the desi
97b0: 67 6e 65 72 20 6f 66 0a 74 68 65 20 53 51 4c 69  gner of.the SQLi
97c0: 74 65 20 62 2d 74 72 65 65 20 6c 6f 67 69 63 20  te b-tree logic 
97d0: 72 65 61 6c 69 7a 65 64 20 74 68 61 74 20 74 68  realized that th
97e0: 65 73 65 20 74 68 72 65 73 68 6f 6c 64 73 20 63  ese thresholds c
97f0: 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 6d  ould have been.m
9800: 61 64 65 20 6d 75 63 68 20 73 69 6d 70 6c 65 72  ade much simpler
9810: 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 65 20  .  However, the 
9820: 63 6f 6d 70 75 74 61 74 69 6f 6e 73 20 63 61 6e  computations can
9830: 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 0a 77  not be changed.w
9840: 69 74 68 6f 75 74 20 72 65 73 75 6c 74 69 6e 67  ithout resulting
9850: 20 69 6e 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69   in an incompati
9860: 62 6c 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 2e  ble file format.
9870: 20 20 41 6e 64 20 74 68 65 20 63 75 72 72 65 6e    And the curren
9880: 74 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 0a 77  t computations.w
9890: 6f 72 6b 20 77 65 6c 6c 2c 20 65 76 65 6e 20 69  ork well, even i
98a0: 66 20 74 68 65 79 20 61 72 65 20 61 20 6c 69 74  f they are a lit
98b0: 74 6c 65 20 63 6f 6d 70 6c 65 78 2e 3c 2f 70 3e  tle complex.</p>
98c0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
98d0: 6e 74 20 6f 76 66 6c 70 67 73 20 7b 6f 76 65 72  nt ovflpgs {over
98e0: 66 6c 6f 77 20 70 61 67 65 7d 20 7b 6f 76 65 72  flow page} {over
98f0: 66 6c 6f 77 20 70 61 67 65 73 7d 3c 2f 74 63 6c  flow pages}</tcl
9900: 3e 0a 3c 68 32 3e 43 65 6c 6c 20 50 61 79 6c 6f  >.<h2>Cell Paylo
9910: 61 64 20 4f 76 65 72 66 6c 6f 77 20 50 61 67 65  ad Overflow Page
9920: 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 57 68 65 6e  s</h2>..<p>^When
9930: 20 74 68 65 20 70 61 79 6c 6f 61 64 20 6f 66 20   the payload of 
9940: 61 20 62 2d 74 72 65 65 20 63 65 6c 6c 20 69 73  a b-tree cell is
9950: 20 74 6f 6f 20 6c 61 72 67 65 20 66 6f 72 20 74   too large for t
9960: 68 65 20 62 2d 74 72 65 65 20 70 61 67 65 2c 0a  he b-tree page,.
9970: 74 68 65 20 73 75 72 70 6c 75 73 20 69 73 20 73  the surplus is s
9980: 70 69 6c 6c 65 64 20 6f 6e 74 6f 20 6f 76 65 72  pilled onto over
9990: 66 6c 6f 77 20 70 61 67 65 73 2e 20 20 5e 4f 76  flow pages.  ^Ov
99a0: 65 72 66 6c 6f 77 20 70 61 67 65 73 20 66 6f 72  erflow pages for
99b0: 6d 20 61 20 6c 69 6e 6b 65 64 0a 6c 69 73 74 2e  m a linked.list.
99c0: 20 20 5e 54 68 65 20 66 69 72 73 74 20 66 6f 75    ^The first fou
99d0: 72 20 62 79 74 65 73 20 6f 66 20 65 61 63 68 20  r bytes of each 
99e0: 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 61 72  overflow page ar
99f0: 65 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 0a 69  e a big-endian.i
9a00: 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
9a10: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
9a20: 6f 66 20 74 68 65 20 6e 65 78 74 20 70 61 67 65  of the next page
9a30: 20 69 6e 20 74 68 65 20 63 68 61 69 6e 2c 20 6f   in the chain, o
9a40: 72 20 7a 65 72 6f 0a 66 6f 72 20 74 68 65 20 66  r zero.for the f
9a50: 69 6e 61 6c 20 70 61 67 65 20 69 6e 20 74 68 65  inal page in the
9a60: 20 63 68 61 69 6e 2e 20 20 5e 54 68 65 20 66 69   chain.  ^The fi
9a70: 66 74 68 20 62 79 74 65 20 74 68 72 6f 75 67 68  fth byte through
9a80: 20 74 68 65 20 6c 61 73 74 20 75 73 61 62 6c 65   the last usable
9a90: 0a 62 79 74 65 20 61 72 65 20 75 73 65 64 20 74  .byte are used t
9aa0: 6f 20 68 6f 6c 64 20 6f 76 65 72 66 6c 6f 77 20  o hold overflow 
9ab0: 63 6f 6e 74 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 68  content.</p>..<h
9ac0: 32 3e 50 6f 69 6e 74 65 72 20 4d 61 70 20 6f 72  2>Pointer Map or
9ad0: 20 50 74 72 6d 61 70 20 50 61 67 65 73 3c 2f 68   Ptrmap Pages</h
9ae0: 32 3e 0a 0a 3c 70 3e 50 6f 69 6e 74 65 72 20 6d  2>..<p>Pointer m
9af0: 61 70 20 6f 72 20 70 74 72 6d 61 70 20 70 61 67  ap or ptrmap pag
9b00: 65 73 20 61 72 65 20 65 78 74 72 61 20 70 61 67  es are extra pag
9b10: 65 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  es inserted into
9b20: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 74 6f   the database.to
9b30: 20 6d 61 6b 65 20 74 68 65 20 6f 70 65 72 61 74   make the operat
9b40: 69 6f 6e 20 6f 66 20 5b 61 75 74 6f 5f 76 61 63  ion of [auto_vac
9b50: 75 75 6d 5d 20 61 6e 64 20 5b 69 6e 63 72 65 6d  uum] and [increm
9b60: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 5d 20 6d 6f  ental_vacuum] mo
9b70: 64 65 73 0a 6d 6f 72 65 20 65 66 66 69 63 69 65  des.more efficie
9b80: 6e 74 2e 20 20 4f 74 68 65 72 20 70 61 67 65 20  nt.  Other page 
9b90: 74 79 70 65 73 20 69 6e 20 74 68 65 20 64 61 74  types in the dat
9ba0: 61 62 61 73 65 20 74 79 70 69 63 61 6c 6c 79 20  abase typically 
9bb0: 68 61 76 65 20 70 6f 69 6e 74 65 72 73 0a 66 72  have pointers.fr
9bc0: 6f 6d 20 70 61 72 65 6e 74 20 74 6f 20 63 68 69  om parent to chi
9bd0: 6c 64 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ld.  For example
9be0: 2c 20 61 6e 20 69 6e 74 65 72 69 6f 72 20 62 2d  , an interior b-
9bf0: 74 72 65 65 20 70 61 67 65 20 63 6f 6e 74 61 69  tree page contai
9c00: 6e 73 20 70 6f 69 6e 74 65 72 73 0a 74 6f 20 69  ns pointers.to i
9c10: 74 73 20 63 68 69 6c 64 20 62 2d 74 72 65 65 20  ts child b-tree 
9c20: 70 61 67 65 73 20 61 6e 64 20 61 6e 20 6f 76 65  pages and an ove
9c30: 72 66 6c 6f 77 20 63 68 61 69 6e 20 68 61 73 20  rflow chain has 
9c40: 61 20 70 6f 69 6e 74 65 72 0a 66 72 6f 6d 20 65  a pointer.from e
9c50: 61 72 6c 69 65 72 20 74 6f 20 6c 61 74 65 72 20  arlier to later 
9c60: 6c 69 6e 6b 73 20 69 6e 20 74 68 65 20 63 68 61  links in the cha
9c70: 69 6e 2e 20 20 41 20 70 74 72 6d 61 70 20 70 61  in.  A ptrmap pa
9c80: 67 65 20 63 6f 6e 74 61 69 6e 73 20 6c 69 6e 6b  ge contains link
9c90: 61 67 65 0a 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  age.information 
9ca0: 67 6f 69 6e 67 20 69 6e 20 74 68 65 20 6f 70 70  going in the opp
9cb0: 6f 73 69 74 65 20 64 69 72 65 63 74 69 6f 6e 2c  osite direction,
9cc0: 20 66 72 6f 6d 20 63 68 69 6c 64 20 74 6f 20 70   from child to p
9cd0: 61 72 65 6e 74 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  arent.</p>..<p>^
9ce0: 50 74 72 6d 61 70 20 70 61 67 65 73 20 6d 75 73  Ptrmap pages mus
9cf0: 74 20 65 78 69 73 74 20 69 6e 20 61 6e 79 20 64  t exist in any d
9d00: 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 69  atabase file whi
9d10: 63 68 20 68 61 73 20 61 20 6e 6f 6e 2d 7a 65 72  ch has a non-zer
9d20: 6f 0a 6c 61 72 67 65 73 74 20 72 6f 6f 74 20 62  o.largest root b
9d30: 2d 74 72 65 65 20 70 61 67 65 20 76 61 6c 75 65  -tree page value
9d40: 20 61 74 20 6f 66 66 73 65 74 20 35 32 20 69 6e   at offset 52 in
9d50: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
9d60: 61 64 65 72 2e 0a 5e 49 66 20 74 68 65 20 6c 61  ader..^If the la
9d70: 72 67 65 73 74 20 72 6f 6f 74 20 62 2d 74 72 65  rgest root b-tre
9d80: 65 20 70 61 67 65 20 76 61 6c 75 65 20 69 73 20  e page value is 
9d90: 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 64  zero, then the d
9da0: 61 74 61 62 61 73 65 20 6d 75 73 74 20 6e 6f 74  atabase must not
9db0: 0a 63 6f 6e 74 61 69 6e 20 70 74 72 6d 61 70 20  .contain ptrmap 
9dc0: 70 61 67 65 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  pages.</p>..<p>^
9dd0: 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 77 69  In a database wi
9de0: 74 68 20 70 74 72 6d 61 70 20 70 61 67 65 73 2c  th ptrmap pages,
9df0: 20 74 68 65 20 66 69 72 73 74 20 70 74 72 6d 61   the first ptrma
9e00: 70 20 70 61 67 65 20 69 73 20 70 61 67 65 20 32  p page is page 2
9e10: 2e 0a 41 20 70 74 72 6d 61 70 20 70 61 67 65 20  ..A ptrmap page 
9e20: 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 6e 20 61  consists of an a
9e30: 72 72 61 79 20 6f 66 20 35 2d 62 79 74 65 20 65  rray of 5-byte e
9e40: 6e 74 72 69 65 73 2e 20 20 4c 65 74 20 4a 20 62  ntries.  Let J b
9e50: 65 20 74 68 65 0a 6e 75 6d 62 65 72 20 6f 66 20  e the.number of 
9e60: 35 2d 62 79 74 65 20 65 6e 74 72 69 65 73 20 74  5-byte entries t
9e70: 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e 20  hat will fit in 
9e80: 74 68 65 20 75 73 61 62 6c 65 20 73 70 61 63 65  the usable space
9e90: 20 6f 66 20 61 20 70 61 67 65 2e 0a 28 49 6e 20   of a page..(In 
9ea0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 4a 3d 55  other words, J=U
9eb0: 2f 35 2e 29 20 20 5e 54 68 65 20 66 69 72 73 74  /5.)  ^The first
9ec0: 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69 6c   ptrmap page wil
9ed0: 6c 20 63 6f 6e 74 61 69 6e 20 62 61 63 6b 20 70  l contain back p
9ee0: 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74 69  ointer.informati
9ef0: 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 33 20 74  on for pages 3 t
9f00: 68 72 6f 75 67 68 20 4a 2b 32 2c 20 69 6e 63 6c  hrough J+2, incl
9f10: 75 73 69 76 65 2e 20 20 5e 54 68 65 20 73 65 63  usive.  ^The sec
9f20: 6f 6e 64 20 70 6f 69 6e 74 65 72 20 6d 61 70 0a  ond pointer map.
9f30: 70 61 67 65 20 77 69 6c 6c 20 62 65 20 6f 6e 20  page will be on 
9f40: 70 61 67 65 20 4a 2b 33 20 61 6e 64 20 74 68 61  page J+3 and tha
9f50: 74 20 70 74 72 6d 61 70 20 70 61 67 65 20 77 69  t ptrmap page wi
9f60: 6c 6c 20 70 72 6f 76 69 64 65 20 62 61 63 6b 20  ll provide back 
9f70: 70 6f 69 6e 74 65 72 0a 69 6e 66 6f 72 6d 61 74  pointer.informat
9f80: 69 6f 6e 20 66 6f 72 20 70 61 67 65 73 20 4a 2b  ion for pages J+
9f90: 34 20 74 68 72 6f 75 67 68 20 32 2a 4a 2b 33 20  4 through 2*J+3 
9fa0: 69 6e 63 6c 75 73 69 76 65 2e 20 20 41 6e 64 20  inclusive.  And 
9fb0: 73 6f 20 66 6f 72 74 68 20 66 6f 72 0a 74 68 65  so forth for.the
9fc0: 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
9fd0: 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   file.</p>..<p>^
9fe0: 28 49 6e 20 61 20 64 61 74 61 62 61 73 65 20 74  (In a database t
9ff0: 68 61 74 20 75 73 65 73 20 70 74 72 6d 61 70 20  hat uses ptrmap 
a000: 70 61 67 65 73 2c 20 61 6c 6c 20 70 61 67 65 73  pages, all pages
a010: 20 61 74 20 6c 6f 63 61 74 69 6f 6e 73 20 69 64   at locations id
a020: 65 6e 74 69 66 69 65 64 0a 62 79 20 74 68 65 20  entified.by the 
a030: 63 6f 6d 70 75 74 61 74 69 6f 6e 20 69 6e 20 74  computation in t
a040: 68 65 20 70 72 65 76 69 6f 75 73 20 70 61 72 61  he previous para
a050: 67 72 61 70 68 20 6d 75 73 74 20 62 65 20 70 74  graph must be pt
a060: 72 6d 61 70 20 70 61 67 65 20 61 6e 64 20 6e 6f  rmap page and no
a070: 0a 6f 74 68 65 72 20 70 61 67 65 20 6d 61 79 20  .other page may 
a080: 62 65 20 61 20 70 74 72 6d 61 70 20 70 61 67 65  be a ptrmap page
a090: 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 74 68  .  Except, if th
a0a0: 65 20 62 79 74 65 2d 6c 6f 63 6b 20 70 61 67 65  e byte-lock page
a0b0: 20 68 61 70 70 65 6e 73 20 74 6f 0a 66 61 6c 6c   happens to.fall
a0c0: 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 67   on the same pag
a0d0: 65 20 6e 75 6d 62 65 72 20 61 73 20 61 20 70 74  e number as a pt
a0e0: 72 6d 61 70 20 70 61 67 65 2c 20 74 68 65 6e 20  rmap page, then 
a0f0: 74 68 65 20 70 74 72 6d 61 70 20 69 73 20 6d 6f  the ptrmap is mo
a100: 76 65 64 0a 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ved.to the follo
a110: 77 69 6e 67 20 70 61 67 65 20 66 6f 72 20 74 68  wing page for th
a120: 61 74 20 6f 6e 65 20 63 61 73 65 2e 29 5e 3c 2f  at one case.)^</
a130: 70 3e 0a 0a 3c 70 3e 45 61 63 68 20 35 2d 62 79  p>..<p>Each 5-by
a140: 74 65 20 65 6e 74 72 79 20 6f 6e 20 61 20 70 74  te entry on a pt
a150: 72 6d 61 70 20 70 61 67 65 20 70 72 6f 76 69 64  rmap page provid
a160: 65 73 20 62 61 63 6b 2d 6c 69 6e 6b 20 69 6e 66  es back-link inf
a170: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 0a  ormation about .
a180: 6f 6e 65 20 6f 66 20 74 68 65 20 70 61 67 65 73  one of the pages
a190: 20 74 68 61 74 20 69 6d 6d 65 64 69 61 74 65 6c   that immediatel
a1a0: 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70 6f 69  y follow the poi
a1b0: 6e 74 65 72 20 6d 61 70 2e 20 20 5e 28 49 66 20  nter map.  ^(If 
a1c0: 70 61 67 65 20 42 20 69 73 20 61 0a 70 74 72 6d  page B is a.ptrm
a1d0: 61 70 20 70 61 67 65 20 74 68 65 6e 20 62 61 63  ap page then bac
a1e0: 6b 2d 6c 69 6e 6b 20 69 6e 66 6f 72 6d 61 74 69  k-link informati
a1f0: 6f 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b  on about page B+
a200: 31 20 69 73 20 70 72 6f 76 69 64 65 64 20 62 79  1 is provided by
a210: 0a 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79  .the first entry
a220: 20 6f 6e 20 74 68 65 20 70 6f 69 6e 74 65 72 20   on the pointer 
a230: 6d 61 70 2e 20 20 49 6e 66 6f 72 6d 61 74 69 6f  map.  Informatio
a240: 6e 20 61 62 6f 75 74 20 70 61 67 65 20 42 2b 32  n about page B+2
a250: 20 69 73 0a 70 72 6f 76 69 64 65 64 20 62 79 20   is.provided by 
a260: 74 68 65 20 73 65 63 6f 6e 64 20 65 6e 74 72 79  the second entry
a270: 2e 20 20 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e  .  And so forth.
a280: 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 45 61 63 68 20  )^</p>..<p>Each 
a290: 35 2d 62 79 74 65 20 70 74 72 6d 61 70 20 65 6e  5-byte ptrmap en
a2a0: 74 72 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  try consists of 
a2b0: 6f 6e 65 20 62 79 74 65 20 6f 66 20 22 70 61 67  one byte of "pag
a2c0: 65 20 74 79 70 65 22 20 69 6e 66 6f 72 6d 61 74  e type" informat
a2d0: 69 6f 6e 0a 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ion.followed by 
a2e0: 61 20 34 2d 62 79 74 65 20 62 69 67 2d 65 6e 64  a 4-byte big-end
a2f0: 69 61 6e 20 70 61 67 65 20 6e 75 6d 62 65 72 2e  ian page number.
a300: 20 20 46 69 76 65 20 70 61 67 65 20 74 79 70 65    Five page type
a310: 73 20 61 72 65 20 72 65 63 6f 67 6e 69 7a 65 64  s are recognized
a320: 3a 0a 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69  :.</p>..<ol>.<li
a330: 3e 41 20 62 2d 74 72 65 65 20 72 6f 6f 74 20 70  >A b-tree root p
a340: 61 67 65 2e 20 20 54 68 65 0a 70 61 67 65 20 6e  age.  The.page n
a350: 75 6d 62 65 72 20 73 68 6f 75 6c 64 20 62 65 20  umber should be 
a360: 7a 65 72 6f 2e 0a 3c 6c 69 3e 41 20 66 72 65 65  zero..<li>A free
a370: 6c 69 73 74 20 70 61 67 65 2e 20 20 54 68 65 20  list page.  The 
a380: 70 61 67 65 20 6e 75 6d 62 65 72 20 73 68 6f 75  page number shou
a390: 6c 64 20 62 65 0a 7a 65 72 6f 2e 0a 3c 6c 69 3e  ld be.zero..<li>
a3a0: 54 68 65 20 66 69 72 73 74 20 70 61 67 65 20 6f  The first page o
a3b0: 66 20 61 0a 63 65 6c 6c 20 70 61 79 6c 6f 61 64  f a.cell payload
a3c0: 20 6f 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e   overflow chain.
a3d0: 20 20 54 68 65 20 70 61 67 65 20 6e 75 6d 62 65    The page numbe
a3e0: 72 20 69 73 20 74 68 65 20 62 2d 74 72 65 65 20  r is the b-tree 
a3f0: 70 61 67 65 20 74 68 61 74 0a 63 6f 6e 74 61 69  page that.contai
a400: 6e 73 20 74 68 65 20 63 65 6c 6c 20 77 68 6f 73  ns the cell whos
a410: 65 20 63 6f 6e 74 65 6e 74 20 68 61 73 20 6f 76  e content has ov
a420: 65 72 66 6c 6f 77 65 64 2e 0a 3c 6c 69 3e 41 20  erflowed..<li>A 
a430: 70 61 67 65 20 69 6e 20 61 6e 20 6f 76 65 72 66  page in an overf
a440: 6c 6f 77 20 63 68 61 69 6e 0a 6f 74 68 65 72 20  low chain.other 
a450: 74 68 61 6e 20 74 68 65 20 66 69 72 73 74 20 70  than the first p
a460: 61 67 65 2e 20 20 54 68 65 20 70 61 67 65 20 6e  age.  The page n
a470: 75 6d 62 65 72 20 69 73 20 74 68 65 20 70 72 69  umber is the pri
a480: 6f 72 20 70 61 67 65 20 6f 66 20 74 68 65 0a 6f  or page of the.o
a490: 76 65 72 66 6c 6f 77 20 63 68 61 69 6e 2e 0a 3c  verflow chain..<
a4a0: 6c 69 3e 41 20 6e 6f 6e 2d 72 6f 6f 74 20 62 2d  li>A non-root b-
a4b0: 74 72 65 65 20 70 61 67 65 2e 20 20 54 68 65 0a  tree page.  The.
a4c0: 70 61 67 65 20 6e 75 6d 62 65 72 20 69 73 20 74  page number is t
a4d0: 68 65 20 70 61 72 65 6e 74 20 62 2d 74 72 65 65  he parent b-tree
a4e0: 20 70 61 67 65 2e 0a 3c 2f 6f 6c 3e 0a 0a 3c 70   page..</ol>..<p
a4f0: 3e 5e 49 6e 20 61 6e 79 20 64 61 74 61 62 61 73  >^In any databas
a500: 65 20 66 69 6c 65 20 74 68 61 74 20 63 6f 6e 74  e file that cont
a510: 61 69 6e 73 20 70 74 72 6d 61 70 20 70 61 67 65  ains ptrmap page
a520: 73 2c 20 61 6c 6c 20 62 2d 74 72 65 65 20 72 6f  s, all b-tree ro
a530: 6f 74 20 70 61 67 65 73 20 0a 6d 75 73 74 20 63  ot pages .must c
a540: 6f 6d 65 20 62 65 66 6f 72 65 20 61 6e 79 20 6e  ome before any n
a550: 6f 6e 2d 72 6f 6f 74 20 62 2d 74 72 65 65 20 70  on-root b-tree p
a560: 61 67 65 2c 20 63 65 6c 6c 20 70 61 79 6c 6f 61  age, cell payloa
a570: 64 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 2c  d overflow page,
a580: 20 6f 72 0a 66 72 65 65 6c 69 73 74 20 70 61 67   or.freelist pag
a590: 65 2e 20 20 54 68 69 73 20 72 65 73 74 72 69 63  e.  This restric
a5a0: 74 69 6f 6e 20 65 6e 73 75 72 65 73 20 74 68 61  tion ensures tha
a5b0: 74 20 61 20 72 6f 6f 74 20 70 61 67 65 20 77 69  t a root page wi
a5c0: 6c 6c 20 6e 65 76 65 72 0a 62 65 20 6d 6f 76 65  ll never.be move
a5d0: 64 20 64 75 72 69 6e 67 20 61 6e 20 61 75 74 6f  d during an auto
a5e0: 2d 76 61 63 75 75 6d 20 6f 72 20 69 6e 63 72 65  -vacuum or incre
a5f0: 6d 65 6e 74 61 6c 2d 76 61 63 75 75 6d 2e 20 20  mental-vacuum.  
a600: 54 68 65 20 61 75 74 6f 2d 76 61 63 75 75 6d 0a  The auto-vacuum.
a610: 6c 6f 67 69 63 20 64 6f 65 73 20 6e 6f 74 20 6b  logic does not k
a620: 6e 6f 77 20 68 6f 77 20 74 6f 20 75 70 64 61 74  now how to updat
a630: 65 20 74 68 65 20 72 6f 6f 74 5f 70 61 67 65 20  e the root_page 
a640: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
a650: 69 74 65 5f 6d 61 73 74 65 72 0a 74 61 62 6c 65  ite_master.table
a660: 20 61 6e 64 20 73 6f 20 69 74 20 69 73 20 6e 65   and so it is ne
a670: 63 65 73 73 61 72 79 20 74 6f 20 70 72 65 76 65  cessary to preve
a680: 6e 74 20 72 6f 6f 74 20 70 61 67 65 73 20 66 72  nt root pages fr
a690: 6f 6d 20 62 65 69 6e 67 20 6d 6f 76 65 64 0a 64  om being moved.d
a6a0: 75 72 69 6e 67 20 61 6e 20 61 75 74 6f 2d 76 61  uring an auto-va
a6b0: 63 75 75 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f  cuum in order to
a6c0: 20 70 72 65 73 65 72 76 65 20 74 68 65 20 69 6e   preserve the in
a6d0: 74 65 67 72 69 74 79 20 6f 66 20 74 68 65 0a 73  tegrity of the.s
a6e0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62  qlite_master tab
a6f0: 6c 65 2e 20 20 5e 52 6f 6f 74 20 70 61 67 65 73  le.  ^Root pages
a700: 20 61 72 65 20 6d 6f 76 65 64 20 74 6f 20 74 68   are moved to th
a710: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
a720: 68 65 0a 64 61 74 61 62 61 73 65 20 66 69 6c 65  he.database file
a730: 20 62 79 20 74 68 65 20 43 52 45 41 54 45 20 54   by the CREATE T
a740: 41 42 4c 45 2c 20 43 52 45 41 54 45 20 49 4e 44  ABLE, CREATE IND
a750: 45 58 2c 20 44 52 4f 50 20 54 41 42 4c 45 2c 20  EX, DROP TABLE, 
a760: 61 6e 64 0a 44 52 4f 50 20 49 4e 44 45 58 20 6f  and.DROP INDEX o
a770: 70 65 72 61 74 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a  perations.</p>..
a780: 3c 68 31 3e 53 63 68 65 6d 61 20 4c 61 79 65 72  <h1>Schema Layer
a790: 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65 20 66 6f  </h1>..<p>The fo
a7a0: 72 65 67 6f 69 6e 67 20 74 65 78 74 20 64 65 73  regoing text des
a7b0: 63 72 69 62 65 73 20 6c 6f 77 2d 6c 65 76 65 6c  cribes low-level
a7c0: 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20   aspects of the 
a7d0: 53 51 4c 69 74 65 20 66 69 6c 65 0a 66 6f 72 6d  SQLite file.form
a7e0: 61 74 2e 20 20 54 68 65 20 62 2d 74 72 65 65 20  at.  The b-tree 
a7f0: 6d 65 63 68 61 6e 69 73 6d 20 70 72 6f 76 69 64  mechanism provid
a800: 65 73 20 61 20 70 6f 77 65 72 66 75 6c 20 61 6e  es a powerful an
a810: 64 20 65 66 66 69 63 69 65 6e 74 20 6d 65 61 6e  d efficient mean
a820: 73 20 6f 66 0a 61 63 63 65 73 73 69 6e 67 20 61  s of.accessing a
a830: 20 6c 61 72 67 65 20 64 61 74 61 20 73 65 74 2e   large data set.
a840: 20 20 54 68 69 73 20 73 65 63 74 69 6f 6e 20 77    This section w
a850: 69 6c 6c 20 64 65 73 63 72 69 62 65 20 68 6f 77  ill describe how
a860: 20 74 68 65 0a 6c 6f 77 2d 6c 65 76 65 6c 20 62   the.low-level b
a870: 2d 74 72 65 65 20 6c 61 79 65 72 20 69 73 20 75  -tree layer is u
a880: 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
a890: 20 68 69 67 68 65 72 2d 6c 65 76 65 6c 20 53 51   higher-level SQ
a8a0: 4c 0a 63 61 70 61 62 69 6c 69 74 69 65 73 2e 3c  L.capabilities.<
a8b0: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
a8c0: 67 6d 65 6e 74 20 72 65 63 6f 72 64 5f 66 6f 72  gment record_for
a8d0: 6d 61 74 20 7b 72 65 63 6f 72 64 20 66 6f 72 6d  mat {record form
a8e0: 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 52 65  at}</tcl>.<h2>Re
a8f0: 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 68 32 3e  cord Format</h2>
a900: 0a 0a 3c 70 3e 54 68 65 20 64 61 74 61 20 66 6f  ..<p>The data fo
a910: 72 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65  r a table b-tree
a920: 20 6c 65 61 66 20 70 61 67 65 20 61 6e 64 20 74   leaf page and t
a930: 68 65 20 6b 65 79 0a 6f 66 20 61 6e 20 69 6e 64  he key.of an ind
a940: 65 78 20 62 2d 74 72 65 65 20 70 61 67 65 20 77  ex b-tree page w
a950: 61 73 20 63 68 61 72 61 63 74 65 72 69 7a 65 64  as characterized
a960: 20 61 62 6f 76 65 0a 61 73 20 61 6e 20 61 72 62   above.as an arb
a970: 69 74 72 61 72 79 20 73 65 71 75 65 6e 63 65 20  itrary sequence 
a980: 6f 66 20 62 79 74 65 73 2e 0a 54 68 65 20 70 72  of bytes..The pr
a990: 69 6f 72 20 64 69 73 63 75 73 73 69 6f 6e 20 6d  ior discussion m
a9a0: 65 6e 74 69 6f 6e 65 64 20 6f 6e 65 20 6b 65 79  entioned one key
a9b0: 20 62 65 69 6e 67 20 6c 65 73 73 20 74 68 61 6e   being less than
a9c0: 20 61 6e 6f 74 68 65 72 2c 20 62 75 74 0a 64 69   another, but.di
a9d0: 64 20 6e 6f 74 20 64 65 66 69 6e 65 20 77 68 61  d not define wha
a9e0: 74 20 22 6c 65 73 73 20 74 68 61 6e 22 20 6d 65  t "less than" me
a9f0: 61 6e 74 2e 20 20 54 68 65 20 63 75 72 72 65 6e  ant.  The curren
aa00: 74 20 73 65 63 74 69 6f 6e 20 77 69 6c 6c 20 61  t section will a
aa10: 64 64 72 65 73 73 0a 74 68 65 73 65 20 6f 6d 69  ddress.these omi
aa20: 73 73 69 6f 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e  ssions.</p>..<p>
aa30: 50 61 79 6c 6f 61 64 2c 20 65 69 74 68 65 72 20  Payload, either 
aa40: 74 61 62 6c 65 20 62 2d 74 72 65 65 20 64 61 74  table b-tree dat
aa50: 61 20 6f 72 20 69 6e 64 65 78 20 62 2d 74 72 65  a or index b-tre
aa60: 65 20 6b 65 79 73 2c 20 0a 69 73 20 61 6c 77 61  e keys, .is alwa
aa70: 79 73 20 69 6e 20 74 68 65 20 22 72 65 63 6f 72  ys in the "recor
aa80: 64 20 66 6f 72 6d 61 74 22 2e 0a 54 68 65 20 72  d format"..The r
aa90: 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 64 65 66  ecord format def
aaa0: 69 6e 65 73 20 61 20 73 65 71 75 65 6e 63 65 20  ines a sequence 
aab0: 6f 66 20 76 61 6c 75 65 73 20 63 6f 72 72 65 73  of values corres
aac0: 70 6f 6e 64 69 6e 67 0a 74 6f 20 63 6f 6c 75 6d  ponding.to colum
aad0: 6e 73 20 69 6e 20 61 20 74 61 62 6c 65 20 6f 72  ns in a table or
aae0: 20 69 6e 64 65 78 2e 20 20 54 68 65 20 72 65 63   index.  The rec
aaf0: 6f 72 64 20 66 6f 72 6d 61 74 20 73 70 65 63 69  ord format speci
ab00: 66 69 65 73 20 74 68 65 20 6e 75 6d 62 65 72 0a  fies the number.
ab10: 6f 66 20 63 6f 6c 75 6d 6e 73 2c 20 74 68 65 20  of columns, the 
ab20: 64 61 74 61 74 79 70 65 20 6f 66 20 65 61 63 68  datatype of each
ab30: 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65   column, and the
ab40: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65 61 63 68   content of each
ab50: 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a 0a 3c 70   column.</p>..<p
ab60: 3e 54 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d  >The record form
ab70: 61 74 20 6d 61 6b 65 73 20 65 78 74 65 6e 73 69  at makes extensi
ab80: 76 65 20 75 73 65 20 6f 66 20 74 68 65 20 0a 5b  ve use of the .[
ab90: 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
aba0: 69 6e 74 65 67 65 72 5d 20 6f 72 20 5b 76 61 72  integer] or [var
abb0: 69 6e 74 5d 0a 72 65 70 72 65 73 65 6e 74 61 74  int].representat
abc0: 69 6f 6e 20 6f 66 20 36 34 2d 62 69 74 20 73 69  ion of 64-bit si
abd0: 67 6e 65 64 20 69 6e 74 65 67 65 72 73 20 64 65  gned integers de
abe0: 66 69 6e 65 64 20 61 62 6f 76 65 2e 3c 2f 70 3e  fined above.</p>
abf0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
ac00: 6e 74 20 73 65 72 69 61 6c 74 79 70 65 20 7b 73  nt serialtype {s
ac10: 65 72 69 61 6c 20 74 79 70 65 7d 20 7b 73 65 72  erial type} {ser
ac20: 69 61 6c 20 74 79 70 65 73 7d 3c 2f 74 63 6c 3e  ial types}</tcl>
ac30: 0a 3c 70 3e 41 20 72 65 63 6f 72 64 20 63 6f 6e  .<p>A record con
ac40: 74 61 69 6e 73 20 61 20 68 65 61 64 65 72 20 61  tains a header a
ac50: 6e 64 20 61 20 62 6f 64 79 2c 20 69 6e 20 74 68  nd a body, in th
ac60: 61 74 20 6f 72 64 65 72 2e 20 20 0a 5e 28 54 68  at order.  .^(Th
ac70: 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20  e header begins 
ac80: 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61  with a single va
ac90: 72 69 6e 74 20 77 68 69 63 68 20 64 65 74 65 72  rint which deter
aca0: 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20  mines the total 
acb0: 6e 75 6d 62 65 72 0a 6f 66 20 62 79 74 65 73 20  number.of bytes 
acc0: 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 20  in the header.  
acd0: 54 68 65 20 76 61 72 69 6e 74 20 76 61 6c 75 65  The varint value
ace0: 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20   is the size of 
acf0: 74 68 65 20 68 65 61 64 65 72 20 69 6e 0a 62 79  the header in.by
ad00: 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  tes including th
ad10: 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 69 74  e size varint it
ad20: 73 65 6c 66 2e 29 5e 20 20 5e 46 6f 6c 6c 6f 77  self.)^  ^Follow
ad30: 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
ad40: 69 6e 74 20 61 72 65 0a 6f 6e 65 20 6f 72 20 6d  int are.one or m
ad50: 6f 72 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 76  ore additional v
ad60: 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20  arints, one per 
ad70: 63 6f 6c 75 6d 6e 2e 20 20 54 68 65 73 65 20 61  column.  These a
ad80: 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
ad90: 73 0a 61 72 65 20 63 61 6c 6c 65 64 20 22 73 65  s.are called "se
ada0: 72 69 61 6c 20 74 79 70 65 22 20 6e 75 6d 62 65  rial type" numbe
adb0: 72 73 20 61 6e 64 0a 64 65 74 65 72 6d 69 6e 65  rs and.determine
adc0: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
add0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2c 20 61 63   each column, ac
ade0: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20 66  cording to the f
adf0: 6f 6c 6c 6f 77 69 6e 67 20 63 68 61 72 74 3a 3c  ollowing chart:<
ae00: 2f 70 3e 0a 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69  /p>..<center>.<i
ae10: 3e 53 65 72 69 61 6c 20 54 79 70 65 20 43 6f 64  >Serial Type Cod
ae20: 65 73 20 4f 66 20 54 68 65 20 52 65 63 6f 72 64  es Of The Record
ae30: 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72 3e 0a   Format</i><br>.
ae40: 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22 38 30  <table width="80
ae50: 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c 74 72  %" border=1>.<tr
ae60: 3e 3c 74 68 3e 53 65 72 69 61 6c 20 54 79 70 65  ><th>Serial Type
ae70: 3c 74 68 3e 43 6f 6e 74 65 6e 74 20 53 69 7a 65  <th>Content Size
ae80: 3c 74 68 3e 4d 65 61 6e 69 6e 67 0a 3c 74 72 3e  <th>Meaning.<tr>
ae90: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
aea0: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64  lign=center>0<td
aeb0: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
aec0: 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c  n=center>0<td al
aed0: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65  ign=left>.^Value
aee0: 20 69 73 20 61 20 4e 55 4c 4c 2e 0a 3c 74 72 3e   is a NULL..<tr>
aef0: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
af00: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64  lign=center>1<td
af10: 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
af20: 6e 3d 63 65 6e 74 65 72 3e 31 3c 74 64 20 61 6c  n=center>1<td al
af30: 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65  ign=left>.^Value
af40: 20 69 73 20 61 6e 20 38 2d 62 69 74 20 74 77 6f   is an 8-bit two
af50: 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74  s-complement int
af60: 65 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61  eger..<tr><td va
af70: 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
af80: 65 6e 74 65 72 3e 32 3c 74 64 20 76 61 6c 69 67  enter>2<td valig
af90: 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
afa0: 65 72 3e 32 3c 74 64 20 61 6c 69 67 6e 3d 6c 65  er>2<td align=le
afb0: 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20  ft>.^Value is a 
afc0: 62 69 67 2d 65 6e 64 69 61 6e 20 31 36 2d 62 69  big-endian 16-bi
afd0: 74 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e  t twos-complemen
afe0: 74 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c  t integer..<tr><
aff0: 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
b000: 69 67 6e 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20  ign=center>3<td 
b010: 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
b020: 3d 63 65 6e 74 65 72 3e 33 3c 74 64 20 61 6c 69  =center>3<td ali
b030: 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20  gn=left>.^Value 
b040: 69 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20  is a big-endian 
b050: 32 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70  24-bit twos-comp
b060: 6c 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a  lement integer..
b070: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
b080: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b090: 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
b0a0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 3c 74  align=center>4<t
b0b0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56  d align=left>.^V
b0c0: 61 6c 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e  alue is a big-en
b0d0: 64 69 61 6e 20 33 32 2d 62 69 74 20 74 77 6f 73  dian 32-bit twos
b0e0: 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 74 65  -complement inte
b0f0: 67 65 72 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  ger..<tr><td val
b100: 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
b110: 6e 74 65 72 3e 35 3c 74 64 20 76 61 6c 69 67 6e  nter>5<td valign
b120: 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
b130: 72 3e 36 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66  r>6<td align=lef
b140: 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20 61 20 62  t>.^Value is a b
b150: 69 67 2d 65 6e 64 69 61 6e 20 34 38 2d 62 69 74  ig-endian 48-bit
b160: 20 74 77 6f 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   twos-complement
b170: 20 69 6e 74 65 67 65 72 2e 0a 3c 74 72 3e 3c 74   integer..<tr><t
b180: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b190: 67 6e 3d 63 65 6e 74 65 72 3e 36 3c 74 64 20 76  gn=center>6<td v
b1a0: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b1b0: 63 65 6e 74 65 72 3e 38 3c 74 64 20 61 6c 69 67  center>8<td alig
b1c0: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
b1d0: 73 20 61 20 62 69 67 2d 65 6e 64 69 61 6e 20 36  s a big-endian 6
b1e0: 34 2d 62 69 74 20 74 77 6f 73 2d 63 6f 6d 70 6c  4-bit twos-compl
b1f0: 65 6d 65 6e 74 20 69 6e 74 65 67 65 72 2e 0a 3c  ement integer..<
b200: 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  tr><td valign=to
b210: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 37  p align=center>7
b220: 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
b230: 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64  lign=center>8<td
b240: 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56 61   align=left>.^Va
b250: 6c 75 65 20 69 73 20 61 20 62 69 67 2d 65 6e 64  lue is a big-end
b260: 69 61 6e 20 49 45 45 45 20 37 35 34 2d 32 30 30  ian IEEE 754-200
b270: 38 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e  8 64-bit floatin
b280: 67 20 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 0a  g point number..
b290: 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
b2a0: 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
b2b0: 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  8<td valign=top 
b2c0: 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74  align=center>0<t
b2d0: 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a 5e 56  d align=left>.^V
b2e0: 61 6c 75 65 20 69 73 20 74 68 65 20 69 6e 74 65  alue is the inte
b2f0: 67 65 72 20 30 2e 20 28 4f 6e 6c 79 20 61 76 61  ger 0. (Only ava
b300: 69 6c 61 62 6c 65 20 66 6f 72 20 5b 73 63 68 65  ilable for [sche
b310: 6d 61 20 66 6f 72 6d 61 74 5d 20 34 20 61 6e 64  ma format] 4 and
b320: 20 68 69 67 68 65 72 2e 29 0a 3c 74 72 3e 3c 74   higher.).<tr><t
b330: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b340: 67 6e 3d 63 65 6e 74 65 72 3e 39 3c 74 64 20 76  gn=center>9<td v
b350: 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
b360: 63 65 6e 74 65 72 3e 30 3c 74 64 20 61 6c 69 67  center>0<td alig
b370: 6e 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69  n=left>.^Value i
b380: 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 31 2e  s the integer 1.
b390: 20 28 4f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65   (Only available
b3a0: 20 66 6f 72 20 5b 73 63 68 65 6d 61 20 66 6f 72   for [schema for
b3b0: 6d 61 74 5d 20 34 20 61 6e 64 20 68 69 67 68 65  mat] 4 and highe
b3c0: 72 2e 29 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  r.).<tr><td vali
b3d0: 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
b3e0: 74 65 72 3e 31 30 2c 31 31 0a 20 20 20 20 3c 74  ter>10,11.    <t
b3f0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b400: 67 6e 3d 63 65 6e 74 65 72 3e 26 6e 62 73 70 3b  gn=center>&nbsp;
b410: 3c 74 64 20 61 6c 69 67 6e 3d 6c 65 66 74 3e 0a  <td align=left>.
b420: 3c 69 3e 4e 6f 74 20 75 73 65 64 2e 20 20 52 65  <i>Not used.  Re
b430: 73 65 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e  served for expan
b440: 73 69 6f 6e 2e 3c 2f 69 3e 0a 3c 74 72 3e 3c 74  sion.</i>.<tr><t
b450: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b460: 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32  gn=center>N&#x22
b470: 36 35 3b 31 32 20 61 6e 64 20 65 76 65 6e 0a 20  65;12 and even. 
b480: 20 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f     <td valign=to
b490: 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28  p align=center>(
b4a0: 4e 2d 31 32 29 2f 32 3c 74 64 20 61 6c 69 67 6e  N-12)/2<td align
b4b0: 3d 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73  =left>.^Value is
b4c0: 20 61 20 42 4c 4f 42 20 74 68 61 74 20 69 73 20   a BLOB that is 
b4d0: 28 4e 2d 31 32 29 2f 32 20 62 79 74 65 73 20 69  (N-12)/2 bytes i
b4e0: 6e 20 6c 65 6e 67 74 68 2e 0a 3c 74 72 3e 3c 74  n length..<tr><t
b4f0: 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
b500: 67 6e 3d 63 65 6e 74 65 72 3e 4e 26 23 78 32 32  gn=center>N&#x22
b510: 36 35 3b 31 33 20 61 6e 64 20 6f 64 64 0a 20 20  65;13 and odd.  
b520: 20 20 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70    <td valign=top
b530: 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 28 4e   align=center>(N
b540: 2d 31 33 29 2f 32 3c 74 64 20 61 6c 69 67 6e 3d  -13)/2<td align=
b550: 6c 65 66 74 3e 0a 5e 56 61 6c 75 65 20 69 73 20  left>.^Value is 
b560: 61 20 73 74 72 69 6e 67 20 69 6e 20 74 68 65 20  a string in the 
b570: 5b 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 5d 20  [text encoding] 
b580: 61 6e 64 20 28 4e 2d 31 33 29 2f 32 20 62 79 74  and (N-13)/2 byt
b590: 65 73 20 69 6e 20 6c 65 6e 67 74 68 2e 0a 5e 54  es in length..^T
b5a0: 68 65 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 6f  he nul terminato
b5b0: 72 20 69 73 20 6e 6f 74 20 73 74 6f 72 65 64 2e  r is not stored.
b5c0: 0a 3c 2f 74 61 62 6c 65 3e 3c 2f 63 65 6e 74 65  .</table></cente
b5d0: 72 3e 0a 0a 3c 70 3e 54 68 65 20 68 65 61 64 65  r>..<p>The heade
b5e0: 72 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 61 6e  r size varint.an
b5f0: 64 20 73 65 72 69 61 6c 20 74 79 70 65 20 76 61  d serial type va
b600: 72 69 6e 74 73 20 77 69 6c 6c 20 75 73 75 61 6c  rints will usual
b610: 6c 79 20 63 6f 6e 73 69 73 74 20 6f 66 20 61 20  ly consist of a 
b620: 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
b630: 65 0a 73 65 72 69 61 6c 20 74 79 70 65 20 76 61  e.serial type va
b640: 72 69 6e 74 73 20 66 6f 72 20 6c 61 72 67 65 20  rints for large 
b650: 73 74 72 69 6e 67 73 20 61 6e 64 20 42 4c 4f 42  strings and BLOB
b660: 73 20 6d 69 67 68 74 20 65 78 74 65 6e 64 20 74  s might extend t
b670: 6f 20 74 77 6f 20 6f 72 20 74 68 72 65 65 0a 62  o two or three.b
b680: 79 74 65 20 76 61 72 69 6e 74 73 2c 20 62 75 74  yte varints, but
b690: 20 74 68 61 74 20 69 73 20 74 68 65 20 65 78 63   that is the exc
b6a0: 65 70 74 69 6f 6e 20 72 61 74 68 65 72 20 74 68  eption rather th
b6b0: 61 6e 20 74 68 65 20 72 75 6c 65 2e 20 0a 54 68  an the rule. .Th
b6c0: 65 20 76 61 72 69 6e 74 20 66 6f 72 6d 61 74 20  e varint format 
b6d0: 69 73 20 76 65 72 79 20 65 66 66 69 63 69 65 6e  is very efficien
b6e0: 74 20 61 74 20 63 6f 64 69 6e 67 20 74 68 65 20  t at coding the 
b6f0: 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e 3c 2f  record header.</
b700: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 76 61 6c 75  p>..<p>^The valu
b710: 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  es for each colu
b720: 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  mn in the record
b730: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
b740: 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 0a  low the header..
b750: 5e 28 46 6f 72 20 73 65 72 69 61 6c 20 74 79 70  ^(For serial typ
b760: 65 73 20 30 2c 20 38 2c 20 39 2c 20 31 32 2c 20  es 0, 8, 9, 12, 
b770: 61 6e 64 20 31 33 2c 20 74 68 65 20 76 61 6c 75  and 13, the valu
b780: 65 20 69 73 20 7a 65 72 6f 20 62 79 74 65 73 20  e is zero bytes 
b790: 69 6e 0a 6c 65 6e 67 74 68 2e 20 20 49 66 20 61  in.length.  If a
b7a0: 6c 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6f  ll columns are o
b7b0: 66 20 74 68 65 73 65 20 74 79 70 65 73 20 74 68  f these types th
b7c0: 65 6e 20 74 68 65 20 62 6f 64 79 20 73 65 63 74  en the body sect
b7d0: 69 6f 6e 20 6f 66 20 74 68 65 0a 72 65 63 6f 72  ion of the.recor
b7e0: 64 20 69 73 20 65 6d 70 74 79 2e 29 5e 3c 2f 70  d is empty.)^</p
b7f0: 3e 0a 0a 3c 70 3e 5e 41 20 72 65 63 6f 72 64 20  >..<p>^A record 
b800: 6d 69 67 68 74 20 68 61 76 65 20 66 65 77 65 72  might have fewer
b810: 20 76 61 6c 75 65 73 20 74 68 61 6e 20 74 68 65   values than the
b820: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
b830: 6e 73 20 69 6e 20 74 68 65 0a 63 6f 72 72 65 73  ns in the.corres
b840: 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 2e 20 20  ponding table.  
b850: 54 68 69 73 20 63 61 6e 20 68 61 70 70 65 6e 2c  This can happen,
b860: 20 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 66   for example, af
b870: 74 65 72 20 61 6e 0a 5b 41 4c 54 45 52 20 54 41  ter an.[ALTER TA
b880: 42 4c 45 7c 41 4c 54 45 52 20 54 41 42 4c 45 20  BLE|ALTER TABLE 
b890: 2e 2e 2e 20 41 44 44 20 43 4f 4c 55 4d 4e 5d 20  ... ADD COLUMN] 
b8a0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 68 61  SQL statement ha
b8b0: 73 20 69 6e 63 72 65 61 73 65 64 0a 74 68 65 20  s increased.the 
b8c0: 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
b8d0: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 73  s in the table s
b8e0: 63 68 65 6d 61 20 77 69 74 68 6f 75 74 20 6d 6f  chema without mo
b8f0: 64 69 66 79 69 6e 67 20 70 72 65 65 78 69 73 74  difying preexist
b900: 69 6e 67 20 72 6f 77 73 0a 69 6e 20 74 68 65 20  ing rows.in the 
b910: 74 61 62 6c 65 2e 0a 5e 4d 69 73 73 69 6e 67 20  table..^Missing 
b920: 76 61 6c 75 65 73 20 61 74 20 74 68 65 20 65 6e  values at the en
b930: 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
b940: 61 72 65 20 66 69 6c 6c 65 64 20 69 6e 20 75 73  are filled in us
b950: 69 6e 67 20 74 68 65 0a 5b 64 65 66 61 75 6c 74  ing the.[default
b960: 20 76 61 6c 75 65 5d 20 66 6f 72 20 74 68 65 20   value] for the 
b970: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f  corresponding co
b980: 6c 75 6d 6e 73 20 64 65 66 69 6e 65 64 20 69 6e  lumns defined in
b990: 20 74 68 65 20 74 61 62 6c 65 20 73 63 68 65 6d   the table schem
b9a0: 61 2e 0a 3c 2f 70 3e 0a 0a 0a 3c 68 32 3e 52 65  a..</p>...<h2>Re
b9b0: 63 6f 72 64 20 53 6f 72 74 20 4f 72 64 65 72 3c  cord Sort Order<
b9c0: 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 6f 72 64  /h2>..<p>The ord
b9d0: 65 72 20 6f 66 20 6b 65 79 73 20 69 6e 20 61 6e  er of keys in an
b9e0: 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20 69 73   index b-tree is
b9f0: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
ba00: 68 65 20 73 6f 72 74 20 6f 72 64 65 72 20 6f 66  he sort order of
ba10: 0a 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61  .the records tha
ba20: 74 20 74 68 65 20 6b 65 79 73 20 72 65 70 72 65  t the keys repre
ba30: 73 65 6e 74 2e 20 20 52 65 63 6f 72 64 20 63 6f  sent.  Record co
ba40: 6d 70 61 72 69 73 6f 6e 20 70 72 6f 67 72 65 73  mparison progres
ba50: 73 65 73 20 63 6f 6c 75 6d 6e 0a 62 79 20 63 6f  ses column.by co
ba60: 6c 75 6d 6e 2e 20 20 43 6f 6c 75 6d 6e 73 20 6f  lumn.  Columns o
ba70: 66 20 61 20 72 65 63 6f 72 64 20 61 72 65 20 65  f a record are e
ba80: 78 61 6d 69 6e 65 64 20 66 72 6f 6d 20 6c 65 66  xamined from lef
ba90: 74 20 74 6f 20 72 69 67 68 74 2e 20 20 54 68 65  t to right.  The
baa0: 0a 66 69 72 73 74 20 70 61 69 72 20 6f 66 20 63  .first pair of c
bab0: 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20  olumns that are 
bac0: 6e 6f 74 20 65 71 75 61 6c 20 64 65 74 65 72 6d  not equal determ
bad0: 69 6e 65 73 20 74 68 65 20 72 65 6c 61 74 69 76  ines the relativ
bae0: 65 20 6f 72 64 65 72 0a 6f 66 20 74 68 65 20 74  e order.of the t
baf0: 77 6f 20 72 65 63 6f 72 64 73 2e 20 20 54 68 65  wo records.  The
bb00: 20 73 6f 72 74 20 6f 72 64 65 72 20 6f 66 20 69   sort order of i
bb10: 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
bb20: 73 20 69 73 20 61 73 0a 66 6f 6c 6c 6f 77 73 3a  s is as.follows:
bb30: 3c 2f 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 5e  </p>..<ol>.<li>^
bb40: 28 4e 55 4c 4c 20 76 61 6c 75 65 73 20 28 73 65  (NULL values (se
bb50: 72 69 61 6c 20 74 79 70 65 20 30 29 20 73 6f 72  rial type 0) sor
bb60: 74 20 66 69 72 73 74 2e 29 5e 0a 3c 6c 69 3e 5e  t first.)^.<li>^
bb70: 28 4e 75 6d 65 72 69 63 20 76 61 6c 75 65 73 20  (Numeric values 
bb80: 28 73 65 72 69 61 6c 20 74 79 70 65 73 20 31 20  (serial types 1 
bb90: 74 68 72 6f 75 67 68 20 39 29 20 73 6f 72 74 20  through 9) sort 
bba0: 61 66 74 65 72 20 4e 55 4c 4c 73 0a 20 20 20 20  after NULLs.    
bbb0: 20 20 61 6e 64 20 69 6e 20 6e 75 6d 65 72 69 63    and in numeric
bbc0: 20 6f 72 64 65 72 2e 29 5e 0a 3c 6c 69 3e 5e 28   order.)^.<li>^(
bbd0: 54 65 78 74 20 76 61 6c 75 65 73 20 28 6f 64 64  Text values (odd
bbe0: 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 31 33   serial types 13
bbf0: 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73 6f 72   and larger) sor
bc00: 74 20 61 66 74 65 72 20 6e 75 6d 65 72 69 63 0a  t after numeric.
bc10: 20 20 20 20 76 61 6c 75 65 73 20 69 6e 20 74 68      values in th
bc20: 65 20 6f 72 64 65 72 20 64 65 74 65 72 6d 69 6e  e order determin
bc30: 65 64 20 62 79 20 74 68 65 20 63 6f 6c 75 6d 6e  ed by the column
bc40: 73 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  s [collating fun
bc50: 63 74 69 6f 6e 5d 2e 29 5e 0a 3c 6c 69 3e 5e 28  ction].)^.<li>^(
bc60: 42 4c 4f 42 20 76 61 6c 75 65 73 20 28 65 76 65  BLOB values (eve
bc70: 6e 20 73 65 72 69 61 6c 20 74 79 70 65 73 20 31  n serial types 1
bc80: 32 20 61 6e 64 20 6c 61 72 67 65 72 29 20 73 6f  2 and larger) so
bc90: 72 74 20 6c 61 73 74 20 61 6e 64 20 69 6e 20 74  rt last and in t
bca0: 68 65 20 6f 72 64 65 72 20 0a 20 20 20 20 64 65  he order .    de
bcb0: 74 65 72 6d 69 6e 65 64 20 62 79 20 6d 65 6d 63  termined by memc
bcc0: 6d 70 28 29 2e 29 5e 0a 3c 2f 6f 6c 3e 0a 0a 3c  mp().)^.</ol>..<
bcd0: 70 3e 41 20 5b 63 6f 6c 6c 61 74 69 6e 67 20 66  p>A [collating f
bce0: 75 6e 63 74 69 6f 6e 5d 20 66 6f 72 20 65 61 63  unction] for eac
bcf0: 68 20 63 6f 6c 75 6d 6e 20 69 73 20 6e 65 63 65  h column is nece
bd00: 73 73 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  ssary in order t
bd10: 6f 20 63 6f 6d 70 75 74 65 0a 74 68 65 20 6f 72  o compute.the or
bd20: 64 65 72 20 6f 66 20 74 65 78 74 20 66 69 65 6c  der of text fiel
bd30: 64 73 2e 0a 5e 28 53 51 4c 69 74 65 20 64 65 66  ds..^(SQLite def
bd40: 69 6e 65 73 20 74 68 72 65 65 20 62 75 69 6c 74  ines three built
bd50: 2d 69 6e 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  -in collating fu
bd60: 6e 63 74 69 6f 6e 73 3a 29 5e 0a 3c 2f 70 3e 0a  nctions:)^.</p>.
bd70: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 74 61  .<blockquote><ta
bd80: 62 6c 65 20 62 6f 72 64 65 72 3d 30 20 63 65 6c  ble border=0 cel
bd90: 6c 73 70 61 63 69 6e 67 3d 31 30 3e 0a 3c 74 72  lspacing=10>.<tr
bda0: 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 3e  ><td valign=top>
bdb0: 42 49 4e 41 52 59 0a 20 20 20 20 3c 74 64 3e 20  BINARY.    <td> 
bdc0: 5e 28 54 68 65 20 62 75 69 6c 74 2d 69 6e 20 42  ^(The built-in B
bdd0: 49 4e 41 52 59 20 63 6f 6c 6c 61 74 69 6f 6e 20  INARY collation 
bde0: 63 6f 6d 70 61 72 65 73 20 73 74 72 69 6e 67 73  compares strings
bdf0: 20 62 79 74 65 20 62 79 20 62 79 74 65 0a 20 20   byte by byte.  
be00: 20 20 20 20 20 20 75 73 69 6e 67 20 74 68 65 20        using the 
be10: 6d 65 6d 63 6d 70 28 29 20 66 75 6e 63 74 69 6f  memcmp() functio
be20: 6e 0a 20 20 20 20 20 20 20 20 66 72 6f 6d 20 74  n.        from t
be30: 68 65 20 73 74 61 6e 64 61 72 64 20 43 20 6c 69  he standard C li
be40: 62 72 61 72 79 2e 29 5e 0a 3c 74 72 3e 3c 74 64  brary.)^.<tr><td
be50: 20 76 61 6c 69 67 6e 3d 74 6f 70 3e 4e 4f 43 41   valign=top>NOCA
be60: 53 45 0a 20 20 20 20 3c 74 64 3e 20 5e 28 54 68  SE.    <td> ^(Th
be70: 65 20 4e 4f 43 41 53 45 20 63 6f 6c 6c 61 74 69  e NOCASE collati
be80: 6f 6e 20 69 73 20 6c 69 6b 65 20 42 49 4e 41 52  on is like BINAR
be90: 59 20 65 78 63 65 70 74 20 74 68 61 74 20 75 70  Y except that up
bea0: 70 65 72 63 61 73 65 0a 20 20 20 20 20 20 20 20  percase.        
beb0: 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
bec0: 20 28 27 41 27 20 74 68 72 6f 75 67 68 20 27 5a   ('A' through 'Z
bed0: 27 29 0a 20 20 20 20 20 20 20 20 61 72 65 20 66  ').        are f
bee0: 6f 6c 64 65 64 20 69 6e 74 6f 20 74 68 65 69 72  olded into their
bef0: 20 6c 6f 77 65 72 63 61 73 65 20 65 71 75 69 76   lowercase equiv
bf00: 61 6c 65 6e 74 73 20 70 72 69 6f 72 20 74 6f 20  alents prior to 
bf10: 72 75 6e 6e 69 6e 67 20 74 68 65 0a 20 20 20 20  running the.    
bf20: 20 20 20 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20      comparison. 
bf30: 20 4f 6e 6c 79 20 41 53 43 49 49 20 63 68 61 72   Only ASCII char
bf40: 61 63 74 65 72 73 20 61 72 65 20 63 61 73 65 2d  acters are case-
bf50: 66 6f 6c 64 65 64 2e 29 5e 0a 20 20 20 20 20 20  folded.)^.      
bf60: 20 20 5e 28 4e 4f 43 41 53 45 0a 20 20 20 20 20    ^(NOCASE.     
bf70: 20 20 20 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c     does not impl
bf80: 65 6d 65 6e 74 20 61 20 67 65 6e 65 72 61 6c 20  ement a general 
bf90: 70 75 72 70 6f 73 65 20 75 6e 69 63 6f 64 65 20  purpose unicode 
bfa0: 63 61 73 65 6c 65 73 73 20 63 6f 6d 70 61 72 69  caseless compari
bfb0: 73 6f 6e 2e 29 5e 0a 3c 74 72 3e 3c 74 64 20 76  son.)^.<tr><td v
bfc0: 61 6c 69 67 6e 3d 74 6f 70 3e 52 54 52 49 4d 0a  align=top>RTRIM.
bfd0: 20 20 20 20 3c 74 64 3e 20 5e 28 52 54 52 49 4d      <td> ^(RTRIM
bfe0: 20 69 73 20 6c 69 6b 65 20 42 49 4e 41 52 59 20   is like BINARY 
bff0: 65 78 63 65 70 74 20 74 68 61 74 20 65 78 74 72  except that extr
c000: 61 20 73 70 61 63 65 73 20 61 74 20 74 68 65 20  a spaces at the 
c010: 65 6e 64 20 6f 66 20 65 69 74 68 65 72 0a 20 20  end of either.  
c020: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 6f         string do
c030: 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20   not change the 
c040: 72 65 73 75 6c 74 2e 20 20 49 6e 20 6f 74 68 65  result.  In othe
c050: 72 20 77 6f 72 64 73 2c 20 73 74 72 69 6e 67 73  r words, strings
c060: 20 77 69 6c 6c 0a 20 20 20 20 20 20 20 20 20 63   will.         c
c070: 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f 20  ompare equal to 
c080: 6f 6e 65 20 61 6e 6f 74 68 65 72 20 61 73 20 6c  one another as l
c090: 6f 6e 67 20 61 73 20 74 68 65 79 0a 20 20 20 20  ong as they.    
c0a0: 20 20 20 20 20 64 69 66 66 65 72 20 6f 6e 6c 79       differ only
c0b0: 20 69 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   in the number o
c0c0: 66 20 73 70 61 63 65 73 20 61 74 20 74 68 65 20  f spaces at the 
c0d0: 65 6e 64 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e 3c  end.)^.</table><
c0e0: 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
c0f0: 3e 5e 41 64 64 69 74 69 6f 6e 61 6c 20 61 70 70  >^Additional app
c100: 6c 69 63 61 74 69 6f 6e 2d 73 70 65 63 69 66 69  lication-specifi
c110: 63 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  c collating func
c120: 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 61 64 64  tions can be add
c130: 65 64 20 74 6f 0a 53 51 4c 69 74 65 20 75 73 69  ed to.SQLite usi
c140: 6e 67 20 74 68 65 20 5b 73 71 6c 69 74 65 33 5f  ng the [sqlite3_
c150: 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
c160: 28 29 5d 20 69 6e 74 65 72 66 61 63 65 2e 3c 2f  ()] interface.</
c170: 70 3e 0a 0a 3c 70 3e 5e 54 68 65 20 64 65 66 61  p>..<p>^The defa
c180: 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ult collating fu
c190: 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6c 6c 20 73  nction for all s
c1a0: 74 72 69 6e 67 73 20 69 73 20 42 49 4e 41 52 59  trings is BINARY
c1b0: 2e 0a 5e 41 6c 74 65 72 6e 61 74 69 76 65 20 63  ..^Alternative c
c1c0: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
c1d0: 6e 73 20 66 6f 72 20 74 61 62 6c 65 20 63 6f 6c  ns for table col
c1e0: 75 6d 6e 73 20 63 61 6e 20 62 65 20 73 70 65 63  umns can be spec
c1f0: 69 66 69 65 64 20 69 6e 20 74 68 65 0a 5b 43 52  ified in the.[CR
c200: 45 41 54 45 20 54 41 42 4c 45 5d 20 73 74 61 74  EATE TABLE] stat
c210: 65 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 20  ement using the 
c220: 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20 6f  COLLATE clause o
c230: 6e 20 74 68 65 20 5b 63 6f 6c 75 6d 6e 20 64 65  n the [column de
c240: 66 69 6e 69 74 69 6f 6e 5d 2e 0a 5e 57 68 65 6e  finition]..^When
c250: 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 69 6e 64   a column is ind
c260: 65 78 65 64 2c 20 74 68 65 20 73 61 6d 65 20 63  exed, the same c
c270: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
c280: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74  n specified in t
c290: 68 65 0a 5b 43 52 45 41 54 45 20 54 41 42 4c 45  he.[CREATE TABLE
c2a0: 5d 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 75  ] statement is u
c2b0: 73 65 64 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  sed for the colu
c2c0: 6d 6e 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2c  mn in the index,
c2d0: 20 62 79 20 64 65 66 61 75 6c 74 2c 0a 74 68 6f   by default,.tho
c2e0: 75 67 68 20 74 68 69 73 20 63 61 6e 20 62 65 20  ugh this can be 
c2f0: 6f 76 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67  overridden using
c300: 20 61 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73   a COLLATE claus
c310: 65 20 69 6e 20 74 68 65 20 0a 5b 43 52 45 41 54  e in the .[CREAT
c320: 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65  E INDEX] stateme
c330: 6e 74 2e 0a 0a 3c 68 32 3e 52 65 70 72 65 73 65  nt...<h2>Represe
c340: 6e 74 61 74 69 6f 6e 20 4f 66 20 53 51 4c 20 54  ntation Of SQL T
c350: 61 62 6c 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 20  ables</h2>..<p> 
c360: 5e 45 61 63 68 20 6f 72 64 69 6e 61 72 79 20 53  ^Each ordinary S
c370: 51 4c 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  QL table in the 
c380: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
c390: 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 6f  is represented o
c3a0: 6e 2d 64 69 73 6b 0a 62 79 20 61 20 74 61 62 6c  n-disk.by a tabl
c3b0: 65 20 62 2d 74 72 65 65 2e 20 20 5e 45 61 63 68  e b-tree.  ^Each
c3c0: 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61   entry in the ta
c3d0: 62 6c 65 20 62 2d 74 72 65 65 20 63 6f 72 72 65  ble b-tree corre
c3e0: 73 70 6f 6e 64 73 20 74 6f 20 61 20 72 6f 77 0a  sponds to a row.
c3f0: 6f 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65  of the SQL table
c400: 2e 20 20 5e 54 68 65 20 5b 72 6f 77 69 64 5d 20  .  ^The [rowid] 
c410: 6f 66 20 74 68 65 20 53 51 4c 20 74 61 62 6c 65  of the SQL table
c420: 20 69 73 20 74 68 65 20 36 34 2d 62 69 74 20 73   is the 64-bit s
c430: 69 67 6e 65 64 0a 69 6e 74 65 67 65 72 20 6b 65  igned.integer ke
c440: 79 20 66 6f 72 20 65 61 63 68 20 65 6e 74 72 79  y for each entry
c450: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 2d   in the table b-
c460: 74 72 65 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e  tree.</p>..<p> ^
c470: 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 65  The content of e
c480: 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 72 6f  ach SQL table ro
c490: 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  w is stored in t
c4a0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
c4b0: 20 62 79 0a 66 69 72 73 74 20 63 6f 6d 62 69 6e   by.first combin
c4c0: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 69  ing the values i
c4d0: 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f  n the various co
c4e0: 6c 75 6d 6e 73 20 69 6e 74 6f 20 61 20 62 79 74  lumns into a byt
c4f0: 65 20 61 72 72 61 79 0a 69 6e 20 74 68 65 20 72  e array.in the r
c500: 65 63 6f 72 64 20 66 6f 72 6d 61 74 2c 20 74 68  ecord format, th
c510: 65 6e 20 73 74 6f 72 69 6e 67 20 74 68 61 74 20  en storing that 
c520: 62 79 74 65 20 61 72 72 61 79 20 61 73 20 74 68  byte array as th
c530: 65 20 70 61 79 6c 6f 61 64 20 69 6e 0a 61 6e 20  e payload in.an 
c540: 65 6e 74 72 79 20 69 6e 20 74 68 65 20 74 61 62  entry in the tab
c550: 6c 65 20 62 2d 74 72 65 65 2e 20 20 5e 54 68 65  le b-tree.  ^The
c560: 20 6f 72 64 65 72 20 6f 66 20 76 61 6c 75 65 73   order of values
c570: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   in the record i
c580: 73 0a 74 68 65 20 73 61 6d 65 20 61 73 20 74 68  s.the same as th
c590: 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6c 75 6d  e order of colum
c5a0: 6e 73 20 69 6e 20 74 68 65 20 53 51 4c 20 74 61  ns in the SQL ta
c5b0: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a  ble definition..
c5c0: 5e 57 68 65 6e 20 61 6e 20 53 51 4c 20 74 61 62  ^When an SQL tab
c5d0: 6c 65 20 69 6e 63 6c 75 64 65 73 20 61 6e 0a 5b  le includes an.[
c5e0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
c5f0: 4b 45 59 5d 20 63 6f 6c 75 6d 6e 20 28 77 68 69  KEY] column (whi
c600: 63 68 20 61 6c 69 61 73 65 73 20 74 68 65 20 5b  ch aliases the [
c610: 72 6f 77 69 64 5d 29 20 74 68 65 6e 20 74 68 61  rowid]) then tha
c620: 74 0a 63 6f 6c 75 6d 6e 20 61 70 70 65 61 72 73  t.column appears
c630: 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
c640: 73 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20  s a NULL value. 
c650: 20 5e 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c   ^SQLite will al
c660: 77 61 79 73 20 75 73 65 0a 74 68 65 20 74 61 62  ways use.the tab
c670: 6c 65 20 62 2d 74 72 65 65 20 6b 65 79 20 72 61  le b-tree key ra
c680: 74 68 65 72 20 74 68 61 6e 20 74 68 65 20 4e 55  ther than the NU
c690: 4c 4c 20 76 61 6c 75 65 20 77 68 65 6e 20 72 65  LL value when re
c6a0: 66 65 72 65 6e 63 69 6e 67 20 74 68 65 0a 5b 49  ferencing the.[I
c6b0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
c6c0: 45 59 5d 20 63 6f 6c 75 6d 6e 2e 3c 2f 70 3e 0a  EY] column.</p>.
c6d0: 0a 3c 70 3e 20 5e 49 66 20 74 68 65 20 5b 61 66  .<p> ^If the [af
c6e0: 66 69 6e 69 74 79 5d 20 6f 66 20 61 20 63 6f 6c  finity] of a col
c6f0: 75 6d 6e 20 69 73 20 52 45 41 4c 20 61 6e 64 20  umn is REAL and 
c700: 74 68 61 74 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74  that column cont
c710: 61 69 6e 73 20 61 0a 76 61 6c 75 65 20 74 68 61  ains a.value tha
c720: 74 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 72 74  t can be convert
c730: 65 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ed to an integer
c740: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
c750: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 28 69 66   information.(if
c760: 20 74 68 65 20 76 61 6c 75 65 20 63 6f 6e 74 61   the value conta
c770: 69 6e 73 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61  ins no fractiona
c780: 6c 20 70 61 72 74 20 61 6e 64 20 69 73 20 6e 6f  l part and is no
c790: 74 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 62  t too large to b
c7a0: 65 0a 72 65 70 72 65 73 65 6e 74 65 64 20 61 73  e.represented as
c7b0: 20 61 6e 20 69 6e 74 65 67 65 72 29 20 74 68 65   an integer) the
c7c0: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 61 79  n the column may
c7d0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68   be stored in th
c7e0: 65 20 72 65 63 6f 72 64 0a 61 73 20 61 6e 20 69  e record.as an i
c7f0: 6e 74 65 67 65 72 2e 20 20 5e 53 51 4c 69 74 65  nteger.  ^SQLite
c800: 20 77 69 6c 6c 20 63 6f 6e 76 65 72 74 20 74 68   will convert th
c810: 65 20 76 61 6c 75 65 20 62 61 63 6b 20 74 6f 20  e value back to 
c820: 66 6c 6f 61 74 69 6e 67 0a 70 6f 69 6e 74 20 77  floating.point w
c830: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
c840: 74 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  t from the recor
c850: 64 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 52 65 70 72  d.</p>..<h2>Repr
c860: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 57 49  esentation of WI
c870: 54 48 4f 55 54 20 52 4f 57 49 44 20 54 61 62 6c  THOUT ROWID Tabl
c880: 65 73 3c 2f 68 32 3e 0a 0a 3c 70 3e 5e 49 66 20  es</h2>..<p>^If 
c890: 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  an SQL table is 
c8a0: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
c8b0: 65 20 22 57 49 54 48 4f 55 54 20 52 4f 57 49 44  e "WITHOUT ROWID
c8c0: 22 20 63 6c 61 75 73 65 20 61 74 20 74 68 65 0a  " clause at the.
c8d0: 65 6e 64 20 6f 66 20 69 74 73 20 43 52 45 41 54  end of its CREAT
c8e0: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
c8f0: 74 2c 20 74 68 65 6e 20 74 68 61 74 20 74 61 62  t, then that tab
c900: 6c 65 20 69 73 20 61 20 5b 57 49 54 48 4f 55 54  le is a [WITHOUT
c910: 20 52 4f 57 49 44 5d 0a 74 61 62 6c 65 20 61 6e   ROWID].table an
c920: 64 20 75 73 65 73 20 61 20 64 69 66 66 65 72 65  d uses a differe
c930: 6e 74 20 6f 6e 2d 64 69 73 6b 20 72 65 70 72 65  nt on-disk repre
c940: 73 65 6e 74 61 74 69 6f 6e 2e 20 20 5e 41 20 57  sentation.  ^A W
c950: 49 54 48 4f 55 54 20 52 4f 57 49 44 0a 74 61 62  ITHOUT ROWID.tab
c960: 6c 65 20 75 73 65 73 20 61 6e 20 69 6e 64 65 78  le uses an index
c970: 20 62 2d 74 72 65 65 20 72 61 74 68 65 72 20 74   b-tree rather t
c980: 68 61 6e 20 61 20 74 61 62 6c 65 20 62 2d 74 72  han a table b-tr
c990: 65 65 20 66 6f 72 20 73 74 6f 72 61 67 65 2e 0a  ee for storage..
c9a0: 5e 54 68 65 20 6b 65 79 20 66 6f 72 20 65 61 63  ^The key for eac
c9b0: 68 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 57  h entry in the W
c9c0: 49 54 48 4f 55 54 20 52 4f 57 49 44 20 62 2d 74  ITHOUT ROWID b-t
c9d0: 72 65 65 20 69 73 20 61 20 72 65 63 6f 72 64 20  ree is a record 
c9e0: 63 6f 6d 70 6f 73 65 64 0a 6f 66 20 74 68 65 20  composed.of the 
c9f0: 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 50  columns of the P
ca00: 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 6c 6c 6f  RIMARY KEY follo
ca10: 77 65 64 20 62 79 20 61 6c 6c 20 72 65 6d 61 69  wed by all remai
ca20: 6e 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a  ning columns of.
ca30: 74 68 65 20 74 61 62 6c 65 2e 20 20 5e 54 68 65  the table.  ^The
ca40: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c   primary key col
ca50: 75 6d 6e 73 20 61 70 70 65 61 72 20 69 6e 20 74  umns appear in t
ca60: 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 74 68  he order they th
ca70: 65 79 20 77 65 72 65 0a 64 65 63 6c 61 72 65 64  ey were.declared
ca80: 20 69 6e 20 74 68 65 20 50 52 49 4d 41 52 59 20   in the PRIMARY 
ca90: 4b 45 59 20 63 6c 61 75 73 65 20 61 6e 64 20 74  KEY clause and t
caa0: 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 63 6f 6c  he remaining col
cab0: 75 6d 6e 73 20 61 70 70 65 61 72 20 69 6e 0a 74  umns appear in.t
cac0: 68 65 20 6f 72 64 65 72 20 74 68 65 79 20 6f 63  he order they oc
cad0: 63 75 72 20 69 6e 20 74 68 65 20 43 52 45 41 54  cur in the CREAT
cae0: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
caf0: 74 2e 0a 0a 3c 70 3e 5e 48 65 6e 63 65 2c 20 74  t...<p>^Hence, t
cb00: 68 65 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f 64  he content encod
cb10: 69 6e 67 20 66 6f 72 20 61 20 57 49 54 48 4f 55  ing for a WITHOU
cb20: 54 20 52 4f 57 49 44 20 74 61 62 6c 65 20 69 73  T ROWID table is
cb30: 20 74 68 65 20 73 61 6d 65 0a 61 73 20 74 68 65   the same.as the
cb40: 20 63 6f 6e 74 65 6e 74 20 65 6e 63 6f 64 69 6e   content encodin
cb50: 67 20 66 6f 72 20 61 6e 20 6f 72 64 69 6e 61 72  g for an ordinar
cb60: 79 20 72 6f 77 69 64 20 74 61 62 6c 65 2c 20 65  y rowid table, e
cb70: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 0a 6f  xcept that the.o
cb80: 72 64 65 72 20 6f 66 20 74 68 65 20 63 6f 6c 75  rder of the colu
cb90: 6d 6e 73 20 69 73 20 72 65 61 72 72 61 6e 67 65  mns is rearrange
cba0: 64 20 73 6f 20 74 68 61 74 20 50 52 49 4d 41 52  d so that PRIMAR
cbb0: 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 63 6f  Y KEY columns co
cbc0: 6d 65 0a 66 69 72 73 74 2c 20 61 6e 64 20 74 68  me.first, and th
cbd0: 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 75 73 65  e content is use
cbe0: 64 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20  d as the key in 
cbf0: 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65 20  an index b-tree 
cc00: 72 61 74 68 65 72 0a 74 68 61 6e 20 61 73 20 74  rather.than as t
cc10: 68 65 20 64 61 74 61 20 69 6e 20 61 20 74 61 62  he data in a tab
cc20: 6c 65 20 62 2d 74 72 65 65 2e 0a 5e 54 68 65 20  le b-tree..^The 
cc30: 73 70 65 63 69 61 6c 20 65 6e 63 6f 64 69 6e 67  special encoding
cc40: 20 72 75 6c 65 73 20 66 6f 72 20 63 6f 6c 75 6d   rules for colum
cc50: 6e 73 20 77 69 74 68 20 52 45 41 4c 20 61 66 66  ns with REAL aff
cc60: 69 6e 69 74 79 0a 61 70 70 6c 79 20 74 6f 20 57  inity.apply to W
cc70: 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62  ITHOUT ROWID tab
cc80: 6c 65 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  les the same as 
cc90: 74 68 65 79 20 64 6f 20 77 69 74 68 20 72 6f 77  they do with row
cca0: 69 64 20 74 61 62 6c 65 73 2e 0a 0a 3c 68 32 3e  id tables...<h2>
ccb0: 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 4f  Representation O
ccc0: 66 20 53 51 4c 20 49 6e 64 69 63 65 73 3c 2f 68  f SQL Indices</h
ccd0: 32 3e 0a 0a 3c 70 3e 5e 45 61 63 68 20 53 51 4c  2>..<p>^Each SQL
cce0: 20 69 6e 64 65 78 2c 20 77 68 65 74 68 65 72 20   index, whether 
ccf0: 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61  explicitly decla
cd00: 72 65 64 20 76 69 61 20 61 20 5b 43 52 45 41 54  red via a [CREAT
cd10: 45 20 49 4e 44 45 58 5d 20 73 74 61 74 65 6d 65  E INDEX] stateme
cd20: 6e 74 0a 6f 72 20 69 6d 70 6c 69 65 64 20 62 79  nt.or implied by
cd30: 20 61 20 55 4e 49 51 55 45 20 6f 72 20 50 52 49   a UNIQUE or PRI
cd40: 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
cd50: 69 6e 74 2c 20 63 6f 72 72 65 73 70 6f 6e 64 73  int, corresponds
cd60: 20 74 6f 20 61 6e 20 0a 69 6e 64 65 78 20 62 2d   to an .index b-
cd70: 74 72 65 65 20 69 6e 20 74 68 65 20 64 61 74 61  tree in the data
cd80: 62 61 73 65 20 66 69 6c 65 2e 0a 5e 45 61 63 68  base file..^Each
cd90: 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 69 6e   entry in the in
cda0: 64 65 78 20 62 2d 74 72 65 65 20 63 6f 72 72 65  dex b-tree corre
cdb0: 73 70 6f 6e 64 73 20 74 6f 20 61 20 73 69 6e 67  sponds to a sing
cdc0: 6c 65 20 72 6f 77 20 69 6e 20 74 68 65 20 0a 61  le row in the .a
cdd0: 73 73 6f 63 69 61 74 65 64 20 53 51 4c 20 74 61  ssociated SQL ta
cde0: 62 6c 65 2e 0a 5e 54 68 65 20 6b 65 79 20 74 6f  ble..^The key to
cdf0: 20 61 6e 20 69 6e 64 65 78 20 62 2d 74 72 65 65   an index b-tree
ce00: 20 69 73 0a 61 20 72 65 63 6f 72 64 20 63 6f 6d   is.a record com
ce10: 70 6f 73 65 64 20 6f 66 20 74 68 65 20 63 6f 6c  posed of the col
ce20: 75 6d 6e 73 20 74 68 61 74 20 61 72 65 20 62 65  umns that are be
ce30: 69 6e 67 20 69 6e 64 65 78 65 64 20 66 6f 6c 6c  ing indexed foll
ce40: 6f 77 65 64 20 62 79 20 74 68 65 0a 6b 65 79 20  owed by the.key 
ce50: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
ce60: 64 69 6e 67 20 74 61 62 6c 65 20 72 6f 77 2e 20  ding table row. 
ce70: 20 46 6f 72 20 6f 72 64 69 6e 61 72 79 20 74 61   For ordinary ta
ce80: 62 6c 65 73 2c 20 74 68 65 20 72 6f 77 20 6b 65  bles, the row ke
ce90: 79 20 69 73 0a 74 68 65 20 5b 72 6f 77 69 64 5d  y is.the [rowid]
cea0: 2c 20 61 6e 64 20 66 6f 72 20 5b 57 49 54 48 4f  , and for [WITHO
ceb0: 55 54 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 73  UT ROWID] tables
cec0: 20 74 68 65 20 72 6f 77 20 6b 65 79 20 69 73 20   the row key is 
ced0: 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
cee0: 0a 42 65 63 61 75 73 65 20 65 76 65 72 79 20 72  .Because every r
cef0: 6f 77 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ow in the table 
cf00: 68 61 73 20 61 20 75 6e 69 71 75 65 20 72 6f 77  has a unique row
cf10: 20 6b 65 79 2c 0a 61 6c 6c 20 6b 65 79 73 20 69   key,.all keys i
cf20: 6e 20 61 6e 20 69 6e 64 65 78 20 61 72 65 20 75  n an index are u
cf30: 6e 69 71 75 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e  nique.</p>..<p>^
cf40: 49 6e 20 61 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  In a normal inde
cf50: 78 2c 20 74 68 65 72 65 20 69 73 20 61 20 6f 6e  x, there is a on
cf60: 65 2d 74 6f 2d 6f 6e 65 20 6d 61 70 70 69 6e 67  e-to-one mapping
cf70: 20 62 65 74 77 65 65 6e 20 72 6f 77 73 20 69 6e   between rows in
cf80: 20 61 20 0a 74 61 62 6c 65 20 61 6e 64 20 65 6e   a .table and en
cf90: 74 72 69 65 73 20 69 6e 20 65 61 63 68 20 69 6e  tries in each in
cfa0: 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
cfb0: 69 74 68 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  ith that table..
cfc0: 5e 48 6f 77 65 76 65 72 2c 20 69 6e 20 61 20 5b  ^However, in a [
cfd0: 70 61 72 74 69 61 6c 20 69 6e 64 65 78 5d 2c 20  partial index], 
cfe0: 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72 65 65  the index b-tree
cff0: 20 6f 6e 6c 79 20 63 6f 6e 74 61 69 6e 73 20 65   only contains e
d000: 6e 74 72 69 65 73 0a 63 6f 72 72 65 73 70 6f 6e  ntries.correspon
d010: 64 69 6e 67 20 74 6f 20 74 61 62 6c 65 20 72 6f  ding to table ro
d020: 77 73 20 66 6f 72 20 77 68 69 63 68 20 74 68 65  ws for which the
d030: 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 65 78   WHERE clause ex
d040: 70 72 65 73 73 69 6f 6e 20 6f 6e 20 74 68 65 0a  pression on the.
d050: 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
d060: 74 65 6d 65 6e 74 20 69 73 20 74 72 75 65 2e 0a  tement is true..
d070: 5e 43 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 72  ^Corresponding r
d080: 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ows in the index
d090: 20 61 6e 64 20 74 61 62 6c 65 20 62 2d 74 72 65   and table b-tre
d0a0: 65 73 20 73 68 61 72 65 20 74 68 65 20 73 61 6d  es share the sam
d0b0: 65 20 72 6f 77 69 64 0a 6f 72 20 70 72 69 6d 61  e rowid.or prima
d0c0: 72 79 20 6b 65 79 20 76 61 6c 75 65 73 20 61 6e  ry key values an
d0d0: 64 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61  d contain the sa
d0e0: 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 61 6c 6c  me value for all
d0f0: 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
d100: 2e 3c 2f 70 3e 0a 0a 3c 68 33 3e 53 75 70 70 72  .</p>..<h3>Suppr
d110: 65 73 73 69 6f 6e 20 6f 66 20 72 65 64 75 6e 64  ession of redund
d120: 61 6e 74 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 57  ant columns in W
d130: 49 54 48 4f 55 54 20 52 4f 57 49 44 20 73 65 63  ITHOUT ROWID sec
d140: 6f 6e 64 61 72 79 20 69 6e 64 65 78 65 64 0a 3c  ondary indexed.<
d150: 2f 68 33 3e 0a 0a 3c 70 3e 20 5e 49 6e 20 61 6e  /h3>..<p> ^In an
d160: 20 69 6e 64 65 78 20 6f 6e 20 61 20 57 49 54 48   index on a WITH
d170: 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2c  OUT ROWID table,
d180: 20 69 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20   if one or more 
d190: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 0a 6f  of the columns.o
d1a0: 66 20 74 68 65 20 74 61 62 6c 65 20 50 52 49 4d  f the table PRIM
d1b0: 41 52 59 20 4b 45 59 20 61 72 65 20 61 6c 73 6f  ARY KEY are also
d1c0: 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
d1d0: 69 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65 0a  index, then the.
d1e0: 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69  indexed column i
d1f0: 73 20 6e 6f 74 20 72 65 70 65 61 74 65 64 20 69  s not repeated i
d200: 6e 20 74 68 65 20 74 61 62 6c 65 2d 6b 65 79 20  n the table-key 
d210: 73 75 66 66 69 78 20 6f 6e 20 74 68 65 20 65 6e  suffix on the en
d220: 64 20 6f 66 0a 74 68 65 20 69 6e 64 65 78 20 72  d of.the index r
d230: 65 63 6f 72 64 2e 20 20 5e 28 41 73 20 61 6e 20  ecord.  ^(As an 
d240: 65 78 61 6d 70 6c 65 2c 20 63 6f 6e 73 69 64 65  example, conside
d250: 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  r the following 
d260: 53 51 4c 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  SQL:..<blockquot
d270: 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54  e><pre>.CREATE T
d280: 41 42 4c 45 20 65 78 32 35 28 61 2c 62 2c 63 2c  ABLE ex25(a,b,c,
d290: 64 2c 65 2c 50 52 49 4d 41 52 59 20 4b 45 59 28  d,e,PRIMARY KEY(
d2a0: 64 2c 63 2c 61 29 29 20 57 49 54 48 4f 55 54 20  d,c,a)) WITHOUT 
d2b0: 72 6f 77 69 64 3b 0a 43 52 45 41 54 45 20 49 4e  rowid;.CREATE IN
d2c0: 44 45 58 20 65 78 32 35 63 65 20 4f 4e 20 65 78  DEX ex25ce ON ex
d2d0: 32 35 28 63 2c 65 29 3b 0a 43 52 45 41 54 45 20  25(c,e);.CREATE 
d2e0: 49 4e 44 45 58 20 65 78 32 35 61 63 64 65 20 4f  INDEX ex25acde O
d2f0: 4e 20 65 78 32 35 28 61 2c 63 2c 64 2c 65 29 3b  N ex25(a,c,d,e);
d300: 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75  .</pre></blockqu
d310: 6f 74 65 3e 0a 0a 3c 70 3e 45 61 63 68 20 72 6f  ote>..<p>Each ro
d320: 77 20 69 6e 20 74 68 65 20 65 78 32 35 63 65 20  w in the ex25ce 
d330: 69 6e 64 65 78 20 69 73 20 61 20 72 65 63 6f 72  index is a recor
d340: 64 0a 77 69 74 68 20 74 68 65 73 65 20 63 6f 6c  d.with these col
d350: 75 6d 6e 73 3a 20 63 2c 20 65 2c 20 64 2c 20 61  umns: c, e, d, a
d360: 2e 20 20 54 68 65 20 66 69 72 73 74 20 74 77 6f  .  The first two
d370: 20 63 6f 6c 75 6d 6e 73 20 61 72 65 0a 74 68 65   columns are.the
d380: 20 63 6f 6c 75 6d 6e 73 20 62 65 69 6e 67 20 69   columns being i
d390: 6e 64 65 78 65 64 2c 20 63 20 61 6e 64 20 65 2e  ndexed, c and e.
d3a0: 20 20 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20    The remaining 
d3b0: 63 6f 6c 75 6d 6e 73 20 61 72 65 20 74 68 65 20  columns are the 
d3c0: 70 72 69 6d 61 72 79 0a 6b 65 79 20 6f 66 20 74  primary.key of t
d3d0: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
d3e0: 20 74 61 62 6c 65 20 72 6f 77 2e 20 20 4e 6f 72   table row.  Nor
d3f0: 6d 61 6c 6c 79 2c 20 74 68 65 20 70 72 69 6d 61  mally, the prima
d400: 72 79 20 6b 65 79 20 77 6f 75 6c 64 20 62 65 0a  ry key would be.
d410: 63 6f 6c 75 6d 6e 73 20 64 2c 20 63 2c 20 61 6e  columns d, c, an
d420: 64 20 61 2c 20 62 75 74 20 62 65 63 61 75 73 65  d a, but because
d430: 20 63 6f 6c 75 6d 6e 20 63 20 61 6c 72 65 61 64   column c alread
d440: 79 20 61 70 70 65 61 72 73 20 65 61 72 6c 69 65  y appears earlie
d450: 72 20 69 6e 20 74 68 65 0a 69 6e 64 65 78 2c 20  r in the.index, 
d460: 69 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  it is omitted fr
d470: 6f 6d 20 74 68 65 20 6b 65 79 20 73 75 66 66 69  om the key suffi
d480: 78 2e 29 5e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 49  x.)^</p>..<p>^(I
d490: 6e 20 74 68 65 20 65 78 74 72 65 6d 65 20 63 61  n the extreme ca
d4a0: 73 65 20 77 68 65 72 65 20 74 68 65 20 63 6f 6c  se where the col
d4b0: 75 6d 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78  umns being index
d4c0: 65 64 20 63 6f 76 65 72 20 61 6c 6c 20 63 6f 6c  ed cover all col
d4d0: 75 6d 6e 73 0a 6f 66 20 74 68 65 20 50 52 49 4d  umns.of the PRIM
d4e0: 41 52 59 20 4b 45 59 2c 20 74 68 65 20 69 6e 64  ARY KEY, the ind
d4f0: 65 78 20 77 69 6c 6c 20 63 6f 6e 73 69 73 74 20  ex will consist 
d500: 6f 66 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75  of only the colu
d510: 6d 6e 73 20 62 65 69 6e 67 0a 69 6e 64 65 78 65  mns being.indexe
d520: 64 2e 20 20 54 68 65 20 65 78 32 35 61 63 64 65  d.  The ex25acde
d530: 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 64   example above d
d540: 65 6d 6f 6e 73 74 72 61 74 65 73 20 74 68 69 73  emonstrates this
d550: 2e 29 5e 20 20 5e 45 61 63 68 20 65 6e 74 72 79  .)^  ^Each entry
d560: 20 69 6e 0a 74 68 65 20 65 78 32 35 61 63 64 65   in.the ex25acde
d570: 20 69 6e 64 65 78 20 63 6f 6e 73 69 73 74 73 20   index consists 
d580: 6f 66 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6c 75  of only the colu
d590: 6d 6e 73 20 61 2c 20 63 2c 20 64 2c 20 61 6e 64  mns a, c, d, and
d5a0: 20 65 2c 20 69 6e 20 74 68 61 74 0a 6f 72 64 65   e, in that.orde
d5b0: 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 20 5e 54 68 65  r.</p>..<p> ^The
d5c0: 20 73 75 70 70 72 65 73 73 69 6f 6e 20 6f 66 20   suppression of 
d5d0: 72 65 64 75 6e 64 61 6e 74 20 63 6f 6c 75 6d 6e  redundant column
d5e0: 73 20 69 6e 20 74 68 65 20 6b 65 79 20 73 75 66  s in the key suf
d5f0: 66 69 78 20 6f 66 20 61 6e 20 69 6e 64 65 78 0a  fix of an index.
d600: 65 6e 74 72 79 20 6f 6e 6c 79 20 6f 63 63 75 72  entry only occur
d610: 73 20 69 6e 20 57 49 54 48 4f 55 54 20 52 4f 57  s in WITHOUT ROW
d620: 49 44 20 74 61 62 6c 65 73 2e 20 20 5e 49 6e 20  ID tables.  ^In 
d630: 61 6e 20 6f 72 64 69 6e 61 72 79 20 72 6f 77 69  an ordinary rowi
d640: 64 20 74 61 62 6c 65 2c 0a 74 68 65 20 69 6e 64  d table,.the ind
d650: 65 78 20 65 6e 74 72 79 20 61 6c 77 61 79 73 20  ex entry always 
d660: 65 6e 64 73 20 77 69 74 68 20 74 68 65 20 72 6f  ends with the ro
d670: 77 69 64 20 65 76 65 6e 20 69 66 20 74 68 65 20  wid even if the 
d680: 5b 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59  [INTEGER PRIMARY
d690: 20 4b 45 59 5d 0a 63 6f 6c 75 6d 6e 20 69 73 20   KEY].column is 
d6a0: 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  one of the colum
d6b0: 6e 73 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  ns being indexed
d6c0: 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
d6d0: 72 61 67 6d 65 6e 74 20 73 71 6c 69 74 65 5f 6d  ragment sqlite_m
d6e0: 61 73 74 65 72 20 7b 73 71 6c 69 74 65 5f 6d 61  aster {sqlite_ma
d6f0: 73 74 65 72 7d 20 7b 73 71 6c 69 74 65 5f 6d 61  ster} {sqlite_ma
d700: 73 74 65 72 20 74 61 62 6c 65 7d 3c 2f 74 63 6c  ster table}</tcl
d710: 3e 0a 3c 68 32 3e 53 74 6f 72 61 67 65 20 4f 66  >.<h2>Storage Of
d720: 20 54 68 65 20 53 51 4c 20 44 61 74 61 62 61 73   The SQL Databas
d730: 65 20 53 63 68 65 6d 61 3c 2f 68 32 3e 0a 0a 3c  e Schema</h2>..<
d740: 70 3e 5e 50 61 67 65 20 31 20 6f 66 20 61 20 64  p>^Page 1 of a d
d750: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
d760: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6f 66  the root page of
d770: 20 61 20 74 61 62 6c 65 20 62 2d 74 72 65 65 20   a table b-tree 
d780: 74 68 61 74 0a 68 6f 6c 64 73 20 61 20 73 70 65  that.holds a spe
d790: 63 69 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 64  cial table named
d7a0: 20 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22   "sqlite_master"
d7b0: 20 28 6f 72 20 22 73 71 6c 69 74 65 5f 74 65 6d   (or "sqlite_tem
d7c0: 70 5f 6d 61 73 74 65 72 22 20 69 6e 0a 74 68 65  p_master" in.the
d7d0: 20 63 61 73 65 20 6f 66 20 61 20 54 45 4d 50 20   case of a TEMP 
d7e0: 64 61 74 61 62 61 73 65 29 20 77 68 69 63 68 20  database) which 
d7f0: 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6d 70 6c  stores the compl
d800: 65 74 65 0a 64 61 74 61 62 61 73 65 20 73 63 68  ete.database sch
d810: 65 6d 61 2e 20 20 5e 28 54 68 65 20 73 74 72 75  ema.  ^(The stru
d820: 63 74 75 72 65 20 6f 66 20 74 68 65 20 73 71 6c  cture of the sql
d830: 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65  ite_master table
d840: 20 69 73 20 61 73 0a 69 66 20 69 74 20 68 61 64   is as.if it had
d850: 20 62 65 65 6e 20 63 72 65 61 74 65 64 20 75 73   been created us
d860: 69 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  ing the followin
d870: 67 20 53 51 4c 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  g SQL:</p>..<blo
d880: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
d890: 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74  EATE TABLE sqlit
d8a0: 65 5f 6d 61 73 74 65 72 28 0a 20 20 74 79 70 65  e_master(.  type
d8b0: 20 74 65 78 74 2c 0a 20 20 6e 61 6d 65 20 74 65   text,.  name te
d8c0: 78 74 2c 0a 20 20 74 62 6c 5f 6e 61 6d 65 20 74  xt,.  tbl_name t
d8d0: 65 78 74 2c 0a 20 20 72 6f 6f 74 70 61 67 65 20  ext,.  rootpage 
d8e0: 69 6e 74 65 67 65 72 2c 0a 20 20 73 71 6c 20 74  integer,.  sql t
d8f0: 65 78 74 0a 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62  ext.);.</pre></b
d900: 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70  lockquote>)^..<p
d910: 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  >^The sqlite_mas
d920: 74 65 72 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  ter table contai
d930: 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65  ns one row for e
d940: 61 63 68 20 74 61 62 6c 65 2c 20 69 6e 64 65 78  ach table, index
d950: 2c 20 76 69 65 77 2c 0a 61 6e 64 20 74 72 69 67  , view,.and trig
d960: 67 65 72 20 28 63 6f 6c 6c 65 63 74 69 76 65 6c  ger (collectivel
d970: 79 20 22 6f 62 6a 65 63 74 73 22 29 20 69 6e 20  y "objects") in 
d980: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
d990: 65 6d 61 2c 20 65 78 63 65 70 74 20 74 68 65 72  ema, except ther
d9a0: 65 0a 69 73 20 6e 6f 20 65 6e 74 72 79 20 66 6f  e.is no entry fo
d9b0: 72 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  r the sqlite_mas
d9c0: 74 65 72 20 74 61 62 6c 65 20 69 74 73 65 6c 66  ter table itself
d9d0: 2e 20 20 5e 54 68 65 20 73 71 6c 69 74 65 5f 6d  .  ^The sqlite_m
d9e0: 61 73 74 65 72 20 74 61 62 6c 65 0a 63 6f 6e 74  aster table.cont
d9f0: 61 69 6e 73 20 65 6e 74 72 69 65 73 20 66 6f 72  ains entries for
da00: 20 5b 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d   [internal schem
da10: 61 20 6f 62 6a 65 63 74 73 5d 20 69 6e 20 61 64  a objects] in ad
da20: 64 69 74 69 6f 6e 20 74 6f 20 61 70 70 6c 69 63  dition to applic
da30: 61 74 69 6f 6e 2d 0a 61 6e 64 20 70 72 6f 67 72  ation-.and progr
da40: 61 6d 6d 65 72 2d 64 65 66 69 6e 65 64 20 6f 62  ammer-defined ob
da50: 6a 65 63 74 73 2e 0a 0a 0a 3c 70 3e 5e 28 54 68  jects....<p>^(Th
da60: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e  e sqlite_master.
da70: 74 79 70 65 20 63 6f 6c 75 6d 6e 20 77 69 6c 6c  type column will
da80: 20 62 65 20 6f 6e 65 0a 6f 66 20 74 68 65 20 66   be one.of the f
da90: 6f 6c 6c 6f 77 69 6e 67 20 74 65 78 74 20 73 74  ollowing text st
daa0: 72 69 6e 67 73 3a 20 20 27 74 61 62 6c 65 27 2c  rings:  'table',
dab0: 20 27 69 6e 64 65 78 27 2c 20 27 76 69 65 77 27   'index', 'view'
dac0: 2c 20 6f 72 20 27 74 72 69 67 67 65 72 27 0a 61  , or 'trigger'.a
dad0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
dae0: 74 79 70 65 20 6f 66 20 6f 62 6a 65 63 74 20 64  type of object d
daf0: 65 66 69 6e 65 64 2e 20 20 54 68 65 20 27 74 61  efined.  The 'ta
db00: 62 6c 65 27 20 73 74 72 69 6e 67 20 69 73 20 75  ble' string is u
db10: 73 65 64 0a 66 6f 72 20 62 6f 74 68 20 6f 72 64  sed.for both ord
db20: 69 6e 61 72 79 20 61 6e 64 20 5b 76 69 72 74 75  inary and [virtu
db30: 61 6c 20 74 61 62 6c 65 73 5d 2e 29 5e 3c 2f 70  al tables].)^</p
db40: 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 73 71 6c 69  >..<p>^(The sqli
db50: 74 65 5f 6d 61 73 74 65 72 2e 6e 61 6d 65 20 63  te_master.name c
db60: 6f 6c 75 6d 6e 20 77 69 6c 6c 20 68 6f 6c 64 20  olumn will hold 
db70: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
db80: 6f 62 6a 65 63 74 2e 29 5e 0a 5e 28 5b 55 4e 49  object.)^.^([UNI
db90: 51 55 45 5d 20 61 6e 64 20 5b 50 52 49 4d 41 52  QUE] and [PRIMAR
dba0: 59 20 4b 45 59 5d 20 63 6f 6e 73 74 72 61 69 6e  Y KEY] constrain
dbb0: 74 73 20 6f 6e 20 74 61 62 6c 65 73 20 63 61 75  ts on tables cau
dbc0: 73 65 20 53 51 4c 69 74 65 20 74 6f 20 63 72 65  se SQLite to cre
dbd0: 61 74 65 0a 5b 69 6e 74 65 72 6e 61 6c 20 69 6e  ate.[internal in
dbe0: 64 65 78 65 73 5d 20 77 69 74 68 20 6e 61 6d 65  dexes] with name
dbf0: 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 73  s of the form "s
dc00: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
dc10: 54 41 42 4c 45 5f 4e 22 0a 77 68 65 72 65 20 54  TABLE_N".where T
dc20: 41 42 4c 45 20 69 73 20 72 65 70 6c 61 63 65 64  ABLE is replaced
dc30: 20 62 79 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   by the name of 
dc40: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
dc50: 6f 6e 74 61 69 6e 73 20 74 68 65 0a 63 6f 6e 73  ontains the.cons
dc60: 74 72 61 69 6e 74 20 61 6e 64 20 4e 20 69 73 20  traint and N is 
dc70: 61 6e 20 69 6e 74 65 67 65 72 20 62 65 67 69 6e  an integer begin
dc80: 6e 69 6e 67 20 77 69 74 68 20 31 20 61 6e 64 20  ning with 1 and 
dc90: 69 6e 63 72 65 61 73 69 6e 67 20 62 79 20 6f 6e  increasing by on
dca0: 65 0a 77 69 74 68 20 65 61 63 68 20 63 6f 6e 73  e.with each cons
dcb0: 74 72 61 69 6e 74 20 73 65 65 6e 20 69 6e 20 74  traint seen in t
dcc0: 68 65 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  he table definit
dcd0: 69 6f 6e 2e 29 5e 0a 5e 28 49 6e 20 61 20 5b 57  ion.)^.^(In a [W
dce0: 49 54 48 4f 55 54 20 52 4f 57 49 44 5d 20 74 61  ITHOUT ROWID] ta
dcf0: 62 6c 65 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  ble, there is no
dd00: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 65   sqlite_master e
dd10: 6e 74 72 79 20 66 6f 72 20 74 68 65 0a 50 52 49  ntry for the.PRI
dd20: 4d 41 52 59 20 4b 45 59 2c 20 62 75 74 20 74 68  MARY KEY, but th
dd30: 65 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  e "sqlite_autoin
dd40: 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 6e 61 6d  dex_TABLE_N" nam
dd50: 65 20 69 73 20 73 65 74 20 61 73 69 64 65 0a 66  e is set aside.f
dd60: 6f 72 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  or the PRIMARY K
dd70: 45 59 20 61 73 20 69 66 20 74 68 65 20 73 71 6c  EY as if the sql
dd80: 69 74 65 5f 6d 61 73 74 65 72 20 65 6e 74 72 79  ite_master entry
dd90: 20 64 69 64 20 65 78 69 73 74 2e 20 20 54 68 69   did exist.  Thi
dda0: 73 0a 77 69 6c 6c 20 61 66 66 65 63 74 20 74 68  s.will affect th
ddb0: 65 20 6e 75 6d 62 65 72 69 6e 67 20 6f 66 20 73  e numbering of s
ddc0: 75 62 73 65 71 75 65 6e 74 20 55 4e 49 51 55 45  ubsequent UNIQUE
ddd0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 29 5e 0a   constraints.)^.
dde0: 5e 54 68 65 20 22 73 71 6c 69 74 65 5f 61 75 74  ^The "sqlite_aut
ddf0: 6f 69 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20  oindex_TABLE_N" 
de00: 6e 61 6d 65 20 69 73 20 6e 65 76 65 72 20 61 6c  name is never al
de10: 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 6e 0a 5b  located for an.[
de20: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
de30: 4b 45 59 5d 2c 20 65 69 74 68 65 72 20 69 6e 20  KEY], either in 
de40: 72 6f 77 69 64 20 74 61 62 6c 65 73 20 6f 72 20  rowid tables or 
de50: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
de60: 62 6c 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54  bles..</p>..<p>T
de70: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
de80: 2e 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d 6e  .tbl_name column
de90: 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20   holds the name 
dea0: 6f 66 20 61 20 74 61 62 6c 65 20 6f 72 20 76 69  of a table or vi
deb0: 65 77 0a 74 68 61 74 20 74 68 65 20 6f 62 6a 65  ew.that the obje
dec0: 63 74 20 69 73 20 61 73 73 6f 63 69 61 74 65 64  ct is associated
ded0: 20 77 69 74 68 2e 20 20 5e 46 6f 72 20 61 20 74   with.  ^For a t
dee0: 61 62 6c 65 20 6f 72 20 76 69 65 77 2c 20 74 68  able or view, th
def0: 65 0a 74 62 6c 5f 6e 61 6d 65 20 63 6f 6c 75 6d  e.tbl_name colum
df00: 6e 20 69 73 20 61 20 63 6f 70 79 20 6f 66 20 74  n is a copy of t
df10: 68 65 20 6e 61 6d 65 20 63 6f 6c 75 6d 6e 2e 20  he name column. 
df20: 20 5e 46 6f 72 20 61 6e 20 69 6e 64 65 78 2c 20   ^For an index, 
df30: 74 68 65 20 74 62 6c 5f 6e 61 6d 65 0a 69 73 20  the tbl_name.is 
df40: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
df50: 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 69 6e  table that is in
df60: 64 65 78 65 64 2e 20 20 5e 46 6f 72 20 61 20 74  dexed.  ^For a t
df70: 72 69 67 67 65 72 2c 20 74 68 65 20 74 62 6c 5f  rigger, the tbl_
df80: 6e 61 6d 65 0a 63 6f 6c 75 6d 6e 20 73 74 6f 72  name.column stor
df90: 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  es the name of t
dfa0: 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
dfb0: 20 74 68 61 74 20 63 61 75 73 65 73 20 74 68 65   that causes the
dfc0: 20 74 72 69 67 67 65 72 20 0a 74 6f 20 66 69 72   trigger .to fir
dfd0: 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65  e.</p>..<p>^(The
dfe0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 72   sqlite_master.r
dff0: 6f 6f 74 70 61 67 65 20 63 6f 6c 75 6d 6e 20 73  ootpage column s
e000: 74 6f 72 65 73 20 74 68 65 20 70 61 67 65 20 6e  tores the page n
e010: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 72 6f 6f  umber of the roo
e020: 74 0a 62 2d 74 72 65 65 20 70 61 67 65 20 66 6f  t.b-tree page fo
e030: 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  r tables and ind
e040: 65 78 65 73 2e 29 5e 20 20 5e 46 6f 72 20 72 6f  exes.)^  ^For ro
e050: 77 73 20 74 68 61 74 20 64 65 66 69 6e 65 20 76  ws that define v
e060: 69 65 77 73 2c 20 74 72 69 67 67 65 72 73 2c 0a  iews, triggers,.
e070: 61 6e 64 20 76 69 72 74 75 61 6c 20 74 61 62 6c  and virtual tabl
e080: 65 73 2c 20 74 68 65 20 72 6f 6f 74 70 61 67 65  es, the rootpage
e090: 20 63 6f 6c 75 6d 6e 20 69 73 20 30 20 6f 72 20   column is 0 or 
e0a0: 4e 55 4c 4c 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 28  NULL.</p>..<p>^(
e0b0: 54 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  The sqlite_maste
e0c0: 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 73 74 6f  r.sql column sto
e0d0: 72 65 73 20 53 51 4c 20 74 65 78 74 20 74 68 61  res SQL text tha
e0e0: 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 0a  t describes the.
e0f0: 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 53 51  object.  This SQ
e100: 4c 20 74 65 78 74 20 69 73 20 61 20 5b 43 52 45  L text is a [CRE
e110: 41 54 45 20 54 41 42 4c 45 5d 2c 20 5b 43 52 45  ATE TABLE], [CRE
e120: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
e130: 45 5d 2c 0a 5b 43 52 45 41 54 45 20 49 4e 44 45  E],.[CREATE INDE
e140: 58 5d 2c 0a 5b 43 52 45 41 54 45 20 56 49 45 57  X],.[CREATE VIEW
e150: 5d 2c 20 6f 72 20 5b 43 52 45 41 54 45 20 54 52  ], or [CREATE TR
e160: 49 47 47 45 52 5d 20 73 74 61 74 65 6d 65 6e 74  IGGER] statement
e170: 20 74 68 61 74 20 69 66 20 65 76 61 6c 75 61 74   that if evaluat
e180: 65 64 20 61 67 61 69 6e 73 74 0a 74 68 65 20 64  ed against.the d
e190: 61 74 61 62 61 73 65 20 66 69 6c 65 20 77 68 65  atabase file whe
e1a0: 6e 20 69 74 20 69 73 20 74 68 65 20 6d 61 69 6e  n it is the main
e1b0: 20 64 61 74 61 62 61 73 65 20 6f 66 20 61 20 5b   database of a [
e1c0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
e1d0: 69 6f 6e 5d 0a 77 6f 75 6c 64 20 72 65 63 72 65  ion].would recre
e1e0: 61 74 65 20 74 68 65 20 6f 62 6a 65 63 74 2e 29  ate the object.)
e1f0: 5e 20 20 54 68 65 20 74 65 78 74 20 69 73 20 75  ^  The text is u
e200: 73 75 61 6c 6c 79 20 61 20 63 6f 70 79 20 6f 66  sually a copy of
e210: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 73 74   the original.st
e220: 61 74 65 6d 65 6e 74 20 75 73 65 64 20 74 6f 20  atement used to 
e230: 63 72 65 61 74 65 20 74 68 65 20 6f 62 6a 65 63  create the objec
e240: 74 20 62 75 74 20 77 69 74 68 20 6e 6f 72 6d 61  t but with norma
e250: 6c 69 7a 61 74 69 6f 6e 73 20 61 70 70 6c 69 65  lizations applie
e260: 64 20 73 6f 0a 74 68 61 74 20 74 68 65 20 74 65  d so.that the te
e270: 78 74 20 63 6f 6e 66 6f 72 6d 73 20 74 6f 20 74  xt conforms to t
e280: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 75 6c  he following rul
e290: 65 73 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 5e 54  es:..<ul>.<li>^T
e2a0: 68 65 20 43 52 45 41 54 45 2c 20 54 41 42 4c 45  he CREATE, TABLE
e2b0: 2c 20 56 49 45 57 2c 20 54 52 49 47 47 45 52 2c  , VIEW, TRIGGER,
e2c0: 20 61 6e 64 20 49 4e 44 45 58 20 6b 65 79 77 6f   and INDEX keywo
e2d0: 72 64 73 20 61 74 20 74 68 65 20 62 65 67 69 6e  rds at the begin
e2e0: 6e 69 6e 67 0a 6f 66 20 74 68 65 20 73 74 61 74  ning.of the stat
e2f0: 65 6d 65 6e 74 20 61 72 65 20 63 6f 6e 76 65 72  ement are conver
e300: 74 65 64 20 74 6f 20 61 6c 6c 20 75 70 70 65 72  ted to all upper
e310: 20 63 61 73 65 20 6c 65 74 74 65 72 73 2e 0a 3c   case letters..<
e320: 6c 69 3e 5e 54 68 65 20 54 45 4d 50 20 6f 72 20  li>^The TEMP or 
e330: 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f 72  TEMPORARY keywor
e340: 64 20 69 73 20 72 65 6d 6f 76 65 64 20 69 66 20  d is removed if 
e350: 69 74 20 6f 63 63 75 72 73 20 61 66 74 65 72 20  it occurs after 
e360: 74 68 65 20 0a 69 6e 69 74 69 61 6c 20 43 52 45  the .initial CRE
e370: 41 54 45 20 6b 65 79 77 6f 72 64 2e 0a 3c 6c 69  ATE keyword..<li
e380: 3e 5e 41 6e 79 20 64 61 74 61 62 61 73 65 20 6e  >^Any database n
e390: 61 6d 65 20 71 75 61 6c 69 66 69 65 72 20 74 68  ame qualifier th
e3a0: 61 74 20 6f 63 63 75 72 73 20 70 72 69 6f 72 20  at occurs prior 
e3b0: 74 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  to the name of t
e3c0: 68 65 0a 6f 62 6a 65 63 74 20 62 65 69 6e 67 20  he.object being 
e3d0: 63 72 65 61 74 65 64 20 69 73 20 72 65 6d 6f 76  created is remov
e3e0: 65 64 2e 0a 3c 6c 69 3e 5e 4c 65 61 64 69 6e 67  ed..<li>^Leading
e3f0: 20 73 70 61 63 65 73 20 61 72 65 20 72 65 6d 6f   spaces are remo
e400: 76 65 64 2e 0a 3c 6c 69 3e 5e 41 6c 6c 20 73 70  ved..<li>^All sp
e410: 61 63 65 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  aces following t
e420: 68 65 20 66 69 72 73 74 20 74 77 6f 20 6b 65 79  he first two key
e430: 77 6f 72 64 73 20 61 72 65 20 63 6f 6e 76 65 72  words are conver
e440: 74 65 64 20 69 6e 74 6f 20 61 20 73 69 6e 67 6c  ted into a singl
e450: 65 0a 73 70 61 63 65 2e 0a 3c 2f 75 6c 3e 0a 0a  e.space..</ul>..
e460: 3c 70 3e 5e 28 54 68 65 20 74 65 78 74 20 69 6e  <p>^(The text in
e470: 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74   the sqlite_mast
e480: 65 72 2e 73 71 6c 20 63 6f 6c 75 6d 6e 20 69 73  er.sql column is
e490: 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 6f   a copy of the o
e4a0: 72 69 67 69 6e 61 6c 0a 43 52 45 41 54 45 20 73  riginal.CREATE s
e4b0: 74 61 74 65 6d 65 6e 74 20 74 65 78 74 20 74 68  tatement text th
e4c0: 61 74 20 63 72 65 61 74 65 64 20 74 68 65 20 6f  at created the o
e4d0: 62 6a 65 63 74 2c 20 65 78 63 65 70 74 20 6e 6f  bject, except no
e4e0: 72 6d 61 6c 69 7a 65 64 20 61 73 0a 64 65 73 63  rmalized as.desc
e4f0: 72 69 62 65 64 20 61 62 6f 76 65 20 61 6e 64 20  ribed above and 
e500: 61 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 73  as modified by s
e510: 75 62 73 65 71 75 65 6e 74 20 5b 41 4c 54 45 52  ubsequent [ALTER
e520: 20 54 41 42 4c 45 5d 20 73 74 61 74 65 6d 65 6e   TABLE] statemen
e530: 74 73 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c 69  ts.)^.^(The sqli
e540: 74 65 5f 6d 61 73 74 65 72 2e 73 71 6c 20 69 73  te_master.sql is
e550: 20 4e 55 4c 4c 20 66 6f 72 20 74 68 65 20 5b 69   NULL for the [i
e560: 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 65 73 5d  nternal indexes]
e570: 20 74 68 61 74 20 61 72 65 0a 61 75 74 6f 6d 61   that are.automa
e580: 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
e590: 62 79 20 5b 55 4e 49 51 55 45 5d 20 6f 72 20 5b  by [UNIQUE] or [
e5a0: 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e  PRIMARY KEY] con
e5b0: 73 74 72 61 69 6e 74 73 2e 29 5e 3c 2f 70 3e 0a  straints.)^</p>.
e5c0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
e5d0: 6e 74 20 69 6e 74 73 63 68 65 6d 61 20 7b 69 6e  nt intschema {in
e5e0: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
e5f0: 6a 65 63 74 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e  jects} \.{intern
e600: 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  al schema object
e610: 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  } {internal inde
e620: 78 7d 20 7b 69 6e 74 65 72 6e 61 6c 20 69 6e 64  x} {internal ind
e630: 65 78 65 73 7d 20 5c 0a 7b 69 6e 74 65 72 6e 61  exes} \.{interna
e640: 6c 20 74 61 62 6c 65 7d 20 7b 69 6e 74 65 72 6e  l table} {intern
e650: 61 6c 20 74 61 62 6c 65 73 7d 3c 2f 74 63 6c 3e  al tables}</tcl>
e660: 0a 3c 68 33 3e 49 6e 74 65 72 6e 61 6c 20 53 63  .<h3>Internal Sc
e670: 68 65 6d 61 20 4f 62 6a 65 63 74 73 3c 2f 68 33  hema Objects</h3
e680: 3e 0a 0a 3c 70 3e 5e 49 6e 20 61 64 64 69 74 69  >..<p>^In additi
e690: 6f 6e 20 74 6f 20 74 68 65 20 74 61 62 6c 65 73  on to the tables
e6a0: 2c 20 69 6e 64 65 78 65 73 2c 20 76 69 65 77 73  , indexes, views
e6b0: 2c 20 61 6e 64 20 74 72 69 67 67 65 72 73 20 63  , and triggers c
e6c0: 72 65 61 74 65 64 20 62 79 0a 74 68 65 20 61 70  reated by.the ap
e6d0: 70 6c 69 63 61 74 69 6f 6e 20 61 6e 64 2f 6f 72  plication and/or
e6e0: 20 74 68 65 20 64 65 76 65 6c 6f 70 65 72 20 75   the developer u
e6f0: 73 69 6e 67 20 43 52 45 41 54 45 20 73 74 61 74  sing CREATE stat
e700: 65 6d 65 6e 74 73 20 53 51 4c 2c 20 74 68 65 0a  ements SQL, the.
e710: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
e720: 62 6c 65 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  ble may contain 
e730: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 65 6e 74  zero or more ent
e740: 72 69 65 73 20 66 6f 72 20 0a 3c 69 3e 69 6e 74  ries for .<i>int
e750: 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62 6a  ernal schema obj
e760: 65 63 74 73 3c 2f 69 3e 20 74 68 61 74 20 61 72  ects</i> that ar
e770: 65 20 63 72 65 61 74 65 64 20 62 79 20 53 51 4c  e created by SQL
e780: 69 74 65 20 66 6f 72 20 69 74 73 20 0a 6f 77 6e  ite for its .own
e790: 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 2e 20 20   internal use.  
e7a0: 5e 54 68 65 20 6e 61 6d 65 73 20 6f 66 20 69 6e  ^The names of in
e7b0: 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f 62  ternal schema ob
e7c0: 6a 65 63 74 73 0a 61 6c 77 61 79 73 20 62 65 67  jects.always beg
e7d0: 69 6e 20 77 69 74 68 20 22 73 71 6c 69 74 65 5f  in with "sqlite_
e7e0: 22 20 61 6e 64 20 61 6e 79 20 74 61 62 6c 65 2c  " and any table,
e7f0: 20 69 6e 64 65 78 2c 20 76 69 65 77 2c 20 6f 72   index, view, or
e800: 20 74 72 69 67 67 65 72 0a 77 68 6f 73 65 20 6e   trigger.whose n
e810: 61 6d 65 20 62 65 67 69 6e 73 20 77 69 74 68 20  ame begins with 
e820: 22 73 71 6c 69 74 65 5f 22 20 69 73 20 61 6e 20  "sqlite_" is an 
e830: 69 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20  internal schema 
e840: 6f 62 6a 65 63 74 2e 0a 5e 53 51 4c 69 74 65 20  object..^SQLite 
e850: 70 72 6f 68 69 62 69 74 73 20 61 70 70 6c 69 63  prohibits applic
e860: 61 74 69 6f 6e 73 20 66 72 6f 6d 20 63 72 65 61  ations from crea
e870: 74 69 6e 67 20 6f 62 6a 65 63 74 73 20 77 68 6f  ting objects who
e880: 73 65 20 6e 61 6d 65 73 20 62 65 67 69 6e 0a 77  se names begin.w
e890: 69 74 68 20 22 73 71 6c 69 74 65 5f 22 2e 20 20  ith "sqlite_".  
e8a0: 0a 0a 3c 70 3e 49 6e 74 65 72 6e 61 6c 20 73 63  ..<p>Internal sc
e8b0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 75 73 65  hema objects use
e8c0: 64 20 62 79 20 53 51 4c 69 74 65 20 6d 61 79 20  d by SQLite may 
e8d0: 69 6e 63 6c 75 64 65 20 74 68 65 20 66 6f 6c 6c  include the foll
e8e0: 6f 77 69 6e 67 3a 0a 0a 3c 75 6c 3e 0a 3c 6c 69  owing:..<ul>.<li
e8f0: 3e 3c 70 3e 49 6e 64 69 63 65 73 20 77 69 74 68  ><p>Indices with
e900: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66 6f   names of the fo
e910: 72 6d 20 22 73 71 6c 69 74 65 5f 61 75 74 6f 69  rm "sqlite_autoi
e920: 6e 64 65 78 5f 54 41 42 4c 45 5f 4e 22 20 74 68  ndex_TABLE_N" th
e930: 61 74 0a 20 20 20 20 20 20 20 61 72 65 20 75 73  at.       are us
e940: 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
e950: 5b 55 4e 49 51 55 45 5d 20 61 6e 64 20 5b 50 52  [UNIQUE] and [PR
e960: 49 4d 41 52 59 20 4b 45 59 5d 20 63 6f 6e 73 74  IMARY KEY] const
e970: 72 61 69 6e 74 73 20 6f 6e 0a 20 20 20 20 20 20  raints on.      
e980: 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73   ordinary tables
e990: 2e 0a 0a 3c 6c 69 3e 3c 70 3e 41 20 74 61 62 6c  ...<li><p>A tabl
e9a0: 65 20 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20  e with the name 
e9b0: 22 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65  "sqlite_sequence
e9c0: 22 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  " that is used t
e9d0: 6f 20 6b 65 65 70 20 74 72 61 63 6b 0a 20 20 20  o keep track.   
e9e0: 20 20 20 20 6f 66 20 74 68 65 20 6d 61 78 69 6d      of the maxim
e9f0: 75 6d 20 68 69 73 74 6f 72 69 63 61 6c 20 5b 49  um historical [I
ea00: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
ea10: 45 59 5d 20 66 6f 72 20 61 20 74 61 62 6c 65 0a  EY] for a table.
ea20: 20 20 20 20 20 20 20 75 73 69 6e 67 20 5b 41 55         using [AU
ea30: 54 4f 49 4e 43 52 45 4d 45 4e 54 5d 2e 0a 0a 3c  TOINCREMENT]...<
ea40: 6c 69 3e 3c 70 3e 54 61 62 6c 65 73 20 77 69 74  li><p>Tables wit
ea50: 68 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 66  h names of the f
ea60: 6f 72 6d 20 22 73 71 6c 69 74 65 5f 73 74 61 74  orm "sqlite_stat
ea70: 4e 22 20 77 68 65 72 65 20 4e 20 69 73 20 61 6e  N" where N is an
ea80: 20 69 6e 74 65 67 65 72 2e 0a 20 20 20 20 20 20   integer..      
ea90: 20 53 75 63 68 20 74 61 62 6c 65 73 20 73 74 6f   Such tables sto
eaa0: 72 65 20 64 61 74 61 62 61 73 65 20 73 74 61 74  re database stat
eab0: 69 73 74 69 63 73 20 67 61 74 68 65 72 65 64 20  istics gathered 
eac0: 62 79 20 74 68 65 20 5b 41 4e 41 4c 59 5a 45 5d  by the [ANALYZE]
ead0: 0a 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20  .       command 
eae0: 61 6e 64 20 75 73 65 64 20 62 79 20 74 68 65 20  and used by the 
eaf0: 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 74 6f  query planner to
eb00: 20 68 65 6c 70 20 64 65 74 65 72 6d 69 6e 65 20   help determine 
eb10: 74 68 65 20 62 65 73 74 0a 20 20 20 20 20 20 20  the best.       
eb20: 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 75 73 65  algorithm to use
eb30: 20 66 6f 72 20 65 61 63 68 20 71 75 65 72 79 2e   for each query.
eb40: 0a 3c 2f 75 6c 3e 0a 0a 3c 70 3e 4e 65 77 20 69  .</ul>..<p>New i
eb50: 6e 74 65 72 6e 61 6c 20 73 63 68 65 6d 61 20 6f  nternal schema o
eb60: 62 6a 65 63 74 73 20 6e 61 6d 65 73 2c 20 61 6c  bjects names, al
eb70: 77 61 79 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  ways beginning w
eb80: 69 74 68 20 22 73 71 6c 69 74 65 5f 22 2c 0a 6d  ith "sqlite_",.m
eb90: 61 79 20 62 65 20 61 64 64 65 64 20 74 6f 20 74  ay be added to t
eba0: 68 65 20 53 51 4c 69 74 65 20 66 69 6c 65 20 66  he SQLite file f
ebb0: 6f 72 6d 61 74 20 69 6e 20 66 75 74 75 72 65 20  ormat in future 
ebc0: 72 65 6c 65 61 73 65 73 2e 0a 0a 3c 74 63 6c 3e  releases...<tcl>
ebd0: 68 64 5f 66 72 61 67 6d 65 6e 74 20 73 65 71 74  hd_fragment seqt
ebe0: 61 62 20 7b 73 71 6c 69 74 65 5f 73 65 71 75 65  ab {sqlite_seque
ebf0: 6e 63 65 7d 3c 2f 74 63 6c 3e 0a 3c 68 33 3e 54  nce}</tcl>.<h3>T
ec00: 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e  he sqlite_sequen
ec10: 63 65 20 74 61 62 6c 65 3c 2f 68 33 3e 0a 0a 3c  ce table</h3>..<
ec20: 70 3e 5e 54 68 65 20 73 71 6c 69 74 65 5f 73 65  p>^The sqlite_se
ec30: 71 75 65 6e 63 65 20 74 61 62 6c 65 20 69 73 20  quence table is 
ec40: 61 6e 20 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c  an internal tabl
ec50: 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  e used to help i
ec60: 6d 70 6c 65 6d 65 6e 74 0a 5b 41 55 54 4f 49 4e  mplement.[AUTOIN
ec70: 43 52 45 4d 45 4e 54 5d 2e 20 20 5e 54 68 65 20  CREMENT].  ^The 
ec80: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
ec90: 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64  table is created
eca0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 77   automatically.w
ecb0: 68 65 6e 65 76 65 72 20 61 6e 79 20 6f 72 64 69  henever any ordi
ecc0: 6e 61 72 79 20 74 61 62 6c 65 20 77 69 74 68 20  nary table with 
ecd0: 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  an AUTOINCREMENT
ece0: 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   integer primary
ecf0: 0a 6b 65 79 20 69 73 20 63 72 65 61 74 65 64 2e  .key is created.
ed00: 20 20 5e 4f 6e 63 65 20 63 72 65 61 74 65 64 2c    ^Once created,
ed10: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
ed20: 65 6e 63 65 20 74 61 62 6c 65 20 65 78 69 73 74  ence table exist
ed30: 73 20 69 6e 20 74 68 65 0a 73 71 6c 69 74 65 5f  s in the.sqlite_
ed40: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 66 6f 72  master table for
ed50: 65 76 65 72 3b 20 69 74 20 63 61 6e 6e 6f 74 20  ever; it cannot 
ed60: 62 65 20 64 72 6f 70 70 65 64 2e 0a 5e 28 54 68  be dropped..^(Th
ed70: 65 20 73 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e schema for the
ed80: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
ed90: 20 74 61 62 6c 65 20 69 73 3a 0a 0a 3c 62 6c 6f   table is:..<blo
eda0: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52  ckquote><pre>.CR
edb0: 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69 74  EATE TABLE sqlit
edc0: 65 5f 73 65 71 75 65 6e 63 65 28 6e 61 6d 65 2c  e_sequence(name,
edd0: 73 65 71 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c  seq);.</pre></bl
ede0: 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e  ockquote>)^..<p>
edf0: 5e 54 68 65 72 65 20 69 73 20 61 20 73 69 6e 67  ^There is a sing
ee00: 6c 65 20 72 6f 77 20 69 6e 20 74 68 65 20 73 71  le row in the sq
ee10: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
ee20: 62 6c 65 20 66 6f 72 20 65 61 63 68 20 6f 72 64  ble for each ord
ee30: 69 6e 61 72 79 0a 74 61 62 6c 65 20 74 68 61 74  inary.table that
ee40: 20 75 73 65 73 20 41 55 54 4f 49 4e 43 52 45 4d   uses AUTOINCREM
ee50: 45 4e 54 2e 20 20 5e 28 54 68 65 20 6e 61 6d 65  ENT.  ^(The name
ee60: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 28 61   of the table (a
ee70: 73 20 69 74 20 61 70 70 65 61 72 73 20 69 6e 0a  s it appears in.
ee80: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 2e 6e 61  sqlite_master.na
ee90: 6d 65 29 20 69 73 20 69 6e 20 74 68 65 20 73 71  me) is in the sq
eea0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 6d 61  lite_sequence.ma
eeb0: 69 6e 20 66 69 65 6c 64 20 61 6e 64 20 74 68 65  in field and the
eec0: 20 6c 61 72 67 65 73 74 0a 5b 49 4e 54 45 47 45   largest.[INTEGE
eed0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 5d 20 65  R PRIMARY KEY] e
eee0: 76 65 72 20 75 73 65 64 20 62 79 20 74 68 61 74  ver used by that
eef0: 20 74 61 62 6c 65 20 69 73 20 69 6e 20 74 68 65   table is in the
ef00: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
ef10: 2e 73 65 71 0a 66 69 65 6c 64 2e 29 5e 20 20 5e  .seq.field.)^  ^
ef20: 4e 65 77 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  New automaticall
ef30: 79 20 67 65 6e 65 72 61 74 65 64 20 69 6e 74 65  y generated inte
ef40: 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 73  ger primary keys
ef50: 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45   for AUTOINCREME
ef60: 4e 54 0a 74 61 62 6c 65 73 20 61 72 65 20 67 75  NT.tables are gu
ef70: 61 72 61 6e 74 65 65 64 20 74 6f 20 62 65 20 6c  aranteed to be l
ef80: 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 73  arger than the s
ef90: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73  qlite_sequence.s
efa0: 65 71 20 66 69 65 6c 64 20 66 6f 72 0a 74 68 61  eq field for.tha
efb0: 74 20 74 61 62 6c 65 2e 0a 5e 28 49 66 20 74 68  t table..^(If th
efc0: 65 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63  e sqlite_sequenc
efd0: 65 2e 73 65 71 20 66 69 65 6c 64 20 6f 66 20 61  e.seq field of a
efe0: 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  n AUTOINCREMENT 
eff0: 74 61 62 6c 65 20 69 73 20 61 6c 72 65 61 64 79  table is already
f000: 20 61 74 0a 74 68 65 20 6c 61 72 67 65 73 74 20   at.the largest 
f010: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 28 39  integer value (9
f020: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
f030: 30 37 29 20 74 68 65 6e 20 61 74 74 65 6d 70 74  07) then attempt
f040: 73 20 74 6f 20 61 64 64 20 6e 65 77 0a 72 6f 77  s to add new.row
f050: 73 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  s to that table 
f060: 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
f070: 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20  cally generated 
f080: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
f090: 77 69 6c 6c 20 66 61 69 6c 0a 77 69 74 68 20 61  will fail.with a
f0a0: 6e 20 5b 53 51 4c 49 54 45 5f 46 55 4c 4c 5d 20  n [SQLITE_FULL] 
f0b0: 65 72 72 6f 72 2e 29 5e 0a 5e 54 68 65 20 73 71  error.)^.^The sq
f0c0: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e 73 65  lite_sequence.se
f0d0: 71 20 66 69 65 6c 64 20 69 73 20 61 75 74 6f 6d  q field is autom
f0e0: 61 74 69 63 61 6c 6c 79 20 75 70 64 61 74 65 64  atically updated
f0f0: 20 69 66 20 72 65 71 75 69 72 65 64 20 77 68 65   if required whe
f100: 6e 0a 6e 65 77 20 65 6e 74 72 69 65 73 20 61 72  n.new entries ar
f110: 65 20 61 64 64 65 64 20 74 6f 20 61 6e 20 41 55  e added to an AU
f120: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
f130: 65 2e 20 20 0a 5e 54 68 65 20 73 71 6c 69 74 65  e.  .^The sqlite
f140: 5f 73 65 71 75 65 6e 63 65 20 72 6f 77 20 66 6f  _sequence row fo
f150: 72 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  r an AUTOINCREME
f160: 4e 54 20 74 61 62 6c 65 20 69 73 20 61 75 74 6f  NT table is auto
f170: 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65  matically delete
f180: 64 0a 77 68 65 6e 20 74 68 65 20 74 61 62 6c 65  d.when the table
f190: 20 69 73 20 64 72 6f 70 70 65 64 2e 0a 5e 49 66   is dropped..^If
f1a0: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
f1b0: 65 6e 63 65 20 72 6f 77 20 66 6f 72 20 61 6e 20  ence row for an 
f1c0: 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
f1d0: 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  ble does not exi
f1e0: 73 74 20 77 68 65 6e 0a 74 68 65 20 41 55 54 4f  st when.the AUTO
f1f0: 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 20  INCREMENT table 
f200: 69 73 20 75 70 64 61 74 65 64 2c 20 74 68 65 6e  is updated, then
f210: 20 61 20 6e 65 77 20 73 71 6c 69 74 65 5f 73 65   a new sqlite_se
f220: 71 75 65 6e 63 65 20 72 6f 77 20 69 73 20 63 72  quence row is cr
f230: 65 61 74 65 64 2e 0a 5e 28 49 66 20 74 68 65 20  eated..^(If the 
f240: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 2e  sqlite_sequence.
f250: 73 65 71 20 76 61 6c 75 65 20 66 6f 72 20 61 6e  seq value for an
f260: 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
f270: 61 62 6c 65 20 69 73 20 6d 61 6e 75 61 6c 6c 79  able is manually
f280: 20 0a 73 65 74 20 74 6f 20 73 6f 6d 65 74 68 69   .set to somethi
f290: 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 6e  ng other than an
f2a0: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 74 68 65   integer and the
f2b0: 72 65 20 69 73 20 61 20 73 75 62 73 65 71 75 65  re is a subseque
f2c0: 6e 74 20 61 74 74 65 6d 70 74 20 74 6f 0a 69 6e  nt attempt to.in
f2d0: 73 65 72 74 20 74 68 65 20 6f 72 20 75 70 64 61  sert the or upda
f2e0: 74 65 20 74 68 65 20 41 55 54 4f 49 4e 43 52 45  te the AUTOINCRE
f2f0: 4d 45 4e 54 20 74 61 62 6c 65 2c 20 74 68 65 6e  MENT table, then
f300: 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73   the behavior is
f310: 20 75 6e 64 65 66 69 6e 65 64 2e 29 5e 0a 0a 3c   undefined.)^..<
f320: 70 3e 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20 63  p>^Application c
f330: 6f 64 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74  ode is allowed t
f340: 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 73 71 6c  o modify the sql
f350: 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62  ite_sequence tab
f360: 6c 65 2c 20 74 6f 20 61 64 64 0a 6e 65 77 20 72  le, to add.new r
f370: 6f 77 73 2c 20 74 6f 20 64 65 6c 65 74 65 20 72  ows, to delete r
f380: 6f 77 73 2c 20 6f 72 20 74 6f 20 6d 6f 64 69 66  ows, or to modif
f390: 79 20 65 78 69 73 74 69 6e 67 20 72 6f 77 73 2e  y existing rows.
f3a0: 20 20 5e 48 6f 77 65 76 65 72 2c 20 61 70 70 6c    ^However, appl
f3b0: 69 63 61 74 69 6f 6e 0a 63 6f 64 65 20 63 61 6e  ication.code can
f3c0: 6e 6f 74 20 63 72 65 61 74 65 20 74 68 65 20 73  not create the s
f3d0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
f3e0: 61 62 6c 65 20 69 66 20 69 74 20 64 6f 65 73 20  able if it does 
f3f0: 6e 6f 74 20 61 6c 72 65 61 64 79 20 65 78 69 73  not already exis
f400: 74 2e 0a 5e 41 70 70 6c 69 63 61 74 69 6f 6e 20  t..^Application 
f410: 63 6f 64 65 20 63 61 6e 20 64 65 6c 65 74 65 20  code can delete 
f420: 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
f430: 20 74 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   the sqlite_sequ
f440: 65 6e 63 65 20 74 61 62 6c 65 2c 0a 62 75 74 20  ence table,.but 
f450: 61 70 70 6c 69 63 61 74 69 6f 6e 20 63 6f 64 65  application code
f460: 20 63 61 6e 6e 6f 74 20 64 72 6f 70 20 74 68 65   cannot drop the
f470: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
f480: 20 74 61 62 6c 65 2e 0a 0a 3c 74 63 6c 3e 68 64   table...<tcl>hd
f490: 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74 31 74  _fragment stat1t
f4a0: 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 31  ab {sqlite_stat1
f4b0: 7d 20 53 51 4c 49 54 45 5f 53 54 41 54 31 20 3c  } SQLITE_STAT1 <
f4c0: 2f 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71  /tcl>.<h3>The sq
f4d0: 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
f4e0: 3c 2f 68 33 3e 0a 0a 3c 70 3e 5e 54 68 65 20 73  </h3>..<p>^The s
f4f0: 71 6c 69 74 65 5f 73 74 61 74 31 20 69 73 20 61  qlite_stat1 is a
f500: 6e 20 69 6e 74 65 72 6e 61 6c 20 74 61 62 6c 65  n internal table
f510: 20 63 72 65 61 74 65 64 20 62 79 20 74 68 65 20   created by the 
f520: 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e  [ANALYZE] comman
f530: 64 0a 61 6e 64 20 75 73 65 64 20 74 6f 20 68 6f  d.and used to ho
f540: 6c 64 20 73 75 70 70 6c 65 6d 65 6e 74 61 6c 20  ld supplemental 
f550: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
f560: 74 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  t tables and ind
f570: 65 78 65 73 20 74 68 61 74 20 74 68 65 0a 71 75  exes that the.qu
f580: 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e 20  ery planner can 
f590: 75 73 65 20 74 6f 20 68 65 6c 70 20 69 74 20 66  use to help it f
f5a0: 69 6e 64 20 62 65 74 74 65 72 20 77 61 79 73 20  ind better ways 
f5b0: 6f 66 20 70 65 72 66 6f 72 6d 69 6e 67 20 71 75  of performing qu
f5c0: 65 72 69 65 73 2e 0a 5e 41 70 70 6c 69 63 61 74  eries..^Applicat
f5d0: 69 6f 6e 73 20 63 61 6e 20 75 70 64 61 74 65 2c  ions can update,
f5e0: 20 64 65 6c 65 74 65 20 66 72 6f 6d 2c 20 69 6e   delete from, in
f5f0: 73 65 72 74 20 69 6e 74 6f 20 6f 72 20 64 72 6f  sert into or dro
f600: 70 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  p the sqlite_sta
f610: 74 31 0a 74 61 62 6c 65 2c 20 62 75 74 20 6d 61  t1.table, but ma
f620: 79 20 6e 6f 74 20 63 72 65 61 74 65 20 6f 72 20  y not create or 
f630: 61 6c 74 65 72 20 74 68 65 20 73 71 6c 69 74 65  alter the sqlite
f640: 5f 73 74 61 74 31 20 74 61 62 6c 65 2e 0a 5e 28  _stat1 table..^(
f650: 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68  The schema of th
f660: 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  e sqlite_stat1 t
f670: 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f  able is as follo
f680: 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ws:..<blockquote
f690: 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
f6a0: 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 31  BLE sqlite_stat1
f6b0: 28 74 62 6c 2c 69 64 78 2c 73 74 61 74 29 3b 0a  (tbl,idx,stat);.
f6c0: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
f6d0: 74 65 3e 29 5e 0a 0a 3c 70 3e 20 5e 28 54 68 65  te>)^..<p> ^(The
f6e0: 72 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 6f  re is normally o
f6f0: 6e 65 20 72 6f 77 20 70 65 72 20 69 6e 64 65 78  ne row per index
f700: 2c 20 77 69 74 68 20 74 68 65 20 69 6e 64 65 78  , with the index
f710: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 74   identified by t
f720: 68 65 0a 6e 61 6d 65 20 69 6e 20 74 68 65 20 73  he.name in the s
f730: 71 6c 69 74 65 5f 73 74 61 74 31 2e 69 64 78 20  qlite_stat1.idx 
f740: 63 6f 6c 75 6d 6e 2e 29 5e 20 20 5e 28 54 68 65  column.)^  ^(The
f750: 20 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62   sqlite_stat1.tb
f760: 6c 20 63 6f 6c 75 6d 6e 20 69 73 0a 74 68 65 20  l column is.the 
f770: 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
f780: 65 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 69  e to which the i
f790: 6e 64 65 78 20 62 65 6c 6f 6e 67 73 2e 29 5e 20  ndex belongs.)^ 
f7a0: 20 5e 28 49 6e 20 65 61 63 68 20 73 75 63 68 20   ^(In each such 
f7b0: 72 6f 77 2c 20 0a 74 68 65 20 73 71 6c 69 74 65  row, .the sqlite
f7c0: 5f 73 74 61 74 2e 73 74 61 74 20 63 6f 6c 75 6d  _stat.stat colum
f7d0: 6e 20 77 69 6c 6c 20 62 65 0a 61 20 73 74 72 69  n will be.a stri
f7e0: 6e 67 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66  ng consisting of
f7f0: 20 61 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67   a list of integ
f800: 65 72 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ers followed by 
f810: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 0a 61 72  zero or more .ar
f820: 67 75 6d 65 6e 74 73 2e 29 5e 20 20 5e 54 68 65  guments.)^  ^The
f830: 20 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69   first integer i
f840: 6e 20 74 68 69 73 0a 6c 69 73 74 20 69 73 20 74  n this.list is t
f850: 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e  he approximate n
f860: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
f870: 20 74 68 65 20 69 6e 64 65 78 2e 20 20 28 54 68   the index.  (Th
f880: 65 20 6e 75 6d 62 65 72 20 6f 66 0a 72 6f 77 73  e number of.rows
f890: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 69 73   in the index is
f8a0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
f8b0: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
f8c0: 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 0a 65 78  in the table,.ex
f8d0: 63 65 70 74 20 66 6f 72 20 5b 70 61 72 74 69 61  cept for [partia
f8e0: 6c 20 69 6e 64 65 78 65 73 5d 2e 29 0a 5e 54 68  l indexes].).^Th
f8f0: 65 20 73 65 63 6f 6e 64 20 69 6e 74 65 67 65 72  e second integer
f900: 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
f910: 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  ate number of ro
f920: 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 0a  ws in the index.
f930: 74 68 61 74 20 68 61 76 65 20 74 68 65 20 73 61  that have the sa
f940: 6d 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  me value in the 
f950: 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
f960: 74 68 65 20 69 6e 64 65 78 2e 20 20 5e 54 68 65  the index.  ^The
f970: 20 74 68 69 72 64 20 0a 69 6e 74 65 67 65 72 20   third .integer 
f980: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6e 75  is the number nu
f990: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
f9a0: 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 68  the index that h
f9b0: 61 76 65 20 0a 74 68 65 20 73 61 6d 65 20 76 61  ave .the same va
f9c0: 6c 75 65 20 66 6f 72 20 74 68 65 20 66 69 72 73  lue for the firs
f9d0: 74 20 74 77 6f 20 63 6f 6c 75 6d 6e 73 2e 20 20  t two columns.  
f9e0: 5e 54 68 65 20 4e 2d 74 68 20 69 6e 74 65 67 65  ^The N-th intege
f9f0: 72 20 28 66 6f 72 20 4e 3e 31 29 20 0a 69 73 20  r (for N>1) .is 
fa00: 74 68 65 20 65 73 74 69 6d 61 74 65 64 20 61 76  the estimated av
fa10: 65 72 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20  erage number of 
fa20: 72 6f 77 73 20 69 6e 20 0a 74 68 65 20 69 6e 64  rows in .the ind
fa30: 65 78 20 77 68 69 63 68 20 68 61 76 65 20 74 68  ex which have th
fa40: 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
fa50: 20 74 68 65 20 66 69 72 73 74 20 4e 2d 31 20 63   the first N-1 c
fa60: 6f 6c 75 6d 6e 73 2e 20 20 5e 46 6f 72 0a 61 20  olumns.  ^For.a 
fa70: 4b 2d 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2c 20  K-column index, 
fa80: 74 68 65 72 65 20 77 69 6c 6c 20 62 65 20 4b 2b  there will be K+
fa90: 31 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68  1 integers in th
faa0: 65 20 73 74 61 74 20 63 6f 6c 75 6d 6e 2e 20 20  e stat column.  
fab0: 5e 49 66 0a 74 68 65 20 69 6e 64 65 78 20 69 73  ^If.the index is
fac0: 20 75 6e 69 71 75 65 2c 20 74 68 65 6e 20 74 68   unique, then th
fad0: 65 20 6c 61 73 74 20 69 6e 74 65 67 65 72 20 77  e last integer w
fae0: 69 6c 6c 20 62 65 20 31 2e 0a 0a 3c 70 3e 5e 54  ill be 1...<p>^T
faf0: 68 65 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 67  he list of integ
fb00: 65 72 73 20 69 6e 20 74 68 65 20 73 74 61 74 20  ers in the stat 
fb10: 63 6f 6c 75 6d 6e 20 63 61 6e 20 6f 70 74 69 6f  column can optio
fb20: 6e 61 6c 6c 79 20 62 65 20 66 6f 6c 6c 6f 77 65  nally be followe
fb30: 64 0a 62 79 20 61 72 67 75 6d 65 6e 74 73 2c 20  d.by arguments, 
fb40: 65 61 63 68 20 6f 66 20 77 68 69 63 68 20 69 73  each of which is
fb50: 20 61 20 73 65 71 75 65 6e 63 65 20 6f 66 20 6e   a sequence of n
fb60: 6f 6e 2d 73 70 61 63 65 20 63 68 61 72 61 63 74  on-space charact
fb70: 65 72 73 2e 0a 5e 41 6c 6c 20 61 72 67 75 6d 65  ers..^All argume
fb80: 6e 74 73 20 61 72 65 20 70 72 65 63 65 64 65 64  nts are preceded
fb90: 20 62 79 20 61 20 73 69 6e 67 6c 65 20 73 70 61   by a single spa
fba0: 63 65 2e 0a 5e 55 6e 72 65 63 6f 67 6e 69 7a 65  ce..^Unrecognize
fbb0: 64 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  d arguments are 
fbc0: 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64  silently ignored
fbd0: 2e 0a 0a 3c 70 3e 5e 49 66 20 74 68 65 20 22 75  ...<p>^If the "u
fbe0: 6e 6f 72 64 65 72 65 64 22 20 61 72 67 75 6d 65  nordered" argume
fbf0: 6e 74 20 69 73 20 70 72 65 73 65 6e 74 2c 20 74  nt is present, t
fc00: 68 65 6e 20 74 68 65 20 71 75 65 72 79 20 70 6c  hen the query pl
fc10: 61 6e 6e 65 72 20 61 73 73 75 6d 65 73 0a 74 68  anner assumes.th
fc20: 61 74 20 74 68 65 20 69 6e 64 65 78 20 69 73 20  at the index is 
fc30: 75 6e 6f 72 64 65 72 65 64 20 61 6e 64 20 77 69  unordered and wi
fc40: 6c 6c 20 6e 6f 74 20 75 73 65 20 74 68 65 20 69  ll not use the i
fc50: 6e 64 65 78 20 66 6f 72 20 61 20 72 61 6e 67 65  ndex for a range
fc60: 20 71 75 65 72 79 0a 6f 72 20 66 6f 72 20 73 6f   query.or for so
fc70: 72 74 69 6e 67 2e 0a 0a 3c 70 3e 5e 54 68 65 20  rting...<p>^The 
fc80: 22 73 7a 3d 4e 4e 4e 22 20 61 72 67 75 6d 65 6e  "sz=NNN" argumen
fc90: 74 20 28 77 68 65 72 65 20 4e 4e 4e 20 72 65 70  t (where NNN rep
fca0: 72 65 73 65 6e 74 73 20 61 20 73 65 71 75 65 6e  resents a sequen
fcb0: 63 65 20 6f 66 20 31 20 6f 72 20 6d 6f 72 65 20  ce of 1 or more 
fcc0: 64 69 67 69 74 73 29 0a 6d 65 61 6e 73 20 74 68  digits).means th
fcd0: 61 74 20 74 68 65 20 61 76 65 72 61 67 65 20 72  at the average r
fce0: 6f 77 20 73 69 7a 65 20 6f 76 65 72 20 61 6c 6c  ow size over all
fcf0: 20 72 65 63 6f 72 64 73 20 6f 66 20 74 68 65 20   records of the 
fd00: 74 61 62 6c 65 20 6f 72 0a 69 6e 64 65 78 20 69  table or.index i
fd10: 73 20 4e 4e 4e 20 62 79 74 65 73 20 70 65 72 20  s NNN bytes per 
fd20: 72 6f 77 2e 20 20 5e 54 68 65 20 53 51 4c 69 74  row.  ^The SQLit
fd30: 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72 20  e query planner 
fd40: 6d 69 67 68 74 20 75 73 65 20 74 68 65 0a 65 73  might use the.es
fd50: 74 69 6d 61 74 65 64 20 72 6f 77 20 73 69 7a 65  timated row size
fd60: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 6f   information pro
fd70: 76 69 64 65 64 20 62 79 20 74 68 65 20 22 73 7a  vided by the "sz
fd80: 3d 4e 4e 4e 22 20 74 6f 6b 65 6e 0a 74 6f 20 68  =NNN" token.to h
fd90: 65 6c 70 20 69 74 20 63 68 6f 6f 73 65 20 73 6d  elp it choose sm
fda0: 61 6c 6c 65 72 20 74 61 62 6c 65 73 20 61 6e 64  aller tables and
fdb0: 20 69 6e 64 65 78 65 73 20 74 68 61 74 20 72 65   indexes that re
fdc0: 71 75 69 72 65 20 6c 65 73 73 20 64 69 73 6b 20  quire less disk 
fdd0: 49 2f 4f 2e 0a 0a 3c 70 3e 5e 28 54 68 65 20 70  I/O...<p>^(The p
fde0: 72 65 73 65 6e 63 65 20 6f 66 20 74 68 65 20 22  resence of the "
fdf0: 6e 6f 73 6b 69 70 73 63 61 6e 22 20 74 6f 6b 65  noskipscan" toke
fe00: 6e 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  n on the sqlite_
fe10: 73 74 61 74 31 2e 73 74 61 74 20 66 69 65 6c 64  stat1.stat field
fe20: 0a 6f 66 20 61 6e 20 69 6e 64 65 78 20 70 72 65  .of an index pre
fe30: 76 65 6e 74 73 20 74 68 61 74 20 69 6e 64 65 78  vents that index
fe40: 20 66 72 6f 6d 20 62 65 69 6e 67 20 75 73 65 64   from being used
fe50: 20 77 69 74 68 20 74 68 65 0a 5b 73 6b 69 70 2d   with the.[skip-
fe60: 73 63 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  scan optimizatio
fe70: 6e 5d 2e 29 5e 0a 0a 3c 70 3e 4e 65 77 20 74 65  n].)^..<p>New te
fe80: 78 74 20 74 6f 6b 65 6e 73 20 6d 61 79 20 62 65  xt tokens may be
fe90: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 65 6e   added to the en
fea0: 64 20 6f 66 20 74 68 65 20 73 74 61 74 20 63 6f  d of the stat co
feb0: 6c 75 6d 6e 20 69 6e 20 66 75 74 75 72 65 0a 65  lumn in future.e
fec0: 6e 68 61 6e 63 65 6d 65 6e 74 73 20 74 6f 20 53  nhancements to S
fed0: 51 4c 69 74 65 2e 20 20 46 6f 72 20 63 6f 6d 70  QLite.  For comp
fee0: 61 74 69 62 69 6c 69 74 79 2c 20 75 6e 72 65 63  atibility, unrec
fef0: 6f 67 6e 69 7a 65 64 20 74 6f 6b 65 6e 73 20 61  ognized tokens a
ff00: 74 20 74 68 65 20 65 6e 64 0a 6f 66 20 74 68 65  t the end.of the
ff10: 20 73 74 61 74 20 63 6f 6c 75 6d 6e 20 61 72 65   stat column are
ff20: 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65   silently ignore
ff30: 64 2e 0a 0a 3c 70 3e 5e 28 49 66 20 74 68 65 20  d...<p>^(If the 
ff40: 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 69 64 78  sqlite_stat1.idx
ff50: 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2c   column is NULL,
ff60: 20 74 68 65 6e 20 74 68 65 20 73 71 6c 69 74 65   then the sqlite
ff70: 5f 73 74 61 74 31 2e 73 74 61 74 0a 63 6f 6c 75  _stat1.stat.colu
ff80: 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  mn contains a si
ff90: 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 77 68 69  ngle integer whi
ffa0: 63 68 20 69 73 20 74 68 65 20 61 70 70 72 6f 78  ch is the approx
ffb0: 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 0a  imate number of.
ffc0: 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
ffd0: 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
ffe0: 73 71 6c 69 74 65 5f 73 74 61 74 31 2e 74 62 6c  sqlite_stat1.tbl
fff0: 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  .)^..<tcl>hd_fra
10000 67 6d 65 6e 74 20 73 74 61 74 32 74 61 62 20 7b  gment stat2tab {
10010 73 71 6c 69 74 65 5f 73 74 61 74 32 7d 3c 2f 74  sqlite_stat2}</t
10020 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69  cl>.<h3>The sqli
10030 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 3c 2f  te_stat2 table</
10040 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69  h3>..<p>The sqli
10050 74 65 5f 73 74 61 74 32 20 69 73 20 6f 6e 6c 79  te_stat2 is only
10060 20 63 72 65 61 74 65 64 20 61 6e 64 20 69 73 20   created and is 
10070 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 53 51 4c  only used if SQL
10080 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a  ite is compiled.
10090 77 69 74 68 20 53 51 4c 49 54 45 5f 45 4e 41 42  with SQLITE_ENAB
100a0 4c 45 5f 53 54 41 54 32 20 61 6e 64 20 69 66 20  LE_STAT2 and if 
100b0 74 68 65 20 53 51 4c 69 74 65 20 76 65 72 73 69  the SQLite versi
100c0 6f 6e 20 6e 75 6d 62 65 72 20 69 73 20 62 65 74  on number is bet
100d0 77 65 65 6e 0a 33 2e 36 2e 31 38 20 61 6e 64 20  ween.3.6.18 and 
100e0 33 2e 37 2e 38 2e 20 20 54 68 65 20 73 71 6c 69  3.7.8.  The sqli
100f0 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69  te_stat2 table i
10100 73 20 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e  s neither read n
10110 6f 72 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e  or written by an
10120 79 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c  y.version of SQL
10130 69 74 65 20 62 65 66 6f 72 65 20 33 2e 36 2e 31  ite before 3.6.1
10140 38 20 6e 6f 72 20 61 66 74 65 72 20 33 2e 37 2e  8 nor after 3.7.
10150 38 2e 0a 54 68 65 20 73 71 6c 69 74 65 5f 73 74  8..The sqlite_st
10160 61 74 32 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  at2 table contai
10170 6e 73 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ns additional in
10180 66 6f 72 6d 61 74 69 6f 6e 0a 61 62 6f 75 74 20  formation.about 
10190 74 68 65 20 64 69 73 74 72 69 62 75 74 69 6f 6e  the distribution
101a0 20 6f 66 20 6b 65 79 73 20 77 69 74 68 69 6e 20   of keys within 
101b0 61 6e 20 69 6e 64 65 78 2e 0a 54 68 65 20 73 63  an index..The sc
101c0 68 65 6d 61 20 6f 66 20 74 68 65 20 73 71 6c 69  hema of the sqli
101d0 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20 69  te_stat2 table i
101e0 73 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c  s as follows:..<
101f0 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e  blockquote><pre>
10200 0a 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71  .CREATE TABLE sq
10210 6c 69 74 65 5f 73 74 61 74 32 28 74 62 6c 2c 69  lite_stat2(tbl,i
10220 64 78 2c 73 61 6d 70 6c 65 6e 6f 2c 73 61 6d 70  dx,sampleno,samp
10230 6c 65 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f  le);.</pre></blo
10240 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 54 68 65  ckquote>..<p>The
10250 20 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 69 64   sqlite_stat2.id
10260 78 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 74 68 65  x column and the
10270 20 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 74 62   sqlite_stat2.tb
10280 6c 20 63 6f 6c 75 6d 6e 20 69 6e 20 65 61 63 68  l column in each
10290 20 0a 72 6f 77 20 6f 66 20 74 68 65 20 73 71 6c   .row of the sql
102a0 69 74 65 5f 73 74 61 74 32 20 74 61 62 6c 65 20  ite_stat2 table 
102b0 69 64 65 6e 74 69 66 79 20 61 6e 20 69 6e 64 65  identify an inde
102c0 78 20 64 65 73 63 72 69 62 65 64 20 62 79 20 74  x described by t
102d0 68 61 74 20 72 6f 77 2e 0a 54 68 65 72 65 20 61  hat row..There a
102e0 72 65 20 75 73 75 61 6c 6c 79 20 31 30 20 72 6f  re usually 10 ro
102f0 77 73 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ws in the sqlite
10300 5f 73 74 61 74 32 0a 74 61 62 6c 65 20 66 6f 72  _stat2.table for
10310 20 65 61 63 68 20 69 6e 64 65 78 2e 0a 0a 3c 70   each index...<p
10320 3e 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74  >The sqlite_stat
10330 32 20 65 6e 74 72 69 65 73 20 66 6f 72 20 61 6e  2 entries for an
10340 20 69 6e 64 65 78 20 74 68 61 74 20 68 61 76 65   index that have
10350 20 73 71 6c 69 74 65 5f 73 74 61 74 32 2e 73 61   sqlite_stat2.sa
10360 6d 70 6c 65 6e 6f 0a 62 65 74 77 65 65 6e 20 30  mpleno.between 0
10370 20 61 6e 64 20 39 20 69 6e 63 6c 75 73 69 76 65   and 9 inclusive
10380 20 61 72 65 20 73 61 6d 70 6c 65 73 20 6f 66 20   are samples of 
10390 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65  the left-most ke
103a0 79 20 76 61 6c 75 65 20 69 6e 20 74 68 65 0a 69  y value in the.i
103b0 6e 64 65 78 20 74 61 6b 65 6e 20 61 74 20 65 76  ndex taken at ev
103c0 65 6e 6c 79 20 73 70 61 63 65 64 20 70 6f 69 6e  enly spaced poin
103d0 74 73 20 61 6c 6f 6e 67 20 74 68 65 20 69 6e 64  ts along the ind
103e0 65 78 2e 0a 4c 65 74 20 43 20 62 65 20 74 68 65  ex..Let C be the
103f0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
10400 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 54 68  in the index..Th
10410 65 6e 20 74 68 65 20 73 61 6d 70 6c 65 64 20 72  en the sampled r
10420 6f 77 73 20 61 72 65 20 67 69 76 65 6e 20 62 79  ows are given by
10430 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 20  ..<blockquote>. 
10440 20 20 20 20 72 6f 77 6e 75 6d 62 65 72 20 3d 20      rownumber = 
10450 28 69 2a 43 2a 32 20 2b 20 43 29 2f 32 30 0a 3c  (i*C*2 + C)/20.<
10460 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70  /blockquote>..<p
10470 3e 54 68 65 20 76 61 72 69 61 62 6c 65 20 69 20  >The variable i 
10480 69 6e 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  in the previous 
10490 65 78 70 72 65 73 73 69 6f 6e 20 76 61 72 69 65  expression varie
104a0 73 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20  s between 0 and 
104b0 39 2e 0a 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c  9..Conceptually,
104c0 20 74 68 65 20 69 6e 64 65 78 20 73 70 61 63 65   the index space
104d0 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f   is divided into
104e0 0a 31 30 20 75 6e 69 66 6f 72 6d 20 62 75 63 6b  .10 uniform buck
104f0 65 74 73 20 61 6e 64 20 74 68 65 20 73 61 6d 70  ets and the samp
10500 6c 65 73 20 61 72 65 20 74 68 65 20 6d 69 64 64  les are the midd
10510 6c 65 20 72 6f 77 20 66 72 6f 6d 20 65 61 63 68  le row from each
10520 20 62 75 63 6b 65 74 2e 0a 0a 3c 70 3e 54 68 65   bucket...<p>The
10530 20 66 6f 72 6d 61 74 20 66 6f 72 20 73 71 6c 69   format for sqli
10540 74 65 5f 73 74 61 74 32 20 69 73 20 72 65 63 6f  te_stat2 is reco
10550 72 64 65 64 20 68 65 72 65 20 66 6f 72 20 6c 65  rded here for le
10560 67 61 63 79 20 72 65 66 65 72 65 6e 63 65 2e 20  gacy reference. 
10570 20 0a 52 65 63 65 6e 74 20 76 65 72 73 69 6f 6e   .Recent version
10580 73 20 6f 66 20 53 51 4c 69 74 65 20 6e 6f 20 6c  s of SQLite no l
10590 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 20 73 71  onger support sq
105a0 6c 69 74 65 5f 73 74 61 74 32 20 61 6e 64 20 74  lite_stat2 and t
105b0 68 65 0a 73 71 6c 69 74 65 5f 73 74 61 74 32 20  he.sqlite_stat2 
105c0 74 61 62 6c 65 2c 20 69 74 20 69 73 20 65 78 69  table, it is exi
105d0 73 74 73 2c 20 69 73 20 73 69 6d 70 6c 79 20 69  sts, is simply i
105e0 67 6e 6f 72 65 64 2e 0a 0a 3c 74 63 6c 3e 68 64  gnored...<tcl>hd
105f0 5f 66 72 61 67 6d 65 6e 74 20 73 74 61 74 33 74  _fragment stat3t
10600 61 62 20 7b 73 71 6c 69 74 65 5f 73 74 61 74 33  ab {sqlite_stat3
10610 7d 20 53 51 4c 49 54 45 5f 53 54 41 54 33 3c 2f  } SQLITE_STAT3</
10620 74 63 6c 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c  tcl>.<h3>The sql
10630 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 3c  ite_stat3 table<
10640 2f 68 33 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c  /h3>..<p>The sql
10650 69 74 65 5f 73 74 61 74 33 20 69 73 20 6f 6e 6c  ite_stat3 is onl
10660 79 20 75 73 65 64 20 69 66 20 53 51 4c 69 74 65  y used if SQLite
10670 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69 74   is compiled.wit
10680 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  h [SQLITE_ENABLE
10690 5f 53 54 41 54 33 5d 20 6f 72 20 5b 53 51 4c 49  _STAT3] or [SQLI
106a0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d  TE_ENABLE_STAT4]
106b0 0a 61 6e 64 20 69 66 20 74 68 65 20 53 51 4c 69  .and if the SQLi
106c0 74 65 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  te version numbe
106d0 72 20 69 73 20 33 2e 37 2e 39 20 6f 72 20 67 72  r is 3.7.9 or gr
106e0 65 61 74 65 72 2e 0a 54 68 65 20 73 71 6c 69 74  eater..The sqlit
106f0 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
10700 20 6e 65 69 74 68 65 72 20 72 65 61 64 20 6e 6f   neither read no
10710 72 20 77 72 69 74 74 65 6e 20 62 79 20 61 6e 79  r written by any
10720 0a 76 65 72 73 69 6f 6e 20 6f 66 20 53 51 4c 69  .version of SQLi
10730 74 65 20 62 65 66 6f 72 65 20 33 2e 37 2e 39 2e  te before 3.7.9.
10740 0a 49 66 20 74 68 65 20 5b 53 51 4c 49 54 45 5f  .If the [SQLITE_
10750 45 4e 41 42 4c 45 5f 53 54 41 54 34 5d 20 63 6f  ENABLE_STAT4] co
10760 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
10770 6e 20 69 73 20 75 73 65 64 20 61 6e 64 20 74 68  n is used and th
10780 65 0a 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  e.SQLite version
10790 20 6e 75 6d 62 65 72 20 69 73 20 33 2e 38 2e 31   number is 3.8.1
107a0 20 6f 72 20 67 72 65 61 74 65 72 2c 20 74 68 65   or greater, the
107b0 6e 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 6d  n sqlite_stat3 m
107c0 69 67 68 74 0a 62 65 20 72 65 61 64 20 62 75 74  ight.be read but
107d0 20 6e 6f 74 20 77 72 69 74 74 65 6e 2e 0a 54 68   not written..Th
107e0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
107f0 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 61 64  able contains ad
10800 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
10810 74 69 6f 6e 0a 61 62 6f 75 74 20 74 68 65 20 64  tion.about the d
10820 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 20 6b  istribution of k
10830 65 79 73 20 77 69 74 68 69 6e 20 61 6e 20 69 6e  eys within an in
10840 64 65 78 2c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  dex, information
10850 20 74 68 61 74 20 74 68 65 0a 71 75 65 72 79 20   that the.query 
10860 70 6c 61 6e 6e 65 72 20 63 61 6e 20 75 73 65 20  planner can use 
10870 74 6f 20 64 65 76 69 73 65 20 62 65 74 74 65 72  to devise better
10880 20 61 6e 64 20 66 61 73 74 65 72 20 71 75 65 72   and faster quer
10890 79 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a 5e 28  y algorithms..^(
108a0 54 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68  The schema of th
108b0 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74  e sqlite_stat3 t
108c0 61 62 6c 65 20 69 73 20 61 73 20 66 6f 6c 6c 6f  able is as follo
108d0 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65  ws:..<blockquote
108e0 3e 3c 70 72 65 3e 0a 43 52 45 41 54 45 20 54 41  ><pre>.CREATE TA
108f0 42 4c 45 20 73 71 6c 69 74 65 5f 73 74 61 74 33  BLE sqlite_stat3
10900 28 74 62 6c 2c 69 64 78 2c 6e 45 71 2c 6e 4c 74  (tbl,idx,nEq,nLt
10910 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65 29 3b 0a 3c  ,nDLt,sample);.<
10920 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74  /pre></blockquot
10930 65 3e 29 5e 0a 0a 3c 70 3e 54 68 65 72 65 20 61  e>)^..<p>There a
10940 72 65 20 75 73 75 61 6c 6c 79 20 6d 75 6c 74 69  re usually multi
10950 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74  ple entries in t
10960 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
10970 74 61 62 6c 65 20 66 6f 72 20 65 61 63 68 20 69  table for each i
10980 6e 64 65 78 2e 0a 5e 28 54 68 65 20 73 71 6c 69  ndex..^(The sqli
10990 74 65 5f 73 74 61 74 33 2e 73 61 6d 70 6c 65 20  te_stat3.sample 
109a0 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65  column holds the
109b0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 65   value of the le
109c0 66 74 2d 6d 6f 73 74 20 66 69 65 6c 64 20 6f 66  ft-most field of
109d0 20 61 6e 0a 69 6e 64 65 78 20 69 64 65 6e 74 69   an.index identi
109e0 66 69 65 64 20 62 79 20 73 71 6c 69 74 65 5f 73  fied by sqlite_s
109f0 74 61 74 33 2e 69 64 78 20 61 6e 64 20 73 71 6c  tat3.idx and sql
10a00 69 74 65 5f 73 74 61 74 33 2e 74 62 6c 2e 29 5e  ite_stat3.tbl.)^
10a10 0a 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73 74  .^(The sqlite_st
10a20 61 74 33 2e 6e 45 71 20 63 6f 6c 75 6d 6e 20 68  at3.nEq column h
10a30 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78 69  olds the approxi
10a40 6d 61 74 65 0a 6e 75 6d 62 65 72 20 6f 66 20 65  mate.number of e
10a50 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e  ntries in the in
10a60 64 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d 6d  dex whose left-m
10a70 6f 73 74 20 63 6f 6c 75 6d 6e 20 65 78 61 63 74  ost column exact
10a80 6c 79 20 6d 61 74 63 68 65 73 0a 74 68 65 20 73  ly matches.the s
10a90 61 6d 70 6c 65 2e 29 5e 0a 5e 28 54 68 65 20 73  ample.)^.^(The s
10aa0 71 6c 69 74 65 5f 73 74 61 74 33 2e 6e 4c 74 20  qlite_stat3.nLt 
10ab0 68 6f 6c 64 73 20 74 68 65 20 61 70 70 72 6f 78  holds the approx
10ac0 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20  imate number of 
10ad0 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 0a 69  entries in the.i
10ae0 6e 64 65 78 20 77 68 6f 73 65 20 6c 65 66 74 2d  ndex whose left-
10af0 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 69 73 20 6c  most column is l
10b00 65 73 73 20 74 68 61 6e 20 74 68 65 20 73 61 6d  ess than the sam
10b10 70 6c 65 2e 29 5e 0a 5e 28 54 68 65 20 73 71 6c  ple.)^.^(The sql
10b20 69 74 65 5f 73 74 61 74 33 2e 6e 44 4c 74 20 63  ite_stat3.nDLt c
10b30 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 74 68 65 20  olumn holds the 
10b40 61 70 70 72 6f 78 69 6d 61 74 65 0a 6e 75 6d 62  approximate.numb
10b50 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6c  er of distinct l
10b60 65 66 74 2d 6d 6f 73 74 20 65 6e 74 72 69 65 73  eft-most entries
10b70 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 74 68   in the index th
10b80 61 74 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  at are less than
10b90 0a 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a  .the sample.)^..
10ba0 3c 70 3e 5e 54 68 65 72 65 20 63 61 6e 20 62 65  <p>^There can be
10bb0 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6e 75   an arbitrary nu
10bc0 6d 62 65 72 20 6f 66 20 73 71 6c 69 74 65 5f 73  mber of sqlite_s
10bd0 74 61 74 33 20 65 6e 74 72 69 65 73 20 70 65 72  tat3 entries per
10be0 20 69 6e 64 65 78 2e 0a 54 68 65 20 5b 41 4e 41   index..The [ANA
10bf0 4c 59 5a 45 5d 20 63 6f 6d 6d 61 6e 64 20 77 69  LYZE] command wi
10c00 6c 6c 20 74 79 70 69 63 61 6c 6c 79 20 67 65 6e  ll typically gen
10c10 65 72 61 74 65 20 73 71 6c 69 74 65 5f 73 74 61  erate sqlite_sta
10c20 74 33 20 74 61 62 6c 65 73 0a 74 68 61 74 20 63  t3 tables.that c
10c30 6f 6e 74 61 69 6e 20 62 65 74 77 65 65 6e 20 31  ontain between 1
10c40 30 20 61 6e 64 20 34 30 20 73 61 6d 70 6c 65 73  0 and 40 samples
10c50 20 74 68 61 74 20 61 72 65 20 64 69 73 74 72 69   that are distri
10c60 62 75 74 65 64 20 61 63 72 6f 73 73 0a 74 68 65  buted across.the
10c70 20 6b 65 79 20 73 70 61 63 65 20 61 6e 64 20 77   key space and w
10c80 69 74 68 20 6c 61 72 67 65 20 6e 45 71 20 76 61  ith large nEq va
10c90 6c 75 65 73 2e 0a 0a 3c 70 3e 5e 28 49 6e 20 61  lues...<p>^(In a
10ca0 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 73 71 6c   well-formed sql
10cb0 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 2c  ite_stat3 table,
10cc0 20 74 68 65 20 73 61 6d 70 6c 65 73 20 66 6f 72   the samples for
10cd0 20 61 6e 79 20 73 69 6e 67 6c 65 0a 69 6e 64 65   any single.inde
10ce0 78 20 6d 75 73 74 20 61 70 70 65 61 72 20 69 6e  x must appear in
10cf0 20 74 68 65 20 73 61 6d 65 20 6f 72 64 65 72 20   the same order 
10d00 74 68 61 74 20 74 68 65 79 20 6f 63 63 75 72 20  that they occur 
10d10 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20 20 0a  in the index.  .
10d20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
10d30 69 66 20 74 68 65 20 65 6e 74 72 79 20 77 69 74  if the entry wit
10d40 68 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f 6c 75  h left-most colu
10d50 6d 6e 20 53 31 20 69 73 20 65 61 72 6c 69 65 72  mn S1 is earlier
10d60 20 69 6e 0a 74 68 65 20 69 6e 64 65 78 20 62 2d   in.the index b-
10d70 74 72 65 65 20 74 68 61 6e 20 74 68 65 0a 65 6e  tree than the.en
10d80 74 72 79 20 77 69 74 68 20 6c 65 66 74 2d 6d 6f  try with left-mo
10d90 73 74 20 63 6f 6c 75 6d 6e 20 53 32 2c 20 74 68  st column S2, th
10da0 65 6e 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  en in the sqlite
10db0 5f 73 74 61 74 33 20 74 61 62 6c 65 2c 20 0a 73  _stat3 table, .s
10dc0 61 6d 70 6c 65 20 53 31 20 6d 75 73 74 20 68 61  ample S1 must ha
10dd0 76 65 20 61 20 73 6d 61 6c 6c 65 72 20 72 6f 77  ve a smaller row
10de0 69 64 20 74 68 61 6e 20 73 61 6d 70 6c 65 20 53  id than sample S
10df0 32 2e 29 5e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  2.)^..<tcl>hd_fr
10e00 61 67 6d 65 6e 74 20 73 74 61 74 34 74 61 62 20  agment stat4tab 
10e10 7b 73 71 6c 69 74 65 5f 73 74 61 74 34 7d 20 53  {sqlite_stat4} S
10e20 51 4c 49 54 45 5f 53 54 41 54 34 3c 2f 74 63 6c  QLITE_STAT4</tcl
10e30 3e 0a 3c 68 33 3e 54 68 65 20 73 71 6c 69 74 65  >.<h3>The sqlite
10e40 5f 73 74 61 74 34 20 74 61 62 6c 65 3c 2f 68 33  _stat4 table</h3
10e50 3e 0a 0a 3c 70 3e 54 68 65 20 73 71 6c 69 74 65  >..<p>The sqlite
10e60 5f 73 74 61 74 34 20 69 73 20 6f 6e 6c 79 20 63  _stat4 is only c
10e70 72 65 61 74 65 64 20 61 6e 64 20 69 73 20 6f 6e  reated and is on
10e80 6c 79 20 75 73 65 64 20 69 66 20 53 51 4c 69 74  ly used if SQLit
10e90 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 77 69  e is compiled.wi
10ea0 74 68 20 5b 53 51 4c 49 54 45 5f 45 4e 41 42 4c  th [SQLITE_ENABL
10eb0 45 5f 53 54 41 54 34 5d 20 61 6e 64 20 69 66 20  E_STAT4] and if 
10ec0 74 68 65 20 53 51 4c 69 74 65 20 76 65 72 73 69  the SQLite versi
10ed0 6f 6e 20 6e 75 6d 62 65 72 20 69 73 0a 33 2e 38  on number is.3.8
10ee0 2e 31 20 6f 72 20 67 72 65 61 74 65 72 2e 20 20  .1 or greater.  
10ef0 54 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  The sqlite_stat4
10f00 20 74 61 62 6c 65 20 69 73 20 6e 65 69 74 68 65   table is neithe
10f10 72 20 72 65 61 64 20 6e 6f 72 20 77 72 69 74 74  r read nor writt
10f20 65 6e 20 62 79 20 61 6e 79 0a 76 65 72 73 69 6f  en by any.versio
10f30 6e 20 6f 66 20 53 51 4c 69 74 65 20 62 65 66 6f  n of SQLite befo
10f40 72 65 20 33 2e 38 2e 31 2e 0a 54 68 65 20 73 71  re 3.8.1..The sq
10f50 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65  lite_stat4 table
10f60 20 63 6f 6e 74 61 69 6e 73 20 61 64 64 69 74 69   contains additi
10f70 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
10f80 0a 61 62 6f 75 74 20 74 68 65 20 64 69 73 74 72  .about the distr
10f90 69 62 75 74 69 6f 6e 20 6f 66 20 6b 65 79 73 20  ibution of keys 
10fa0 77 69 74 68 69 6e 20 61 6e 20 69 6e 64 65 78 20  within an index 
10fb0 6f 72 20 74 68 65 20 64 69 73 74 72 69 62 75 74  or the distribut
10fc0 69 6f 6e 20 6f 66 0a 6b 65 79 73 20 69 6e 20 74  ion of.keys in t
10fd0 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  he primary key o
10fe0 66 20 61 20 5b 57 49 54 48 4f 55 54 20 52 4f 57  f a [WITHOUT ROW
10ff0 49 44 5d 20 74 61 62 6c 65 2e 0a 54 68 65 20 71  ID] table..The q
11000 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 63 61 6e  uery planner can
11010 20 73 6f 6d 65 74 69 6d 65 73 20 75 73 65 20 74   sometimes use t
11020 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  he additional in
11030 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 0a 74 68 65  formation in.the
11040 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
11050 62 6c 65 20 74 6f 20 64 65 76 69 73 65 20 62 65  ble to devise be
11060 74 74 65 72 20 61 6e 64 20 66 61 73 74 65 72 20  tter and faster 
11070 71 75 65 72 79 20 61 6c 67 6f 72 69 74 68 6d 73  query algorithms
11080 2e 0a 5e 28 54 68 65 20 73 63 68 65 6d 61 20 6f  ..^(The schema o
11090 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  f the sqlite_sta
110a0 74 34 20 74 61 62 6c 65 20 69 73 20 61 73 20 66  t4 table is as f
110b0 6f 6c 6c 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71  ollows:..<blockq
110c0 75 6f 74 65 3e 3c 70 72 65 3e 0a 43 52 45 41 54  uote><pre>.CREAT
110d0 45 20 54 41 42 4c 45 20 73 71 6c 69 74 65 5f 73  E TABLE sqlite_s
110e0 74 61 74 34 28 74 62 6c 2c 69 64 78 2c 6e 45 71  tat4(tbl,idx,nEq
110f0 2c 6e 4c 74 2c 6e 44 4c 74 2c 73 61 6d 70 6c 65  ,nLt,nDLt,sample
11100 29 3b 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  );.</pre></block
11110 71 75 6f 74 65 3e 29 5e 0a 0a 3c 70 3e 54 68 65  quote>)^..<p>The
11120 72 65 20 61 72 65 20 74 79 70 69 63 61 6c 6c 79  re are typically
11130 20 62 65 74 77 65 65 6e 20 31 30 20 74 6f 20 34   between 10 to 4
11140 30 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65  0 entries in the
11150 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61   sqlite_stat4 ta
11160 62 6c 65 20 66 6f 72 0a 65 61 63 68 20 69 6e 64  ble for.each ind
11170 65 78 20 66 6f 72 20 77 68 69 63 68 20 73 74 61  ex for which sta
11180 74 69 73 74 69 63 73 20 61 72 65 20 61 76 61 69  tistics are avai
11190 6c 61 62 6c 65 2c 20 68 6f 77 65 76 65 72 20 74  lable, however t
111a0 68 65 73 65 20 6c 69 6d 69 74 73 20 61 72 65 0a  hese limits are.
111b0 6e 6f 74 20 68 61 72 64 20 62 6f 75 6e 64 73 2e  not hard bounds.
111c0 0a 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66  .The meanings of
111d0 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20   the columns in 
111e0 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34  the sqlite_stat4
111f0 20 74 61 62 6c 65 20 61 72 65 20 61 73 20 66 6f   table are as fo
11200 6c 6c 6f 77 73 3a 0a 0a 3c 63 65 6e 74 65 72 3e  llows:..<center>
11210 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 22  .<table border="
11220 30 22 20 77 69 64 74 68 3d 22 31 30 30 25 22 20  0" width="100%" 
11230 63 65 6c 6c 70 61 64 64 69 6e 67 3d 22 31 30 22  cellpadding="10"
11240 3e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e  >.<tr><td valign
11250 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69  ="top" align="ri
11260 67 68 74 22 3e 74 62 6c 3a 3c 2f 74 64 3e 0a 20  ght">tbl:</td>. 
11270 20 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c     <td>^(The sql
11280 69 74 65 5f 73 74 61 74 34 2e 74 62 6c 20 63 6f  ite_stat4.tbl co
11290 6c 75 6d 6e 20 68 6f 6c 64 73 20 6e 61 6d 65 20  lumn holds name 
112a0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
112b0 74 20 6f 77 6e 73 0a 20 20 20 20 74 68 65 20 69  t owns.    the i
112c0 6e 64 65 78 20 74 68 61 74 20 74 68 65 20 72 6f  ndex that the ro
112d0 77 20 64 65 73 63 72 69 62 65 73 29 5e 0a 0a 3c  w describes)^..<
112e0 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74  tr><td valign="t
112f0 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74  op" align="right
11300 22 3e 69 64 78 3a 3c 2f 74 64 3e 0a 20 20 20 20  ">idx:</td>.    
11310 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65  <td>^(The sqlite
11320 5f 73 74 61 74 34 2e 69 64 78 20 63 6f 6c 75 6d  _stat4.idx colum
11330 6e 20 68 6f 6c 64 73 20 6e 61 6d 65 20 6f 66 20  n holds name of 
11340 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 74  the index that t
11350 68 65 0a 20 20 20 20 72 6f 77 20 64 65 73 63 72  he.    row descr
11360 69 62 65 73 2c 20 6f 72 20 69 6e 20 74 68 65 20  ibes, or in the 
11370 63 61 73 65 20 6f 66 0a 20 20 20 20 61 6e 20 73  case of.    an s
11380 71 6c 69 74 65 5f 73 74 61 74 34 20 65 6e 74 72  qlite_stat4 entr
11390 79 20 66 6f 72 20 61 20 5b 57 49 54 48 4f 55 54  y for a [WITHOUT
113a0 20 52 4f 57 49 44 5d 20 74 61 62 6c 65 2c 20 74   ROWID] table, t
113b0 68 65 0a 20 20 20 20 6e 61 6d 65 20 6f 66 20 74  he.    name of t
113c0 68 65 20 74 61 62 6c 65 20 69 74 73 65 6c 66 2e  he table itself.
113d0 29 5e 0a 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  )^..<tr><td vali
113e0 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67 6e 3d 22  gn="top" align="
113f0 72 69 67 68 74 22 3e 73 61 6d 70 6c 65 3a 3c 2f  right">sample:</
11400 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68  td>.    <td>^(Th
11410 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73  e sqlite_stat4.s
11420 61 6d 70 6c 65 20 63 6f 6c 75 6d 6e 20 68 6f 6c  ample column hol
11430 64 73 20 61 20 42 4c 4f 42 0a 20 20 20 20 69 6e  ds a BLOB.    in
11440 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72   the [record for
11450 6d 61 74 5d 20 74 68 61 74 20 65 6e 63 6f 64 65  mat] that encode
11460 73 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  s the indexed co
11470 6c 75 6d 6e 73 20 66 6f 6c 6c 6f 77 65 64 20 62  lumns followed b
11480 79 0a 20 20 20 20 74 68 65 20 72 6f 77 69 64 20  y.    the rowid 
11490 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61 62 6c  for a rowid tabl
114a0 65 20 6f 72 20 62 79 20 74 68 65 20 63 6f 6c 75  e or by the colu
114b0 6d 6e 73 20 6f 66 20 74 68 65 20 70 72 69 6d 61  mns of the prima
114c0 72 79 20 6b 65 79 20 0a 20 20 20 20 66 6f 72 20  ry key .    for 
114d0 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  a WITHOUT ROWID 
114e0 74 61 62 6c 65 2e 29 5e 0a 20 20 20 20 5e 28 54  table.)^.    ^(T
114f0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e  he sqlite_stat4.
11500 73 61 6d 70 6c 65 20 42 4c 4f 42 20 66 6f 72 20  sample BLOB for 
11510 74 68 65 20 57 49 54 48 4f 55 54 20 52 4f 57 49  the WITHOUT ROWI
11520 44 20 74 61 62 6c 65 20 69 74 73 65 6c 66 20 0a  D table itself .
11530 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 6a 75 73      contains jus
11540 74 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  t the columns of
11550 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
11560 2e 29 5e 0a 20 20 20 20 4c 65 74 20 74 68 65 20  .)^.    Let the 
11570 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
11580 73 20 65 6e 63 6f 64 65 64 20 62 79 20 74 68 65  s encoded by the
11590 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 73 61   sqlite_stat4.sa
115a0 6d 70 6c 65 20 62 6c 6f 62 20 62 65 20 4e 2e 0a  mple blob be N..
115b0 20 20 20 20 5e 46 6f 72 20 69 6e 64 65 78 65 73      ^For indexes
115c0 20 6f 6e 20 61 6e 20 6f 72 64 69 6e 61 72 79 20   on an ordinary 
115d0 72 6f 77 69 64 20 74 61 62 6c 65 2c 20 4e 20 77  rowid table, N w
115e0 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20  ill be one more 
115f0 74 68 61 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  than the number 
11600 0a 20 20 20 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  .    of columns 
11610 69 6e 64 65 78 65 64 2e 0a 20 20 20 20 5e 46 6f  indexed..    ^Fo
11620 72 20 69 6e 64 65 78 65 73 20 6f 6e 20 57 49 54  r indexes on WIT
11630 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65  HOUT ROWID table
11640 73 2c 20 4e 20 77 69 6c 6c 20 62 65 20 74 68 65  s, N will be the
11650 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
11660 6e 73 0a 20 20 20 20 69 6e 64 65 78 65 64 20 70  ns.    indexed p
11670 6c 75 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  lus the number o
11680 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
11690 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 20 20   primary key..  
116a0 20 20 5e 46 6f 72 20 61 20 57 49 54 48 4f 55 54    ^For a WITHOUT
116b0 20 52 4f 57 49 44 20 74 61 62 6c 65 2c 20 4e 20   ROWID table, N 
116c0 77 69 6c 6c 20 62 65 20 74 68 65 20 6e 75 6d 62  will be the numb
116d0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
116e0 20 74 68 65 0a 20 20 20 20 70 72 69 6d 61 72 79   the.    primary
116f0 20 6b 65 79 2e 0a 0a 3c 74 72 3e 3c 74 64 20 76   key...<tr><td v
11700 61 6c 69 67 6e 3d 22 74 6f 70 22 20 61 6c 69 67  align="top" alig
11710 6e 3d 22 72 69 67 68 74 22 3e 6e 45 71 3a 3c 2f  n="right">nEq:</
11720 74 64 3e 0a 20 20 20 20 3c 74 64 3e 5e 28 54 68  td>.    <td>^(Th
11730 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 2e 6e  e sqlite_stat4.n
11740 45 71 20 63 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  Eq column holds 
11750 61 20 6c 69 73 74 20 6f 66 20 4e 20 69 6e 74 65  a list of N inte
11760 67 65 72 73 20 77 68 65 72 65 20 0a 20 20 20 20  gers where .    
11770 74 68 65 20 4b 2d 74 68 20 69 6e 74 65 67 65 72  the K-th integer
11780 20 69 73 20 74 68 65 20 61 70 70 72 6f 78 69 6d   is the approxim
11790 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  ate number of en
117a0 74 72 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64  tries in the ind
117b0 65 78 0a 20 20 20 20 77 68 6f 73 65 20 6c 65 66  ex.    whose lef
117c0 74 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e 73  t-most K columns
117d0 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74   exactly match t
117e0 68 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63  he K left-most c
117f0 6f 6c 75 6d 6e 73 0a 20 20 20 20 6f 66 20 74 68  olumns.    of th
11800 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a 3c 74 72  e sample.)^..<tr
11810 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  ><td valign="top
11820 22 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 3e  " align="right">
11830 6e 4c 74 3a 3c 2f 74 64 3e 0a 20 20 20 20 3c 74  nLt:</td>.    <t
11840 64 3e 5e 28 54 68 65 20 73 71 6c 69 74 65 5f 73  d>^(The sqlite_s
11850 74 61 74 34 2e 6e 4c 74 20 63 6f 6c 75 6d 6e 20  tat4.nLt column 
11860 68 6f 6c 64 73 20 61 20 6c 69 73 74 20 6f 66 20  holds a list of 
11870 4e 20 69 6e 74 65 67 65 72 73 20 77 68 65 72 65  N integers where
11880 0a 20 20 20 20 74 68 65 20 4b 2d 74 68 20 69 6e  .    the K-th in
11890 74 65 67 65 72 20 69 73 20 74 68 65 20 61 70 70  teger is the app
118a0 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20  roximate number 
118b0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  of entries in th
118c0 65 0a 20 20 20 20 69 6e 64 65 78 20 77 68 6f 73  e.    index whos
118d0 65 20 4b 20 6c 65 66 74 2d 6d 6f 73 74 20 63 6f  e K left-most co
118e0 6c 75 6d 6e 73 20 61 72 65 20 63 6f 6c 6c 65 63  lumns are collec
118f0 74 69 76 65 6c 79 20 6c 65 73 73 20 74 68 61 6e  tively less than
11900 20 74 68 65 20 0a 20 20 20 20 4b 20 6c 65 66 74   the .    K left
11910 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 73 20 6f 66  -most columns of
11920 20 74 68 65 20 73 61 6d 70 6c 65 2e 29 5e 0a 0a   the sample.)^..
11930 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 22  <tr><td valign="
11940 74 6f 70 22 20 61 6c 69 67 6e 3d 22 72 69 67 68  top" align="righ
11950 74 22 3e 6e 44 4c 74 3a 3c 2f 74 64 3e 0a 20 20  t">nDLt:</td>.  
11960 20 20 3c 74 64 3e 5e 28 54 68 65 20 73 71 6c 69    <td>^(The sqli
11970 74 65 5f 73 74 61 74 34 2e 6e 44 4c 74 20 63 6f  te_stat4.nDLt co
11980 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 20 6c 69 73  lumn holds a lis
11990 74 20 6f 66 20 4e 20 69 6e 74 65 67 65 72 73 20  t of N integers 
119a0 77 68 65 72 65 0a 20 20 20 20 74 68 65 20 4b 2d  where.    the K-
119b0 74 68 20 69 6e 74 65 67 65 72 20 69 73 20 74 68  th integer is th
119c0 65 20 61 70 70 72 6f 78 69 6d 61 74 65 0a 20 20  e approximate.  
119d0 20 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72    number of entr
119e0 69 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ies in the index
119f0 20 74 68 61 74 20 61 72 65 20 64 69 73 74 69 6e   that are distin
11a00 63 74 20 69 6e 20 74 68 65 20 66 69 72 73 74 20  ct in the first 
11a10 4b 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 0a 20 20  K columns and.  
11a20 20 20 77 68 65 72 65 20 74 68 65 20 6c 65 66 74    where the left
11a30 2d 6d 6f 73 74 20 4b 20 63 6f 6c 75 6d 6e 73 20  -most K columns 
11a40 61 72 65 20 63 6f 6c 6c 65 63 74 69 76 65 6c 79  are collectively
11a50 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6c   less than the l
11a60 65 66 74 2d 6d 6f 73 74 0a 20 20 20 20 4b 20 63  eft-most.    K c
11a70 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 73 61  olumns of the sa
11a80 6d 70 6c 65 2e 29 5e 0a 3c 2f 74 61 62 6c 65 3e  mple.)^.</table>
11a90 0a 3c 2f 63 65 6e 74 65 72 3e 0a 0a 3c 70 3e 54  .</center>..<p>T
11aa0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 34 20  he sqlite_stat4 
11ab0 69 73 20 61 20 67 65 6e 65 72 61 6c 69 7a 61 74  is a generalizat
11ac0 69 6f 6e 20 6f 66 20 74 68 65 20 73 71 6c 69 74  ion of the sqlit
11ad0 65 5f 73 74 61 74 33 20 74 61 62 6c 65 2e 20 20  e_stat3 table.  
11ae0 54 68 65 0a 73 71 6c 69 74 65 5f 73 74 61 74 33  The.sqlite_stat3
11af0 20 74 61 62 6c 65 20 70 72 6f 76 69 64 65 73 20   table provides 
11b00 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
11b10 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20  t the left-most 
11b20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 0a 69 6e 64  column of an.ind
11b30 65 78 20 77 68 65 72 65 61 73 20 74 68 65 20 73  ex whereas the s
11b40 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
11b50 65 20 70 72 6f 76 69 64 65 73 20 69 6e 66 6f 72  e provides infor
11b60 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 6c 6c  mation about all
11b70 20 63 6f 6c 75 6d 6e 73 0a 6f 66 20 74 68 65 20   columns.of the 
11b80 69 6e 64 65 78 2e 0a 0a 3c 70 3e 5e 54 68 65 72  index...<p>^Ther
11b90 65 20 63 61 6e 20 62 65 20 61 6e 20 61 72 62 69  e can be an arbi
11ba0 74 72 61 72 79 20 6e 75 6d 62 65 72 20 6f 66 20  trary number of 
11bb0 73 71 6c 69 74 65 5f 73 74 61 74 34 20 65 6e 74  sqlite_stat4 ent
11bc0 72 69 65 73 20 70 65 72 20 69 6e 64 65 78 2e 0a  ries per index..
11bd0 54 68 65 20 5b 41 4e 41 4c 59 5a 45 5d 20 63 6f  The [ANALYZE] co
11be0 6d 6d 61 6e 64 20 77 69 6c 6c 20 74 79 70 69 63  mmand will typic
11bf0 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 20 73 71  ally generate sq
11c00 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c 65  lite_stat4 table
11c10 73 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 20 62  s.that contain b
11c20 65 74 77 65 65 6e 20 31 30 20 61 6e 64 20 34 30  etween 10 and 40
11c30 20 73 61 6d 70 6c 65 73 20 74 68 61 74 20 61 72   samples that ar
11c40 65 20 64 69 73 74 72 69 62 75 74 65 64 20 61 63  e distributed ac
11c50 72 6f 73 73 0a 74 68 65 20 6b 65 79 20 73 70 61  ross.the key spa
11c60 63 65 20 61 6e 64 20 77 69 74 68 20 6c 61 72 67  ce and with larg
11c70 65 20 6e 45 71 20 76 61 6c 75 65 73 2e 0a 0a 3c  e nEq values...<
11c80 70 3e 5e 28 49 6e 20 61 20 77 65 6c 6c 2d 66 6f  p>^(In a well-fo
11c90 72 6d 65 64 20 73 71 6c 69 74 65 5f 73 74 61 74  rmed sqlite_stat
11ca0 34 20 74 61 62 6c 65 2c 20 74 68 65 20 73 61 6d  4 table, the sam
11cb0 70 6c 65 73 20 66 6f 72 20 61 6e 79 20 73 69 6e  ples for any sin
11cc0 67 6c 65 0a 69 6e 64 65 78 20 6d 75 73 74 20 61  gle.index must a
11cd0 70 70 65 61 72 20 69 6e 20 74 68 65 20 73 61 6d  ppear in the sam
11ce0 65 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65  e order that the
11cf0 79 20 6f 63 63 75 72 20 69 6e 20 74 68 65 20 69  y occur in the i
11d00 6e 64 65 78 2e 20 20 0a 49 6e 20 6f 74 68 65 72  ndex.  .In other
11d10 20 77 6f 72 64 73 2c 20 69 66 20 65 6e 74 72 79   words, if entry
11d20 20 53 31 20 69 73 20 65 61 72 6c 69 65 72 20 69   S1 is earlier i
11d30 6e 20 74 68 65 20 69 6e 64 65 78 20 62 2d 74 72  n the index b-tr
11d40 65 65 20 74 68 61 6e 20 0a 65 6e 74 72 79 20 53  ee than .entry S
11d50 32 2c 20 74 68 65 6e 20 69 6e 20 74 68 65 20 73  2, then in the s
11d60 71 6c 69 74 65 5f 73 74 61 74 34 20 74 61 62 6c  qlite_stat4 tabl
11d70 65 2c 20 73 61 6d 70 6c 65 20 53 31 20 6d 75 73  e, sample S1 mus
11d80 74 20 68 61 76 65 20 61 0a 73 6d 61 6c 6c 65 72  t have a.smaller
11d90 20 72 6f 77 69 64 20 74 68 61 6e 20 73 61 6d 70   rowid than samp
11da0 6c 65 20 53 32 2e 29 5e 0a 0a 3c 74 63 6c 3e 68  le S2.)^..<tcl>h
11db0 64 5f 66 72 61 67 6d 65 6e 74 20 72 6f 6c 6c 62  d_fragment rollb
11dc0 61 63 6b 6a 6f 75 72 6e 61 6c 20 7b 72 6f 6c 6c  ackjournal {roll
11dd0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 6f 72  back journal for
11de0 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 54  mat}</tcl>.<h1>T
11df0 68 65 20 52 6f 6c 6c 62 61 63 6b 20 4a 6f 75 72  he Rollback Jour
11e00 6e 61 6c 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65  nal</h1>..<p>The
11e10 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
11e20 6c 20 69 73 20 61 20 66 69 6c 65 20 61 73 73 6f  l is a file asso
11e30 63 69 61 74 65 64 20 77 69 74 68 20 65 61 63 68  ciated with each
11e40 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
11e50 0a 66 69 6c 65 20 74 68 61 74 20 68 6f 6c 64 20  .file that hold 
11e60 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  information used
11e70 20 74 6f 20 72 65 73 74 6f 72 65 20 74 68 65 20   to restore the 
11e80 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f  database file to
11e90 20 69 74 73 20 69 6e 69 74 69 61 6c 0a 73 74 61   its initial.sta
11ea0 74 65 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f  te during the co
11eb0 75 72 73 65 20 6f 66 20 61 20 74 72 61 6e 73 61  urse of a transa
11ec0 63 74 69 6f 6e 2e 0a 5e 54 68 65 20 72 6f 6c 6c  ction..^The roll
11ed0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  back journal fil
11ee0 65 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61  e is always loca
11ef0 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20  ted in the same 
11f00 0a 64 69 72 65 63 74 6f 72 79 20 61 73 20 74 68  .directory as th
11f10 65 20 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20  e database.file 
11f20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d 65  and has the same
11f30 20 6e 61 6d 65 20 61 73 20 74 68 65 20 64 61 74   name as the dat
11f40 61 62 61 73 65 20 66 69 6c 65 20 62 75 74 20 77  abase file but w
11f50 69 74 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22  ith the string."
11f60 3c 74 74 3e 2d 6a 6f 75 72 6e 61 6c 3c 2f 74 74  <tt>-journal</tt
11f70 3e 22 20 61 70 70 65 6e 64 65 64 2e 20 20 54 68  >" appended.  Th
11f80 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  ere can only be 
11f90 61 20 73 69 6e 67 6c 65 20 72 6f 6c 6c 62 61 63  a single rollbac
11fa0 6b 20 6a 6f 75 72 6e 61 6c 0a 61 73 73 6f 63 69  k journal.associ
11fb0 61 74 65 64 20 77 69 74 68 20 61 20 67 69 76 65  ated with a give
11fc0 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 68 65   database and he
11fd0 6e 63 65 20 74 68 65 72 65 20 63 61 6e 20 6f 6e  nce there can on
11fe0 6c 79 20 62 65 20 6f 6e 65 20 77 72 69 74 65 0a  ly be one write.
11ff0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 70 65 6e  transaction open
12000 20 61 67 61 69 6e 73 74 20 61 20 73 69 6e 67 6c   against a singl
12010 65 20 64 61 74 61 62 61 73 65 20 61 74 20 6f 6e  e database at on
12020 65 20 74 69 6d 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e  e time.</p>..<p>
12030 49 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  If a transaction
12040 20 69 73 20 61 62 6f 72 74 65 64 20 64 75 65 20   is aborted due 
12050 74 6f 20 61 6e 20 61 70 70 6c 69 63 61 74 69 6f  to an applicatio
12060 6e 20 63 72 61 73 68 2c 20 61 6e 20 6f 70 65 72  n crash, an oper
12070 61 74 69 6e 67 0a 73 79 73 74 65 6d 20 63 72 61  ating.system cra
12080 73 68 2c 20 6f 72 20 61 20 68 61 72 64 77 61 72  sh, or a hardwar
12090 65 20 70 6f 77 65 72 20 66 61 69 6c 75 72 65 20  e power failure 
120a0 6f 72 20 63 72 61 73 68 2c 20 74 68 65 6e 20 74  or crash, then t
120b0 68 65 20 64 61 74 61 62 61 73 65 20 6d 61 79 0a  he database may.
120c0 62 65 20 6c 65 66 74 20 69 6e 20 61 6e 20 69 6e  be left in an in
120d0 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74 65  consistent state
120e0 2e 20 20 5e 54 68 65 20 6e 65 78 74 20 74 69 6d  .  ^The next tim
120f0 65 20 53 51 4c 69 74 65 20 61 74 74 65 6d 70 74  e SQLite attempt
12100 73 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20 64 61  s to open.the da
12110 74 61 62 61 73 65 20 66 69 6c 65 2c 20 74 68 65  tabase file, the
12120 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74 68 65   presence of the
12130 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
12140 6c 20 66 69 6c 65 20 77 69 6c 6c 20 62 65 20 0a  l file will be .
12150 64 65 74 65 63 74 65 64 20 61 6e 64 20 74 68 65  detected and the
12160 20 6a 6f 75 72 6e 61 6c 20 77 69 6c 6c 20 62 65   journal will be
12170 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 70   automatically p
12180 6c 61 79 65 64 20 62 61 63 6b 20 74 6f 20 72 65  layed back to re
12190 73 74 6f 72 65 20 74 68 65 0a 64 61 74 61 62 61  store the.databa
121a0 73 65 20 74 6f 20 69 74 73 20 73 74 61 74 65 20  se to its state 
121b0 61 74 20 74 68 65 20 73 74 61 72 74 20 6f 66 20  at the start of 
121c0 74 68 65 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74  the incomplete t
121d0 72 61 6e 73 61 63 74 69 6f 6e 2e 3c 2f 70 3e 0a  ransaction.</p>.
121e0 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61 63 6b 20  .<p>^A rollback 
121f0 6a 6f 75 72 6e 61 6c 20 69 73 20 6f 6e 6c 79 20  journal is only 
12200 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65  considered to be
12210 20 76 61 6c 69 64 20 69 66 20 69 74 20 65 78 69   valid if it exi
12220 73 74 73 20 61 6e 64 0a 63 6f 6e 74 61 69 6e 73  sts and.contains
12230 20 61 20 76 61 6c 69 64 20 68 65 61 64 65 72 2e   a valid header.
12240 20 20 48 65 6e 63 65 20 61 20 74 72 61 6e 73 61    Hence a transa
12250 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 63 6f 6d  ction can be com
12260 6d 69 74 74 65 64 20 69 6e 20 6f 6e 65 0a 6f 66  mitted in one.of
12270 20 74 68 72 65 65 20 77 61 79 73 3a 0a 3c 6f 6c   three ways:.<ol
12280 3e 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f 6c 6c  >.<li>^(The roll
12290 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  back journal fil
122a0 65 20 63 61 6e 20 62 65 20 64 65 6c 65 74 65 64  e can be deleted
122b0 29 5e 2c 0a 3c 6c 69 3e 5e 28 54 68 65 20 72 6f  )^,.<li>^(The ro
122c0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66  llback journal f
122d0 69 6c 65 20 63 61 6e 20 62 65 20 74 72 75 6e 63  ile can be trunc
122e0 61 74 65 64 20 74 6f 20 7a 65 72 6f 20 6c 65 6e  ated to zero len
122f0 67 74 68 29 5e 2c 20 6f 72 0a 3c 6c 69 3e 5e 28  gth)^, or.<li>^(
12300 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68  The header of th
12310 65 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  e rollback journ
12320 61 6c 20 63 61 6e 20 62 65 20 6f 76 65 72 77 72  al can be overwr
12330 69 74 74 65 6e 20 77 69 74 68 0a 69 6e 76 61 6c  itten with.inval
12340 69 64 20 68 65 61 64 65 72 20 74 65 78 74 20 28  id header text (
12350 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 61 6c 6c  for example, all
12360 20 7a 65 72 6f 73 29 2e 29 5e 0a 3c 2f 6f 6c 3e   zeros).)^.</ol>
12370 0a 3c 70 3e 0a 5e 54 68 65 73 65 20 74 68 72 65  .<p>.^These thre
12380 65 20 77 61 79 73 20 6f 66 20 63 6f 6d 6d 69 74  e ways of commit
12390 74 69 6e 67 20 61 20 74 72 61 6e 73 61 63 74 69  ting a transacti
123a0 6f 6e 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  on correspond to
123b0 20 74 68 65 20 44 45 4c 45 54 45 2c 0a 54 52 55   the DELETE,.TRU
123c0 4e 43 41 54 45 2c 20 61 6e 64 20 50 45 52 53 49  NCATE, and PERSI
123d0 53 54 20 73 65 74 74 69 6e 67 73 2c 20 72 65 73  ST settings, res
123e0 70 65 63 74 69 76 65 6c 79 2c 20 6f 66 20 74 68  pectively, of th
123f0 65 20 5b 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20  e [journal_mode 
12400 70 72 61 67 6d 61 5d 2e 0a 3c 2f 70 3e 0a 0a 0a  pragma]..</p>...
12410 3c 70 3e 41 20 76 61 6c 69 64 20 72 6f 6c 6c 62  <p>A valid rollb
12420 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 62 65 67 69  ack journal begi
12430 6e 73 20 77 69 74 68 20 61 20 68 65 61 64 65 72  ns with a header
12440 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
12450 67 20 66 6f 72 6d 61 74 3a 3c 2f 70 3e 0a 0a 3c  g format:</p>..<
12460 63 65 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62  center>.<i>Rollb
12470 61 63 6b 20 4a 6f 75 72 6e 61 6c 20 48 65 61 64  ack Journal Head
12480 65 72 20 46 6f 72 6d 61 74 3c 2f 69 3e 3c 62 72  er Format</i><br
12490 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74 68 3d 22  >.<table width="
124a0 38 30 25 22 20 62 6f 72 64 65 72 3d 31 3e 0a 3c  80%" border=1>.<
124b0 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74 3c 74 68  tr><th>Offset<th
124c0 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63 72 69 70  >Size<th>Descrip
124d0 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c  tion.<tr><td val
124e0 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65  ign=top align=ce
124f0 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74 64 20 76  nter>0.    <td v
12500 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
12510 63 65 6e 74 65 72 3e 38 0a 20 20 20 20 3c 74 64  center>8.    <td
12520 3e 48 65 61 64 65 72 20 73 74 72 69 6e 67 3a 20  >Header string: 
12530 20 30 78 64 39 2c 20 30 78 64 35 2c 20 30 78 30   0xd9, 0xd5, 0x0
12540 35 2c 20 30 78 66 39 2c 20 30 78 32 30 2c 20 30  5, 0xf9, 0x20, 0
12550 78 61 31 2c 20 30 78 36 33 2c 20 30 78 64 37 0a  xa1, 0x63, 0xd7.
12560 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
12570 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
12580 38 0a 20 20 20 20 3c 74 64 20 76 61 6c 69 67 6e  8.    <td valign
12590 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
125a0 72 3e 34 0a 20 20 20 20 3c 74 64 3e 54 68 65 20  r>4.    <td>The 
125b0 22 50 61 67 65 20 43 6f 75 6e 74 22 20 2d 20 54  "Page Count" - T
125c0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
125d0 65 73 20 69 6e 20 74 68 65 20 6e 65 78 74 20 73  es in the next s
125e0 65 67 6d 65 6e 74 20 6f 66 20 74 68 65 20 0a 20  egment of the . 
125f0 20 20 20 20 20 20 20 6a 6f 75 72 6e 61 6c 2c 20         journal, 
12600 6f 72 20 2d 31 20 74 6f 0a 20 20 20 20 20 20 20  or -1 to.       
12610 20 6d 65 61 6e 20 61 6c 6c 20 63 6f 6e 74 65 6e   mean all conten
12620 74 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  t to the end of 
12630 74 68 65 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64  the file.<tr><td
12640 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12650 6e 3d 63 65 6e 74 65 72 3e 31 32 0a 20 20 20 20  n=center>12.    
12660 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12670 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
12680 20 20 3c 74 64 3e 41 20 72 61 6e 64 6f 6d 20 6e    <td>A random n
12690 6f 6e 63 65 20 66 6f 72 20 74 68 65 20 63 68 65  once for the che
126a0 63 6b 73 75 6d 0a 3c 74 72 3e 3c 74 64 20 76 61  cksum.<tr><td va
126b0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
126c0 65 6e 74 65 72 3e 31 36 0a 20 20 20 20 3c 74 64  enter>16.    <td
126d0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
126e0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
126f0 74 64 3e 49 6e 69 74 69 61 6c 20 73 69 7a 65 20  td>Initial size 
12700 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
12710 69 6e 20 70 61 67 65 73 0a 3c 74 72 3e 3c 74 64  in pages.<tr><td
12720 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12730 6e 3d 63 65 6e 74 65 72 3e 32 30 0a 20 20 20 20  n=center>20.    
12740 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12750 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
12760 20 20 3c 74 64 3e 53 69 7a 65 20 6f 66 20 61 20    <td>Size of a 
12770 64 69 73 6b 20 73 65 63 74 6f 72 20 61 73 73 75  disk sector assu
12780 6d 65 64 20 62 79 20 74 68 65 20 70 72 6f 63 65  med by the proce
12790 73 73 20 74 68 61 74 20 77 72 6f 74 65 20 74 68  ss that wrote th
127a0 69 73 0a 20 20 20 20 20 20 20 20 6a 6f 75 72 6e  is.        journ
127b0 61 6c 2e 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  al..<tr><td vali
127c0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
127d0 74 65 72 3e 32 34 0a 20 20 20 20 3c 74 64 20 76  ter>24.    <td v
127e0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
127f0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
12800 3e 53 69 7a 65 20 6f 66 20 70 61 67 65 73 20 69  >Size of pages i
12810 6e 20 74 68 69 73 20 6a 6f 75 72 6e 61 6c 2e 0a  n this journal..
12820 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65  </table>.</cente
12830 72 3e 0a 0a 3c 70 3e 5e 41 20 72 6f 6c 6c 62 61  r>..<p>^A rollba
12840 63 6b 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65  ck journal heade
12850 72 20 69 73 20 70 61 64 64 65 64 20 77 69 74 68  r is padded with
12860 20 7a 65 72 6f 73 20 6f 75 74 20 74 6f 20 74 68   zeros out to th
12870 65 20 73 69 7a 65 20 6f 66 20 61 20 0a 73 69 6e  e size of a .sin
12880 67 6c 65 20 73 65 63 74 6f 72 20 28 61 73 20 64  gle sector (as d
12890 65 66 69 6e 65 64 20 62 79 20 74 68 65 20 73 65  efined by the se
128a0 63 74 6f 72 20 73 69 7a 65 20 69 6e 74 65 67 65  ctor size intege
128b0 72 20 61 74 20 6f 66 66 73 65 74 20 32 30 29 2e  r at offset 20).
128c0 0a 54 68 65 20 68 65 61 64 65 72 20 69 73 20 69  .The header is i
128d0 6e 20 61 20 73 65 63 74 6f 72 20 62 79 20 69 74  n a sector by it
128e0 73 65 6c 66 20 73 6f 20 74 68 61 74 20 69 66 20  self so that if 
128f0 61 20 70 6f 77 65 72 20 6c 6f 73 73 20 6f 63 63  a power loss occ
12900 75 72 73 20 77 68 69 6c 65 0a 77 72 69 74 69 6e  urs while.writin
12910 67 20 74 68 65 20 73 65 63 74 6f 72 2c 20 69 6e  g the sector, in
12920 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 66  formation that f
12930 6f 6c 6c 6f 77 73 20 74 68 65 20 68 65 61 64 65  ollows the heade
12940 72 20 77 69 6c 6c 20 62 65 0a 28 68 6f 70 65 66  r will be.(hopef
12950 75 6c 6c 79 29 20 75 6e 64 61 6d 61 67 65 64 2e  ully) undamaged.
12960 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41 66 74 65 72 20  </p>..<p>^After 
12970 74 68 65 20 68 65 61 64 65 72 20 61 6e 64 20 7a  the header and z
12980 65 72 6f 20 70 61 64 64 69 6e 67 20 61 72 65 20  ero padding are 
12990 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 70 61 67  zero or more pag
129a0 65 20 72 65 63 6f 72 64 73 2e 20 20 5e 45 61 63  e records.  ^Eac
129b0 68 0a 70 61 67 65 20 72 65 63 6f 72 64 20 73 74  h.page record st
129c0 6f 72 65 73 20 61 20 63 6f 70 79 20 6f 66 20 74  ores a copy of t
129d0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
129e0 70 61 67 65 20 66 72 6f 6d 20 74 68 65 20 64 61  page from the da
129f0 74 61 62 61 73 65 20 66 69 6c 65 0a 62 65 66 6f  tabase file.befo
12a00 72 65 20 69 74 20 77 61 73 20 63 68 61 6e 67 65  re it was change
12a10 64 2e 20 20 5e 54 68 65 20 73 61 6d 65 20 70 61  d.  ^The same pa
12a20 67 65 20 6d 61 79 20 6e 6f 74 20 61 70 70 65 61  ge may not appea
12a30 72 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  r more than once
12a40 0a 77 69 74 68 69 6e 20 61 20 73 69 6e 67 6c 65  .within a single
12a50 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
12a60 6c 2e 0a 54 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  l..To rollback a
12a70 6e 20 69 6e 63 6f 6d 70 6c 65 74 65 20 74 72 61  n incomplete tra
12a80 6e 73 61 63 74 69 6f 6e 2c 20 61 20 70 72 6f 63  nsaction, a proc
12a90 65 73 73 0a 68 61 73 20 6d 65 72 65 6c 79 20 74  ess.has merely t
12aa0 6f 20 72 65 61 64 20 74 68 65 20 72 6f 6c 6c 62  o read the rollb
12ab0 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 72 6f 6d  ack journal from
12ac0 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 20 65 6e   beginning to en
12ad0 64 20 61 6e 64 0a 77 72 69 74 65 20 70 61 67 65  d and.write page
12ae0 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 6a  s found in the j
12af0 6f 75 72 6e 61 6c 20 62 61 63 6b 20 69 6e 74 6f  ournal back into
12b00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
12b10 6c 65 20 61 74 20 74 68 65 0a 61 70 70 72 6f 70  le at the.approp
12b20 72 69 61 74 65 20 6c 6f 63 61 74 69 6f 6e 2e 3c  riate location.<
12b30 2f 70 3e 0a 0a 3c 70 3e 4c 65 74 20 74 68 65 20  /p>..<p>Let the 
12b40 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
12b50 7a 65 20 28 74 68 65 20 76 61 6c 75 65 20 6f 66  ze (the value of
12b60 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 74 20   the integer at 
12b70 6f 66 66 73 65 74 20 32 34 20 0a 69 6e 20 74 68  offset 24 .in th
12b80 65 20 6a 6f 75 72 6e 61 6c 20 68 65 61 64 65 72  e journal header
12b90 29 20 62 65 20 4e 2e 0a 54 68 65 6e 20 74 68 65  ) be N..Then the
12ba0 20 66 6f 72 6d 61 74 20 6f 66 20 61 20 70 61 67   format of a pag
12bb0 65 20 72 65 63 6f 72 64 20 69 73 20 61 73 20 66  e record is as f
12bc0 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 63 65  ollows:</p>..<ce
12bd0 6e 74 65 72 3e 0a 3c 69 3e 52 6f 6c 6c 62 61 63  nter>.<i>Rollbac
12be0 6b 20 4a 6f 75 72 6e 61 6c 20 50 61 67 65 20 52  k Journal Page R
12bf0 65 63 6f 72 64 20 46 6f 72 6d 61 74 3c 2f 69 3e  ecord Format</i>
12c00 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69 64 74  <br>.<table widt
12c10 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72 3d 31  h="80%" border=1
12c20 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73 65 74  >.<tr><th>Offset
12c30 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65 73 63  <th>Size<th>Desc
12c40 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20  ription.<tr><td 
12c50 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12c60 3d 63 65 6e 74 65 72 3e 30 0a 20 20 20 20 3c 74  =center>0.    <t
12c70 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
12c80 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
12c90 3c 74 64 3e 54 68 65 20 70 61 67 65 20 6e 75 6d  <td>The page num
12ca0 62 65 72 20 69 6e 20 74 68 65 20 64 61 74 61 62  ber in the datab
12cb0 61 73 65 20 66 69 6c 65 0a 3c 74 72 3e 3c 74 64  ase file.<tr><td
12cc0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
12cd0 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c  n=center>4.    <
12ce0 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
12cf0 69 67 6e 3d 63 65 6e 74 65 72 3e 4e 0a 20 20 20  ign=center>N.   
12d00 20 3c 74 64 3e 4f 72 69 67 69 6e 61 6c 20 63 6f   <td>Original co
12d10 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 70 61 67  ntent of the pag
12d20 65 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 73  e prior to the s
12d30 74 61 72 74 20 6f 66 20 74 68 65 20 74 72 61 6e  tart of the tran
12d40 73 61 63 74 69 6f 6e 0a 3c 74 72 3e 3c 74 64 20  saction.<tr><td 
12d50 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e  valign=top align
12d60 3d 63 65 6e 74 65 72 3e 4e 2b 34 0a 20 20 20 20  =center>N+4.    
12d70 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61  <td valign=top a
12d80 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20  lign=center>4.  
12d90 20 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 0a 3c    <td>Checksum.<
12da0 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74 65 72  /table>.</center
12db0 3e 0a 0a 0a 3c 70 3e 5e 28 54 68 65 20 63 68 65  >...<p>^(The che
12dc0 63 6b 73 75 6d 20 69 73 20 61 6e 20 75 6e 73 69  cksum is an unsi
12dd0 67 6e 65 64 20 33 32 2d 62 69 74 20 69 6e 74 65  gned 32-bit inte
12de0 67 65 72 20 63 6f 6d 70 75 74 65 64 20 61 73 20  ger computed as 
12df0 66 6f 6c 6c 6f 77 73 3a 3c 2f 70 3e 0a 0a 3c 6f  follows:</p>..<o
12e00 6c 3e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c 69 7a  l>.<li>Initializ
12e10 65 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 74  e the checksum t
12e20 6f 20 74 68 65 20 63 68 65 63 6b 73 75 6d 20 6e  o the checksum n
12e30 6f 6e 63 65 20 76 61 6c 75 65 20 66 6f 75 6e 64  once value found
12e40 20 69 6e 20 74 68 65 0a 6a 6f 75 72 6e 61 6c 20   in the.journal 
12e50 68 65 61 64 65 72 20 61 74 20 6f 66 66 73 65 74  header at offset
12e60 20 31 32 2e 0a 3c 6c 69 3e 49 6e 69 74 69 61 6c   12..<li>Initial
12e70 69 7a 65 20 69 6e 64 65 78 20 58 20 74 6f 20 62  ize index X to b
12e80 65 20 4e 2d 32 30 30 20 28 77 68 65 72 65 20 4e  e N-200 (where N
12e90 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20   is the size of 
12ea0 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65 0a  a database page.
12eb0 69 6e 20 62 79 74 65 73 2e 0a 3c 6c 69 3e 49 6e  in bytes..<li>In
12ec0 74 65 72 70 72 65 74 20 74 68 65 20 66 6f 75 72  terpret the four
12ed0 20 62 79 74 65 73 20 61 74 20 6f 66 66 73 65 74   bytes at offset
12ee0 20 58 20 69 6e 74 6f 20 74 68 65 20 70 61 67 65   X into the page
12ef0 20 61 73 20 61 20 34 2d 62 79 74 65 20 62 69 67   as a 4-byte big
12f00 2d 65 6e 64 69 61 6e 0a 75 6e 73 69 67 6e 65 64  -endian.unsigned
12f10 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20 74   integer.  Add t
12f20 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 61 74  he value of that
12f30 20 69 6e 74 65 67 65 72 20 74 6f 20 74 68 65 20   integer to the 
12f40 63 68 65 63 6b 73 75 6d 2e 0a 3c 6c 69 3e 53 75  checksum..<li>Su
12f50 62 74 72 61 63 65 20 32 30 30 20 66 72 6f 6d 20  btrace 200 from 
12f60 58 2e 0a 3c 6c 69 3e 49 66 20 58 20 69 73 20 67  X..<li>If X is g
12f70 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
12f80 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 67 6f  qual to zero, go
12f90 20 62 61 63 6b 20 74 6f 20 73 74 65 70 20 33 2e   back to step 3.
12fa0 0a 3c 2f 6f 6c 3e 29 5e 0a 0a 3c 70 3e 54 68 65  .</ol>)^..<p>The
12fb0 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 20   checksum value 
12fc0 69 73 20 75 73 65 64 20 74 6f 20 67 75 61 72 64  is used to guard
12fd0 20 61 67 61 69 6e 73 74 20 69 6e 63 6f 6d 70 6c   against incompl
12fe0 65 74 65 20 77 72 69 74 65 73 20 6f 66 0a 61 20  ete writes of.a 
12ff0 6a 6f 75 72 6e 61 6c 20 70 61 67 65 20 72 65 63  journal page rec
13000 6f 72 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  ord following a 
13010 70 6f 77 65 72 20 66 61 69 6c 75 72 65 2e 20 20  power failure.  
13020 41 20 64 69 66 66 65 72 65 6e 74 20 72 61 6e 64  A different rand
13030 6f 6d 20 6e 6f 6e 63 65 0a 69 73 20 75 73 65 64  om nonce.is used
13040 20 65 61 63 68 20 74 69 6d 65 20 61 20 74 72 61   each time a tra
13050 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
13060 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ted in order to 
13070 6d 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 69 73  minimize the ris
13080 6b 0a 74 68 61 74 20 75 6e 77 72 69 74 74 65 6e  k.that unwritten
13090 20 73 65 63 74 6f 72 73 20 6d 69 67 68 74 20 62   sectors might b
130a0 79 20 63 68 61 6e 63 65 20 63 6f 6e 74 61 69 6e  y chance contain
130b0 20 64 61 74 61 20 66 72 6f 6d 20 74 68 65 20 73   data from the s
130c0 61 6d 65 20 70 61 67 65 0a 74 68 61 74 20 77 61  ame page.that wa
130d0 73 20 61 20 70 61 72 74 20 6f 66 20 70 72 69 6f  s a part of prio
130e0 72 20 6a 6f 75 72 6e 61 6c 73 2e 20 20 42 79 20  r journals.  By 
130f0 63 68 61 6e 67 69 6e 67 20 74 68 65 20 6e 6f 6e  changing the non
13100 63 65 20 66 6f 72 20 65 61 63 68 0a 74 72 61 6e  ce for each.tran
13110 73 61 63 74 69 6f 6e 2c 20 73 74 61 6c 65 20 64  saction, stale d
13120 61 74 61 20 6f 6e 20 64 69 73 6b 20 77 69 6c 6c  ata on disk will
13130 20 73 74 69 6c 6c 20 67 65 6e 65 72 61 74 65 20   still generate 
13140 61 6e 20 69 6e 63 6f 72 72 65 63 74 20 63 68 65  an incorrect che
13150 63 6b 73 75 6d 0a 61 6e 64 20 62 65 20 64 65 74  cksum.and be det
13160 65 63 74 65 64 20 77 69 74 68 20 68 69 67 68 20  ected with high 
13170 70 72 6f 62 61 62 69 6c 69 74 79 2e 20 20 54 68  probability.  Th
13180 65 20 63 68 65 63 6b 73 75 6d 20 6f 6e 6c 79 20  e checksum only 
13190 75 73 65 73 20 61 20 73 70 61 72 73 65 20 73 61  uses a sparse sa
131a0 6d 70 6c 65 0a 6f 66 20 33 32 2d 62 69 74 20 77  mple.of 32-bit w
131b0 6f 72 64 73 20 66 72 6f 6d 20 74 68 65 20 64 61  ords from the da
131c0 74 61 20 72 65 63 6f 72 64 20 66 6f 72 20 70 65  ta record for pe
131d0 72 66 6f 72 6d 61 6e 63 65 20 72 65 61 73 6f 6e  rformance reason
131e0 73 20 2d 20 64 65 73 69 67 6e 20 73 74 75 64 69  s - design studi
131f0 65 73 20 0a 64 75 72 69 6e 67 20 74 68 65 20 70  es .during the p
13200 6c 61 6e 6e 69 6e 67 20 70 68 61 73 65 73 20 6f  lanning phases o
13210 66 20 53 51 4c 69 74 65 20 33 2e 30 2e 30 20 73  f SQLite 3.0.0 s
13220 68 6f 77 65 64 0a 61 20 73 69 67 6e 69 66 69 63  howed.a signific
13230 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ant performance 
13240 68 69 74 20 69 6e 20 63 68 65 63 6b 73 75 6d 6d  hit in checksumm
13250 69 6e 67 20 74 68 65 20 65 6e 74 69 72 65 20 70  ing the entire p
13260 61 67 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 4c 65 74  age.</p>..<p>Let
13270 20 74 68 65 20 70 61 67 65 20 63 6f 75 6e 74 20   the page count 
13280 76 61 6c 75 65 20 61 74 20 6f 66 66 73 65 74 20  value at offset 
13290 38 20 69 6e 20 74 68 65 20 6a 6f 75 72 6e 61 6c  8 in the journal
132a0 20 68 65 61 64 65 72 20 62 65 20 4d 2e 0a 5e 49   header be M..^I
132b0 66 20 4d 20 69 73 20 67 72 65 61 74 65 72 20 74  f M is greater t
132c0 68 61 6e 20 7a 65 72 6f 20 74 68 65 6e 20 61 66  han zero then af
132d0 74 65 72 20 4d 20 70 61 67 65 20 72 65 63 6f 72  ter M page recor
132e0 64 73 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66  ds the journal f
132f0 69 6c 65 0a 6d 61 79 20 62 65 20 7a 65 72 6f 20  ile.may be zero 
13300 70 61 64 64 65 64 20 6f 75 74 20 74 6f 20 74 68  padded out to th
13310 65 20 6e 65 78 74 20 6d 75 6c 74 69 70 6c 65 20  e next multiple 
13320 6f 66 20 74 68 65 20 73 65 63 74 6f 72 20 73 69  of the sector si
13330 7a 65 20 61 6e 64 20 61 6e 6f 74 68 65 72 0a 6a  ze and another.j
13340 6f 75 72 6e 61 6c 20 68 65 61 64 65 72 20 6d 61  ournal header ma
13350 79 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 20  y be inserted.  
13360 5e 41 6c 6c 20 6a 6f 75 72 6e 61 6c 20 68 65 61  ^All journal hea
13370 64 65 72 73 20 77 69 74 68 69 6e 20 74 68 65 20  ders within the 
13380 73 61 6d 65 0a 6a 6f 75 72 6e 61 6c 20 6d 75 73  same.journal mus
13390 74 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 73 61  t contain the sa
133a0 6d 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  me database page
133b0 20 73 69 7a 65 20 61 6e 64 20 73 65 63 74 6f 72   size and sector
133c0 20 73 69 7a 65 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e   size.</p>..<p>^
133d0 49 66 20 4d 20 69 73 20 2d 31 20 69 6e 20 74 68  If M is -1 in th
133e0 65 20 69 6e 69 74 69 61 6c 20 6a 6f 75 72 6e 61  e initial journa
133f0 6c 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 74  l header, then t
13400 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
13410 65 20 72 65 63 6f 72 64 73 0a 74 68 61 74 20 66  e records.that f
13420 6f 6c 6c 6f 77 20 69 73 20 63 6f 6d 70 75 74 65  ollow is compute
13430 64 20 62 79 20 63 6f 6d 70 75 74 69 6e 67 20 68  d by computing h
13440 6f 77 20 6d 61 6e 79 20 70 61 67 65 20 72 65 63  ow many page rec
13450 6f 72 64 73 20 77 69 6c 6c 20 66 69 74 20 69 6e  ords will fit in
13460 0a 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20 73  .the available s
13470 70 61 63 65 20 6f 66 20 74 68 65 20 72 65 6d 61  pace of the rema
13480 69 6e 64 65 72 20 6f 66 20 74 68 65 20 6a 6f 75  inder of the jou
13490 72 6e 61 6c 20 66 69 6c 65 2e 3c 2f 70 3e 0a 0a  rnal file.</p>..
134a0 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65 6e 74  <tcl>hd_fragment
134b0 20 77 61 6c 66 6f 72 6d 61 74 20 7b 57 41 4c 20   walformat {WAL 
134c0 66 6f 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68  format}</tcl>.<h
134d0 31 3e 54 68 65 20 57 72 69 74 65 2d 41 68 65 61  1>The Write-Ahea
134e0 64 20 4c 6f 67 3c 2f 68 31 3e 0a 0a 3c 70 3e 42  d Log</h1>..<p>B
134f0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 5b 76  eginning with [v
13500 65 72 73 69 6f 6e 20 33 2e 37 2e 30 5d 2c 20 53  ersion 3.7.0], S
13510 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 61  QLite supports a
13520 20 6e 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e   new transaction
13530 0a 63 6f 6e 74 72 6f 6c 20 6d 65 63 68 61 6e 69  .control mechani
13540 73 6d 20 63 61 6c 6c 65 64 20 22 5b 57 41 4c 20  sm called "[WAL 
13550 7c 20 77 72 69 74 65 2d 61 68 65 61 64 20 6c 6f  | write-ahead lo
13560 67 5d 22 20 6f 72 20 22 5b 57 41 4c 5d 22 2e 0a  g]" or "[WAL]"..
13570 5e 57 68 65 6e 20 61 20 64 61 74 61 62 61 73 65  ^When a database
13580 20 69 73 20 69 6e 20 57 41 4c 20 6d 6f 64 65 2c   is in WAL mode,
13590 20 61 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 73   all connections
135a0 20 74 6f 20 74 68 61 74 20 64 61 74 61 62 61 73   to that databas
135b0 65 20 6d 75 73 74 0a 75 73 65 20 74 68 65 20 57  e must.use the W
135c0 41 4c 2e 20 20 5e 41 20 70 61 72 74 69 63 75 6c  AL.  ^A particul
135d0 61 72 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c  ar database will
135e0 20 75 73 65 20 65 69 74 68 65 72 20 61 20 72 6f   use either a ro
135f0 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 0a 6f  llback journal.o
13600 72 20 61 20 57 41 4c 2c 20 62 75 74 20 6e 6f 74  r a WAL, but not
13610 20 62 6f 74 68 20 61 74 20 74 68 65 20 73 61 6d   both at the sam
13620 65 20 74 69 6d 65 2e 0a 5e 54 68 65 20 57 41 4c  e time..^The WAL
13630 20 69 73 20 61 6c 77 61 79 73 20 6c 6f 63 61 74   is always locat
13640 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 64  ed in the same d
13650 69 72 65 63 74 6f 72 79 20 61 73 20 74 68 65 20  irectory as the 
13660 64 61 74 61 62 61 73 65 0a 66 69 6c 65 20 61 6e  database.file an
13670 64 20 68 61 73 20 74 68 65 20 73 61 6d 65 20 6e  d has the same n
13680 61 6d 65 20 61 73 20 74 68 65 20 64 61 74 61 62  ame as the datab
13690 61 73 65 20 66 69 6c 65 20 62 75 74 20 77 69 74  ase file but wit
136a0 68 20 74 68 65 20 73 74 72 69 6e 67 0a 22 3c 74  h the string."<t
136b0 74 3e 2d 77 61 6c 3c 2f 74 74 3e 22 20 61 70 70  t>-wal</tt>" app
136c0 65 6e 64 65 64 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e  ended.</p>..<h2>
136d0 57 41 4c 20 46 69 6c 65 20 46 6f 72 6d 61 74 3c  WAL File Format<
136e0 2f 68 32 3e 0a 0a 3c 70 3e 41 20 57 41 4c 20 66  /h2>..<p>A WAL f
136f0 69 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ile consists of 
13700 61 20 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65  a header followe
13710 64 20 62 79 20 7a 65 72 6f 20 6f 72 20 6d 6f 72  d by zero or mor
13720 65 20 22 66 72 61 6d 65 73 22 2e 0a 45 61 63 68  e "frames"..Each
13730 20 66 72 61 6d 65 20 72 65 63 6f 72 64 73 20 74   frame records t
13740 68 65 20 72 65 76 69 73 65 64 20 63 6f 6e 74 65  he revised conte
13750 6e 74 20 6f 66 20 61 20 73 69 6e 67 6c 65 20 70  nt of a single p
13760 61 67 65 20 66 72 6f 6d 20 74 68 65 0a 64 61 74  age from the.dat
13770 61 62 61 73 65 20 66 69 6c 65 2e 20 20 41 6c 6c  abase file.  All
13780 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
13790 64 61 74 61 62 61 73 65 20 61 72 65 20 72 65 63  database are rec
137a0 6f 72 64 65 64 20 62 79 20 77 72 69 74 69 6e 67  orded by writing
137b0 0a 66 72 61 6d 65 73 20 69 6e 74 6f 20 74 68 65  .frames into the
137c0 20 57 41 4c 2e 20 20 54 72 61 6e 73 61 63 74 69   WAL.  Transacti
137d0 6f 6e 73 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20  ons commit when 
137e0 61 20 66 72 61 6d 65 20 69 73 20 77 72 69 74 74  a frame is writt
137f0 65 6e 20 74 68 61 74 0a 63 6f 6e 74 61 69 6e 73  en that.contains
13800 20 61 20 63 6f 6d 6d 69 74 20 6d 61 72 6b 65 72   a commit marker
13810 2e 20 20 5e 41 20 73 69 6e 67 6c 65 20 57 41 4c  .  ^A single WAL
13820 20 63 61 6e 20 61 6e 64 20 75 73 75 61 6c 6c 79   can and usually
13830 20 64 6f 65 73 20 72 65 63 6f 72 64 20 0a 6d 75   does record .mu
13840 6c 74 69 70 6c 65 20 74 72 61 6e 73 61 63 74 69  ltiple transacti
13850 6f 6e 73 2e 20 20 50 65 72 69 6f 64 69 63 61 6c  ons.  Periodical
13860 6c 79 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ly, the content 
13870 6f 66 20 74 68 65 20 57 41 4c 20 69 73 0a 74 72  of the WAL is.tr
13880 61 6e 73 66 65 72 72 65 64 20 62 61 63 6b 20 69  ansferred back i
13890 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
138a0 20 66 69 6c 65 20 69 6e 20 61 6e 20 6f 70 65 72   file in an oper
138b0 61 74 69 6f 6e 20 63 61 6c 6c 65 64 20 61 0a 22  ation called a."
138c0 63 68 65 63 6b 70 6f 69 6e 74 22 2e 3c 2f 70 3e  checkpoint".</p>
138d0 0a 0a 3c 70 3e 5e 41 20 73 69 6e 67 6c 65 20 57  ..<p>^A single W
138e0 41 4c 20 66 69 6c 65 20 63 61 6e 20 62 65 20 72  AL file can be r
138f0 65 75 73 65 64 20 6d 75 6c 74 69 70 6c 65 20 74  eused multiple t
13900 69 6d 65 73 2e 20 20 5e 49 6e 20 6f 74 68 65 72  imes.  ^In other
13910 20 77 6f 72 64 73 2c 20 74 68 65 0a 57 41 4c 20   words, the.WAL 
13920 63 61 6e 20 66 69 6c 6c 20 75 70 20 77 69 74 68  can fill up with
13930 20 66 72 61 6d 65 73 20 61 6e 64 20 74 68 65 6e   frames and then
13940 20 62 65 20 63 68 65 63 6b 70 6f 69 6e 74 65 64   be checkpointed
13950 20 61 6e 64 20 74 68 65 6e 20 6e 65 77 0a 66 72   and then new.fr
13960 61 6d 65 73 20 63 61 6e 20 6f 76 65 72 77 72 69  ames can overwri
13970 74 65 20 74 68 65 20 6f 6c 64 20 6f 6e 65 73 2e  te the old ones.
13980 20 20 5e 41 20 57 41 4c 20 61 6c 77 61 79 73 20    ^A WAL always 
13990 67 72 6f 77 73 20 66 72 6f 6d 20 62 65 67 69 6e  grows from begin
139a0 6e 69 6e 67 0a 74 6f 77 61 72 64 20 74 68 65 20  ning.toward the 
139b0 65 6e 64 2e 20 20 43 68 65 63 6b 73 75 6d 73 20  end.  Checksums 
139c0 61 6e 64 20 63 6f 75 6e 74 65 72 73 20 61 74 74  and counters att
139d0 61 63 68 65 64 20 74 6f 20 65 61 63 68 20 66 72  ached to each fr
139e0 61 6d 65 20 61 72 65 0a 75 73 65 64 20 74 6f 20  ame are.used to 
139f0 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 20  determine which 
13a00 66 72 61 6d 65 73 20 77 69 74 68 69 6e 20 74 68  frames within th
13a10 65 20 57 41 4c 20 61 72 65 20 76 61 6c 69 64 20  e WAL are valid 
13a20 61 6e 64 20 77 68 69 63 68 0a 61 72 65 20 6c 65  and which.are le
13a30 66 74 6f 76 65 72 73 20 66 72 6f 6d 20 70 72 69  ftovers from pri
13a40 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 73 2e 3c  or checkpoints.<
13a50 2f 70 3e 0a 0a 3c 70 3e 5e 28 54 68 65 20 57 41  /p>..<p>^(The WA
13a60 4c 20 68 65 61 64 65 72 20 69 73 20 33 32 20 62  L header is 32 b
13a70 79 74 65 73 20 69 6e 20 73 69 7a 65 20 61 6e 64  ytes in size and
13a80 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
13a90 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 69 67 68 74   following eight
13aa0 0a 62 69 67 2d 65 6e 64 69 61 6e 20 33 32 2d 62  .big-endian 32-b
13ab0 69 74 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  it unsigned inte
13ac0 67 65 72 20 76 61 6c 75 65 73 3a 3c 2f 70 3e 0a  ger values:</p>.
13ad0 0a 3c 63 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c  .<center>.<i>WAL
13ae0 20 48 65 61 64 65 72 20 46 6f 72 6d 61 74 3c 2f   Header Format</
13af0 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65 20 77 69  i><br>.<table wi
13b00 64 74 68 3d 22 38 30 25 22 20 62 6f 72 64 65 72  dth="80%" border
13b10 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f 66 66 73  =1>.<tr><th>Offs
13b20 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68 3e 44 65  et<th>Size<th>De
13b30 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72 3e 3c 74  scription.<tr><t
13b40 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
13b50 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74 64 20 76  gn=center>0<td v
13b60 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
13b70 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
13b80 3e 4d 61 67 69 63 20 6e 75 6d 62 65 72 2e 20 20  >Magic number.  
13b90 30 78 33 37 37 66 30 36 38 32 20 6f 72 20 30 78  0x377f0682 or 0x
13ba0 33 37 37 66 30 36 38 33 0a 3c 74 72 3e 3c 74 64  377f0683.<tr><td
13bb0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13bc0 6e 3d 63 65 6e 74 65 72 3e 34 3c 74 64 20 76 61  n=center>4<td va
13bd0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13be0 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13bf0 46 69 6c 65 20 66 6f 72 6d 61 74 20 76 65 72 73  File format vers
13c00 69 6f 6e 2e 20 20 43 75 72 72 65 6e 74 6c 79 20  ion.  Currently 
13c10 33 30 30 37 30 30 30 2e 0a 3c 74 72 3e 3c 74 64  3007000..<tr><td
13c20 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
13c30 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76 61  n=center>8<td va
13c40 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13c50 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e  enter>4.    <td>
13c60 44 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  Database page si
13c70 7a 65 2e 20 20 45 78 61 6d 70 6c 65 3a 20 31 30  ze.  Example: 10
13c80 32 34 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  24.<tr><td valig
13c90 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
13ca0 65 72 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>12<td valign=
13cb0 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13cc0 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b  >4.    <td>Check
13cd0 70 6f 69 6e 74 20 73 65 71 75 65 6e 63 65 20 6e  point sequence n
13ce0 75 6d 62 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61  umber.<tr><td va
13cf0 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13d00 65 6e 74 65 72 3e 31 36 3c 74 64 20 76 61 6c 69  enter>16<td vali
13d10 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13d20 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61  ter>4.    <td>Sa
13d30 6c 74 2d 31 3a 20 72 61 6e 64 6f 6d 20 69 6e 74  lt-1: random int
13d40 65 67 65 72 20 69 6e 63 72 65 6d 65 6e 74 65 64  eger incremented
13d50 20 77 69 74 68 20 65 61 63 68 20 63 68 65 63 6b   with each check
13d60 70 6f 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61  point.<tr><td va
13d70 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63  lign=top align=c
13d80 65 6e 74 65 72 3e 32 30 3c 74 64 20 76 61 6c 69  enter>20<td vali
13d90 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13da0 74 65 72 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61  ter>4.    <td>Sa
13db0 6c 74 2d 32 3a 20 61 20 64 69 66 66 65 72 65 6e  lt-2: a differen
13dc0 74 20 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 20  t random number 
13dd0 66 6f 72 20 65 61 63 68 20 63 68 65 63 6b 70 6f  for each checkpo
13de0 69 6e 74 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69  int.<tr><td vali
13df0 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e  gn=top align=cen
13e00 74 65 72 3e 32 34 3c 74 64 20 76 61 6c 69 67 6e  ter>24<td valign
13e10 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65  =top align=cente
13e20 72 3e 34 0a 20 20 20 20 3c 74 64 3e 43 68 65 63  r>4.    <td>Chec
13e30 6b 73 75 6d 2d 31 3a 20 46 69 72 73 74 20 70 61  ksum-1: First pa
13e40 72 74 20 6f 66 20 61 20 63 68 65 63 6b 73 75 6d  rt of a checksum
13e50 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 32 34   on the first 24
13e60 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
13e70 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d  .<tr><td valign=
13e80 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
13e90 3e 32 38 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f  >28<td valign=to
13ea0 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34  p align=center>4
13eb0 0a 20 20 20 20 3c 74 64 3e 43 68 65 63 6b 73 75  .    <td>Checksu
13ec0 6d 2d 32 3a 20 53 65 63 6f 6e 64 20 70 61 72 74  m-2: Second part
13ed0 20 6f 66 20 74 68 65 20 63 68 65 63 6b 73 75 6d   of the checksum
13ee0 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 32 34   on the first 24
13ef0 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
13f00 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 63 65 6e 74  .</table>.</cent
13f10 65 72 3e 29 5e 0a 0a 3c 70 3e 5e 49 6d 6d 65 64  er>)^..<p>^Immed
13f20 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67  iately following
13f30 20 74 68 65 20 77 61 6c 2d 68 65 61 64 65 72 20   the wal-header 
13f40 61 72 65 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65  are zero or more
13f50 20 66 72 61 6d 65 73 2e 20 5e 45 61 63 68 0a 66   frames. ^Each.f
13f60 72 61 6d 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  rame consists of
13f70 20 61 20 32 34 2d 62 79 74 65 20 66 72 61 6d 65   a 24-byte frame
13f80 2d 68 65 61 64 65 72 20 66 6f 6c 6c 6f 77 65 64  -header followed
13f90 20 62 79 20 61 20 3c 69 3e 70 61 67 65 2d 73 69   by a <i>page-si
13fa0 7a 65 3c 2f 69 3e 20 62 79 74 65 73 0a 6f 66 20  ze</i> bytes.of 
13fb0 70 61 67 65 20 64 61 74 61 2e 20 5e 28 54 68 65  page data. ^(The
13fc0 20 66 72 61 6d 65 2d 68 65 61 64 65 72 20 69 73   frame-header is
13fd0 20 73 69 78 20 62 69 67 2d 65 6e 64 69 61 6e 20   six big-endian 
13fe0 33 32 2d 62 69 74 20 75 6e 73 69 67 6e 65 64 20  32-bit unsigned 
13ff0 0a 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 2c  .integer values,
14000 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 3c 63   as follows:..<c
14010 65 6e 74 65 72 3e 0a 3c 69 3e 57 41 4c 20 46 72  enter>.<i>WAL Fr
14020 61 6d 65 20 48 65 61 64 65 72 20 46 6f 72 6d 61  ame Header Forma
14030 74 3c 2f 69 3e 3c 62 72 3e 0a 3c 74 61 62 6c 65  t</i><br>.<table
14040 20 77 69 64 74 68 3d 22 38 30 25 22 20 62 6f 72   width="80%" bor
14050 64 65 72 3d 31 3e 0a 3c 74 72 3e 3c 74 68 3e 4f  der=1>.<tr><th>O
14060 66 66 73 65 74 3c 74 68 3e 53 69 7a 65 3c 74 68  ffset<th>Size<th
14070 3e 44 65 73 63 72 69 70 74 69 6f 6e 0a 3c 74 72  >Description.<tr
14080 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
14090 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 30 3c 74  align=center>0<t
140a0 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
140b0 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20 20  gn=center>4.    
140c0 3c 74 64 3e 50 61 67 65 20 6e 75 6d 62 65 72 0a  <td>Page number.
140d0 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74  <tr><td valign=t
140e0 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e  op align=center>
140f0 34 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  4<td valign=top 
14100 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20  align=center>4. 
14110 20 20 20 3c 74 64 3e 46 6f 72 20 63 6f 6d 6d 69     <td>For commi
14120 74 20 72 65 63 6f 72 64 73 2c 20 74 68 65 20 73  t records, the s
14130 69 7a 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  ize of the datab
14140 61 73 65 20 66 69 6c 65 20 69 6e 20 70 61 67 65  ase file in page
14150 73 0a 20 20 20 20 20 20 20 20 61 66 74 65 72 20  s.        after 
14160 74 68 65 20 63 6f 6d 6d 69 74 2e 20 20 46 6f 72  the commit.  For
14170 20 61 6c 6c 20 6f 74 68 65 72 20 72 65 63 6f 72   all other recor
14180 64 73 2c 20 7a 65 72 6f 2e 0a 3c 74 72 3e 3c 74  ds, zero..<tr><t
14190 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69  d valign=top ali
141a0 67 6e 3d 63 65 6e 74 65 72 3e 38 3c 74 64 20 76  gn=center>8<td v
141b0 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
141c0 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
141d0 3e 53 61 6c 74 2d 31 20 63 6f 70 69 65 64 20 66  >Salt-1 copied f
141e0 72 6f 6d 20 74 68 65 20 57 41 4c 20 68 65 61 64  rom the WAL head
141f0 65 72 0a 3c 74 72 3e 3c 74 64 20 76 61 6c 69 67  er.<tr><td valig
14200 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74  n=top align=cent
14210 65 72 3e 31 32 3c 74 64 20 76 61 6c 69 67 6e 3d  er>12<td valign=
14220 74 6f 70 20 61 6c 69 67 6e 3d 63 65 6e 74 65 72  top align=center
14230 3e 34 0a 20 20 20 20 3c 74 64 3e 53 61 6c 74 2d  >4.    <td>Salt-
14240 32 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  2 copied from th
14250 65 20 57 41 4c 20 68 65 61 64 65 72 0a 3c 74 72  e WAL header.<tr
14260 3e 3c 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20  ><td valign=top 
14270 61 6c 69 67 6e 3d 63 65 6e 74 65 72 3e 31 36 3c  align=center>16<
14280 74 64 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c  td valign=top al
14290 69 67 6e 3d 63 65 6e 74 65 72 3e 34 0a 20 20 20  ign=center>4.   
142a0 20 3c 74 64 3e 43 68 65 63 6b 73 75 6d 2d 31 3a   <td>Checksum-1:
142b0 20 20 43 75 6d 75 6c 61 74 69 76 65 20 63 68 65    Cumulative che
142c0 63 6b 73 75 6d 20 75 70 20 74 68 72 6f 75 67 68  cksum up through
142d0 20 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 20 74   and including t
142e0 68 69 73 20 70 61 67 65 0a 3c 74 72 3e 3c 74 64  his page.<tr><td
142f0 20 76 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67   valign=top alig
14300 6e 3d 63 65 6e 74 65 72 3e 32 30 3c 74 64 20 76  n=center>20<td v
14310 61 6c 69 67 6e 3d 74 6f 70 20 61 6c 69 67 6e 3d  align=top align=
14320 63 65 6e 74 65 72 3e 34 0a 20 20 20 20 3c 74 64  center>4.    <td
14330 3e 43 68 65 63 6b 73 75 6d 2d 32 3a 20 20 53 65  >Checksum-2:  Se
14340 63 6f 6e 64 20 68 61 6c 66 20 6f 66 20 74 68 65  cond half of the
14350 20 63 75 6d 75 6c 61 74 69 76 65 20 63 68 65 63   cumulative chec
14360 6b 73 75 6d 2e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  ksum..</table>.<
14370 2f 63 65 6e 74 65 72 3e 29 5e 0a 0a 5e 28 3c 70  /center>)^..^(<p
14380 3e 41 20 66 72 61 6d 65 20 69 73 20 63 6f 6e 73  >A frame is cons
14390 69 64 65 72 65 64 20 76 61 6c 69 64 20 69 66 20  idered valid if 
143a0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20  and only if the 
143b0 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 69 74  following condit
143c0 69 6f 6e 73 20 61 72 65 0a 74 72 75 65 3a 3c 2f  ions are.true:</
143d0 70 3e 0a 0a 3c 6f 6c 3e 0a 3c 6c 69 3e 3c 70 3e  p>..<ol>.<li><p>
143e0 54 68 65 20 73 61 6c 74 2d 31 20 61 6e 64 20 73  The salt-1 and s
143f0 61 6c 74 2d 32 20 76 61 6c 75 65 73 20 69 6e 20  alt-2 values in 
14400 74 68 65 20 66 72 61 6d 65 2d 68 65 61 64 65 72  the frame-header
14410 20 6d 61 74 63 68 0a 20 20 20 20 20 20 20 73 61   match.       sa
14420 6c 74 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  lt values in the
14430 20 77 61 6c 2d 68 65 61 64 65 72 3c 2f 70 3e 3c   wal-header</p><
14440 2f 6c 69 3e 0a 0a 3c 6c 69 3e 3c 70 3e 54 68 65  /li>..<li><p>The
14450 20 63 68 65 63 6b 73 75 6d 20 76 61 6c 75 65 73   checksum values
14460 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 20 38 20   in the final 8 
14470 62 79 74 65 73 20 6f 66 20 74 68 65 20 66 72 61  bytes of the fra
14480 6d 65 2d 68 65 61 64 65 72 0a 20 20 20 20 20 20  me-header.      
14490 20 65 78 61 63 74 6c 79 20 6d 61 74 63 68 20 74   exactly match t
144a0 68 65 20 63 68 65 63 6b 73 75 6d 20 63 6f 6d 70  he checksum comp
144b0 75 74 65 64 20 63 6f 6e 73 65 63 75 74 69 76 65  uted consecutive
144c0 6c 79 20 6f 6e 20 74 68 65 0a 20 20 20 20 20 20  ly on the.      
144d0 20 66 69 72 73 74 20 32 34 20 62 79 74 65 73 20   first 24 bytes 
144e0 6f 66 20 74 68 65 20 57 41 4c 20 68 65 61 64 65  of the WAL heade
144f0 72 20 61 6e 64 20 74 68 65 20 66 69 72 73 74 20  r and the first 
14500 38 20 62 79 74 65 73 20 61 6e 64 0a 20 20 20 20  8 bytes and.    
14510 20 20 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f     the content o
14520 66 20 61 6c 6c 20 66 72 61 6d 65 73 0a 20 20 20  f all frames.   
14530 20 20 20 20 75 70 20 74 6f 20 61 6e 64 20 69 6e      up to and in
14540 63 6c 75 64 69 6e 67 20 74 68 65 20 63 75 72 72  cluding the curr
14550 65 6e 74 20 66 72 61 6d 65 2e 3c 2f 70 3e 3c 2f  ent frame.</p></
14560 6c 69 3e 3c 2f 6c 69 3e 0a 3c 2f 6f 6c 3e 29 5e  li></li>.</ol>)^
14570 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
14580 6e 74 20 77 61 6c 63 6b 73 6d 20 7b 57 41 4c 20  nt walcksm {WAL 
14590 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74  checksum algorit
145a0 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 43 68  hm}</tcl>.<h2>Ch
145b0 65 63 6b 73 75 6d 20 41 6c 67 6f 72 69 74 68 6d  ecksum Algorithm
145c0 3c 2f 68 32 3e 0a 0a 3c 70 3e 54 68 65 20 63 68  </h2>..<p>The ch
145d0 65 63 6b 73 75 6d 20 69 73 20 63 6f 6d 70 75 74  ecksum is comput
145e0 65 64 20 62 79 20 69 6e 74 65 72 70 72 65 74 69  ed by interpreti
145f0 6e 67 20 74 68 65 20 69 6e 70 75 74 20 61 73 0a  ng the input as.
14600 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f  an even number o
14610 66 20 75 6e 73 69 67 6e 65 64 20 33 32 2d 62 69  f unsigned 32-bi
14620 74 20 69 6e 74 65 67 65 72 73 3a 20 78 28 30 29  t integers: x(0)
14630 20 74 68 72 6f 75 67 68 20 78 28 4e 29 2e 0a 5e   through x(N)..^
14640 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
14650 65 72 73 20 61 72 65 20 62 69 67 2d 65 6e 64 69  ers are big-endi
14660 61 6e 20 69 66 20 74 68 65 0a 6d 61 67 69 63 20  an if the.magic 
14670 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 66 69  number in the fi
14680 72 73 74 20 34 20 62 79 74 65 73 20 6f 66 20 74  rst 4 bytes of t
14690 68 65 20 57 41 4c 20 68 65 61 64 65 72 20 69 73  he WAL header is
146a0 20 30 78 33 37 37 66 30 36 38 33 20 61 6e 64 0a   0x377f0683 and.
146b0 74 68 65 20 69 6e 74 65 67 65 72 73 20 61 72 65  the integers are
146c0 20 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 69   little-endian i
146d0 66 20 74 68 65 20 6d 61 67 69 63 20 6e 75 6d 62  f the magic numb
146e0 65 72 20 69 73 20 30 78 33 37 37 66 30 36 38 32  er is 0x377f0682
146f0 2e 0a 5e 54 68 65 20 63 68 65 63 6b 73 75 6d 20  ..^The checksum 
14700 76 61 6c 75 65 73 20 61 72 65 20 61 6c 77 61 79  values are alway
14710 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
14720 66 72 61 6d 65 20 68 65 61 64 65 72 20 69 6e 20  frame header in 
14730 61 0a 62 69 67 2d 65 6e 64 69 61 6e 20 66 6f 72  a.big-endian for
14740 6d 61 74 20 72 65 67 61 72 64 6c 65 73 73 20 6f  mat regardless o
14750 66 20 77 68 69 63 68 20 62 79 74 65 20 6f 72 64  f which byte ord
14760 65 72 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  er is used to co
14770 6d 70 75 74 65 0a 74 68 65 20 63 68 65 63 6b 73  mpute.the checks
14780 75 6d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20  um.</p>..<p>The 
14790 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f 72 69 74  checksum algorit
147a0 68 6d 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  hm only works fo
147b0 72 20 63 6f 6e 74 65 6e 74 20 77 68 69 63 68 20  r content which 
147c0 69 73 20 61 20 6d 75 6c 74 69 70 6c 65 20 6f 66  is a multiple of
147d0 0a 38 20 62 79 74 65 73 20 69 6e 20 6c 65 6e 67  .8 bytes in leng
147e0 74 68 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  th.  In other wo
147f0 72 64 73 2c 20 69 66 20 74 68 65 20 69 6e 70 75  rds, if the inpu
14800 74 73 20 61 72 65 20 78 28 30 29 20 74 68 72 6f  ts are x(0) thro
14810 75 67 68 20 78 28 4e 29 0a 74 68 65 6e 20 4e 20  ugh x(N).then N 
14820 6d 75 73 74 20 62 65 20 6f 64 64 2e 0a 5e 28 54  must be odd..^(T
14830 68 65 20 63 68 65 63 6b 73 75 6d 20 61 6c 67 6f  he checksum algo
14840 72 69 74 68 6d 20 69 73 20 61 73 20 66 6f 6c 6c  rithm is as foll
14850 6f 77 73 3a 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  ows:..<blockquot
14860 65 3e 3c 70 72 65 3e 20 0a 73 30 20 3d 20 73 31  e><pre> .s0 = s1
14870 20 3d 20 30 0a 66 6f 72 20 69 20 66 72 6f 6d 20   = 0.for i from 
14880 30 20 74 6f 20 6e 2d 31 20 73 74 65 70 20 32 3a  0 to n-1 step 2:
14890 0a 20 20 20 73 30 20 2b 3d 20 78 28 69 29 20 2b  .   s0 += x(i) +
148a0 20 73 31 3b 0a 20 20 20 73 31 20 2b 3d 20 78 28   s1;.   s1 += x(
148b0 69 2b 31 29 20 2b 20 73 30 3b 0a 65 6e 64 66 6f  i+1) + s0;.endfo
148c0 72 0a 23 20 72 65 73 75 6c 74 20 69 6e 20 73 30  r.# result in s0
148d0 20 61 6e 64 20 73 31 0a 3c 2f 70 72 65 3e 3c 2f   and s1.</pre></
148e0 62 6c 6f 63 6b 71 75 6f 74 65 3e 29 5e 0a 0a 3c  blockquote>)^..<
148f0 70 3e 5e 54 68 65 20 6f 75 74 70 75 74 73 20 73  p>^The outputs s
14900 30 20 61 6e 64 20 73 31 20 61 72 65 20 62 6f 74  0 and s1 are bot
14910 68 20 77 65 69 67 68 74 65 64 20 63 68 65 63 6b  h weighted check
14920 73 75 6d 73 20 75 73 69 6e 67 20 46 69 62 6f 6e  sums using Fibon
14930 61 63 63 69 20 77 65 69 67 68 74 73 0a 69 6e 20  acci weights.in 
14940 72 65 76 65 72 73 65 20 6f 72 64 65 72 2e 20 20  reverse order.  
14950 28 5e 54 68 65 20 6c 61 72 67 65 73 74 20 46 69  (^The largest Fi
14960 62 6f 6e 61 63 63 69 20 77 65 69 67 68 74 20 6f  bonacci weight o
14970 63 63 75 72 73 20 6f 6e 20 74 68 65 20 66 69 72  ccurs on the fir
14980 73 74 20 65 6c 65 6d 65 6e 74 0a 6f 66 20 74 68  st element.of th
14990 65 20 73 65 71 75 65 6e 63 65 20 62 65 69 6e 67  e sequence being
149a0 20 73 75 6d 6d 65 64 2e 29 20 20 5e 54 68 65 20   summed.)  ^The 
149b0 73 31 20 76 61 6c 75 65 20 73 70 61 6e 73 20 61  s1 value spans a
149c0 6c 6c 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  ll 32-bit intege
149d0 72 0a 74 65 72 6d 73 20 6f 66 20 74 68 65 20 73  r.terms of the s
149e0 65 71 75 65 6e 63 65 20 77 68 65 72 65 61 73 20  equence whereas 
149f0 73 30 20 6f 6d 69 74 73 20 74 68 65 20 66 69 6e  s0 omits the fin
14a00 61 6c 20 74 65 72 6d 2e 3c 2f 70 3e 0a 0a 3c 68  al term.</p>..<h
14a10 32 3e 43 68 65 63 6b 70 6f 69 6e 74 20 41 6c 67  2>Checkpoint Alg
14a20 6f 72 69 74 68 6d 3c 2f 68 32 3e 0a 0a 3c 70 3e  orithm</h2>..<p>
14a30 5e 4f 6e 20 61 20 5b 63 68 65 63 6b 70 6f 69 6e  ^On a [checkpoin
14a40 74 5d 2c 20 74 68 65 20 57 41 4c 20 69 73 20 66  t], the WAL is f
14a50 69 72 73 74 20 66 6c 75 73 68 65 64 20 74 6f 20  irst flushed to 
14a60 70 65 72 73 69 73 74 65 6e 74 20 73 74 6f 72 61  persistent stora
14a70 67 65 20 75 73 69 6e 67 0a 74 68 65 20 78 53 79  ge using.the xSy
14a80 6e 63 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65  nc method of the
14a90 20 5b 73 71 6c 69 74 65 33 5f 69 6f 5f 6d 65 74   [sqlite3_io_met
14aa0 68 6f 64 73 20 7c 20 56 46 53 5d 2e 20 0a 5e 54  hods | VFS]. .^T
14ab0 68 65 6e 20 76 61 6c 69 64 20 63 6f 6e 74 65 6e  hen valid conten
14ac0 74 20 6f 66 20 74 68 65 20 57 41 4c 20 69 73 20  t of the WAL is 
14ad0 74 72 61 6e 73 66 65 72 72 65 64 20 69 6e 74 6f  transferred into
14ae0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
14af0 6c 65 2e 0a 5e 46 69 6e 61 6c 6c 79 2c 20 74 68  le..^Finally, th
14b00 65 20 64 61 74 61 62 61 73 65 20 69 73 20 66 6c  e database is fl
14b10 75 73 68 65 64 20 74 6f 20 70 65 72 73 69 73 74  ushed to persist
14b20 65 6e 74 20 73 74 6f 72 61 67 65 20 75 73 69 6e  ent storage usin
14b30 67 20 61 6e 6f 74 68 65 72 0a 78 53 79 6e 63 20  g another.xSync 
14b40 6d 65 74 68 6f 64 20 63 61 6c 6c 2e 0a 54 68 65  method call..The
14b50 20 78 53 79 6e 63 20 6f 70 65 72 61 74 69 6f 6e   xSync operation
14b60 73 20 73 65 72 76 65 20 61 73 20 77 72 69 74 65  s serve as write
14b70 20 62 61 72 72 69 65 72 73 20 2d 20 61 6c 6c 20   barriers - all 
14b80 77 72 69 74 65 73 20 6c 61 75 6e 63 68 65 64 0a  writes launched.
14b90 62 65 66 6f 72 65 20 74 68 65 20 78 53 79 6e 63  before the xSync
14ba0 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 62   must complete b
14bb0 65 66 6f 72 65 20 61 6e 79 20 77 72 69 74 65 20  efore any write 
14bc0 74 68 61 74 20 6c 61 75 6e 63 68 65 73 20 61 66  that launches af
14bd0 74 65 72 20 74 68 65 0a 78 53 79 6e 63 20 62 65  ter the.xSync be
14be0 67 69 6e 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 5e 41  gins.</p>..<p>^A
14bf0 66 74 65 72 20 61 20 63 68 65 63 6b 70 6f 69 6e  fter a checkpoin
14c00 74 2c 20 6e 65 77 20 77 72 69 74 65 20 74 72 61  t, new write tra
14c10 6e 73 61 63 74 69 6f 6e 73 20 6f 76 65 72 77 72  nsactions overwr
14c20 69 74 65 0a 74 68 65 20 57 41 4c 20 66 69 6c 65  ite.the WAL file
14c30 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
14c40 69 6e 67 2e 20 20 5e 41 74 20 74 68 65 20 73 74  ing.  ^At the st
14c50 61 72 74 20 6f 66 20 74 68 65 20 66 69 72 73 74  art of the first
14c60 20 6e 65 77 0a 77 72 69 74 65 20 74 72 61 6e 73   new.write trans
14c70 61 63 74 69 6f 6e 2c 20 74 68 65 20 57 41 4c 20  action, the WAL 
14c80 68 65 61 64 65 72 20 73 61 6c 74 2d 31 20 76 61  header salt-1 va
14c90 6c 75 65 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  lue is increment
14ca0 65 64 0a 61 6e 64 20 74 68 65 20 73 61 6c 74 2d  ed.and the salt-
14cb0 32 20 76 61 6c 75 65 20 69 73 20 72 61 6e 64 6f  2 value is rando
14cc0 6d 69 7a 65 64 2e 20 20 54 68 65 73 65 20 63 68  mized.  These ch
14cd0 61 6e 67 65 73 20 74 6f 20 74 68 65 20 73 61 6c  anges to the sal
14ce0 74 73 20 69 6e 76 61 6c 69 64 61 74 65 0a 6f 6c  ts invalidate.ol
14cf0 64 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20  d frames in the 
14d00 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 61 6c  WAL that have al
14d10 72 65 61 64 79 20 62 65 65 6e 20 63 68 65 63 6b  ready been check
14d20 70 6f 69 6e 74 65 64 20 62 75 74 20 6e 6f 74 20  pointed but not 
14d30 79 65 74 0a 6f 76 65 72 77 72 69 74 74 65 6e 2c  yet.overwritten,
14d40 20 61 6e 64 20 70 72 65 76 65 6e 74 20 74 68 65   and prevent the
14d50 6d 20 66 72 6f 6d 20 62 65 69 6e 67 20 63 68 65  m from being che
14d60 63 6b 70 6f 69 6e 74 65 64 20 61 67 61 69 6e 2e  ckpointed again.
14d70 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
14d80 61 67 6d 65 6e 74 20 77 61 6c 72 65 61 64 20 7b  agment walread {
14d90 57 41 4c 20 72 65 61 64 20 61 6c 67 6f 72 69 74  WAL read algorit
14da0 68 6d 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 52 65  hm}</tcl>.<h2>Re
14db0 61 64 65 72 20 41 6c 67 6f 72 69 74 68 6d 3c 2f  ader Algorithm</
14dc0 68 32 3e 0a 0a 3c 70 3e 5e 28 54 6f 20 72 65 61  h2>..<p>^(To rea
14dd0 64 20 61 20 70 61 67 65 20 66 72 6f 6d 20 74 68  d a page from th
14de0 65 20 64 61 74 61 62 61 73 65 20 28 63 61 6c 6c  e database (call
14df0 20 69 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20   it page number 
14e00 50 29 2c 20 61 20 72 65 61 64 65 72 0a 66 69 72  P), a reader.fir
14e10 73 74 20 63 68 65 63 6b 73 20 74 68 65 20 57 41  st checks the WA
14e20 4c 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 63  L to see if it c
14e30 6f 6e 74 61 69 6e 73 20 70 61 67 65 20 50 2e 20  ontains page P. 
14e40 20 49 66 20 73 6f 2c 20 74 68 65 6e 20 74 68 65   If so, then the
14e50 0a 6c 61 73 74 20 76 61 6c 69 64 20 69 6e 73 74  .last valid inst
14e60 61 6e 63 65 20 6f 66 20 70 61 67 65 20 50 20 74  ance of page P t
14e70 68 61 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20  hat is followed 
14e80 62 79 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d  by a commit fram
14e90 65 0a 6f 72 20 69 73 20 61 20 63 6f 6d 6d 69 74  e.or is a commit
14ea0 20 66 72 61 6d 65 20 69 74 73 65 6c 66 20 62 65   frame itself be
14eb0 63 6f 6d 65 73 20 74 68 65 20 76 61 6c 75 65 20  comes the value 
14ec0 72 65 61 64 2e 29 5e 20 20 5e 49 66 20 74 68 65  read.)^  ^If the
14ed0 20 57 41 4c 0a 63 6f 6e 74 61 69 6e 73 20 6e 6f   WAL.contains no
14ee0 20 63 6f 70 69 65 73 20 6f 66 20 70 61 67 65 20   copies of page 
14ef0 50 20 74 68 61 74 20 61 72 65 20 76 61 6c 69 64  P that are valid
14f00 20 61 6e 64 20 77 68 69 63 68 20 61 72 65 20 61   and which are a
14f10 20 63 6f 6d 6d 69 74 0a 66 72 61 6d 65 20 6f 72   commit.frame or
14f20 20 61 72 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79   are followed by
14f30 20 61 20 63 6f 6d 6d 69 74 20 66 72 61 6d 65 2c   a commit frame,
14f40 20 74 68 65 6e 20 70 61 67 65 20 50 20 69 73 20   then page P is 
14f50 72 65 61 64 20 66 72 6f 6d 0a 74 68 65 20 64 61  read from.the da
14f60 74 61 62 61 73 65 20 66 69 6c 65 2e 3c 2f 70 3e  tabase file.</p>
14f70 0a 0a 3c 70 3e 54 6f 20 73 74 61 72 74 20 61 20  ..<p>To start a 
14f80 72 65 61 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  read transaction
14f90 2c 20 74 68 65 20 72 65 61 64 65 72 20 72 65 63  , the reader rec
14fa0 6f 72 64 73 20 74 68 65 20 69 6e 64 65 78 20 6f  ords the index o
14fb0 66 20 74 68 65 20 6c 61 73 74 0a 76 61 6c 69 64  f the last.valid
14fc0 20 66 72 61 6d 65 20 69 6e 20 74 68 65 20 57 41   frame in the WA
14fd0 4c 2e 20 20 54 68 65 20 72 65 61 64 65 72 20 75  L.  The reader u
14fe0 73 65 73 20 74 68 69 73 20 72 65 63 6f 72 64 65  ses this recorde
14ff0 64 20 22 6d 78 46 72 61 6d 65 22 20 76 61 6c 75  d "mxFrame" valu
15000 65 0a 66 6f 72 20 61 6c 6c 20 73 75 62 73 65 71  e.for all subseq
15010 75 65 6e 74 20 72 65 61 64 20 6f 70 65 72 61 74  uent read operat
15020 69 6f 6e 73 2e 20 20 4e 65 77 20 74 72 61 6e 73  ions.  New trans
15030 61 63 74 69 6f 6e 73 20 63 61 6e 20 62 65 20 61  actions can be a
15040 70 70 65 6e 64 65 64 0a 74 6f 20 74 68 65 20 57  ppended.to the W
15050 41 4c 2c 20 62 75 74 20 61 73 20 6c 6f 6e 67 20  AL, but as long 
15060 61 73 20 74 68 65 20 72 65 61 64 65 72 20 75 73  as the reader us
15070 65 73 20 69 74 73 20 6f 72 69 67 69 6e 61 6c 20  es its original 
15080 6d 78 46 72 61 6d 65 20 76 61 6c 75 65 0a 61 6e  mxFrame value.an
15090 64 20 69 67 6e 6f 72 65 73 20 73 75 62 73 65 71  d ignores subseq
150a0 75 65 6e 74 6c 79 20 61 70 70 65 6e 64 65 64 20  uently appended 
150b0 63 6f 6e 74 65 6e 74 2c 20 74 68 65 20 72 65 61  content, the rea
150c0 64 65 72 20 77 69 6c 6c 20 73 65 65 20 61 20 0a  der will see a .
150d0 63 6f 6e 73 69 73 74 65 6e 74 20 73 6e 61 70 73  consistent snaps
150e0 68 6f 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  hot of the datab
150f0 61 73 65 20 66 72 6f 6d 20 61 20 73 69 6e 67 6c  ase from a singl
15100 65 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e  e point in time.
15110 20 20 0a 5e 54 68 69 73 20 74 65 63 68 6e 69 71    .^This techniq
15120 75 65 20 61 6c 6c 6f 77 73 20 6d 75 6c 74 69 70  ue allows multip
15130 6c 65 20 63 6f 6e 63 75 72 72 65 6e 74 20 72 65  le concurrent re
15140 61 64 65 72 73 20 74 6f 20 76 69 65 77 20 64 69  aders to view di
15150 66 66 65 72 65 6e 74 20 0a 76 65 72 73 69 6f 6e  fferent .version
15160 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
15170 65 20 63 6f 6e 74 65 6e 74 20 73 69 6d 75 6c 74  e content simult
15180 61 6e 65 6f 75 73 6c 79 2e 3c 2f 70 3e 0a 0a 3c  aneously.</p>..<
15190 70 3e 54 68 65 20 72 65 61 64 65 72 20 61 6c 67  p>The reader alg
151a0 6f 72 69 74 68 6d 20 69 6e 20 74 68 65 20 70 72  orithm in the pr
151b0 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68  evious paragraph
151c0 73 20 77 6f 72 6b 73 20 63 6f 72 72 65 63 74 6c  s works correctl
151d0 79 2c 20 62 75 74 20 0a 62 65 63 61 75 73 65 20  y, but .because 
151e0 66 72 61 6d 65 73 20 66 6f 72 20 70 61 67 65 20  frames for page 
151f0 50 20 63 61 6e 20 61 70 70 65 61 72 20 61 6e 79  P can appear any
15200 77 68 65 72 65 20 77 69 74 68 69 6e 20 74 68 65  where within the
15210 20 57 41 4c 2c 20 74 68 65 0a 72 65 61 64 65 72   WAL, the.reader
15220 20 68 61 73 20 74 6f 20 73 63 61 6e 20 74 68 65   has to scan the
15230 20 65 6e 74 69 72 65 20 57 41 4c 20 6c 6f 6f 6b   entire WAL look
15240 69 6e 67 20 66 6f 72 20 70 61 67 65 20 50 20 66  ing for page P f
15250 72 61 6d 65 73 2e 20 20 49 66 20 74 68 65 0a 57  rames.  If the.W
15260 41 4c 20 69 73 20 6c 61 72 67 65 20 28 6d 75 6c  AL is large (mul
15270 74 69 70 6c 65 20 6d 65 67 61 62 79 74 65 73 20  tiple megabytes 
15280 69 73 20 74 79 70 69 63 61 6c 29 20 74 68 61 74  is typical) that
15290 20 73 63 61 6e 20 63 61 6e 20 62 65 20 73 6c 6f   scan can be slo
152a0 77 2c 0a 61 6e 64 20 72 65 61 64 20 70 65 72 66  w,.and read perf
152b0 6f 72 6d 61 6e 63 65 20 73 75 66 66 65 72 73 2e  ormance suffers.
152c0 20 20 5e 54 6f 20 6f 76 65 72 63 6f 6d 65 20 74    ^To overcome t
152d0 68 69 73 20 70 72 6f 62 6c 65 6d 2c 20 61 20 73  his problem, a s
152e0 65 70 61 72 61 74 65 0a 64 61 74 61 20 73 74 72  eparate.data str
152f0 75 63 74 75 72 65 20 63 61 6c 6c 65 64 20 74 68  ucture called th
15300 65 20 77 61 6c 2d 69 6e 64 65 78 20 69 73 20 6d  e wal-index is m
15310 61 69 6e 74 61 69 6e 65 64 20 74 6f 20 65 78 70  aintained to exp
15320 65 64 69 74 65 20 74 68 65 0a 73 65 61 72 63 68  edite the.search
15330 20 66 6f 72 20 66 72 61 6d 65 73 20 6f 66 20 61   for frames of a
15340 20 70 61 72 74 69 63 75 6c 61 72 20 70 61 67 65   particular page
15350 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66  .</p>..<tcl>hd_f
15360 72 61 67 6d 65 6e 74 20 77 61 6c 69 6e 64 65 78  ragment walindex
15370 66 6f 72 6d 61 74 20 7b 77 61 6c 2d 69 6e 64 65  format {wal-inde
15380 78 7d 20 7b 57 41 4c 2d 69 6e 64 65 78 20 66 6f  x} {WAL-index fo
15390 72 6d 61 74 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e  rmat}</tcl>.<h2>
153a0 57 41 4c 2d 49 6e 64 65 78 20 46 6f 72 6d 61 74  WAL-Index Format
153b0 3c 2f 68 32 3e 0a 0a 3c 70 3e 43 6f 6e 63 65 70  </h2>..<p>Concep
153c0 74 75 61 6c 6c 79 2c 20 74 68 65 20 77 61 6c 2d  tually, the wal-
153d0 69 6e 64 65 78 20 69 73 20 73 68 61 72 65 64 20  index is shared 
153e0 6d 65 6d 6f 72 79 2c 20 74 68 6f 75 67 68 20 74  memory, though t
153f0 68 65 20 63 75 72 72 65 6e 74 0a 56 46 53 20 69  he current.VFS i
15400 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 75  mplementations u
15410 73 65 20 61 20 6d 6d 61 70 70 65 64 20 66 69 6c  se a mmapped fil
15420 65 20 66 6f 72 20 74 68 65 20 77 61 6c 2d 69 6e  e for the wal-in
15430 64 65 78 2e 20 20 5e 54 68 65 20 6d 6d 61 70 70  dex.  ^The mmapp
15440 65 64 0a 66 69 6c 65 20 69 73 20 69 6e 20 74 68  ed.file is in th
15450 65 20 73 61 6d 65 20 64 69 72 65 63 74 6f 72 79  e same directory
15460 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73 65   as the database
15470 20 61 6e 64 20 68 61 73 20 74 68 65 20 73 61 6d   and has the sam
15480 65 20 6e 61 6d 65 0a 61 73 20 74 68 65 20 64 61  e name.as the da
15490 74 61 62 61 73 65 20 77 69 74 68 20 61 20 22 3c  tabase with a "<
154a0 74 74 3e 2d 73 68 6d 3c 2f 74 74 3e 22 20 73 75  tt>-shm</tt>" su
154b0 66 66 69 78 20 61 70 70 65 6e 64 65 64 2e 20 20  ffix appended.  
154c0 42 65 63 61 75 73 65 0a 74 68 65 20 77 61 6c 2d  Because.the wal-
154d0 69 6e 64 65 78 20 69 73 20 73 68 61 72 65 64 20  index is shared 
154e0 6d 65 6d 6f 72 79 2c 20 53 51 4c 69 74 65 20 64  memory, SQLite d
154f0 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
15500 0a 5b 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c  .[PRAGMA journal
15510 5f 6d 6f 64 65 20 7c 20 6a 6f 75 72 6e 61 6c 5f  _mode | journal_
15520 6d 6f 64 65 3d 57 41 4c 5d 20 0a 6f 6e 20 61 20  mode=WAL] .on a 
15530 6e 65 74 77 6f 72 6b 20 66 69 6c 65 73 79 73 74  network filesyst
15540 65 6d 20 77 68 65 6e 20 63 6c 69 65 6e 74 73 20  em when clients 
15550 61 72 65 20 6f 6e 20 64 69 66 66 65 72 65 6e 74  are on different
15560 20 6d 61 63 68 69 6e 65 73 2e 0a 41 6c 6c 20 75   machines..All u
15570 73 65 72 73 20 6f 66 20 74 68 65 20 64 61 74 61  sers of the data
15580 62 61 73 65 20 6d 75 73 74 20 62 65 20 61 62 6c  base must be abl
15590 65 20 74 6f 20 73 68 61 72 65 20 74 68 65 20 73  e to share the s
155a0 61 6d 65 20 6d 65 6d 6f 72 79 2e 3c 2f 70 3e 0a  ame memory.</p>.
155b0 0a 3c 70 3e 54 68 65 20 70 75 72 70 6f 73 65 20  .<p>The purpose 
155c0 6f 66 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  of the wal-index
155d0 20 69 73 20 74 6f 20 61 6e 73 77 65 72 20 74 68   is to answer th
155e0 69 73 20 71 75 65 73 74 69 6f 6e 20 71 75 69 63  is question quic
155f0 6b 6c 79 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  kly:</p>..<block
15600 71 75 6f 74 65 3e 3c 69 3e 0a 47 69 76 65 6e 20  quote><i>.Given 
15610 61 20 70 61 67 65 20 6e 75 6d 62 65 72 20 50 20  a page number P 
15620 61 6e 64 20 61 20 6d 61 78 69 6d 75 6d 20 57 41  and a maximum WA
15630 4c 20 66 72 61 6d 65 20 69 6e 64 65 78 20 4d 2c  L frame index M,
15640 0a 72 65 74 75 72 6e 20 74 68 65 20 6c 61 72 67  .return the larg
15650 65 73 74 20 57 41 4c 20 66 72 61 6d 65 20 69 6e  est WAL frame in
15660 64 65 78 20 66 6f 72 20 70 61 67 65 20 50 20 74  dex for page P t
15670 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 63  hat does not exc
15680 65 65 64 20 4d 2c 20 0a 6f 72 20 72 65 74 75 72  eed M, .or retur
15690 6e 20 4e 55 4c 4c 20 69 66 20 74 68 65 72 65 20  n NULL if there 
156a0 61 72 65 20 6e 6f 20 66 72 61 6d 65 73 20 66 6f  are no frames fo
156b0 72 20 70 61 67 65 20 50 20 74 68 61 74 20 64 6f  r page P that do
156c0 20 6e 6f 74 20 65 78 63 65 65 64 20 4d 2e 0a 3c   not exceed M..<
156d0 2f 69 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e  /i></blockquote>
156e0 0a 0a 3c 70 3e 54 68 65 20 3c 69 3e 4d 3c 2f 69  ..<p>The <i>M</i
156f0 3e 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 70  > value in the p
15700 72 65 76 69 6f 75 73 20 70 61 72 61 67 72 61 70  revious paragrap
15710 68 20 69 73 20 74 68 65 20 22 6d 78 46 72 61 6d  h is the "mxFram
15720 65 22 20 76 61 6c 75 65 0a 64 65 66 69 6e 65 64  e" value.defined
15730 20 69 6e 20 5b 57 41 4c 20 72 65 61 64 20 61 6c   in [WAL read al
15740 67 6f 72 69 74 68 6d 20 7c 20 73 65 63 74 69 6f  gorithm | sectio
15750 6e 20 34 2e 34 5d 20 74 68 61 74 20 69 73 20 72  n 4.4] that is r
15760 65 61 64 20 61 74 20 74 68 65 20 73 74 61 72 74  ead at the start
15770 20 0a 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69   .of a transacti
15780 6f 6e 20 61 6e 64 20 77 68 69 63 68 20 64 65 66  on and which def
15790 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ines the maximum
157a0 20 66 72 61 6d 65 20 66 72 6f 6d 20 74 68 65 20   frame from the 
157b0 57 41 4c 20 74 68 61 74 20 0a 74 68 65 20 72 65  WAL that .the re
157c0 61 64 65 72 20 77 69 6c 6c 20 75 73 65 2e 3c 2f  ader will use.</
157d0 70 3e 0a 0a 3c 70 3e 54 68 65 20 77 61 6c 2d 69  p>..<p>The wal-i
157e0 6e 64 65 78 20 69 73 20 74 72 61 6e 73 69 65 6e  ndex is transien
157f0 74 2e 20 20 41 66 74 65 72 20 61 20 63 72 61 73  t.  After a cras
15800 68 2c 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  h, the wal-index
15810 20 69 73 0a 72 65 63 6f 6e 73 74 72 75 63 74 65   is.reconstructe
15820 64 20 66 72 6f 6d 20 74 68 65 20 6f 72 69 67 69  d from the origi
15830 6e 61 6c 20 57 41 4c 20 66 69 6c 65 2e 20 20 5e  nal WAL file.  ^
15840 54 68 65 20 56 46 53 20 69 73 20 72 65 71 75 69  The VFS is requi
15850 72 65 64 0a 74 6f 20 65 69 74 68 65 72 20 74 72  red.to either tr
15860 75 6e 63 61 74 65 20 6f 72 20 7a 65 72 6f 20 74  uncate or zero t
15870 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
15880 20 77 61 6c 2d 69 6e 64 65 78 20 77 68 65 6e 20   wal-index when 
15890 74 68 65 20 6c 61 73 74 0a 63 6f 6e 6e 65 63 74  the last.connect
158a0 69 6f 6e 20 74 6f 20 69 74 20 63 6c 6f 73 65 73  ion to it closes
158b0 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20 77  .  Because the w
158c0 61 6c 2d 69 6e 64 65 78 20 69 73 20 74 72 61 6e  al-index is tran
158d0 73 69 65 6e 74 2c 20 69 74 20 63 61 6e 0a 75 73  sient, it can.us
158e0 65 20 61 6e 20 61 72 63 68 69 74 65 63 74 75 72  e an architectur
158f0 65 2d 73 70 65 63 69 66 69 63 20 66 6f 72 6d 61  e-specific forma
15900 74 3b 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 68  t; it does not h
15910 61 76 65 20 74 6f 20 62 65 20 63 72 6f 73 73 2d  ave to be cross-
15920 70 6c 61 74 66 6f 72 6d 2e 0a 48 65 6e 63 65 2c  platform..Hence,
15930 20 75 6e 6c 69 6b 65 20 74 68 65 20 64 61 74 61   unlike the data
15940 62 61 73 65 20 61 6e 64 20 57 41 4c 20 66 69 6c  base and WAL fil
15950 65 20 66 6f 72 6d 61 74 73 20 77 68 69 63 68 20  e formats which 
15960 73 74 6f 72 65 20 61 6c 6c 20 76 61 6c 75 65 73  store all values
15970 0a 61 73 20 62 69 67 20 65 6e 64 69 61 6e 2c 20  .as big endian, 
15980 74 68 65 20 77 61 6c 2d 69 6e 64 65 78 20 73 74  the wal-index st
15990 6f 72 65 73 20 6d 75 6c 74 69 2d 62 79 74 65 20  ores multi-byte 
159a0 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 6e 61  values in the na
159b0 74 69 76 65 0a 62 79 74 65 20 6f 72 64 65 72 20  tive.byte order 
159c0 6f 66 20 74 68 65 20 68 6f 73 74 20 63 6f 6d 70  of the host comp
159d0 75 74 65 72 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  uter.</p>..<p>Th
159e0 69 73 20 64 6f 63 75 6d 65 6e 74 20 69 73 20 63  is document is c
159f0 6f 6e 63 65 72 6e 65 64 20 77 69 74 68 20 74 68  oncerned with th
15a00 65 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 61  e persistent sta
15a10 74 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  te of the databa
15a20 73 65 0a 66 69 6c 65 2c 20 61 6e 64 20 73 69 6e  se.file, and sin
15a30 63 65 20 74 68 65 20 77 61 6c 2d 69 6e 64 65 78  ce the wal-index
15a40 20 69 73 20 61 20 74 72 61 6e 73 69 65 6e 74 20   is a transient 
15a50 73 74 72 75 63 74 75 72 65 2c 20 6e 6f 20 66 75  structure, no fu
15a60 72 74 68 65 72 20 0a 69 6e 66 6f 72 6d 61 74 69  rther .informati
15a70 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72  on about the for
15a80 6d 61 74 20 6f 66 20 74 68 65 20 77 61 6c 2d 69  mat of the wal-i
15a90 6e 64 65 78 20 77 69 6c 6c 20 62 65 20 70 72 6f  ndex will be pro
15aa0 76 69 64 65 64 20 68 65 72 65 2e 0a 43 6f 6d 70  vided here..Comp
15ab0 6c 65 74 65 20 64 65 74 61 69 6c 73 20 6f 6e 20  lete details on 
15ac0 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
15ad0 65 20 77 61 6c 2d 69 6e 64 65 78 20 61 72 65 20  e wal-index are 
15ae0 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
15af0 0a 63 6f 6d 6d 65 6e 74 73 20 69 6e 20 53 51 4c  .comments in SQL
15b00 69 74 65 20 73 6f 75 72 63 65 20 63 6f 64 65 2e  ite source code.
15b10 3c 2f 70 3e 0a                                   </p>.