Documentation Source Text

Hex Artifact Content
Login

Artifact e500e40973147dbfe1f91a604f1b84bb7c7ebb2bbcb799db4aaf9299c6a20eda:


0000: 3c 74 69 74 6c 65 3e 54 68 65 20 53 51 4c 69 74  <title>The SQLit
0010: 65 20 41 6d 61 6c 67 61 6d 61 74 69 6f 6e 3c 2f  e Amalgamation</
0020: 74 69 74 6c 65 3e 0a 3c 74 63 6c 3e 68 64 5f 6b  title>.<tcl>hd_k
0030: 65 79 77 6f 72 64 73 20 7b 61 6d 61 6c 67 61 6d  eywords {amalgam
0040: 61 74 69 6f 6e 7d 20 7b 74 68 65 20 61 6d 61 6c  ation} {the amal
0050: 67 61 6d 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a  gamation}</tcl>.
0060: 0a 3c 66 61 6e 63 79 5f 66 6f 72 6d 61 74 3e 0a  .<fancy_format>.
0070: 0a 3c 68 31 3e 45 78 65 63 75 74 69 76 65 20 53  .<h1>Executive S
0080: 75 6d 6d 61 72 79 3c 2f 68 31 3e 0a 0a 3c 70 3e  ummary</h1>..<p>
0090: 4f 76 65 72 20 31 30 30 20 73 65 70 61 72 61 74  Over 100 separat
00a0: 65 20 73 6f 75 72 63 65 20 66 69 6c 65 73 20 61  e source files a
00b0: 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
00c0: 69 6e 74 6f 20 61 0a 73 69 6e 67 6c 65 20 6c 61  into a.single la
00d0: 72 67 65 20 66 69 6c 65 73 20 6f 66 20 43 2d 63  rge files of C-c
00e0: 6f 64 65 20 6e 61 6d 65 64 20 22 73 71 6c 69 74  ode named "sqlit
00f0: 65 33 2e 63 22 20 61 6e 64 0a 63 61 6c 6c 65 64  e3.c" and.called
0100: 20 22 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69   "the amalgamati
0110: 6f 6e 22 2e 20 54 68 65 20 61 6d 61 6c 67 61 6d  on". The amalgam
0120: 61 74 69 6f 6e 0a 63 6f 6e 74 61 69 6e 73 20 65  ation.contains e
0130: 76 65 72 79 74 68 69 6e 67 20 61 6e 20 61 70 70  verything an app
0140: 6c 69 63 61 74 69 6f 6e 20 6e 65 65 64 73 20 74  lication needs t
0150: 6f 20 65 6d 62 65 64 20 53 51 4c 69 74 65 2e 0a  o embed SQLite..
0160: 54 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  The amalgamation
0170: 20 66 69 6c 65 20 69 73 20 6d 6f 72 65 20 74 68   file is more th
0180: 61 6e 20 32 32 30 2c 30 30 30 20 6c 69 6e 65 73  an 220,000 lines
0190: 20 6c 6f 6e 67 20 61 6e 64 20 6f 76 65 72 20 37   long and over 7
01a0: 2e 35 0a 6d 65 67 61 62 79 74 65 73 20 69 6e 20  .5.megabytes in 
01b0: 73 69 7a 65 20 28 61 73 20 6f 66 20 32 30 31 38  size (as of 2018
01c0: 2d 31 31 2d 32 34 29 2e 0a 0a 3c 70 3e 43 6f 6d  -11-24)...<p>Com
01d0: 62 69 6e 69 6e 67 20 61 6c 6c 20 74 68 65 20 63  bining all the c
01e0: 6f 64 65 20 66 6f 72 20 53 51 4c 69 74 65 20 69  ode for SQLite i
01f0: 6e 74 6f 20 6f 6e 65 20 62 69 67 20 66 69 6c 65  nto one big file
0200: 20 6d 61 6b 65 73 20 53 51 4c 69 74 65 0a 65 61   makes SQLite.ea
0210: 73 69 65 72 20 74 6f 20 64 65 70 6c 6f 79 20 26  sier to deploy &
0220: 6d 64 61 73 68 3b 20 74 68 65 72 65 20 69 73 20  mdash; there is 
0230: 6a 75 73 74 20 6f 6e 65 20 66 69 6c 65 20 74 6f  just one file to
0240: 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 2e 20   keep track of. 
0250: 20 0a 41 6e 64 20 62 65 63 61 75 73 65 20 61 6c   .And because al
0260: 6c 20 63 6f 64 65 20 69 73 20 69 6e 0a 61 20 73  l code is in.a s
0270: 69 6e 67 6c 65 20 74 72 61 6e 73 6c 61 74 69 6f  ingle translatio
0280: 6e 20 75 6e 69 74 2c 20 63 6f 6d 70 69 6c 65 72  n unit, compiler
0290: 73 20 63 61 6e 20 64 6f 20 62 65 74 74 65 72 20  s can do better 
02a0: 69 6e 74 65 72 2d 70 72 6f 63 65 64 75 72 65 0a  inter-procedure.
02b0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 72 65 73  optimization res
02c0: 75 6c 74 69 6e 67 20 69 6e 20 6d 61 63 68 69 6e  ulting in machin
02d0: 65 20 63 6f 64 65 20 74 68 61 74 20 69 73 20 62  e code that is b
02e0: 65 74 77 65 65 6e 20 35 25 20 61 6e 64 20 31 30  etween 5% and 10
02f0: 25 20 66 61 73 74 65 72 2e 0a 0a 3c 68 31 3e 54  % faster...<h1>T
0300: 68 65 20 53 51 4c 69 74 65 20 41 6d 61 6c 67 61  he SQLite Amalga
0310: 6d 61 74 69 6f 6e 3c 2f 68 31 3e 0a 0a 3c 70 3e  mation</h1>..<p>
0320: 54 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61  The SQLite libra
0330: 72 79 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 31  ry consists of 1
0340: 30 32 20 66 69 6c 65 73 20 6f 66 20 43 20 63 6f  02 files of C co
0350: 64 65 0a 28 61 73 20 6f 66 20 5b 56 65 72 73 69  de.(as of [Versi
0360: 6f 6e 20 33 2e 39 2e 30 5d 20 2d 20 5b 64 61 74  on 3.9.0] - [dat
0370: 65 6f 66 3a 33 2e 39 2e 30 5d 29 0a 69 6e 20 74  eof:3.9.0]).in t
0380: 68 65 20 63 6f 72 65 20 77 69 74 68 20 33 32 20  he core with 32 
0390: 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 6c 65 73  additional files
03a0: 20 74 68 61 74 0a 69 6d 70 6c 65 6d 65 6e 74 20   that.implement 
03b0: 74 68 65 20 5b 46 54 53 33 5d 2c 20 5b 46 54 53  the [FTS3], [FTS
03c0: 35 5d 2c 20 5b 52 54 52 45 45 5d 2c 20 5b 64 62  5], [RTREE], [db
03d0: 73 74 61 74 7c 44 42 53 54 41 54 5d 2c 20 5b 6a  stat|DBSTAT], [j
03e0: 73 6f 6e 31 7c 4a 53 4f 4e 31 5d 2c 20 61 6e 64  son1|JSON1], and
03f0: 0a 5b 52 42 55 5d 20 65 78 74 65 6e 73 69 6f 6e  .[RBU] extension
0400: 73 2e 0a 4f 66 20 74 68 65 20 31 30 32 20 0a 6d  s..Of the 102 .m
0410: 61 69 6e 20 73 6f 75 72 63 65 20 66 69 6c 65 73  ain source files
0420: 2c 20 61 62 6f 75 74 20 37 35 25 20 61 72 65 20  , about 75% are 
0430: 43 20 63 6f 64 65 20 61 6e 64 20 61 62 6f 75 74  C code and about
0440: 20 32 35 25 20 61 72 65 20 43 20 68 65 61 64 65   25% are C heade
0450: 72 20 66 69 6c 65 73 2e 0a 4d 6f 73 74 20 6f 66  r files..Most of
0460: 20 74 68 65 73 65 20 61 72 65 20 22 73 6f 75 72   these are "sour
0470: 63 65 22 20 66 69 6c 65 73 20 69 6e 20 74 68 65  ce" files in the
0480: 20 73 65 6e 73 65 20 74 68 61 74 20 74 68 65 79   sense that they
0490: 20 61 72 65 20 73 74 6f 72 65 64 20 0a 69 6e 20   are stored .in 
04a0: 74 68 65 20 5b 68 74 74 70 73 3a 2f 2f 77 77 77  the [https://www
04b0: 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63 20  .sqlite.org/src 
04c0: 7c 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  | SQLite version
04d0: 20 63 6f 6e 74 72 6f 6c 20 73 79 73 74 65 6d 5d   control system]
04e0: 0a 61 6e 64 20 61 72 65 20 65 64 69 74 65 64 20  .and are edited 
04f0: 6d 61 6e 75 61 6c 6c 79 20 69 6e 20 61 6e 20 6f  manually in an o
0500: 72 64 69 6e 61 72 79 20 74 65 78 74 20 65 64 69  rdinary text edi
0510: 74 6f 72 2e 0a 42 75 74 20 73 6f 6d 65 20 6f 66  tor..But some of
0520: 20 74 68 65 20 43 2d 6c 61 6e 67 75 61 67 65 20   the C-language 
0530: 66 69 6c 65 73 20 61 72 65 20 67 65 6e 65 72 61  files are genera
0540: 74 65 64 20 75 73 69 6e 67 20 73 63 72 69 70 74  ted using script
0550: 73 0a 6f 72 20 61 75 78 69 6c 69 61 72 79 20 70  s.or auxiliary p
0560: 72 6f 67 72 61 6d 73 2e 20 20 46 6f 72 20 65 78  rograms.  For ex
0570: 61 6d 70 6c 65 2c 20 74 68 65 0a 5b 68 74 74 70  ample, the.[http
0580: 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f  s://www.sqlite.o
0590: 72 67 2f 73 72 63 2f 61 72 74 69 66 61 63 74 3f  rg/src/artifact?
05a0: 63 69 3d 74 72 75 6e 6b 26 66 69 6c 65 6e 61 6d  ci=trunk&filenam
05b0: 65 3d 73 72 63 2f 70 61 72 73 65 2e 79 7c 70 61  e=src/parse.y|pa
05c0: 72 73 65 2e 79 5d 0a 66 69 6c 65 20 63 6f 6e 74  rse.y].file cont
05d0: 61 69 6e 73 20 61 6e 20 4c 41 4c 52 28 31 29 20  ains an LALR(1) 
05e0: 67 72 61 6d 6d 61 72 20 6f 66 20 74 68 65 20 53  grammar of the S
05f0: 51 4c 20 6c 61 6e 67 75 61 67 65 20 77 68 69 63  QL language whic
0600: 68 20 69 73 20 63 6f 6d 70 69 6c 65 64 0a 64 6f  h is compiled.do
0610: 77 6e 20 69 6e 74 6f 20 61 72 65 20 70 61 72 73  wn into are pars
0620: 65 72 20 69 6e 20 66 69 6c 65 73 20 22 70 61 72  er in files "par
0630: 73 65 2e 63 22 20 61 6e 64 20 22 70 61 72 73 65  se.c" and "parse
0640: 2e 68 22 20 62 79 20 74 68 65 0a 5b 4c 65 6d 6f  .h" by the.[Lemo
0650: 6e 20 70 61 72 73 65 72 20 67 65 6e 65 72 61 74  n parser generat
0660: 6f 72 5d 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68  or]..</p>..<p>Th
0670: 65 20 6d 61 6b 65 66 69 6c 65 73 20 66 6f 72 20  e makefiles for 
0680: 53 51 4c 69 74 65 20 68 61 76 65 20 61 6e 20 22  SQLite have an "
0690: 73 71 6c 69 74 65 33 2e 63 22 20 74 61 72 67 65  sqlite3.c" targe
06a0: 74 20 66 6f 72 20 62 75 69 6c 64 69 6e 67 20 74  t for building t
06b0: 68 65 0a 66 69 6c 65 20 77 65 20 63 61 6c 6c 20  he.file we call 
06c0: 22 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f  "the amalgamatio
06d0: 6e 22 2e 0a 54 68 65 20 61 6d 61 6c 67 61 6d 61  n"..The amalgama
06e0: 74 69 6f 6e 20 69 73 20 61 20 73 69 6e 67 6c 65  tion is a single
06f0: 20 43 20 63 6f 64 65 20 66 69 6c 65 2c 20 6e 61   C code file, na
0700: 6d 65 64 20 22 73 71 6c 69 74 65 33 2e 63 22 2c  med "sqlite3.c",
0710: 0a 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61  .that contains a
0720: 6c 6c 20 43 20 63 6f 64 65 20 0a 66 6f 72 20 74  ll C code .for t
0730: 68 65 20 63 6f 72 65 20 53 51 4c 69 74 65 20 6c  he core SQLite l
0740: 69 62 72 61 72 79 20 61 6e 64 20 74 68 65 20 5b  ibrary and the [
0750: 46 54 53 33 5d 2c 20 5b 46 54 53 35 5d 2c 20 5b  FTS3], [FTS5], [
0760: 52 54 52 45 45 5d 2c 0a 5b 64 62 73 74 61 74 7c  RTREE],.[dbstat|
0770: 44 42 53 54 41 54 5d 2c 20 5b 6a 73 6f 6e 31 7c  DBSTAT], [json1|
0780: 4a 53 4f 4e 31 5d 2c 20 61 6e 64 20 5b 52 42 55  JSON1], and [RBU
0790: 5d 20 65 78 74 65 6e 73 69 6f 6e 73 2e 0a 54 68  ] extensions..Th
07a0: 69 73 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73  is file contains
07b0: 20 61 62 6f 75 74 20 31 38 34 4b 20 6c 69 6e 65   about 184K line
07c0: 73 20 6f 66 20 63 6f 64 65 20 0a 28 31 31 33 4b  s of code .(113K
07d0: 20 69 66 20 79 6f 75 20 6f 6d 69 74 20 62 6c 61   if you omit bla
07e0: 6e 6b 20 6c 69 6e 65 73 20 61 6e 64 20 63 6f 6d  nk lines and com
07f0: 6d 65 6e 74 73 29 20 61 6e 64 20 69 73 20 6f 76  ments) and is ov
0800: 65 72 20 36 2e 34 20 6d 65 67 61 62 79 74 65 73  er 6.4 megabytes
0810: 0a 69 6e 20 73 69 7a 65 2e 0a 54 68 6f 75 67 68  .in size..Though
0820: 20 74 68 65 20 76 61 72 69 6f 75 73 20 65 78 74   the various ext
0830: 65 6e 73 69 6f 6e 73 20 61 72 65 20 69 6e 63 6c  ensions are incl
0840: 75 64 65 64 20 69 6e 20 74 68 65 0a 22 73 71 6c  uded in the."sql
0850: 69 74 65 33 2e 63 22 20 61 6d 61 6c 67 61 6d 61  ite3.c" amalgama
0860: 74 69 6f 6e 20 66 69 6c 65 2c 20 74 68 65 79 20  tion file, they 
0870: 61 72 65 20 64 69 73 61 62 6c 65 64 20 75 73 69  are disabled usi
0880: 6e 67 20 23 69 66 64 65 66 20 73 74 61 74 65 6d  ng #ifdef statem
0890: 65 6e 74 73 2e 0a 41 63 74 69 76 61 74 65 20 74  ents..Activate t
08a0: 68 65 20 65 78 74 65 6e 73 69 6f 6e 73 20 75 73  he extensions us
08b0: 69 6e 67 20 5b 63 6f 6d 70 69 6c 65 2d 74 69 6d  ing [compile-tim
08c0: 65 20 6f 70 74 69 6f 6e 73 5d 20 6c 69 6b 65 3a  e options] like:
08d0: 0a 0a 3c 75 6c 3e 0a 3c 6c 69 3e 20 5b 2d 44 53  ..<ul>.<li> [-DS
08e0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
08f0: 33 5d 0a 3c 6c 69 3e 20 5b 2d 44 53 51 4c 49 54  3].<li> [-DSQLIT
0900: 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35 5d 0a 3c  E_ENABLE_FTS5].<
0910: 6c 69 3e 20 5b 2d 44 53 51 4c 49 54 45 5f 45 4e  li> [-DSQLITE_EN
0920: 41 42 4c 45 5f 52 54 52 45 45 5d 0a 3c 6c 69 3e  ABLE_RTREE].<li>
0930: 20 5b 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c   [-DSQLITE_ENABL
0940: 45 5f 44 42 53 54 41 54 5f 56 54 41 42 5d 0a 3c  E_DBSTAT_VTAB].<
0950: 6c 69 3e 20 5b 2d 44 53 51 4c 49 54 45 5f 45 4e  li> [-DSQLITE_EN
0960: 41 42 4c 45 5f 4a 53 4f 4e 31 5d 0a 3c 6c 69 3e  ABLE_JSON1].<li>
0970: 20 5b 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c   [-DSQLITE_ENABL
0980: 45 5f 52 42 55 5d 0a 3c 2f 75 6c 3e 0a 0a 3c 70  E_RBU].</ul>..<p
0990: 3e 54 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f  >The amalgamatio
09a0: 6e 20 63 6f 6e 74 61 69 6e 73 20 65 76 65 72 79  n contains every
09b0: 74 68 69 6e 67 20 79 6f 75 20 6e 65 65 64 20 74  thing you need t
09c0: 6f 20 69 6e 74 65 67 72 61 74 65 20 53 51 4c 69  o integrate SQLi
09d0: 74 65 20 0a 69 6e 74 6f 20 61 20 6c 61 72 67 65  te .into a large
09e0: 72 20 70 72 6f 6a 65 63 74 2e 20 20 4a 75 73 74  r project.  Just
09f0: 20 63 6f 70 79 20 74 68 65 20 61 6d 61 6c 67 61   copy the amalga
0a00: 6d 61 74 69 6f 6e 20 69 6e 74 6f 20 79 6f 75 72  mation into your
0a10: 20 73 6f 75 72 63 65 20 0a 64 69 72 65 63 74 6f   source .directo
0a20: 72 79 20 61 6e 64 20 63 6f 6d 70 69 6c 65 20 69  ry and compile i
0a30: 74 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 65  t along with the
0a40: 20 6f 74 68 65 72 20 43 20 63 6f 64 65 20 66 69   other C code fi
0a50: 6c 65 73 20 69 6e 20 79 6f 75 72 20 70 72 6f 6a  les in your proj
0a60: 65 63 74 2e 0a 28 41 20 5b 68 6f 77 20 74 6f 20  ect..(A [how to 
0a70: 63 6f 6d 70 69 6c 65 7c 6d 6f 72 65 20 64 65 74  compile|more det
0a80: 61 69 6c 65 64 20 64 69 73 63 75 73 73 69 6f 6e  ailed discussion
0a90: 5d 20 6f 66 20 74 68 65 20 63 6f 6d 70 69 6c 61  ] of the compila
0aa0: 74 69 6f 6e 20 70 72 6f 63 65 73 73 20 69 73 0a  tion process is.
0ab0: 61 76 61 69 6c 61 62 6c 65 2e 29 0a 59 6f 75 20  available.).You 
0ac0: 6d 61 79 20 61 6c 73 6f 20 77 61 6e 74 20 74 6f  may also want to
0ad0: 20 6d 61 6b 65 20 75 73 65 20 6f 66 20 74 68 65   make use of the
0ae0: 20 22 73 71 6c 69 74 65 33 2e 68 22 20 68 65 61   "sqlite3.h" hea
0af0: 64 65 72 20 66 69 6c 65 20 74 68 61 74 20 0a 64  der file that .d
0b00: 65 66 69 6e 65 73 20 74 68 65 20 70 72 6f 67 72  efines the progr
0b10: 61 6d 6d 69 6e 67 20 41 50 49 20 66 6f 72 20 53  amming API for S
0b20: 51 4c 69 74 65 2e 20 0a 54 68 65 20 73 71 6c 69  QLite. .The sqli
0b30: 74 65 33 2e 68 20 68 65 61 64 65 72 20 66 69 6c  te3.h header fil
0b40: 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 73  e is available s
0b50: 65 70 61 72 61 74 65 6c 79 2e 20 0a 54 68 65 20  eparately. .The 
0b60: 73 71 6c 69 74 65 33 2e 68 20 66 69 6c 65 20 69  sqlite3.h file i
0b70: 73 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 65 64  s also contained
0b80: 20 77 69 74 68 69 6e 20 74 68 65 20 61 6d 61 6c   within the amal
0b90: 67 61 6d 61 74 69 6f 6e 2c 20 69 6e 0a 74 68 65  gamation, in.the
0ba0: 20 66 69 72 73 74 20 66 65 77 20 74 68 6f 75 73   first few thous
0bb0: 61 6e 64 20 6c 69 6e 65 73 2e 20 53 6f 20 69 66  and lines. So if
0bc0: 20 79 6f 75 20 68 61 76 65 20 61 20 63 6f 70 79   you have a copy
0bd0: 20 6f 66 20 0a 73 71 6c 69 74 65 33 2e 63 20 62   of .sqlite3.c b
0be0: 75 74 20 63 61 6e 6e 6f 74 20 73 65 65 6d 20 74  ut cannot seem t
0bf0: 6f 20 6c 6f 63 61 74 65 20 73 71 6c 69 74 65 33  o locate sqlite3
0c00: 2e 68 2c 20 79 6f 75 20 63 61 6e 20 61 6c 77 61  .h, you can alwa
0c10: 79 73 20 0a 72 65 67 65 6e 65 72 61 74 65 20 74  ys .regenerate t
0c20: 68 65 20 73 71 6c 69 74 65 33 2e 68 20 62 79 20  he sqlite3.h by 
0c30: 63 6f 70 79 69 6e 67 20 61 6e 64 20 70 61 73 74  copying and past
0c40: 69 6e 67 20 66 72 6f 6d 20 74 68 65 20 61 6d 61  ing from the ama
0c50: 6c 67 61 6d 61 74 69 6f 6e 2e 3c 2f 70 3e 0a 0a  lgamation.</p>..
0c60: 3c 70 3e 49 6e 20 61 64 64 69 74 69 6f 6e 20 74  <p>In addition t
0c70: 6f 20 6d 61 6b 69 6e 67 20 53 51 4c 69 74 65 20  o making SQLite 
0c80: 65 61 73 69 65 72 20 74 6f 20 69 6e 63 6f 72 70  easier to incorp
0c90: 6f 72 61 74 65 20 69 6e 74 6f 20 6f 74 68 65 72  orate into other
0ca0: 0a 70 72 6f 6a 65 63 74 73 2c 20 74 68 65 20 61  .projects, the a
0cb0: 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 61 6c 73 6f  malgamation also
0cc0: 20 6d 61 6b 65 73 20 69 74 20 72 75 6e 20 66 61   makes it run fa
0cd0: 73 74 65 72 2e 20 4d 61 6e 79 0a 63 6f 6d 70 69  ster. Many.compi
0ce0: 6c 65 72 73 20 61 72 65 20 61 62 6c 65 20 74 6f  lers are able to
0cf0: 20 64 6f 20 61 64 64 69 74 69 6f 6e 61 6c 20 6f   do additional o
0d00: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 6f 6e 20  ptimizations on 
0d10: 63 6f 64 65 20 77 68 65 6e 20 0a 69 74 20 69 73  code when .it is
0d20: 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 20   contained with 
0d30: 69 6e 20 61 20 73 69 6e 67 6c 65 20 74 72 61 6e  in a single tran
0d40: 73 6c 61 74 69 6f 6e 20 75 6e 69 74 20 73 75 63  slation unit suc
0d50: 68 20 61 73 20 69 74 20 0a 69 73 20 69 6e 20 74  h as it .is in t
0d60: 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e  he amalgamation.
0d70: 20 57 65 20 68 61 76 65 20 6d 65 61 73 75 72 65   We have measure
0d80: 64 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d  d performance im
0d90: 70 72 6f 76 65 6d 65 6e 74 73 0a 6f 66 20 62 65  provements.of be
0da0: 74 77 65 65 6e 20 35 20 61 6e 64 20 31 30 25 20  tween 5 and 10% 
0db0: 77 68 65 6e 20 77 65 20 75 73 65 20 74 68 65 20  when we use the 
0dc0: 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 74 6f 20  amalgamation to 
0dd0: 63 6f 6d 70 69 6c 65 20 0a 53 51 4c 69 74 65 20  compile .SQLite 
0de0: 72 61 74 68 65 72 20 74 68 61 6e 20 69 6e 64 69  rather than indi
0df0: 76 69 64 75 61 6c 20 73 6f 75 72 63 65 20 66 69  vidual source fi
0e00: 6c 65 73 2e 20 20 54 68 65 20 64 6f 77 6e 73 69  les.  The downsi
0e10: 64 65 20 6f 66 20 74 68 69 73 0a 69 73 20 74 68  de of this.is th
0e20: 61 74 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61  at the additiona
0e30: 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  l optimizations 
0e40: 6f 66 74 65 6e 20 74 61 6b 65 20 74 68 65 20 66  often take the f
0e50: 6f 72 6d 20 6f 66 20 0a 66 75 6e 63 74 69 6f 6e  orm of .function
0e60: 20 69 6e 6c 69 6e 69 6e 67 20 77 68 69 63 68 20   inlining which 
0e70: 74 65 6e 64 73 20 74 6f 20 6d 61 6b 65 20 74 68  tends to make th
0e80: 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 72 65  e size of the re
0e90: 73 75 6c 74 69 6e 67 0a 62 69 6e 61 72 79 20 69  sulting.binary i
0ea0: 6d 61 67 65 20 6c 61 72 67 65 72 2e 3c 2f 70 3e  mage larger.</p>
0eb0: 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d 65  ..<tcl>hd_fragme
0ec0: 6e 74 20 61 6d 61 6c 33 32 6b 20 7b 73 70 6c 69  nt amal32k {spli
0ed0: 74 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 7d 3c  t amalgamation}<
0ee0: 2f 74 63 6c 3e 0a 3c 68 31 3e 54 68 65 20 53 70  /tcl>.<h1>The Sp
0ef0: 6c 69 74 20 41 6d 61 6c 67 61 6d 61 74 69 6f 6e  lit Amalgamation
0f00: 3c 2f 68 31 3e 0a 0a 3c 70 3e 44 65 76 65 6c 6f  </h1>..<p>Develo
0f10: 70 65 72 73 20 73 6f 6d 65 74 69 6d 65 73 20 65  pers sometimes e
0f20: 78 70 65 72 69 65 6e 63 65 20 74 72 6f 75 62 6c  xperience troubl
0f30: 65 20 64 65 62 75 67 67 69 6e 67 20 74 68 65 0a  e debugging the.
0f40: 31 38 35 2c 30 30 30 2d 6c 69 6e 65 2d 6c 6f 6e  185,000-line-lon
0f50: 67 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 73  g amalgamation s
0f60: 6f 75 72 63 65 20 66 69 6c 65 20 62 65 63 61 75  ource file becau
0f70: 73 65 20 73 6f 6d 65 20 64 65 62 75 67 67 65 72  se some debugger
0f80: 73 0a 61 72 65 20 6f 6e 6c 79 20 61 62 6c 65 20  s.are only able 
0f90: 74 6f 20 68 61 6e 64 6c 65 20 73 6f 75 72 63 65  to handle source
0fa0: 20 63 6f 64 65 20 6c 69 6e 65 20 6e 75 6d 62 65   code line numbe
0fb0: 72 73 20 6c 65 73 73 20 74 68 61 6e 20 33 32 2c  rs less than 32,
0fc0: 37 36 38 2e 0a 54 68 65 20 61 6d 61 6c 67 61 6d  768..The amalgam
0fd0: 61 74 69 6f 6e 20 73 6f 75 72 63 65 20 63 6f 64  ation source cod
0fe0: 65 20 72 75 6e 73 20 66 69 6e 65 2e 20 20 4f 6e  e runs fine.  On
0ff0: 65 20 6a 75 73 74 20 63 61 6e 6e 6f 74 20 73 69  e just cannot si
1000: 6e 67 6c 65 2d 73 74 65 70 0a 74 68 72 6f 75 67  ngle-step.throug
1010: 68 20 69 74 20 69 6e 20 61 20 64 65 62 75 67 67  h it in a debugg
1020: 65 72 2e 0a 0a 3c 70 3e 54 6f 20 63 69 72 63 75  er...<p>To circu
1030: 6d 76 65 6e 74 20 74 68 69 73 20 6c 69 6d 69 74  mvent this limit
1040: 61 74 69 6f 6e 2c 20 74 68 65 20 61 6d 61 6c 67  ation, the amalg
1050: 61 6d 61 74 69 6f 6e 20 69 73 20 61 6c 73 6f 20  amation is also 
1060: 61 76 61 69 6c 61 62 6c 65 20 69 6e 0a 61 20 73  available in.a s
1070: 70 6c 69 74 20 66 6f 72 6d 2c 20 63 6f 6e 73 69  plit form, consi
1080: 73 74 69 6e 67 20 6f 66 20 66 69 6c 65 73 20 22  sting of files "
1090: 73 71 6c 69 74 65 33 2d 31 2e 63 22 2c 20 22 73  sqlite3-1.c", "s
10a0: 71 6c 69 74 65 33 2d 32 2e 63 22 2c 20 61 6e 64  qlite3-2.c", and
10b0: 0a 73 6f 20 66 6f 72 74 68 2c 20 77 68 65 72 65  .so forth, where
10c0: 20 65 61 63 68 20 66 69 6c 65 20 69 73 20 6c 65   each file is le
10d0: 73 73 20 74 68 61 6e 20 33 32 2c 37 36 38 20 6c  ss than 32,768 l
10e0: 69 6e 65 73 20 69 6e 20 6c 65 6e 67 74 68 20 61  ines in length a
10f0: 6e 64 0a 77 68 65 72 65 20 74 68 65 20 63 6f 6e  nd.where the con
1100: 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 20 74 68  catenation of th
1110: 65 20 66 69 6c 65 73 20 63 6f 6e 74 61 69 6e 20  e files contain 
1120: 61 6c 6c 20 6f 66 20 74 68 65 20 63 6f 64 65 20  all of the code 
1130: 66 6f 72 20 74 68 65 0a 63 6f 6d 70 6c 65 74 65  for the.complete
1140: 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 20 20   amalgamation.  
1150: 54 68 65 6e 20 74 68 65 72 65 20 69 73 20 61 20  Then there is a 
1160: 73 65 70 61 72 61 74 65 20 73 6f 75 72 63 65 20  separate source 
1170: 66 69 6c 65 20 6e 61 6d 65 64 0a 22 73 71 6c 69  file named."sqli
1180: 74 65 33 2d 61 6c 6c 2e 63 22 20 77 68 69 63 68  te3-all.c" which
1190: 20 62 61 73 69 63 61 6c 6c 79 20 63 6f 6e 73 69   basically consi
11a0: 73 74 73 20 6f 66 20 63 6f 64 65 20 6c 69 6b 65  sts of code like
11b0: 20 74 68 69 73 3a 0a 0a 3c 63 6f 64 65 62 6c 6f   this:..<codeblo
11c0: 63 6b 3e 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  ck>.#include "sq
11d0: 6c 69 74 65 33 2d 31 2e 63 22 0a 23 69 6e 63 6c  lite3-1.c".#incl
11e0: 75 64 65 20 22 73 71 6c 69 74 65 33 2d 32 2e 63  ude "sqlite3-2.c
11f0: 22 0a 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69  ".#include "sqli
1200: 74 65 33 2d 33 2e 63 22 0a 23 69 6e 63 6c 75 64  te3-3.c".#includ
1210: 65 20 22 73 71 6c 69 74 65 33 2d 34 2e 63 22 0a  e "sqlite3-4.c".
1220: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
1230: 33 2d 35 2e 63 22 0a 23 69 6e 63 6c 75 64 65 20  3-5.c".#include 
1240: 22 73 71 6c 69 74 65 33 2d 36 2e 63 22 0a 23 69  "sqlite3-6.c".#i
1250: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2d  nclude "sqlite3-
1260: 37 2e 63 22 0a 3c 2f 63 6f 64 65 62 6c 6f 63 6b  7.c".</codeblock
1270: 3e 0a 0a 3c 70 3e 41 70 70 6c 69 63 61 74 69 6f  >..<p>Applicatio
1280: 6e 73 20 75 73 69 6e 67 20 74 68 65 20 73 70 6c  ns using the spl
1290: 69 74 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20  it amalgamation 
12a0: 73 69 6d 70 6c 79 20 63 6f 6d 70 69 6c 65 20 61  simply compile a
12b0: 67 61 69 6e 73 74 0a 22 73 71 6c 69 74 65 33 2d  gainst."sqlite3-
12c0: 61 6c 6c 2e 63 22 20 69 6e 73 74 65 61 64 20 6f  all.c" instead o
12d0: 66 20 22 73 71 6c 69 74 65 33 2e 63 22 2e 20 20  f "sqlite3.c".  
12e0: 54 68 65 20 74 77 6f 20 66 69 6c 65 73 20 77 6f  The two files wo
12f0: 72 6b 20 65 78 61 63 74 6c 79 0a 74 68 65 20 73  rk exactly.the s
1300: 61 6d 65 2e 20 20 42 75 74 20 77 69 74 68 20 22  ame.  But with "
1310: 73 71 6c 69 74 65 33 2d 61 6c 6c 2e 63 22 2c 20  sqlite3-all.c", 
1320: 6e 6f 20 73 69 6e 67 6c 65 20 73 6f 75 72 63 65  no single source
1330: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6d   file contains m
1340: 6f 72 65 0a 74 68 61 6e 20 33 32 2c 37 36 37 20  ore.than 32,767 
1350: 6c 69 6e 65 73 20 6f 66 20 63 6f 64 65 2c 20 61  lines of code, a
1360: 6e 64 20 73 6f 20 69 74 20 69 73 20 6d 6f 72 65  nd so it is more
1370: 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75   convenient to u
1380: 73 65 20 73 6f 6d 65 0a 64 65 62 75 67 67 65 72  se some.debugger
1390: 73 2e 20 20 54 68 65 20 64 6f 77 6e 73 69 64 65  s.  The downside
13a0: 20 6f 66 20 74 68 65 20 73 70 6c 69 74 20 61 6d   of the split am
13b0: 61 6c 67 61 6d 61 74 69 6f 6e 20 69 73 20 74 68  algamation is th
13c0: 61 74 20 69 74 20 63 6f 6e 73 69 73 74 73 0a 6f  at it consists.o
13d0: 66 20 36 20 43 20 73 6f 75 72 63 65 20 63 6f 64  f 6 C source cod
13e0: 65 20 66 69 6c 65 73 20 69 6e 73 74 65 61 64 20  e files instead 
13f0: 6f 66 20 6a 75 73 74 20 31 2e 0a 0a 3c 68 31 3e  of just 1...<h1>
1400: 44 6f 77 6e 6c 6f 61 64 20 43 6f 70 69 65 73 20  Download Copies 
1410: 4f 66 20 54 68 65 20 41 6d 61 6c 67 61 6d 61 74  Of The Amalgamat
1420: 69 6f 6e 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 68 65  ion</h1>..<p>The
1430: 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 61 6e   amalgamation an
1440: 64 0a 74 68 65 20 73 71 6c 69 74 65 33 2e 68 20  d.the sqlite3.h 
1450: 68 65 61 64 65 72 20 66 69 6c 65 20 61 72 65 20  header file are 
1460: 61 76 61 69 6c 61 62 6c 65 20 6f 6e 0a 74 68 65  available on.the
1470: 20 3c 61 20 68 72 65 66 3d 22 64 6f 77 6e 6c 6f   <a href="downlo
1480: 61 64 2e 68 74 6d 6c 22 3e 64 6f 77 6e 6c 6f 61  ad.html">downloa
1490: 64 20 70 61 67 65 3c 2f 61 3e 20 61 73 20 61 20  d page</a> as a 
14a0: 66 69 6c 65 20 0a 6e 61 6d 65 64 20 73 71 6c 69  file .named sqli
14b0: 74 65 2d 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2d  te-amalgamation-
14c0: 58 2e 7a 69 70 0a 77 68 65 72 65 20 74 68 65 20  X.zip.where the 
14d0: 58 20 69 73 20 72 65 70 6c 61 63 65 64 20 62 79  X is replaced by
14e0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
14f0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 2e   version number.
1500: 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72  </p>..<tcl>hd_fr
1510: 61 67 6d 65 6e 74 20 61 6d 61 6c 67 62 75 69 6c  agment amalgbuil
1520: 64 3c 2f 74 63 6c 3e 0a 3c 68 31 3e 42 75 69 6c  d</tcl>.<h1>Buil
1530: 64 69 6e 67 20 54 68 65 20 41 6d 61 6c 67 61 6d  ding The Amalgam
1540: 61 74 69 6f 6e 20 46 72 6f 6d 20 43 61 6e 6f 6e  ation From Canon
1550: 69 63 61 6c 20 53 6f 75 72 63 65 20 43 6f 64 65  ical Source Code
1560: 3c 2f 68 31 3e 0a 0a 3c 70 3e 54 6f 20 62 75 69  </h1>..<p>To bui
1570: 6c 64 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74  ld the amalgamat
1580: 69 6f 6e 20 28 65 69 74 68 65 72 20 74 68 65 20  ion (either the 
1590: 66 75 6c 6c 20 61 6d 61 6c 67 61 6d 61 74 69 6f  full amalgamatio
15a0: 6e 20 6f 72 20 74 68 65 0a 73 70 6c 69 74 20 61  n or the.split a
15b0: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2c 20 66 69  malgamation), fi
15c0: 72 73 74 0a 5b 67 65 74 20 74 68 65 20 63 61 6e  rst.[get the can
15d0: 6f 6e 69 63 61 6c 20 73 6f 75 72 63 65 20 63 6f  onical source co
15e0: 64 65 5d 20 66 72 6f 6d 20 6f 6e 65 20 6f 66 20  de] from one of 
15f0: 74 68 65 20 74 68 72 65 65 20 73 65 72 76 65 72  the three server
1600: 73 2e 0a 54 68 65 6e 2c 20 6f 6e 20 62 6f 74 68  s..Then, on both
1610: 20 75 6e 69 78 2d 6c 69 6b 65 20 73 79 73 74 65   unix-like syste
1620: 6d 73 20 61 6e 64 20 6f 6e 20 57 69 6e 64 6f 77  ms and on Window
1630: 73 20 73 79 73 74 65 6d 73 20 74 68 61 74 20 68  s systems that h
1640: 61 76 65 20 74 68 65 0a 66 72 65 65 20 5b 68 74  ave the.free [ht
1650: 74 70 3a 2f 2f 6d 69 6e 67 77 2e 6f 72 67 2f 77  tp://mingw.org/w
1660: 69 6b 69 2f 6d 73 79 73 7c 4d 69 6e 47 57 5d 20  iki/msys|MinGW] 
1670: 64 65 76 65 6c 6f 70 6d 65 6e 74 20 65 6e 76 69  development envi
1680: 72 6f 6e 6d 65 6e 74 0a 69 6e 73 74 61 6c 6c 65  ronment.installe
1690: 64 2c 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74  d, the amalgamat
16a0: 69 6f 6e 20 63 61 6e 20 62 65 20 62 75 69 6c 74  ion can be built
16b0: 20 75 73 69 6e 67 20 74 68 65 0a 66 6f 6c 6c 6f   using the.follo
16c0: 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 73 3a 0a 0a  wing commands:..
16d0: 3c 63 6f 64 65 62 6c 6f 63 6b 3e 0a 73 68 20 63  <codeblock>.sh c
16e0: 6f 6e 66 69 67 75 72 65 0a 6d 61 6b 65 20 73 71  onfigure.make sq
16f0: 6c 69 74 65 33 2e 63 0a 3c 2f 63 6f 64 65 62 6c  lite3.c.</codebl
1700: 6f 63 6b 3e 0a 0a 3c 70 3e 54 6f 20 62 75 69 6c  ock>..<p>To buil
1710: 64 20 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66  d using Microsof
1720: 74 20 56 69 73 75 61 6c 20 43 2b 2b 2c 20 72 75  t Visual C++, ru
1730: 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 3a 0a  n this command:.
1740: 0a 3c 63 6f 64 65 62 6c 6f 63 6b 3e 0a 6e 6d 61  .<codeblock>.nma
1750: 6b 65 20 2f 66 20 6d 61 6b 65 66 69 6c 65 2e 6d  ke /f makefile.m
1760: 73 63 20 73 71 6c 69 74 65 33 2e 63 0a 3c 2f 63  sc sqlite3.c.</c
1770: 6f 64 65 62 6c 6f 63 6b 3e 0a 0a 3c 70 3e 49 6e  odeblock>..<p>In
1780: 20 62 6f 74 68 20 63 61 73 65 73 2c 20 74 68 65   both cases, the
1790: 20 73 70 6c 69 74 20 61 6d 61 6c 67 61 6d 61 74   split amalgamat
17a0: 69 6f 6e 20 63 61 6e 20 62 65 20 6f 62 74 61 69  ion can be obtai
17b0: 6e 65 64 20 62 79 0a 73 75 62 73 74 69 74 75 74  ned by.substitut
17c0: 69 6e 67 20 22 73 71 6c 69 74 65 33 2d 61 6c 6c  ing "sqlite3-all
17d0: 2e 63 22 20 66 6f 72 20 22 73 71 6c 69 74 65 33  .c" for "sqlite3
17e0: 2e 63 22 20 61 73 20 74 68 65 20 6d 61 6b 65 20  .c" as the make 
17f0: 74 61 72 67 65 74 2e 0a 0a 3c 68 32 3e 44 65 70  target...<h2>Dep
1800: 65 6e 64 65 6e 63 69 65 73 3c 2f 68 32 3e 0a 0a  endencies</h2>..
1810: 3c 70 3e 54 68 65 20 62 75 69 6c 64 20 70 72 6f  <p>The build pro
1820: 63 65 73 73 20 6d 61 6b 65 73 20 65 78 74 65 6e  cess makes exten
1830: 73 69 76 65 20 75 73 65 20 6f 66 20 74 68 65 20  sive use of the 
1840: 0a 5b 68 74 74 70 3a 2f 2f 77 77 77 2e 74 63 6c  .[http://www.tcl
1850: 2d 6c 61 6e 67 2e 6f 72 67 2f 7c 54 63 6c 5d 20  -lang.org/|Tcl] 
1860: 73 63 72 69 70 74 69 6e 67 20 6c 61 6e 67 75 61  scripting langua
1870: 67 65 2e 20 20 59 6f 75 20 77 69 6c 6c 20 6e 65  ge.  You will ne
1880: 65 64 20 74 6f 20 68 61 76 65 20 61 0a 63 6f 70  ed to have a.cop
1890: 79 20 6f 66 20 54 43 4c 20 69 6e 73 74 61 6c 6c  y of TCL install
18a0: 65 64 20 69 6e 20 6f 72 64 65 72 20 66 6f 72 20  ed in order for 
18b0: 74 68 65 20 6d 61 6b 65 20 74 61 72 67 65 74 73  the make targets
18c0: 20 61 62 6f 76 65 20 74 6f 20 77 6f 72 6b 2e 0a   above to work..
18d0: 45 61 73 79 2d 74 6f 2d 75 73 65 20 69 6e 73 74  Easy-to-use inst
18e0: 61 6c 6c 65 72 73 20 63 61 6e 20 62 65 20 6f 62  allers can be ob
18f0: 74 61 69 6e 65 64 20 66 72 6f 6d 20 5b 68 74 74  tained from [htt
1900: 70 3a 2f 2f 77 77 77 2e 74 63 6c 2d 6c 61 6e 67  p://www.tcl-lang
1910: 2e 6f 72 67 2f 5d 2e 0a 4d 61 6e 79 20 75 6e 69  .org/]..Many uni
1920: 78 20 77 6f 72 6b 73 74 61 74 69 6f 6e 73 20 68  x workstations h
1930: 61 76 65 20 54 63 6c 20 69 6e 73 74 61 6c 6c 65  ave Tcl installe
1940: 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 0a 3c  d by default...<
1950: 68 32 3e 53 65 65 20 41 6c 73 6f 3c 2f 68 32 3e  h2>See Also</h2>
1960: 0a 0a 3c 70 3e 41 64 64 69 74 69 6f 6e 61 6c 20  ..<p>Additional 
1970: 6e 6f 74 65 73 20 6f 6e 20 63 6f 6d 70 69 6c 69  notes on compili
1980: 6e 67 20 53 51 4c 69 74 65 20 63 61 6e 20 62 65  ng SQLite can be
1990: 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 0a 5b 48   found on the.[H
19a0: 6f 77 20 54 6f 20 43 6f 6d 70 69 6c 65 20 53 51  ow To Compile SQ
19b0: 4c 69 74 65 5d 20 70 61 67 65 2e 0a              Lite] page..