OLD | NEW |
(Empty) | |
| 1 <h1 align="center">SQLite Source Repository</h1> |
| 2 |
| 3 This repository contains the complete source code for the SQLite database |
| 4 engine. Some test scripts are also include. However, many other test scripts |
| 5 and most of the documentation are managed separately. |
| 6 |
| 7 ## Compiling |
| 8 |
| 9 First create a directory in which to place |
| 10 the build products. It is recommended, but not required, that the |
| 11 build directory be separate from the source directory. Cd into the |
| 12 build directory and then from the build directory run the configure |
| 13 script found at the root of the source tree. Then run "make". |
| 14 |
| 15 For example: |
| 16 |
| 17 tar xzf sqlite.tar.gz ;# Unpack the source tree into "sqlite" |
| 18 mkdir bld ;# Build will occur in a sibling directory |
| 19 cd bld ;# Change to the build directory |
| 20 ../sqlite/configure ;# Run the configure script |
| 21 make ;# Run the makefile. |
| 22 make sqlite3.c ;# Build the "amalgamation" source file |
| 23 make test ;# Run some tests (requires Tcl) |
| 24 |
| 25 See the makefile for additional targets. |
| 26 |
| 27 The configure script uses autoconf 2.61 and libtool. If the configure |
| 28 script does not work out for you, there is a generic makefile named |
| 29 "Makefile.linux-gcc" in the top directory of the source tree that you |
| 30 can copy and edit to suit your needs. Comments on the generic makefile |
| 31 show what changes are needed. |
| 32 |
| 33 ## Using MSVC |
| 34 |
| 35 On Windows, all applicable build products can be compiled with MSVC. |
| 36 First open the command prompt window associated with the desired compiler |
| 37 version (e.g. "Developer Command Prompt for VS2013"). Next, use NMAKE |
| 38 with the provided "Makefile.msc" to build one of the supported targets. |
| 39 |
| 40 For example: |
| 41 |
| 42 mkdir bld |
| 43 cd bld |
| 44 nmake /f Makefile.msc TOP=..\sqlite |
| 45 nmake /f Makefile.msc sqlite3.c TOP=..\sqlite |
| 46 nmake /f Makefile.msc sqlite3.dll TOP=..\sqlite |
| 47 nmake /f Makefile.msc sqlite3.exe TOP=..\sqlite |
| 48 nmake /f Makefile.msc test TOP=..\sqlite |
| 49 |
| 50 There are several build options that can be set via the NMAKE command |
| 51 line. For example, to build for WinRT, simply add "FOR_WINRT=1" argument |
| 52 to the "sqlite3.dll" command line above. When debugging into the SQLite |
| 53 code, adding the "DEBUG=1" argument to one of the above command lines is |
| 54 recommended. |
| 55 |
| 56 SQLite does not require Tcl to run, but a Tcl installation is required |
| 57 by the makefiles (including those for MSVC). SQLite contains a lot of |
| 58 generated code and Tcl is used to do much of that code generation. The |
| 59 makefiles also require AWK. |
| 60 |
| 61 ## Source Code Tour |
| 62 |
| 63 Most of the core source files are in the **src/** subdirectory. But |
| 64 src/ also contains files used to build the "testfixture" test harness; |
| 65 those file all begin with "test". And src/ contains the "shell.c" file |
| 66 which is the main program for the "sqlite3.exe" command-line shell and |
| 67 the "tclsqlite.c" file which implements the bindings to SQLite from the |
| 68 Tcl programming language. (Historical note: SQLite began as a Tcl |
| 69 extension and only later escaped to the wild as an independent library.) |
| 70 |
| 71 Test scripts and programs are found in the **test/** subdirectory. |
| 72 There are other test suites for SQLite (see |
| 73 [How SQLite Is Tested](http://www.sqlite.org/testing.html)) |
| 74 but those other test suites are |
| 75 in separate source repositories. |
| 76 |
| 77 The **ext/** subdirectory contains code for extensions. The |
| 78 Full-text search engine is in **ext/fts3**. The R-Tree engine is in |
| 79 **ext/rtree**. The **ext/misc** subdirectory contains a number of |
| 80 smaller, single-file extensions, such as a REGEXP operator. |
| 81 |
| 82 The **tool/** subdirectory contains various scripts and programs used |
| 83 for building generated source code files or for testing or for generating |
| 84 accessory programs such as "sqlite3_analyzer(.exe)". |
| 85 |
| 86 ### Generated Source Code Files |
| 87 |
| 88 Several of the C-language source files used by SQLite are generated from |
| 89 other sources rather than being typed in manually by a programmer. This |
| 90 section will summarize those automatically-generated files. To create all |
| 91 of the automatically-generated files, simply run "make target_source". |
| 92 The "target_source" make target will create a subdirectory "tsrc/" and |
| 93 fill it with all the source files needed to build SQLite, both |
| 94 manually-edited files and automatically-generated files. |
| 95 |
| 96 The SQLite interface is defined by the **sqlite3.h** header file, which is |
| 97 generated from src/sqlite.h.in, ./manifest.uuid, and ./VERSION. The |
| 98 Tcl script at tool/mksqlite3h.tcl does the conversion. The manifest.uuid |
| 99 file contains the SHA1 hash of the particular check-in and is used to generate |
| 100 the SQLITE_SOURCE_ID macro. The VERSION file contains the current SQLite |
| 101 version number. The sqlite3.h header is really just a copy of src/sqlite.h.in |
| 102 with the source-id and version number inserted at just the right spots. |
| 103 Note that comment text in the sqlite3.h file is used to generate much of |
| 104 the SQLite API documentation. The Tcl scripts used to generate that |
| 105 documentation are in a separate source repository. |
| 106 |
| 107 The SQL language parser is **parse.c** which is generate from a grammar in |
| 108 the src/parse.y file. The conversion of "parse.y" into "parse.c" is done |
| 109 by the [lemon](./doc/lemon.html) LALR(1) parser generator. The source code |
| 110 for lemon is at tool/lemon.c. Lemon uses a |
| 111 template for generating its parser. A generic template is in tool/lempar.c, |
| 112 but SQLite uses a slightly modified template found in src/lempar.c. |
| 113 |
| 114 Lemon also generates the **parse.h** header file, at the same time it |
| 115 generates parse.c. But the parse.h header file is |
| 116 modified further (to add additional symbols) using the ./addopcodes.awk |
| 117 AWK script. |
| 118 |
| 119 The **opcodes.h** header file contains macros that define the numbers |
| 120 corresponding to opcodes in the "VDBE" virtual machine. The opcodes.h |
| 121 file is generated by the scanning the src/vdbe.c source file. The |
| 122 AWK script at ./mkopcodeh.awk does this scan and generates opcodes.h. |
| 123 A second AWK script, ./mkopcodec.awk, then scans opcodes.h to generate |
| 124 the **opcodes.c** source file, which contains a reverse mapping from |
| 125 opcode-number to opcode-name that is used for EXPLAIN output. |
| 126 |
| 127 The **keywordhash.h** header file contains the definition of a hash table |
| 128 that maps SQL language keywords (ex: "CREATE", "SELECT", "INDEX", etc.) into |
| 129 the numeric codes used by the parse.c parser. The keywordhash.h file is |
| 130 generated by a C-language program at tool mkkeywordhash.c. |
| 131 |
| 132 ### The Amalgamation |
| 133 |
| 134 All of the individual C source code and header files (both manually-edited |
| 135 and automatically-generated) can be combined into a single big source file |
| 136 **sqlite3.c** called "the amalgamation". The amalgamation is the recommended |
| 137 way of using SQLite in a larger application. Combining all individual |
| 138 source code files into a single big source code file allows the C compiler |
| 139 to perform more cross-procedure analysis and generate better code. SQLite |
| 140 runs about 5% faster when compiled from the amalgamation versus when compiled |
| 141 from individual source files. |
| 142 |
| 143 The amalgamation is generated from the tool/mksqlite3c.tcl Tcl script. |
| 144 First, all of the individual source files must be gathered into the tsrc/ |
| 145 subdirectory (using the equivalent of "make target_source") then the |
| 146 tool/mksqlite3c.tcl script is run to copy them all together in just the |
| 147 right order while resolving internal "#include" references. |
| 148 |
| 149 The amalgamation source file is more than 100K lines long. Some symbolic |
| 150 debuggers (most notably MSVC) are unable to deal with files longer than 64K |
| 151 lines. To work around this, a separate Tcl script, tool/split-sqlite3c.tcl, |
| 152 can be run on the amalgamation to break it up into a single small C file |
| 153 called **sqlite3-all.c** that does #include on about five other files |
| 154 named **sqlite3-1.c**, **sqlite3-2.c**, ..., **sqlite3-5.c**. In this way, |
| 155 all of the source code is contained within a single translation unit so |
| 156 that the compiler can do extra cross-procedure optimization, but no |
| 157 individual source file exceeds 32K lines in length. |
| 158 |
| 159 ## How It All Fits Together |
| 160 |
| 161 SQLite is modular in design. |
| 162 See the [architectural description](http://www.sqlite.org/arch.html) |
| 163 for details. Other documents that are useful in |
| 164 (helping to understand how SQLite works include the |
| 165 [file format](http://www.sqlite.org/fileformat2.html) description, |
| 166 the [virtual machine](http://www.sqlite.org/vdbe.html) that runs |
| 167 prepared statements, the description of |
| 168 [how transactions work](http://www.sqlite.org/atomiccommit.html), and |
| 169 the [overview of the query planner](http://www.sqlite.org/optoverview.html). |
| 170 |
| 171 Unfortunately, years of effort have gone into optimizating SQLite, both |
| 172 for small size and high performance. And optimizations tend to result in |
| 173 complex code. So there is a lot of complexity in the SQLite implementation. |
| 174 |
| 175 Key files: |
| 176 |
| 177 * **sqlite3.h** - This file defines the public interface to the SQLite |
| 178 library. Readers will need to be familiar with this interface before |
| 179 trying to understand how the library works internally. |
| 180 |
| 181 * **sqliteInt.h** - this header file defines many of the data objects |
| 182 used internally by SQLite. |
| 183 |
| 184 * **parse.y** - This file describes the LALR(1) grammer that SQLite uses |
| 185 to parse SQL statements, and the actions that are taken at each stop |
| 186 in the parsing process. |
| 187 |
| 188 * **vdbe.c** - This file implements the virtual machine that runs |
| 189 prepared statements. There are various helper files whose names |
| 190 begin with "vdbe". The VDBE has access to the vdbeInt.h header file |
| 191 which defines internal data objects. The rest of SQLite interacts |
| 192 with the VDBE through an interface defined by vdbe.h. |
| 193 |
| 194 * **where.c** - This file analyzes the WHERE clause and generates |
| 195 virtual machine code to run queries efficiently. This file is |
| 196 sometimes called the "query optimizer". It has its own private |
| 197 header file, whereInt.h, that defines data objects used internally. |
| 198 |
| 199 * **btree.c** - This file contains the implementation of the B-Tree |
| 200 storage engine used by SQLite. |
| 201 |
| 202 * **pager.c** - This file contains the "pager" implementation, the |
| 203 module that implements transactions. |
| 204 |
| 205 * **os_unix.c** and **os_win.c** - These two files implement the interface |
| 206 between SQLite and the underlying operating system using the run-time |
| 207 pluggable VFS interface. |
| 208 |
| 209 |
| 210 ## Contacts |
| 211 |
| 212 The main SQLite webpage is [http://www.sqlite.org/](http://www.sqlite.org/) |
| 213 with geographically distributed backup servers at |
| 214 [http://www2.sqlite.org/](http://www2.sqlite.org) and |
| 215 [http://www3.sqlite.org/](http://www3.sqlite.org). |
OLD | NEW |