1967 lines
120 KiB
HTML
1967 lines
120 KiB
HTML
<!DOCTYPE html>
|
|
<html><head>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
|
<link href="sqlite.css" rel="stylesheet">
|
|
<title>Compile-time Options</title>
|
|
<!-- path= -->
|
|
</head>
|
|
<body>
|
|
<div class=nosearch>
|
|
<a href="index.html">
|
|
<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
|
|
</a>
|
|
<div><!-- IE hack to prevent disappearing logo --></div>
|
|
<div class="tagline desktoponly">
|
|
Small. Fast. Reliable.<br>Choose any three.
|
|
</div>
|
|
<div class="menu mainmenu">
|
|
<ul>
|
|
<li><a href="index.html">Home</a>
|
|
<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
|
|
<li class='wideonly'><a href='about.html'>About</a>
|
|
<li class='desktoponly'><a href="docs.html">Documentation</a>
|
|
<li class='desktoponly'><a href="download.html">Download</a>
|
|
<li class='wideonly'><a href='copyright.html'>License</a>
|
|
<li class='desktoponly'><a href="support.html">Support</a>
|
|
<li class='desktoponly'><a href="prosupport.html">Purchase</a>
|
|
<li class='search' id='search_menubutton'>
|
|
<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
|
|
</ul>
|
|
</div>
|
|
<div class="menu submenu" id="submenu">
|
|
<ul>
|
|
<li><a href='about.html'>About</a>
|
|
<li><a href='docs.html'>Documentation</a>
|
|
<li><a href='download.html'>Download</a>
|
|
<li><a href='support.html'>Support</a>
|
|
<li><a href='prosupport.html'>Purchase</a>
|
|
</ul>
|
|
</div>
|
|
<div class="searchmenu" id="searchmenu">
|
|
<form method="GET" action="search">
|
|
<select name="s" id="searchtype">
|
|
<option value="d">Search Documentation</option>
|
|
<option value="c">Search Changelog</option>
|
|
</select>
|
|
<input type="text" name="q" id="searchbox" value="">
|
|
<input type="submit" value="Go">
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
function toggle_div(nm) {
|
|
var w = document.getElementById(nm);
|
|
if( w.style.display=="block" ){
|
|
w.style.display = "none";
|
|
}else{
|
|
w.style.display = "block";
|
|
}
|
|
}
|
|
function toggle_search() {
|
|
var w = document.getElementById("searchmenu");
|
|
if( w.style.display=="block" ){
|
|
w.style.display = "none";
|
|
} else {
|
|
w.style.display = "block";
|
|
setTimeout(function(){
|
|
document.getElementById("searchbox").focus()
|
|
}, 30);
|
|
}
|
|
}
|
|
function div_off(nm){document.getElementById(nm).style.display="none";}
|
|
window.onbeforeunload = function(e){div_off("submenu");}
|
|
/* Disable the Search feature if we are not operating from CGI, since */
|
|
/* Search is accomplished using CGI and will not work without it. */
|
|
if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
|
|
document.getElementById("search_menubutton").style.display = "none";
|
|
}
|
|
/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
|
|
function hideorshow(btn,obj){
|
|
var x = document.getElementById(obj);
|
|
var b = document.getElementById(btn);
|
|
if( x.style.display!='none' ){
|
|
x.style.display = 'none';
|
|
b.innerHTML='show';
|
|
}else{
|
|
x.style.display = '';
|
|
b.innerHTML='hide';
|
|
}
|
|
return false;
|
|
}
|
|
</script>
|
|
</div>
|
|
<div class=fancy>
|
|
<div class=nosearch>
|
|
<div class="fancy_title">
|
|
Compile-time Options
|
|
</div>
|
|
<div class="fancy_toc">
|
|
<a onclick="toggle_toc()">
|
|
<span class="fancy_toc_mark" id="toc_mk">►</span>
|
|
Table Of Contents
|
|
</a>
|
|
<div id="toc_sub"><div class="fancy-toc1"><a href="#overview">1. Overview</a></div>
|
|
<div class="fancy-toc1"><a href="#recommended_compile_time_options">2. Recommended Compile-time Options</a></div>
|
|
<div class="fancy-toc1"><a href="#_platform_configuration">3. Platform Configuration</a></div>
|
|
<div class="fancy-toc1"><a href="#_options_to_set_default_parameter_values">4. Options To Set Default Parameter Values</a></div>
|
|
<div class="fancy-toc1"><a href="#_options_to_set_size_limits">5. Options To Set Size Limits</a></div>
|
|
<div class="fancy-toc1"><a href="#_options_to_control_operating_characteristics">6. Options To Control Operating Characteristics</a></div>
|
|
<div class="fancy-toc1"><a href="#_options_to_enable_features_normally_turned_off">7. Options To Enable Features Normally Turned Off</a></div>
|
|
<div class="fancy-toc1"><a href="#_options_to_disable_features_normally_turned_on">8. Options To Disable Features Normally Turned On</a></div>
|
|
<div class="fancy-toc1"><a href="#_options_to_omit_features">9. Options To Omit Features</a></div>
|
|
<div class="fancy-toc1"><a href="#_analysis_and_debugging_options">10. Analysis and Debugging Options</a></div>
|
|
<div class="fancy-toc1"><a href="#_windows_specific_options">11. Windows-Specific Options</a></div>
|
|
<div class="fancy-toc1"><a href="#compiler_linkage_control">12. Compiler Linkage Control</a></div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
function toggle_toc(){
|
|
var sub = document.getElementById("toc_sub")
|
|
var mk = document.getElementById("toc_mk")
|
|
if( sub.style.display!="block" ){
|
|
sub.style.display = "block";
|
|
mk.innerHTML = "▼";
|
|
} else {
|
|
sub.style.display = "none";
|
|
mk.innerHTML = "►";
|
|
}
|
|
}
|
|
</script>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<h1 id="overview"><span>1. </span>Overview</h1>
|
|
|
|
<p>
|
|
For most purposes, SQLite can be built just fine using the default
|
|
compilation options. However, if required, the compile-time options
|
|
documented below can be used to
|
|
<a href="#omitfeatures">omit SQLite features</a> (resulting in
|
|
a <a href="footprint.html">smaller compiled library size</a>) or to change the
|
|
<a href="#defaults">default values</a> of some parameters.
|
|
</p>
|
|
|
|
<p>
|
|
Every effort has been made to ensure that the various combinations
|
|
of compilation options work harmoniously and produce a working library.
|
|
Nevertheless, it is strongly recommended that the SQLite test-suite
|
|
be executed to check for errors before using an SQLite library built
|
|
with non-standard compilation options.
|
|
</p>
|
|
|
|
<a name="rcmd"></a>
|
|
|
|
|
|
<h1 id="recommended_compile_time_options"><span>2. </span>Recommended Compile-time Options</h1>
|
|
|
|
<p>The following compile-time options are recommended for applications that
|
|
are able to use them, in order to minimized the number of CPU cycles and
|
|
the bytes of memory used by SQLite.
|
|
Not all of these compile-time options are usable by every application.
|
|
For example, the SQLITE_THREADSAFE=0 option is only usable by applications
|
|
that never access SQLite from more than one thread at a time. And the
|
|
SQLITE_OMIT_PROGRESS_CALLBACK option is only usable by applications that
|
|
do not use the <a href="c3ref/progress_handler.html">sqlite3_progress_handler()</a> interface. And so forth.
|
|
|
|
</p><p>It is impossible to test every possible combination of compile-time
|
|
options for SQLite. But the following set of compile-time options is
|
|
one configuration that is always fully tested.
|
|
|
|
</p><ol>
|
|
<li><p><b><a href="compile.html#dqs">SQLITE_DQS=0</a></b>.
|
|
This setting disables the <a href="quirks.html#dblquote">double-quoted string literal</a> misfeature.
|
|
|
|
</p></li><li><p><b><a href="compile.html#threadsafe">SQLITE_THREADSAFE=0</a></b>.
|
|
Setting -DSQLITE_THREADSAFE=0 causes all of the mutex and thread-safety logic
|
|
in SQLite to be omitted. This is the single compile-time option causes SQLite
|
|
to run about 2% faster and also reduces the size of the library by about 2%.
|
|
But the downside is that using the compile-time option means that SQLite can never
|
|
be used by more than a single thread at a time, even if each thread has its own
|
|
database connection.
|
|
|
|
</p></li><li><p><b><a href="compile.html#default_memstatus">SQLITE_DEFAULT_MEMSTATUS=0</a></b>.
|
|
This setting causes the <a href="c3ref/status.html">sqlite3_status()</a> interfaces that track memory usage
|
|
to be disabled. This helps the <a href="c3ref/free.html">sqlite3_malloc()</a> routines run much faster,
|
|
and since SQLite uses <a href="c3ref/free.html">sqlite3_malloc()</a> internally, this helps to make the
|
|
entire library faster.
|
|
|
|
</p></li><li><p><b><a href="compile.html#default_wal_synchronous">SQLITE_DEFAULT_WAL_SYNCHRONOUS=1</a></b>.
|
|
For maximum database safety following a power lose, the setting of
|
|
<a href="pragma.html#pragma_synchronous">PRAGMA synchronous=FULL</a> is recommended. However, in <a href="wal.html">WAL mode</a>, complete
|
|
database integrity is guaranteed with <a href="pragma.html#pragma_synchronous">PRAGMA synchronous=NORMAL</a>. With
|
|
<a href="pragma.html#pragma_synchronous">PRAGMA synchronous=NORMAL</a> in <a href="wal.html">WAL mode</a>, recent changes to the database might
|
|
be rolled back by a power loss, but the database will not be corrupted.
|
|
Furthermore, transaction commit is much faster in WAL mode using
|
|
synchronous=NORMAL than with the default synchronous=FULL. For these
|
|
reasons, it is recommended that the synchronous setting be changed from
|
|
FULL to NORMAL when switching to WAL mode. This compile-time option will
|
|
accomplish that.
|
|
|
|
</p></li><li><p><b><a href="compile.html#like_doesnt_match_blobs">SQLITE_LIKE_DOESNT_MATCH_BLOBS</a></b>.
|
|
Historically, SQLite has allowed BLOB operands to the <a href="lang_expr.html#like">LIKE</a> and <a href="lang_expr.html#glob">GLOB</a>
|
|
operators. But having a BLOB as an operand of <a href="lang_expr.html#like">LIKE</a> or <a href="lang_expr.html#glob">GLOB</a> complicates
|
|
and slows the <a href="optoverview.html#like_opt">LIKE optimization</a>. When this option is set, it means that
|
|
the LIKE and GLOB operators always return FALSE if either operand is a BLOB.
|
|
That simplifies the implementation of the <a href="optoverview.html#like_opt">LIKE optimization</a> and allows
|
|
queries that use the <a href="optoverview.html#like_opt">LIKE optimization</a> to run faster.
|
|
|
|
</p></li><li><p><b><a href="limits.html#max_expr_depth">SQLITE_MAX_EXPR_DEPTH=0</a></b>.
|
|
Setting the maximum expression parse-tree depth to zero disables all checking
|
|
of the expression parse-tree depth, which simplifies the code resulting in
|
|
faster execution, and helps the parse tree to use less memory.
|
|
|
|
</p></li><li><p><b><a href="compile.html#omit_decltype">SQLITE_OMIT_DECLTYPE</a></b>.
|
|
By omitting the (seldom-needed) ability to return the declared type of
|
|
columns from the result set of query, <a href="c3ref/stmt.html">prepared statements</a> can be made
|
|
to consume less memory.
|
|
|
|
</p></li><li><p><b><a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a></b>.
|
|
Omitting deprecated interfaces and features will not help SQLite to
|
|
run any faster. It will reduce the library footprint, however. And
|
|
it is the right thing to do.
|
|
|
|
</p></li><li><p><b><a href="compile.html#omit_progress_callback">SQLITE_OMIT_PROGRESS_CALLBACK</a></b>.
|
|
The progress handler callback counter must be checked in the inner loop
|
|
of the <a href="opcode.html">bytecode engine</a>. By omitting this interface, a single conditional
|
|
is removed from the inner loop of the <a href="opcode.html">bytecode engine</a>, helping SQL statements
|
|
to run slightly faster.
|
|
|
|
</p></li><li><p><b><a href="compile.html#omit_shared_cache">SQLITE_OMIT_SHARED_CACHE</a></b>.
|
|
Omitting the possibility of using <a href="sharedcache.html">shared cache</a> allows many conditionals
|
|
in performance-critical sections of the code to be eliminated. This can
|
|
give a noticeable improvement in performance.
|
|
|
|
</p></li><li><p><b><a href="compile.html#use_alloca">SQLITE_USE_ALLOCA</a></b>.
|
|
Make use of alloca() for dynamically allocating temporary stack space for
|
|
use within a single function, on systems that support alloca(). Without
|
|
this option, temporary space is allocated from the heap.
|
|
|
|
</p></li><li><p><b><a href="compile.html#omit_autoinit">SQLITE_OMIT_AUTOINIT</a></b>.
|
|
The SQLite library needs to be initialized using a call to
|
|
<a href="c3ref/initialize.html">sqlite3_initialize()</a> before certain interfaces are used.
|
|
This initialization normally happens automatically the first time
|
|
it is needed. However, with the SQLITE_OMIT_AUTOINIT option, the automatic
|
|
initialization is omitted. This helps many API calls to run a little faster
|
|
(since they do not have to check to see if initialization has already occurred
|
|
and then run initialization if it has not previously been invoked) but it
|
|
also means that the application must call <a href="c3ref/initialize.html">sqlite3_initialize()</a> manually.
|
|
If SQLite is compiled with -DSQLITE_OMIT_AUTOINIT and a routine like
|
|
<a href="c3ref/free.html">sqlite3_malloc()</a> or <a href="c3ref/vfs_find.html">sqlite3_vfs_find()</a> or <a href="c3ref/open.html">sqlite3_open()</a> is invoked
|
|
without first calling <a href="c3ref/initialize.html">sqlite3_initialize()</a>, the likely result will be
|
|
a segfault.
|
|
</p></li></ol>
|
|
|
|
<p>When all of the recommended compile-time options above are used,
|
|
the SQLite library will be approximately 3% smaller and use about 5% fewer
|
|
CPU cycles. So these options do not make a huge difference. But in
|
|
some design situations, every little bit helps.
|
|
|
|
<a name="osconfig"></a>
|
|
</p><h1 id="_platform_configuration"><span>3. </span> Platform Configuration</h1>
|
|
|
|
<a name="sqlite_config_h"></a>
|
|
<p><b>_HAVE_SQLITE_CONFIG_H</b></p><blockquote><p>
|
|
If the _HAVE_SQLITE_CONFIG_H macro is defined
|
|
then the SQLite source code will attempt to #include a file named "config.h".
|
|
The "config.h" file usually contains other configuration options, especially
|
|
"HAVE_<i>INTERFACE</i>" type options generated by autoconf scripts.
|
|
</p></blockquote><a name="fdatasync"></a>
|
|
<p><b>HAVE_FDATASYNC</b></p><blockquote><p>
|
|
If the HAVE_FDATASYNC compile-time option is true, then the default <a href="vfs.html">VFS</a>
|
|
for unix systems will attempt to use fdatasync() instead of fsync() where
|
|
appropriate. If this flag is missing or false, then fsync() is always used.
|
|
</p></blockquote><a name="gmtime_r"></a>
|
|
<p><b>HAVE_GMTIME_R</b></p><blockquote><p>
|
|
If the HAVE_GMTIME_R option is true and if <a href="compile.html#omit_datetime_funcs">SQLITE_OMIT_DATETIME_FUNCS</a> is true,
|
|
then the CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP keywords will use
|
|
the threadsafe "gmtime_r()" interface rather than "gmtime()". In the usual case
|
|
where <a href="compile.html#omit_datetime_funcs">SQLITE_OMIT_DATETIME_FUNCS</a> is not defined or is false, then the
|
|
built-in <a href="lang_datefunc.html">date and time functions</a> are used to implement the CURRENT_TIME,
|
|
CURRENT_DATE, and CURRENT_TIMESTAMP keywords and neither gmtime_r() nor
|
|
gmtime() is ever called.
|
|
</p></blockquote><a name="isnan"></a>
|
|
<p><b>HAVE_ISNAN</b></p><blockquote><p>
|
|
If the HAVE_ISNAN option is true, then SQLite invokes the system library isnan()
|
|
function to determine if a double-precision floating point value is a NaN.
|
|
If HAVE_ISNAN is undefined or false, then SQLite substitutes its own home-grown
|
|
implementation of isnan().
|
|
</p></blockquote><a name="localtime_r"></a>
|
|
<p><b>HAVE_LOCALTIME_R</b></p><blockquote><p>
|
|
If the HAVE_LOCALTIME_R option is true, then SQLite uses the threadsafe
|
|
localtime_r() library routine instead of localtime()
|
|
to help implement the <a href="lang_datefunc.html#localtime">localtime modifier</a>
|
|
to the built-in <a href="lang_datefunc.html">date and time functions</a>.
|
|
</p></blockquote><a name="localtime_s"></a>
|
|
<p><b>HAVE_LOCALTIME_S</b></p><blockquote><p>
|
|
If the HAVE_LOCALTIME_S option is true, then SQLite uses the threadsafe
|
|
localtime_s() library routine instead of localtime()
|
|
to help implement the <a href="lang_datefunc.html#localtime">localtime modifier</a>
|
|
to the built-in <a href="lang_datefunc.html">date and time functions</a>.
|
|
</p></blockquote><a name="malloc_usable_size"></a>
|
|
<p><b>HAVE_MALLOC_USABLE_SIZE</b></p><blockquote><p>
|
|
If the HAVE_MALLOC_USABLE_SIZE option is true, then SQLite tries uses the
|
|
malloc_usable_size() interface to find the size of a memory allocation obtained
|
|
from the standard-library malloc() or realloc() routines. This option is only
|
|
applicable if the standard-library malloc() is used. On Apple systems,
|
|
"zone malloc" is used instead, and so this option is not applicable. And, of
|
|
course, if the application supplies its own malloc implementation using
|
|
<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a> then this option has no effect.
|
|
<p>
|
|
If the HAVE_MALLOC_USABLE_SIZE option is omitted or is false, then SQLite
|
|
uses a wrapper around system malloc() and realloc() that enlarges each allocation
|
|
by 8 bytes and writes the size of the allocation in the initial 8 bytes, and
|
|
then SQLite also implements its own home-grown version of malloc_usable_size()
|
|
that consults that 8-byte prefix to find the allocation size. This approach
|
|
works but it is suboptimal. Applications are encouraged to use
|
|
HAVE_MALLOC_USABLE_SIZE whenever possible.
|
|
</p></blockquote><a name="strchrnul"></a>
|
|
<p><b>HAVE_STRCHRNUL</b></p><blockquote><p>
|
|
If the HAVE_STRCHRNUL option is true, then SQLite uses the strchrnul() library
|
|
function. If this option is missing or false, then SQLite substitutes its own
|
|
home-grown implementation of strchrnul().
|
|
</p></blockquote><a name="usleep"></a>
|
|
<p><b>HAVE_USLEEP</b></p><blockquote><p>
|
|
If the HAVE_USLEEP option is true, then the default unix VFS uses the
|
|
usleep() system call to implement the xSleep method. If this option is
|
|
undefined or false, then xSleep on unix is implemented using sleep() which
|
|
means that <a href="c3ref/sleep.html">sqlite3_sleep()</a> will have a minimum wait interval of 1000
|
|
milliseconds regardless of its argument.
|
|
</p></blockquote><a name="utime"></a>
|
|
<p><b>HAVE_UTIME</b></p><blockquote><p>
|
|
If the HAVE_UTIME option is true, then the built-in but non-standard
|
|
"unix-dotfile" VFS will use the utime() system call, instead of utimes(),
|
|
to set the last access time on the lock file.
|
|
</p></blockquote><a name="byteorder"></a>
|
|
<p><b>SQLITE_BYTEORDER=<i>(0|1234|4321)</i></b></p><blockquote><p>
|
|
SQLite needs to know if the native byte order of the target CPU is
|
|
big-endian or little-ending. The SQLITE_BYTEORDER preprocessor is set
|
|
to 4321 for big-endian machines and 1234 for little-endian machines, or
|
|
it can be 0 to mean that the byte order must be determined at run-time.
|
|
There are #ifdefs in the code that set SQLITE_BYTEORDER automatically
|
|
for all common platforms and compilers. However, it may be advantageous
|
|
to set SQLITE_BYTEORDER appropriately when compiling SQLite for obscure
|
|
targets. If the target byte order cannot be determined at compile-time,
|
|
then SQLite falls back to doing run-time checks, which always work, though
|
|
with a small performance penalty.
|
|
</p></blockquote>
|
|
|
|
<a name="defaults"></a>
|
|
<h1 id="_options_to_set_default_parameter_values"><span>4. </span> Options To Set Default Parameter Values</h1>
|
|
|
|
<a name="default_automatic_index"></a>
|
|
<p><b>SQLITE_DEFAULT_AUTOMATIC_INDEX=<i><0 or 1></i></b></p><blockquote><p>
|
|
This macro determines the initial setting for <a href="pragma.html#pragma_automatic_index">PRAGMA automatic_index</a>
|
|
for newly opened <a href="c3ref/sqlite3.html">database connections</a>.
|
|
For all versions of SQLite through 3.7.17,
|
|
automatic indices are normally enabled for new database connections if
|
|
this compile-time option is omitted.
|
|
However, that might change in future releases of SQLite.
|
|
<p>See also: <a href="compile.html#omit_automatic_index">SQLITE_OMIT_AUTOMATIC_INDEX</a>
|
|
</p></blockquote><a name="default_autovacuum"></a>
|
|
<p><b>SQLITE_DEFAULT_AUTOVACUUM=<i><0 or 1 or 2></i></b></p><blockquote><p>
|
|
This macro determines if SQLite creates databases with the
|
|
<a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a> flag set by default to OFF (0), FULL (1), or
|
|
INCREMENTAL (2). The default value is 0 meaning that databases
|
|
are created with auto-vacuum turned off.
|
|
In any case the compile-time default may be overridden by the
|
|
<a href="pragma.html#pragma_auto_vacuum">PRAGMA auto_vacuum</a> command.
|
|
</p></blockquote><a name="default_cache_size"></a>
|
|
<p><b>SQLITE_DEFAULT_CACHE_SIZE=<i><N></i></b></p><blockquote><p>
|
|
This macro sets the default maximum size of the page-cache for each attached
|
|
database. A positive value means that the limit is N page. If N is negative
|
|
that means to limit the cache size to -N*1024 bytes.
|
|
The suggested maximum cache size can be overridden by the
|
|
<a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a> command. The default value is -2000, which translates
|
|
into a maximum of 2048000 bytes per cache.
|
|
</p></blockquote><a name="default_file_format"></a>
|
|
<p><b>SQLITE_DEFAULT_FILE_FORMAT=<i><1 or 4></i></b></p><blockquote><p>
|
|
The default <a href="fileformat2.html#schemaformat">schema format number</a> used by SQLite when creating
|
|
new database files is set by this macro. The schema formats are all
|
|
very similar. The difference between formats 1 and 4 is that format
|
|
4 understands <a href="lang_createindex.html#descidx">descending indices</a> and has a tighter encoding for
|
|
boolean values.</p>
|
|
|
|
<p> All versions of SQLite since 3.3.0 (2006-01-10)
|
|
can read and write any schema format
|
|
between 1 and 4. But older versions of SQLite might not be able to
|
|
read formats greater than 1. So that older versions of SQLite will
|
|
be able to read and write database files created by newer versions
|
|
of SQLite, the default schema format was set to 1 for SQLite versions
|
|
through 3.7.9 (2011-11-01). Beginning with
|
|
<a href="releaselog/3_7_10.html">version 3.7.10</a> (2012-01-16), the default
|
|
schema format is 4.</p>
|
|
|
|
<p> The schema format number for a new database can be set at runtime using
|
|
the <a href="pragma.html#pragma_legacy_file_format">PRAGMA legacy_file_format</a> command.
|
|
</p></blockquote><a name="default_file_permissions"></a>
|
|
<p><b>SQLITE_DEFAULT_FILE_PERMISSIONS=<i>N</i></b></p><blockquote><p>
|
|
The default numeric file permissions for newly created database files
|
|
under unix. If not specified, the default is 0644 which means that
|
|
the files is globally readable but only writable by the creator.
|
|
</p></blockquote><a name="default_foreign_keys"></a>
|
|
<p><b>SQLITE_DEFAULT_FOREIGN_KEYS=<i><0 or 1></i></b></p><blockquote><p>
|
|
This macro determines whether enforcement of
|
|
<a href="foreignkeys.html">foreign key constraints</a> is enabled or disabled by default for
|
|
new database connections. Each database connection can always turn
|
|
enforcement of foreign key constraints on and off and run-time using
|
|
the <a href="pragma.html#pragma_foreign_keys">foreign_keys pragma</a>. Enforcement of foreign key constraints
|
|
is normally off by default, but if this compile-time parameter is
|
|
set to 1, enforcement of foreign key constraints will be on by default.
|
|
</p></blockquote><a name="default_mmap_size"></a>
|
|
<p><b>SQLITE_DEFAULT_MMAP_SIZE=<i>N</i></b></p><blockquote><p>
|
|
This macro sets the default limit on the amount of memory that
|
|
will be used for memory-mapped I/O
|
|
for each open database file. If the <i>N</i>
|
|
is zero, then memory mapped I/O is disabled by default. This
|
|
compile-time limit and the <a href="compile.html#max_mmap_size">SQLITE_MAX_MMAP_SIZE</a> can be modified
|
|
at start-time using the
|
|
<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">SQLITE_CONFIG_MMAP_SIZE</a>) call, or at run-time
|
|
using the <a href="pragma.html#pragma_mmap_size">mmap_size pragma</a>.
|
|
</p></blockquote><a name="default_journal_size_limit"></a>
|
|
<p><b>SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=<i><bytes></i></b></p><blockquote><p>
|
|
This option sets the size limit on <a href="lockingv3.html#rollback">rollback journal</a> files in
|
|
<a href="pragma.html#pragma_journal_mode">persistent journal mode</a> and
|
|
<a href="pragma.html#pragma_locking_mode">exclusive locking mode</a> and on the size of the
|
|
write-ahead log file in <a href="wal.html">WAL mode</a>. When this
|
|
compile-time option is omitted there is no upper bound on the
|
|
size of the rollback journals or write-ahead logs.
|
|
The journal file size limit
|
|
can be changed at run-time using the <a href="pragma.html#pragma_journal_size_limit">journal_size_limit pragma</a>.
|
|
</p></blockquote><a name="default_locking_mode"></a>
|
|
<p><b>SQLITE_DEFAULT_LOCKING_MODE=<i><1 or 0></i></b></p><blockquote><p>
|
|
If set to 1, then the default <a href="pragma.html#pragma_locking_mode">locking_mode</a> is set to EXCLUSIVE.
|
|
If omitted or set to 0 then the default <a href="pragma.html#pragma_locking_mode">locking_mode</a> is NORMAL.
|
|
</p></blockquote><a name="default_lookaside"></a>
|
|
<p><b>SQLITE_DEFAULT_LOOKASIDE=<i>SZ,N</i></b></p><blockquote><p>
|
|
Sets the default size of the <a href="malloc.html#lookaside">lookaside memory allocator</a> memory pool
|
|
to N entries of SZ bytes each. This setting can be modified at
|
|
start-time using <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfiglookaside">SQLITE_CONFIG_LOOKASIDE</a>) and/or
|
|
as each <a href="c3ref/sqlite3.html">database connection</a> is opened using
|
|
<a href="c3ref/db_config.html">sqlite3_db_config</a>(db, <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglookaside">SQLITE_DBCONFIG_LOOKASIDE</a>).
|
|
</p></blockquote><a name="default_memstatus"></a>
|
|
<p><b>SQLITE_DEFAULT_MEMSTATUS=<i><1 or 0></i></b></p><blockquote><p>
|
|
This macro is used to determine whether or not the features enabled and
|
|
disabled using the SQLITE_CONFIG_MEMSTATUS argument to <a href="c3ref/config.html">sqlite3_config()</a>
|
|
are available by default. The default value is 1 (<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a>
|
|
related features enabled).
|
|
<p>
|
|
The <a href="c3ref/memory_highwater.html">sqlite3_memory_used()</a> and <a href="c3ref/memory_highwater.html">sqlite3_memory_highwater()</a> interfaces,
|
|
the <a href="c3ref/status.html">sqlite3_status64</a>(<a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">SQLITE_STATUS_MEMORY_USED</a>) interface,
|
|
and the <a href="compile.html#max_memory">SQLITE_MAX_MEMORY</a> compile-time option are all non-functional
|
|
when memory usage tracking is disabled.
|
|
</p></blockquote><a name="default_pcache_initsz"></a>
|
|
<p><b>SQLITE_DEFAULT_PCACHE_INITSZ=<i>N</i></b></p><blockquote><p>
|
|
This macro determines the number of pages initially allocated by the
|
|
page cache module when <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpagecache">SQLITE_CONFIG_PAGECACHE</a> configuration option is
|
|
not use and memory for the page cache is obtained from <a href="c3ref/free.html">sqlite3_malloc()</a>
|
|
instead. The number of pages set by this macro are allocated in a single
|
|
allocation, which reduces the load on the memory allocator.
|
|
</p></blockquote><a name="default_page_size"></a>
|
|
<p><b>SQLITE_DEFAULT_PAGE_SIZE=<i><bytes></i></b></p><blockquote><p>
|
|
This macro is used to set the default page-size used when a
|
|
database is created. The value assigned must be a power of 2. The
|
|
default value is 4096. The compile-time default may be overridden at
|
|
runtime by the <a href="pragma.html#pragma_page_size">PRAGMA page_size</a> command.
|
|
</p></blockquote><a name="default_synchronous"></a>
|
|
<p><b>SQLITE_DEFAULT_SYNCHRONOUS=<i><0-3></i></b></p><blockquote><p>
|
|
This macro determines the default value of the
|
|
<a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting. If not overridden at compile-time,
|
|
the default setting is 2 (FULL).
|
|
</p></blockquote><a name="default_wal_synchronous"></a>
|
|
<p><b>SQLITE_DEFAULT_WAL_SYNCHRONOUS=<i><0-3></i></b></p><blockquote><p>
|
|
This macro determines the default value of the
|
|
<a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting for database files that open in
|
|
<a href="wal.html">WAL mode</a>. If not overridden at compile-time, this value is the
|
|
same as <a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a>.
|
|
<p>
|
|
If SQLITE_DEFAULT_WAL_SYNCHRONOUS differs from SQLITE_DEFAULT_SYNCHRONOUS,
|
|
and if the application has not modified the synchronous setting for
|
|
the database file using the <a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> statement, then
|
|
the synchronous setting is changed to value defined by
|
|
SQLITE_DEFAULT_WAL_SYNCHRONOUS when the database connection switches
|
|
into WAL mode for the first time.
|
|
If the SQLITE_DEFAULT_WAL_SYNCHRONOUS value is not overridden at
|
|
compile-time, then it will always be the same as
|
|
<a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS</a> and so no automatic synchronous setting
|
|
changes will ever occur.
|
|
</p></blockquote><a name="default_wal_autocheckpoint"></a>
|
|
<p><b>SQLITE_DEFAULT_WAL_AUTOCHECKPOINT=<i><pages></i></b></p><blockquote><p>
|
|
This macro sets the default page count for the <a href="wal.html">WAL</a>
|
|
<a href="wal.html#ckpt">automatic checkpointing</a> feature. If unspecified,
|
|
the default page count is 1000.
|
|
</p></blockquote><a name="default_worker_threads"></a>
|
|
<p><b>SQLITE_DEFAULT_WORKER_THREADS=<i>N</i></b></p><blockquote><p>
|
|
This macro sets the default value for
|
|
the <a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a> parameter. The <a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a>
|
|
parameter sets the maximum number of auxiliary threads that a single
|
|
<a href="c3ref/stmt.html">prepared statement</a> will launch to assist it with a query. If not specified,
|
|
the default maximum is 0.
|
|
The value set here cannot be more than <a href="compile.html#max_worker_threads">SQLITE_MAX_WORKER_THREADS</a>.
|
|
</p></blockquote><a name="dqs"></a>
|
|
<p><b>SQLITE_DQS=<i>N</i></b></p><blockquote><p>
|
|
This macro determines the default values for
|
|
<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsddl">SQLITE_DBCONFIG_DQS_DDL</a> and <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdqsdml">SQLITE_DBCONFIG_DQS_DML</a>, which
|
|
in turn how SQLite handles each <a href="quirks.html#dblquote">double-quoted string literal</a>.
|
|
The "DQS" name stands for
|
|
"<u>D</u>ouble-<u>Q</u>uoted <u>S</u>tring".
|
|
The <i>N</i> argument should be an integer 0, 1, 2, or 3.
|
|
<blockquote><table border=1 cellpadding="0" cellspacing="0">
|
|
<tr><th rowspan="2">SQLITE_DQS<th colspan="2">Double-Quoted Strings Allowed
|
|
<th rowspan="2">Remarks
|
|
<tr><th>In DDL<th>In DML
|
|
<tr><td>3<td>yes<td>yes<td>default
|
|
<tr><td>2<td>yes<td>no<td>
|
|
<tr><td>1<td>no<td>yes<td>
|
|
<tr><td>0<td>no<td>no<td>recommended
|
|
</table></blockquote>
|
|
<p>The recommended setting is 0, meaning that double-quoted
|
|
strings are disallowed in all contexts. However, the default
|
|
setting is 3 for maximum compatibility with legacy applications.
|
|
</p></blockquote><a name="extra_durable"></a>
|
|
<p><b>SQLITE_EXTRA_DURABLE</b></p><blockquote><p>
|
|
The SQLITE_EXTRA_DURABLE compile-time option that used to cause the default
|
|
<a href="pragma.html#pragma_synchronous">PRAGMA synchronous</a> setting to be EXTRA, rather than FULL. This option
|
|
is no longer supported. Use
|
|
<a href="compile.html#default_synchronous">SQLITE_DEFAULT_SYNCHRONOUS=3</a> instead.
|
|
</p></blockquote><a name="fts3_max_expr_depth"></a>
|
|
<p><b>SQLITE_FTS3_MAX_EXPR_DEPTH=<i>N</i></b></p><blockquote><p>
|
|
This macro sets the maximum depth of the search tree that corresponds to
|
|
the right-hand side of the MATCH operator in an <a href="fts3.html">FTS3</a> or <a href="fts3.html#fts4">FTS4</a> full-text
|
|
index. The full-text search uses a recursive algorithm, so the depth of
|
|
the tree is limited to prevent using too much stack space. The default
|
|
limit is 12. This limit is sufficient for up to 4095 search terms on the
|
|
right-hand side of the MATCH operator and it holds stack space usage to
|
|
less than 2000 bytes.
|
|
<p>
|
|
For ordinary FTS3/FTS4 queries, the search tree depth is approximately
|
|
the base-2 logarithm of the number of terms in the right-hand side of the
|
|
MATCH operator. However, for <a href="fts3.html#phrase">phrase queries</a> and <a href="fts3.html#near">NEAR queries</a> the
|
|
search tree depth is linear in the number of right-hand side terms.
|
|
So the default depth limit of 12 is sufficient for up to 4095 ordinary
|
|
terms on a MATCH, it is only sufficient for 11 or 12 phrase or NEAR
|
|
terms. Even so, the default is more than enough for most application.
|
|
</p></blockquote><a name="like_doesnt_match_blobs"></a>
|
|
<p><b>SQLITE_LIKE_DOESNT_MATCH_BLOBS</b></p><blockquote><p>
|
|
This compile-time option causes the <a href="lang_expr.html#like">LIKE</a> operator to always return
|
|
False if either operand is a BLOB. The default behavior of <a href="lang_expr.html#like">LIKE</a>
|
|
is that BLOB operands are cast to TEXT before the comparison is done.
|
|
<p>
|
|
This compile-time option makes SQLite run more efficiently when processing
|
|
queries that use the <a href="lang_expr.html#like">LIKE</a> operator, at the expense of breaking backwards
|
|
compatibility. However, the backwards compatibility break may be only
|
|
a technicality. There was a long-standing bug in the <a href="lang_expr.html#like">LIKE</a> processing logic
|
|
(see <a href="https://www.sqlite.org/src/info/05f43be8fdda9f">https://www.sqlite.org/src/info/05f43be8fdda9f</a>) that caused it to
|
|
misbehavior for BLOB operands and nobody observed that bug in nearly
|
|
10 years of active use. So for more users, it is probably safe to
|
|
enable this compile-time option and thereby save a little CPU time
|
|
on LIKE queries.
|
|
<p>
|
|
This compile-time option affects the SQL <a href="lang_expr.html#like">LIKE</a> operator only and has
|
|
no impact on the <a href="c3ref/strlike.html">sqlite3_strlike()</a> C-language interface.
|
|
</p></blockquote><a name="max_memory"></a>
|
|
<p><b>SQLITE_MAX_MEMORY=<i>N</i></b></p><blockquote><p>
|
|
This option limits the total amount of memory that SQLite will request
|
|
from malloc() to <i>N</i> bytes. Any attempt by SQLite to allocate
|
|
new memory that would cause the sum of all allocations held by SQLite to exceed
|
|
<i>N</i> bytes will result in an out-of-memory error.
|
|
This is a hard upper limit. See also the <a href="c3ref/soft_heap_limit.html">sqlite3_soft_heap_limit()</a>
|
|
interface.
|
|
<p>
|
|
This limit is only functional if memory usage statistics are available via
|
|
the <a href="c3ref/memory_highwater.html">sqlite3_memory_used()</a> and <a href="c3ref/status.html">sqlite3_status64</a>(<a href="c3ref/c_status_malloc_count.html#sqlitestatusmemoryused">SQLITE_STATUS_MEMORY_USED</a>)
|
|
interfaces. Without that memory usage information, SQLite has no way of
|
|
knowing when it is about to go over the limit, and thus is unable to prevent
|
|
the excess memory allocation. Memory usage tracking is turned on by default,
|
|
but can be disabled at compile-time using the <a href="compile.html#default_memstatus">SQLITE_DEFAULT_MEMSTATUS</a> option,
|
|
or at start-time using <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemstatus">SQLITE_CONFIG_MEMSTATUS</a>).
|
|
</p></blockquote><a name="max_mmap_size"></a>
|
|
<p><b>SQLITE_MAX_MMAP_SIZE=<i>N</i></b></p><blockquote><p>
|
|
This macro sets a hard upper bound on the amount of address space that
|
|
can be used by any single database for memory-mapped I/O.
|
|
Setting this value to 0 completely disables memory-mapped I/O and
|
|
causes logic associated with memory-mapped I/O to be omitted from the
|
|
build. This option does change the default memory-mapped I/O address
|
|
space size (set by <a href="compile.html#default_mmap_size">SQLITE_DEFAULT_MMAP_SIZE</a> or
|
|
sqlite3_config(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">SQLITE_CONFIG_MMAP_SIZE</a>) or the
|
|
run-time memory-mapped I/O address space size (set by
|
|
sqlite3_file_control(<a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlmmapsize">SQLITE_FCNTL_MMAP_SIZE</a>) or
|
|
<a href="pragma.html#pragma_mmap_size">PRAGMA mmap_size</a>) as long as those other settings are less than the
|
|
maximum value defined here.
|
|
</p></blockquote><a name="max_schema_retry"></a>
|
|
<p><b>SQLITE_MAX_SCHEMA_RETRY=<i>N</i></b></p><blockquote><p>
|
|
Whenever the database schema changes, prepared statements are automatically
|
|
reprepared to accommodate the new schema. There is a race condition here
|
|
in that if one thread is constantly changing the schema, another thread
|
|
might spin on reparses and repreparations of a prepared statement and
|
|
never get any real work done. This parameter prevents an infinite loop
|
|
by forcing the spinning thread to give up after a fixed number of attempts
|
|
at recompiling the prepared statement. The default setting is 50 which is
|
|
more than adequate for most applications.
|
|
</p></blockquote><a name="max_worker_threads"></a>
|
|
<p><b>SQLITE_MAX_WORKER_THREADS=<i>N</i></b></p><blockquote><p>
|
|
Set an upper bound on the <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a>,N)
|
|
setting that determines the maximum number of auxiliary threads that a single
|
|
<a href="c3ref/stmt.html">prepared statement</a> will use to aid with CPU-intensive computations
|
|
(mostly sorting). See also the <a href="compile.html#default_worker_threads">SQLITE_DEFAULT_WORKER_THREADS</a> options.
|
|
</p></blockquote><a name="memdb_default_maxsize"></a>
|
|
<p><b>SQLITE_MEMDB_DEFAULT_MAXSIZE=<i>N</i></b></p><blockquote><p>
|
|
Set the default size limit (in bytes) for in-memory databases created using
|
|
<a href="c3ref/deserialize.html">sqlite3_deserialize()</a>. This is just the default. The limit can be
|
|
changed at start-time using
|
|
<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmemdbmaxsize">SQLITE_CONFIG_MEMDB_MAXSIZE</a>,N)
|
|
or at run-time for individual databases using the
|
|
<a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlsizelimit">SQLITE_FCNTL_SIZE_LIMIT</a> <a href="c3ref/file_control.html">file-control</a>.
|
|
If no default is specified, 1073741824 is used.
|
|
</p></blockquote><a name="minimum_file_descriptor"></a>
|
|
<p><b>SQLITE_MINIMUM_FILE_DESCRIPTOR=<i>N</i></b></p><blockquote><p>
|
|
The unix <a href="vfs.html">VFS</a> will never use a file descriptor less than <i>N</i>. The
|
|
default value of <i>N</i> is 3.
|
|
<p>
|
|
Avoiding the use of low-numbered file descriptors is a defense against
|
|
accidental database corruption. If a database file was opened using
|
|
file descriptor 2, for example, and then an assert() failed and invoked
|
|
write(2,...), that would likely cause database corruption by overwriting
|
|
part of the database file with the assertion error message. Using only
|
|
higher-valued file descriptors avoids this potential problem. The
|
|
protection against
|
|
using low-numbered file descriptors can be disabled by setting this
|
|
compile-time option to 0.
|
|
</p></blockquote><a name="powersafe_overwrite"></a>
|
|
<p><b>SQLITE_POWERSAFE_OVERWRITE=<i><0 or 1></i></b></p><blockquote><p>
|
|
This option changes the default assumption about <a href="psow.html">powersafe overwrite</a>
|
|
for the underlying filesystems for the unix and windows <a href="vfs.html">VFSes</a>.
|
|
Setting SQLITE_POWERSAFE_OVERWRITE to 1 causes SQLite to assume that
|
|
application-level writes cannot changes bytes outside the range of
|
|
bytes written even if the write occurs just before a power loss.
|
|
With SQLITE_POWERSAFE_OVERWRITE set to 0, SQLite assumes that other
|
|
bytes in the same sector with a written byte might be changed or
|
|
damaged by a power loss.
|
|
</p></blockquote><a name="printf_precision_limit"></a>
|
|
<p><b>SQLITE_PRINTF_PRECISION_LIMIT=<i>N</i></b></p><blockquote><p>
|
|
This option limits the maximum width and precision of substitutions
|
|
for the <a href="lang_corefunc.html#printf">printf() SQL function</a> and the other C-language string
|
|
formatting functions such as <a href="c3ref/mprintf.html">sqlite3_mprintf()</a> and
|
|
<a href="c3ref/str_append.html">sqlite3_str_appendf()</a>. This is turn can prevent a hostile or
|
|
malfunctioning script from using excessive memory by invoking
|
|
a format such as: "<tt>printf('%*s',2147483647,'hi')</tt>".
|
|
A value for <i>N</i> of around 1000 is normally sufficient.
|
|
<p>
|
|
The <a href="lang_corefunc.html#printf">printf() SQL function</a> is subject to the <a href="c3ref/c_limit_attached.html#sqlitelimitlength">SQLITE_LIMIT_LENGTH</a>
|
|
limit of <a href="c3ref/limit.html">sqlite3_limit()</a>. Hence any printf() result with a
|
|
width or precision more than the SQLITE_LIMIT_LENGTH will cause
|
|
an <a href="rescode.html#toobig">SQLITE_TOOBIG</a> error. However, the low-level formatting
|
|
for the printf() function is done by a subroutine that does not
|
|
have access to SQLITE_LIMIT_LENGTH. So the low-level formatting
|
|
is done into a memory allocation that might be considerably larger
|
|
than SQLITE_LIMIT_LENGTH and the SQLITE_LIMIT_LENGTH check is only
|
|
performed after all formatting is complete. Thus there might be a
|
|
transient buffer that exceeds SQLITE_LIMIT_LENGTH. The
|
|
SQLITE_PRINTF_PRECISION_LIMIT option is an additional check
|
|
that prevents excess sizes for the transient buffer used inside
|
|
the low-level formatting subroutine, prior to the
|
|
SQLITE_LIMIT_LENGTH check.
|
|
<p>
|
|
No error is raised if a width or precision exceeds
|
|
SQLITE_PRINTF_PRECISION_LIMIT. Instead, the large width or
|
|
precision is silently truncated.
|
|
<p>
|
|
The default value for SQLITE_PRINTF_PRECISION_LIMIT is 2147483647
|
|
(0x7fffffff).</p>
|
|
|
|
<p></p></blockquote><a name="query_planner_limit"></a>
|
|
<p><b>SQLITE_QUERY_PLANNER_LIMIT=<i>N</i></b></p><blockquote><p>
|
|
As part of the query planning process, SQLite enumerates all usable
|
|
combinations of indexes and WHERE-clause constraints. For certain
|
|
pathological queries, the number of these index-and-constraint combinations
|
|
can be very large, resulting in slow performance by the query planner.
|
|
The SQLITE_QUERY_PLANNER_LIMIT value (in conjunction with the
|
|
related <a href="compile.html#query_planner_limit_incr">SQLITE_QUERY_PLANNER_LIMIT_INCR</a> setting) limits the number
|
|
of index-and-constraint combinations that the query planner will
|
|
consider, in order to prevent the query planner from using excess
|
|
CPU time. The default value for SQLITE_QUERY_PLANNER_LIMIT is set
|
|
high enough so that is never reached for real-world queries. The
|
|
query planner search limit only applies to queries that are deliberately
|
|
crafted to use excess planning time.
|
|
</p></blockquote><a name="query_planner_limit_incr"></a>
|
|
<p><b>SQLITE_QUERY_PLANNER_LIMIT_INCR=<i>N</i></b></p><blockquote><p>
|
|
The <a href="compile.html#query_planner_limit">SQLITE_QUERY_PLANNER_LIMIT</a> option sets an initial baseline value
|
|
for the maximum number of index-and-constraint combinations that the
|
|
query planner consider. The baseline query planner limit is increased
|
|
by SQLITE_QUERY_PLANNER_LIMIT_INCR prior to processing each table of a
|
|
join so that each table is guaranteed to be able to propose at least
|
|
some index-and-constraint combinations to the optimizer even if prior
|
|
tables of the join have exhausted the baseline limit. The default
|
|
value for both this compile-time option and the
|
|
<a href="compile.html#query_planner_limit">SQLITE_QUERY_PLANNER_LIMIT</a> option are set high enough so that they should
|
|
never be reached for real-world queries.
|
|
</p></blockquote><a name="reverse_unordered_selects"></a>
|
|
<p><b>SQLITE_REVERSE_UNORDERED_SELECTS</b></p><blockquote><p>
|
|
This option causes the <a href="pragma.html#pragma_reverse_unordered_selects">PRAGMA reverse_unordered_selects</a> setting to be
|
|
enabled by default. When enabled, <a href="lang_select.html">SELECT</a> statements that lack an
|
|
ORDER BY clause will run in reverse order.<p>
|
|
This option is useful for detecting when applications (incorrectly)
|
|
assume that the order of rows in a SELECT without an ORDER BY clause
|
|
will always be the same.
|
|
</p></blockquote><a name="sorter_pmasz"></a>
|
|
<p><b>SQLITE_SORTER_PMASZ=<i>N</i></b></p><blockquote><p>
|
|
If multi-threaded processing is enabled via the
|
|
<a href="pragma.html#pragma_threads">PRAGMA threads</a> setting, then sort operations will
|
|
attempt to start helper threads when the amount of content
|
|
to be sorted exceeds the minimum of the <a href="pragma.html#pragma_cache_size">cache_size</a> and PMA Size
|
|
determined by the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a> start-time option.
|
|
This compile-time option sets the default value for the
|
|
<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigpmasz">SQLITE_CONFIG_PMASZ</a> start-time option.
|
|
The default value is 250.
|
|
</p></blockquote><a name="stmtjrnl_spill"></a>
|
|
<p><b>SQLITE_STMTJRNL_SPILL=<i>N</i></b></p><blockquote><p>
|
|
The SQLITE_STMTJRNL_SPILL compile-time option determines the
|
|
default setting of the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigstmtjrnlspill">SQLITE_CONFIG_STMTJRNL_SPILL</a> start-time
|
|
setting. That setting determines the size threshold above which
|
|
<a href="tempfiles.html#stmtjrnl">statement journals</a> are moved from memory to disk.
|
|
</p></blockquote><a name="win32_malloc"></a>
|
|
<p><b>SQLITE_WIN32_MALLOC</b></p><blockquote><p>
|
|
This option enables the use of the Windows Heap API functions for memory
|
|
allocation instead of the standard library malloc() and free() routines.
|
|
</p></blockquote><a name="yystackdepth"></a>
|
|
<p><b>YYSTACKDEPTH=<i><max_depth></i></b></p><blockquote><p>
|
|
This macro sets the maximum depth of the LALR(1) stack used by
|
|
the SQL parser within SQLite. The default value is 100. A typical
|
|
application will use less than about 20 levels of the stack.
|
|
Developers whose applications contain SQL statements that
|
|
need more than 100 LALR(1) stack entries should seriously
|
|
consider refactoring their SQL as it is likely to be well beyond
|
|
the ability of any human to comprehend.
|
|
</p></blockquote>
|
|
|
|
<h1 id="_options_to_set_size_limits"><span>5. </span> Options To Set Size Limits</h1>
|
|
|
|
<p>There are compile-time options that will set upper bounds
|
|
on the sizes of various structures in SQLite. The compile-time
|
|
options normally set a hard upper bound that can be changed
|
|
at run-time on individual <a href="c3ref/sqlite3.html">database connections</a> using the
|
|
<a href="c3ref/limit.html">sqlite3_limit()</a> interface.</p>
|
|
|
|
<p>The compile-time options for setting upper bounds are
|
|
<a href="limits.html">documented separately</a>. The following is a list of
|
|
the available settings:</p>
|
|
|
|
<ul>
|
|
<li> <a href="limits.html#max_attached">SQLITE_MAX_ATTACHED</a> </li>
|
|
<li> <a href="limits.html#max_column">SQLITE_MAX_COLUMN</a> </li>
|
|
<li> <a href="limits.html#max_compound_select">SQLITE_MAX_COMPOUND_SELECT</a> </li>
|
|
<li> <a href="limits.html#max_expr_depth">SQLITE_MAX_EXPR_DEPTH</a> </li>
|
|
<li> <a href="limits.html#max_function_arg">SQLITE_MAX_FUNCTION_ARG</a> </li>
|
|
<li> <a href="limits.html#max_length">SQLITE_MAX_LENGTH</a> </li>
|
|
<li> <a href="limits.html#max_like_pattern_length">SQLITE_MAX_LIKE_PATTERN_LENGTH</a> </li>
|
|
<li> <a href="limits.html#max_page_count">SQLITE_MAX_PAGE_COUNT</a> </li>
|
|
<li> <a href="limits.html#max_sql_length">SQLITE_MAX_SQL_LENGTH</a> </li>
|
|
<li> <a href="limits.html#max_variable_number">SQLITE_MAX_VARIABLE_NUMBER</a> </li>
|
|
</ul>
|
|
|
|
<a name="controlfeatures"></a>
|
|
<h1 id="_options_to_control_operating_characteristics"><span>6. </span> Options To Control Operating Characteristics</h1>
|
|
|
|
<a name="4_byte_aligned_malloc"></a>
|
|
<p><b>SQLITE_4_BYTE_ALIGNED_MALLOC</b></p><blockquote><p>
|
|
On most systems, the malloc() system call returns a buffer that is
|
|
aligned to an 8-byte boundary. But on some systems (ex: windows) malloc()
|
|
returns 4-byte aligned pointer. This compile-time option must be used
|
|
on systems that return 4-byte aligned pointers from malloc().
|
|
</p></blockquote><a name="case_sensitive_like"></a>
|
|
<p><b>SQLITE_CASE_SENSITIVE_LIKE</b></p><blockquote><p>
|
|
If this option is present, then the built-in <a href="lang_expr.html#like">LIKE</a> operator will be
|
|
case sensitive. This same effect can be achieved at run-time using
|
|
the <a href="pragma.html#pragma_case_sensitive_like">case_sensitive_like pragma</a>.
|
|
</p></blockquote><a name="direct_overflow_read"></a>
|
|
<p><b>SQLITE_DIRECT_OVERFLOW_READ</b></p><blockquote><p>
|
|
When this option is present, content contained in
|
|
<a href="fileformat2.html#ovflpgs">overflow pages</a> of the database file is read directly from disk,
|
|
bypassing the <a href="c3ref/pcache_methods2.html">page cache</a>, during read transactions. In applications
|
|
that do a lot of reads of large BLOBs, this option might improve read
|
|
performance.
|
|
</p></blockquote><a name="have_isnan"></a>
|
|
<p><b>SQLITE_HAVE_ISNAN</b></p><blockquote><p>
|
|
If this option is present, then SQLite will use the isnan() function from
|
|
the system math library. This is an alias for the <a href="compile.html#isnan">HAVE_ISNAN</a> configuration
|
|
option.
|
|
</p></blockquote><a name="os_other"></a>
|
|
<p><b>SQLITE_OS_OTHER=<i><0 or 1></i></b></p><blockquote><p>
|
|
The option causes SQLite to omit its built-in operating system interfaces
|
|
for Unix, Windows, and OS/2. The resulting library will have no default
|
|
<a href="c3ref/vfs.html">operating system interface</a>. Applications must use
|
|
<a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a> to register an appropriate interface before
|
|
using SQLite. Applications must also supply implementations for the
|
|
<a href="c3ref/initialize.html">sqlite3_os_init()</a> and <a href="c3ref/initialize.html">sqlite3_os_end()</a> interfaces. The usual practice
|
|
is for the supplied <a href="c3ref/initialize.html">sqlite3_os_init()</a> to invoke <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a>.
|
|
SQLite will automatically invoke <a href="c3ref/initialize.html">sqlite3_os_init()</a> when it initializes.</p>
|
|
|
|
<p> This option is typically used when building SQLite for an embedded
|
|
platform with a custom operating system.
|
|
</p></blockquote><a name="secure_delete"></a>
|
|
<p><b>SQLITE_SECURE_DELETE</b></p><blockquote><p>
|
|
This compile-time option changes the default setting of the
|
|
<a href="pragma.html#pragma_secure_delete">secure_delete pragma</a>. When this option is not used, secure_delete defaults
|
|
to off. When this option is present, secure_delete defaults to on.</p>
|
|
|
|
<p> The secure_delete setting causes deleted content to be overwritten with
|
|
zeros. There is a small performance penalty since additional I/O
|
|
must occur. On the other hand, secure_delete can prevent fragments of
|
|
sensitive information from lingering in unused parts of the database file
|
|
after it has been deleted. See the documentation on the
|
|
<a href="pragma.html#pragma_secure_delete">secure_delete pragma</a> for additional information.
|
|
</p></blockquote><a name="threadsafe"></a>
|
|
<p><b>SQLITE_THREADSAFE=<i><0 or 1 or 2></i></b></p><blockquote><p>
|
|
This option controls whether or not code is included in SQLite to
|
|
enable it to operate safely in a multithreaded environment. The
|
|
default is SQLITE_THREADSAFE=1 which is safe for use in a multithreaded
|
|
environment. When compiled with SQLITE_THREADSAFE=0 all mutexing code
|
|
is omitted and it is unsafe to use SQLite in a multithreaded program.
|
|
When compiled with SQLITE_THREADSAFE=2, SQLite can be used in a multithreaded
|
|
program so long as no two threads attempt to use the same
|
|
<a href="c3ref/sqlite3.html">database connection</a> (or any <a href="c3ref/stmt.html">prepared statements</a> derived from
|
|
that database connection) at the same time.</p>
|
|
|
|
<p> To put it another way, SQLITE_THREADSAFE=1 sets the default
|
|
<a href="threadsafe.html">threading mode</a> to Serialized. SQLITE_THREADSAFE=2 sets the default
|
|
<a href="threadsafe.html">threading mode</a> to Multi-threaded. And SQLITE_THREADSAFE=0 sets the
|
|
<a href="threadsafe.html">threading mode</a> to Single-threaded.</p>
|
|
|
|
<p> The value of SQLITE_THREADSAFE can be determined at run-time
|
|
using the <a href="c3ref/threadsafe.html">sqlite3_threadsafe()</a> interface.</p>
|
|
|
|
<p> When SQLite has been compiled with SQLITE_THREADSAFE=1 or
|
|
SQLITE_THREADSAFE=2 then the <a href="threadsafe.html">threading mode</a>
|
|
can be altered at run-time using the <a href="c3ref/config.html">sqlite3_config()</a> interface together
|
|
with one of these verbs:</p>
|
|
|
|
<p> <ul>
|
|
<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsinglethread">SQLITE_CONFIG_SINGLETHREAD</a>
|
|
<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmultithread">SQLITE_CONFIG_MULTITHREAD</a>
|
|
<li><a href="c3ref/c_config_covering_index_scan.html#sqliteconfigserialized">SQLITE_CONFIG_SERIALIZED</a>
|
|
</ul></p>
|
|
|
|
<p> The <a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_NOMUTEX</a> and
|
|
<a href="c3ref/c_open_autoproxy.html">SQLITE_OPEN_FULLMUTEX</a> flags to <a href="c3ref/open.html">sqlite3_open_v2()</a> can also be used
|
|
to adjust the <a href="threadsafe.html">threading mode</a> of individual <a href="c3ref/sqlite3.html">database connections</a>
|
|
at run-time.</p>
|
|
|
|
<p> Note that when SQLite is compiled with SQLITE_THREADSAFE=0, the code
|
|
to make SQLite threadsafe is omitted from the build. When this occurs,
|
|
it is impossible to change the <a href="threadsafe.html">threading mode</a> at start-time or run-time.</p>
|
|
|
|
<p> See the <a href="threadsafe.html">threading mode</a> documentation for additional information
|
|
on aspects of using SQLite in a multithreaded environment.
|
|
</p></blockquote><a name="temp_store"></a>
|
|
<p><b>SQLITE_TEMP_STORE=<i><0 through 3></i></b></p><blockquote><p>
|
|
This option controls whether temporary files are stored on disk or
|
|
in memory. The meanings for various settings of this compile-time
|
|
option are as follows:</p>
|
|
|
|
<p> <table cellpadding="2" border="1">
|
|
<tr><th>SQLITE_TEMP_STORE</th><th>Meaning</th></tr>
|
|
<tr><td align="center">0</td><td>Always use temporary files</td></tr>
|
|
<tr><td align="center">1</td><td>Use files by default but allow the
|
|
<a href="pragma.html#pragma_temp_store">PRAGMA temp_store</a> command to override</td></tr>
|
|
<tr><td align="center">2</td><td>Use memory by default but allow the
|
|
<a href="pragma.html#pragma_temp_store">PRAGMA temp_store</a> command to override</td></tr>
|
|
<tr><td align="center">3</td><td>Always use memory</td></tr>
|
|
</table></p>
|
|
|
|
<p> The default setting is 1.
|
|
Additional information can be found in <a href="tempfiles.html#tempstore">tempfiles.html</a>.
|
|
</p></blockquote><a name="trace_size_limit"></a>
|
|
<p><b>SQLITE_TRACE_SIZE_LIMIT=<i>N</i></b></p><blockquote><p>
|
|
If this macro is defined to a positive integer <i>N</i>, then the length of
|
|
strings and BLOB that are expanded into parameters in the output of
|
|
<a href="c3ref/profile.html">sqlite3_trace()</a> is limited to <i>N</i> bytes.
|
|
</p></blockquote><a name="trusted_schema"></a>
|
|
<p><b>SQLITE_TRUSTED_SCHEMA=<i><0 or 1></i></b></p><blockquote><p>
|
|
This macro determines the default value for the
|
|
<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a> and <a href="pragma.html#pragma_trusted_schema">PRAGMA trusted_schema</a> setting.
|
|
If no alternative is specified, the trusted-schema setting defaults
|
|
to ON (a value of 1) for legacy compatibility. However, for best
|
|
security, systems that implement
|
|
<a href="appfunc.html">application-defined SQL functions</a> and/or <a href="vtab.html">virtual tables</a> should
|
|
consider changing the default to OFF.
|
|
</p></blockquote><a name="use_uri"></a>
|
|
<p><b>SQLITE_USE_URI</b></p><blockquote><p>
|
|
This option causes the <a href="uri.html">URI filename</a> process logic to be enabled by
|
|
default.
|
|
</p></blockquote>
|
|
|
|
<a name="enablefeatures"></a>
|
|
<h1 id="_options_to_enable_features_normally_turned_off"><span>7. </span> Options To Enable Features Normally Turned Off</h1>
|
|
|
|
<a name="allow_uri_authority"></a>
|
|
<p><b>SQLITE_ALLOW_URI_AUTHORITY</b></p><blockquote><p>
|
|
<a href="uri.html">URI filenames</a> normally throws an error if the authority section is
|
|
not either empty or "localhost". However, if SQLite is compiled with
|
|
the SQLITE_ALLOW_URI_AUTHORITY compile-time option, then the URI is
|
|
converted into a Uniform Naming Convention (UNC) filename and passed
|
|
down to the underlying operating system that way.
|
|
<p>
|
|
Some future versions of SQLite may change to enable this feature
|
|
by default.
|
|
</p></blockquote><a name="allow_covering_index_scan"></a>
|
|
<p><b>SQLITE_ALLOW_COVERING_INDEX_SCAN=<i><0 or 1></i></b></p><blockquote><p>
|
|
This C-preprocess macro determines the default setting of the
|
|
<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigcoveringindexscan">SQLITE_CONFIG_COVERING_INDEX_SCAN</a> configuration setting. It defaults
|
|
to 1 (on) which means that covering indices are used for full table
|
|
scans where possible, in order to reduce I/O and improve performance.
|
|
However, the use of a covering index for a full scan will cause results
|
|
to appear in a different order from legacy, which could cause some
|
|
(incorrectly-coded) legacy applications to break. Hence, the covering
|
|
index scan option can be disabled at compile-time on systems that what
|
|
to minimize their risk of exposing errors in legacy applications.
|
|
</p></blockquote><a name="enable_8_3_names"></a>
|
|
<p><b>SQLITE_ENABLE_8_3_NAMES=<i><1 or 2></i></b></p><blockquote><p>
|
|
If this C-preprocessor macro is defined, then extra code is
|
|
included that allows SQLite to function on a filesystem that
|
|
only support 8+3 filenames. If the value of this macro is 1,
|
|
then the default behavior is to continue to use long filenames and
|
|
to only use 8+3 filenames if the
|
|
database connection is opened using <a href="uri.html">URI filenames</a> with
|
|
the "<tt>8_3_names=1</tt>" query parameter. If the value of
|
|
this macro is 2, then the use of 8+3 filenames becomes the default
|
|
but may be disabled on using the <tt>8_3_names=0</tt> query parameter.
|
|
</p></blockquote><a name="enable_api_armor"></a>
|
|
<p><b>SQLITE_ENABLE_API_ARMOR</b></p><blockquote><p>
|
|
When defined, this C-preprocessor macro activates extra code that
|
|
attempts to detect misuse of the SQLite API, such as passing in NULL
|
|
pointers to required parameters or using objects after they have been
|
|
destroyed.
|
|
</p></blockquote><a name="enable_atomic_write"></a>
|
|
<p><b>SQLITE_ENABLE_ATOMIC_WRITE</b></p><blockquote><p>
|
|
If this C-preprocessor macro is defined and if the
|
|
xDeviceCharacteristics method of <a href="c3ref/io_methods.html">sqlite3_io_methods</a> object for
|
|
a database file reports (via one of the <a href="c3ref/c_iocap_atomic.html">SQLITE_IOCAP_ATOMIC</a> bits)
|
|
that the filesystem supports atomic writes and if a transaction
|
|
involves a change to only a single page of the database file,
|
|
then the transaction commits with just a single write request of
|
|
a single page of the database and no rollback journal is created
|
|
or written. On filesystems that support atomic writes, this
|
|
optimization can result in significant speed improvements for
|
|
small updates. However, few filesystems support this capability
|
|
and the code paths that check for this capability slow down write
|
|
performance on systems that lack atomic write capability, so this
|
|
feature is disabled by default.
|
|
</p></blockquote><a name="enable_batch_atomic_write"></a>
|
|
<p><b>SQLITE_ENABLE_BATCH_ATOMIC_WRITE</b></p><blockquote><p>
|
|
This compile-time option enables SQLite to take advantage batch
|
|
atomic write capabilities in the underlying filesystem. As of
|
|
SQLite version 3.21.0 (2017-10-24) this is only supported on
|
|
<a href="https://en.wikipedia.org/wiki/F2FS">F2FS</a>. However, the interface
|
|
is implemented generically, using <a href="c3ref/file_control.html">sqlite3_file_control()</a> with
|
|
<a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlbeginatomicwrite">SQLITE_FCNTL_BEGIN_ATOMIC_WRITE</a> and <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlcommitatomicwrite">SQLITE_FCNTL_COMMIT_ATOMIC_WRITE</a>
|
|
so the capability can be added to other filesystem times in the
|
|
future. When this option is enabled, SQLite automatically detects
|
|
that the underlying filesystem supports batch atomic writes, and
|
|
when it does so it avoids writing the <a href="lockingv3.html#rollback">rollback journal</a> for transaction
|
|
control. This can make transactions over twice as fast, while
|
|
simultaneously reducing wear on SSD storage devices.
|
|
<p>
|
|
Future versions of SQLite might enable the batch-atomic-write
|
|
capability by default, at which point this compile-time option
|
|
will become superfluous.
|
|
</p></blockquote><a name="enable_bytecode_vtab"></a>
|
|
<p><b>SQLITE_ENABLE_BYTECODE_VTAB</b></p><blockquote><p>
|
|
This option enables the <a href="bytecodevtab.html">bytecode and tables_used virtual tables</a>.
|
|
</p></blockquote><a name="enable_column_metadata"></a>
|
|
<p><b>SQLITE_ENABLE_COLUMN_METADATA</b></p><blockquote><p>
|
|
When this C-preprocessor macro is defined, SQLite includes some
|
|
additional APIs that provide convenient access to meta-data about
|
|
tables and queries. The APIs that are enabled by this option are:</p>
|
|
|
|
<p> <ul>
|
|
<li> <a href="c3ref/column_database_name.html">sqlite3_column_database_name()</a> </li>
|
|
<li> <a href="c3ref/column_database_name.html">sqlite3_column_database_name16()</a> </li>
|
|
<li> <a href="c3ref/column_database_name.html">sqlite3_column_table_name()</a> </li>
|
|
<li> <a href="c3ref/column_database_name.html">sqlite3_column_table_name16()</a> </li>
|
|
<li> <a href="c3ref/column_database_name.html">sqlite3_column_origin_name()</a> </li>
|
|
<li> <a href="c3ref/column_database_name.html">sqlite3_column_origin_name16()</a> </li>
|
|
</ul>
|
|
</p></blockquote><a name="enable_dbpage_vtab"></a>
|
|
<p><b>SQLITE_ENABLE_DBPAGE_VTAB</b></p><blockquote><p>
|
|
This option enables the <a href="dbpage.html">SQLITE_DBPAGE virtual table</a>.
|
|
</p></blockquote><a name="enable_dbstat_vtab"></a>
|
|
<p><b>SQLITE_ENABLE_DBSTAT_VTAB</b></p><blockquote><p>
|
|
This option enables the <a href="dbstat.html">dbstat virtual table</a>.
|
|
</p></blockquote><a name="enable_deserialize"></a>
|
|
<p><b>SQLITE_ENABLE_DESERIALIZE</b></p><blockquote><p>
|
|
This option enables the <a href="c3ref/serialize.html">sqlite3_serialize()</a> and <a href="c3ref/deserialize.html">sqlite3_deserialize()</a>
|
|
interfaces.
|
|
<p>
|
|
Future releases of SQLite might enable those interfaces by default and
|
|
instead offer an SQLITE_OMIT_DESERIALIZE option to leave them out.
|
|
</p></blockquote><a name="enable_explain_comments"></a>
|
|
<p><b>SQLITE_ENABLE_EXPLAIN_COMMENTS</b></p><blockquote><p>
|
|
This option adds extra logic to SQLite that inserts comment text into the
|
|
output of <a href="lang_explain.html">EXPLAIN</a>. These extra comments use extra memory, thus
|
|
making <a href="c3ref/stmt.html">prepared statements</a> larger and very slightly slower, and so they are
|
|
turned off by default and in most application. But some applications, such
|
|
as the <a href="cli.html">command-line shell</a> for SQLite, value clarity of EXPLAIN output
|
|
over raw performance and so this compile-time option is available to them.
|
|
The SQLITE_ENABLE_EXPLAIN_COMMENTS compile-time option is also enabled
|
|
automatically if <a href="compile.html#debug">SQLITE_DEBUG</a> is enabled.
|
|
</p></blockquote><a name="enable_fts3"></a>
|
|
<p><b>SQLITE_ENABLE_FTS3</b></p><blockquote><p>
|
|
When this option is defined in the <a href="amalgamation.html">amalgamation</a>, version 3
|
|
of the full-text search engine is added to the build automatically.
|
|
</p></blockquote><a name="enable_fts3_parenthesis"></a>
|
|
<p><b>SQLITE_ENABLE_FTS3_PARENTHESIS</b></p><blockquote><p>
|
|
This option modifies the query pattern parser in FTS3 such that it
|
|
supports operators AND and NOT (in addition to the usual OR and NEAR)
|
|
and also allows query expressions to contain nested parenthesis.
|
|
</p></blockquote><a name="enable_fts3_tokenizer"></a>
|
|
<p><b>SQLITE_ENABLE_FTS3_TOKENIZER</b></p><blockquote><p>
|
|
This option enables the two-argument version of the <a href="fts3.html#f3tknzr">fts3_tokenizer()</a>
|
|
interface. The second argument to fts3_tokenizer() is suppose to be a
|
|
pointer to a function (encoded as a BLOB) that implements an
|
|
application defined tokenizer. If hostile actors are able to run
|
|
the two-argument version of fts3_tokenizer() with an arbitrary second
|
|
argument, they could use crash or take control of the process.
|
|
<p>
|
|
Because of security concerns, the two-argument fts3_tokenizer() feature
|
|
was disabled beginning with <a href="releaselog/3_11_0.html">Version 3.11.0</a> (2016-02-15)
|
|
unless this compile-time option is used.
|
|
<a href="releaselog/3_12_0.html">Version 3.12.0</a> (2016-03-29) added the
|
|
<a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenablefts3tokenizer">SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER</a>,1,0) interface
|
|
that activates the two-argument version of <a href="fts3.html#f3tknzr">fts3_tokenizer()</a>
|
|
for a specific <a href="c3ref/sqlite3.html">database connection</a> at run-time.
|
|
</p></blockquote><a name="enable_fts4"></a>
|
|
<p><b>SQLITE_ENABLE_FTS4</b></p><blockquote><p>
|
|
When this option is defined in the <a href="amalgamation.html">amalgamation</a>, versions 3 and 4
|
|
of the full-text search engine is added to the build automatically.
|
|
</p></blockquote><a name="enable_fts5"></a>
|
|
<p><b>SQLITE_ENABLE_FTS5</b></p><blockquote><p>
|
|
When this option is defined in the <a href="amalgamation.html">amalgamation</a>, versions 5
|
|
of the full-text search engine (<a href="fts5.html">fts5</a>) is added to the build automatically.
|
|
</p></blockquote><a name="enable_geopoly"></a>
|
|
<p><b>SQLITE_ENABLE_GEOPOLY</b></p><blockquote><p>
|
|
When this option is defined in the <a href="amalgamation.html">amalgamation</a>, the <a href="geopoly.html">Geopoly extension</a>
|
|
is included in the build.
|
|
</p></blockquote><a name="enable_icu"></a>
|
|
<p><b>SQLITE_ENABLE_ICU</b></p><blockquote><p>
|
|
This option causes the
|
|
<a href="http://www.icu-project.org/">International Components for Unicode</a>
|
|
or "ICU" extension to SQLite to be added to the build.
|
|
</p></blockquote><a name="enable_iotrace"></a>
|
|
<p><b>SQLITE_ENABLE_IOTRACE</b></p><blockquote><p>
|
|
When both the SQLite core and the <a href="cli.html">Command Line Interface</a> (CLI) are both
|
|
compiled with this option, then the CLI provides an extra command
|
|
named ".iotrace" that provides a low-level log of I/O activity.
|
|
This option is experimental and may be discontinued in a future release.
|
|
</p></blockquote><a name="enable_json1"></a>
|
|
<p><b>SQLITE_ENABLE_JSON1</b></p><blockquote><p>
|
|
When this option is defined in the <a href="amalgamation.html">amalgamation</a>, the
|
|
<a href="json1.html">JSON SQL functions</a> are added to the build automatically.
|
|
</p></blockquote><a name="enable_locking_style"></a>
|
|
<p><b>SQLITE_ENABLE_LOCKING_STYLE</b></p><blockquote><p>
|
|
This option enables additional logic in the OS interface layer for
|
|
Mac OS X. The additional logic attempts to determine the type of the
|
|
underlying filesystem and choose and alternative locking strategy
|
|
that works correctly for that filesystem type. Five locking strategies
|
|
are available:</p>
|
|
|
|
<p> <ul>
|
|
<li> POSIX locking style. This is the default locking style and the
|
|
style used by other (non Mac OS X) Unixes. Locks are obtained and
|
|
released using the fcntl() system call.</p>
|
|
|
|
<p> <li> AFP locking style. This locking style is used for network file
|
|
systems that use the AFP (Apple Filing Protocol) protocol. Locks
|
|
are obtained by calling the library function _AFPFSSetLock().</p>
|
|
|
|
<p> <li> Flock locking style. This is used for file-systems that do not
|
|
support POSIX locking style. Locks are obtained and released using
|
|
the flock() system call.</p>
|
|
|
|
<p> <li> Dot-file locking style. This locking style is used when neither
|
|
flock nor POSIX locking styles are supported by the file system.
|
|
Database locks are obtained by creating and entry in the file-system
|
|
at a well-known location relative to the database file (a "dot-file")
|
|
and relinquished by deleting the same file.</p>
|
|
|
|
<p> <li> No locking style. If none of the above can be supported, this
|
|
locking style is used. No database locking mechanism is used. When
|
|
this system is used it is not safe for a single database to be
|
|
accessed by multiple clients.
|
|
</ul></p>
|
|
|
|
<p> Additionally, five extra <a href="vfs.html">VFS</a> implementations are provided as well as the
|
|
default. By specifying one of the extra VFS implementations
|
|
when calling <a href="c3ref/open.html">sqlite3_open_v2()</a>, an application may bypass the file-system
|
|
detection logic and explicitly select one of the above locking styles. The
|
|
five extra <a href="vfs.html">VFS</a> implementations are called "unix-posix", "unix-afp",
|
|
"unix-flock", "unix-dotfile" and "unix-none".
|
|
</p></blockquote><a name="enable_memory_management"></a>
|
|
<p><b>SQLITE_ENABLE_MEMORY_MANAGEMENT</b></p><blockquote><p>
|
|
This option adds extra logic to SQLite that allows it to release unused
|
|
memory upon request. This option must be enabled in order for the
|
|
<a href="c3ref/release_memory.html">sqlite3_release_memory()</a> interface to work. If this compile-time
|
|
option is not used, the <a href="c3ref/release_memory.html">sqlite3_release_memory()</a> interface is a
|
|
no-op.
|
|
</p></blockquote><a name="enable_memsys3"></a>
|
|
<p><b>SQLITE_ENABLE_MEMSYS3</b></p><blockquote><p>
|
|
This option includes code in SQLite that implements an alternative
|
|
memory allocator. This alternative memory allocator is only engaged
|
|
when the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a> option to <a href="c3ref/config.html">sqlite3_config()</a> is used to
|
|
supply a large chunk of memory from which all memory allocations are
|
|
taken.
|
|
The MEMSYS3 memory allocator uses a hybrid allocation algorithm
|
|
patterned after dlmalloc(). Only one of SQLITE_ENABLE_MEMSYS3 and
|
|
SQLITE_ENABLE_MEMSYS5 may be enabled at once.
|
|
</p></blockquote><a name="enable_memsys5"></a>
|
|
<p><b>SQLITE_ENABLE_MEMSYS5</b></p><blockquote><p>
|
|
This option includes code in SQLite that implements an alternative
|
|
memory allocator. This alternative memory allocator is only engaged
|
|
when the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a> option to <a href="c3ref/config.html">sqlite3_config()</a> is used to
|
|
supply a large chunk of memory from which all memory allocations are
|
|
taken.
|
|
The MEMSYS5 module rounds all allocations up to the next power
|
|
of two and uses a first-fit, buddy-allocator algorithm
|
|
that provides strong guarantees against fragmentation and breakdown
|
|
subject to certain operating constraints.
|
|
</p></blockquote><a name="enable_null_trim"></a>
|
|
<p><b>SQLITE_ENABLE_NULL_TRIM</b></p><blockquote><p>
|
|
This option enables an optimization that omits NULL columns at
|
|
the ends of rows, for a space savings on disk.
|
|
<p>
|
|
Databases generated with this option enabled are not readable
|
|
by SQLite version 3.1.6 (2005-03-17) and earlier. Also,
|
|
databases generated with this option enabled are prone to
|
|
triggering the
|
|
<a href="https://www.sqlite.org/src/info/e6e962d6b0f06f46e">e6e962d6b0f06f46</a>
|
|
bug in the <a href="c3ref/blob_reopen.html">sqlite3_blob_reopen()</a> interface. For those reasons,
|
|
this optimization is disabled by default. However, this optimization
|
|
may be enabled by default in a future release of SQLite.
|
|
</p></blockquote><a name="enable_offset_sql_func"></a>
|
|
<p><b>SQLITE_ENABLE_OFFSET_SQL_FUNC</b></p><blockquote><p>
|
|
This option enables support for the <a href="lang_corefunc.html#sqlite_offset">sqlite_offset(X)</a> SQL function.
|
|
<p>
|
|
The <a href="lang_corefunc.html#sqlite_offset">sqlite_offset(X)</a> SQL function requires a new interface on the
|
|
B-tree storage engine, a new opcode in the <a href="opcode.html">virtual machine</a> that
|
|
runs SQL statements, and a new conditional in a critical path of the
|
|
code generator. To avoid that overhead in applications that do not
|
|
need the utility of sqlite_offset(X), the function is disabled by
|
|
default.
|
|
</p></blockquote><a name="enable_preupdate_hook"></a>
|
|
<p><b>SQLITE_ENABLE_PREUPDATE_HOOK</b></p><blockquote><p>
|
|
This option enables
|
|
<a href="c3ref/preupdate_count.html">several new APIs</a> that provide callbacks
|
|
prior to any change to a <a href="rowidtable.html">rowid table</a>. The callbacks can be used
|
|
to record the state of the row before the change occurs.
|
|
<p>The action of the preupdate hook is similar to the
|
|
<a href="c3ref/update_hook.html">update hook</a> except that the callback is
|
|
invoked before the change, not afterwards, and the preupdate
|
|
hook interfaces are omitted unless this compile-time option is
|
|
used.
|
|
<p>The preupdate hook interfaces were originally added to
|
|
support the <a href="sessionintro.html">session</a> extension.
|
|
</p></blockquote><a name="enable_qpsg"></a>
|
|
<p><b>SQLITE_ENABLE_QPSG</b></p><blockquote><p>
|
|
This option causes the <a href="queryplanner-ng.html#qpstab">query planner stability guarantee</a> (QPSG) to
|
|
be on by default. Normally the QPSG is off and must be activated
|
|
at run-time using the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigenableqpsg">SQLITE_DBCONFIG_ENABLE_QPSG</a> option to the
|
|
<a href="c3ref/db_config.html">sqlite3_db_config()</a> interface.
|
|
</p></blockquote><a name="enable_rbu"></a>
|
|
<p><b>SQLITE_ENABLE_RBU</b></p><blockquote><p>
|
|
Enable the code the implements the <a href="rbu.html">RBU extension</a>.
|
|
</p></blockquote><a name="enable_rtree"></a>
|
|
<p><b>SQLITE_ENABLE_RTREE</b></p><blockquote><p>
|
|
This option causes SQLite to include support for the
|
|
<a href="rtree.html">R*Tree index extension</a>.
|
|
</p></blockquote><a name="enable_session"></a>
|
|
<p><b>SQLITE_ENABLE_SESSION</b></p><blockquote><p>
|
|
This option enables the <a href="sessionintro.html">session extension</a>.
|
|
</p></blockquote><a name="enable_snapshot"></a>
|
|
<p><b>SQLITE_ENABLE_SNAPSHOT</b></p><blockquote><p>
|
|
This option enables the code to support the <a href="c3ref/snapshot.html">sqlite3_snapshot</a> object
|
|
and its related interfaces:
|
|
<ul>
|
|
<li> <a href="c3ref/snapshot_get.html">sqlite3_snapshot_get()</a> (constructor)
|
|
<li> <a href="c3ref/snapshot_free.html">sqlite3_snapshot_free()</a> (destructor)
|
|
<li> <a href="c3ref/snapshot_open.html">sqlite3_snapshot_open()</a>
|
|
<li> <a href="c3ref/snapshot_cmp.html">sqlite3_snapshot_cmp()</a>
|
|
<li> <a href="c3ref/snapshot_recover.html">sqlite3_snapshot_recover()</a>
|
|
</ul>
|
|
</p></blockquote><a name="enable_sorter_references"></a>
|
|
<p><b>SQLITE_ENABLE_SORTER_REFERENCES</b></p><blockquote><p>
|
|
This option activates an optimization that reduces the memory required
|
|
by the sorter at the cost of doing additional B-tree lookups after
|
|
the sort has occurred.
|
|
<p>
|
|
The default sorting procedure is to gather all information that will
|
|
ultimately be output into a "record" and pass that complete record
|
|
to the sorter. But in some cases, for example if some of the output
|
|
columns consists of large BLOB values, the size of the each record
|
|
can be large, which means that the sorter has to either use more memory,
|
|
and/or write more content to temporary storage.
|
|
<p>
|
|
When SQLITE_ENABLE_SORTER_REFERENCES is enabled, the records passed to
|
|
the sorter often contain only a <a href="lang_createtable.html#rowid">ROWID</a> value. Such records are much
|
|
smaller. This means the sorter has much less "payload" to deal with and
|
|
can run faster. After sorting has occurred, the ROWID is used to look up
|
|
the output column values in the original table. That requires another
|
|
search into the table, and could potentially result in a slowdown. Or,
|
|
it might be a performance win, depending on how large the values are.
|
|
<p>
|
|
Even when the SQLITE_ENABLE_SORTER_REFERENCES compile-time option is on,
|
|
sorter references are still disabled by default. To use sorter references,
|
|
the application must set a sorter reference size threshold using the
|
|
<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsorterrefsize">SQLITE_CONFIG_SORTERREF_SIZE</a>) interface at start-time.
|
|
<p>
|
|
Because the SQLite developers do not know whether the
|
|
SQLITE_ENABLE_SORTER_REFERENCES option will help or hurt performance,
|
|
it is disabled by default at this time (2018-05-04). It might be enabled
|
|
by default in some future release, depending on what is learned about its
|
|
impact on performance.
|
|
</p></blockquote><a name="enable_stmt_scanstatus"></a>
|
|
<p><b>SQLITE_ENABLE_STMT_SCANSTATUS</b></p><blockquote><p>
|
|
This option enables the <a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> interface. The
|
|
<a href="c3ref/stmt_scanstatus.html">sqlite3_stmt_scanstatus()</a> interface is normally omitted from the build
|
|
because it imposes a small performance penalty, even on statements that
|
|
do not use the feature.
|
|
</p></blockquote><a name="enable_stmtvtab"></a>
|
|
<p><b>SQLITE_ENABLE_STMTVTAB</b></p><blockquote><p>
|
|
This compile-time option enables the <a href="stmt.html">SQLITE_STMT virtual table</a> logic.
|
|
</p></blockquote><a name="rtree_int_only"></a>
|
|
<p><b>SQLITE_RTREE_INT_ONLY</b></p><blockquote><p>
|
|
This compile-time option is deprecated and untested.
|
|
</p></blockquote><a name="enable_sqllog"></a>
|
|
<p><b>SQLITE_ENABLE_SQLLOG</b></p><blockquote><p>
|
|
This option enables extra code (especially the <a href="c3ref/c_config_covering_index_scan.html#sqliteconfigsqllog">SQLITE_CONFIG_SQLLOG</a>
|
|
option to <a href="c3ref/config.html">sqlite3_config()</a>) that can be used to create logs of all
|
|
SQLite processing performed by an application. These logs can be useful
|
|
in doing off-line analysis of the behavior of an application, and especially
|
|
for performance analysis. In order for the SQLITE_ENABLE_SQLLOG option to
|
|
be useful, some extra code is required. The
|
|
<a href="http://www.sqlite.org/src/doc/trunk/src/test_sqllog.c">"test_sqllog.c"</a>
|
|
source code
|
|
file in the SQLite source tree is a working example of the required extra
|
|
code. On unix and windows systems, a developer can append the text of the
|
|
"test_sqllog.c" source code file to the end of an "sqlite3.c" amalgamation,
|
|
recompile the application using the -DSQLITE_ENABLE_SQLLOG option, then
|
|
control logging using environment variables. See the header comment on
|
|
the "test_sqllog.c" source file for additional detail.
|
|
</p></blockquote><a name="enable_stat2"></a>
|
|
<p><b>SQLITE_ENABLE_STAT2</b></p><blockquote><p>
|
|
This option used to cause the <a href="lang_analyze.html">ANALYZE</a> command to collect
|
|
index histogram data in the <b>sqlite_stat2</b> table. But that
|
|
functionality was superceded by <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> as of
|
|
SQLite <a href="releaselog/3_7_9.html">version 3.7.9</a> (2011-11-01).
|
|
The SQLITE_ENABLE_STAT2 compile-time option
|
|
is now a no-op.
|
|
</p></blockquote><a name="enable_stat3"></a>
|
|
<p><b>SQLITE_ENABLE_STAT3</b></p><blockquote><p>
|
|
This option used to cause the <a href="lang_analyze.html">ANALYZE</a> command to collect
|
|
index histogram data in the <b>sqlite_stat3</b> table. But that
|
|
functionality was superceded by <a href="compile.html#enable_stat4">SQLITE_ENABLE_STAT4</a> as of
|
|
SQLite <a href="releaselog/3_8_1.html">version 3.8.1</a> (2013-10-17).
|
|
The SQLITE_ENABLE_STAT3 compile-time option
|
|
continued to be supported through <a href="releaselog/3_29_0.html">version 3.29.0</a> (2019-07-10)
|
|
but has now become a no-op.
|
|
<p>
|
|
</p></blockquote><a name="enable_stat4"></a>
|
|
<p><b>SQLITE_ENABLE_STAT4</b></p><blockquote><p>
|
|
This option adds additional logic to the <a href="lang_analyze.html">ANALYZE</a> command and to
|
|
the <a href="optoverview.html">query planner</a> that can help SQLite to chose a better query plan
|
|
under certain situations. The <a href="lang_analyze.html">ANALYZE</a> command is enhanced to collect
|
|
histogram data from all columns of every index and store that data
|
|
in the <a href="fileformat2.html#stat4tab">sqlite_stat4</a> table. The query planner will then use the
|
|
histogram data to help it make better index choices. The downside of
|
|
this compile-time option is that it violates the
|
|
<a href="queryplanner-ng.html#qpstab">query planner stability guarantee</a> making it more difficult to ensure
|
|
consistent performance in mass-produced applications.
|
|
<p>
|
|
SQLITE_ENABLE_STAT4 is an enhancement of <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a>. STAT3
|
|
only recorded histogram data for the left-most column of each index
|
|
whereas the STAT4 enhancement records histogram data from all columns
|
|
of each index.
|
|
The <a href="compile.html#enable_stat3">SQLITE_ENABLE_STAT3</a> compile-time option has become a no-op.
|
|
</p></blockquote><a name="enable_tree_explain"></a>
|
|
<p><b>SQLITE_ENABLE_TREE_EXPLAIN</b></p><blockquote><p>
|
|
This compile-time option is no longer used.
|
|
</p></blockquote><a name="enable_update_delete_limit"></a>
|
|
<p><b>SQLITE_ENABLE_UPDATE_DELETE_LIMIT</b></p><blockquote><p>
|
|
This option enables an optional ORDER BY and LIMIT clause on
|
|
<a href="lang_update.html">UPDATE</a> and <a href="lang_delete.html">DELETE</a> statements.</p>
|
|
|
|
<p> <p>If this option is defined, then it must also be
|
|
defined when using the <a href="lemon.html">Lemon parser generator</a> tool to generate a parse.c
|
|
file. Because of this, this option may only be used when the library is built
|
|
from source, not from the <a href="amalgamation.html">amalgamation</a> or from the collection of
|
|
pre-packaged C files provided for non-Unix like platforms on the website.
|
|
</p>
|
|
</p></blockquote><a name="enable_unknown_sql_function"></a>
|
|
<p><b>SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION</b></p><blockquote><p>
|
|
When the SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION compile-time option is
|
|
activated, SQLite will suppress "unknown function" errors when running
|
|
an <a href="lang_explain.html">EXPLAIN</a> or <a href="eqp.html">EXPLAIN QUERY PLAN</a>. Instead of throwing an error,
|
|
SQLite will insert a substitute no-op function named "unknown()".
|
|
The substitution of "unknown()" in place of unrecognized functions
|
|
only occurs on <a href="lang_explain.html">EXPLAIN</a> and <a href="eqp.html">EXPLAIN QUERY PLAN</a>, not on ordinary
|
|
statements.
|
|
<p>
|
|
When used in the <a href="cli.html">command-line shell</a>, the
|
|
SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION feature allows SQL text that contains
|
|
application-defined functions to be pasted into the shell for
|
|
analysis and debugging without having to create and load an
|
|
extension that implements the application-defined functions.
|
|
</p></blockquote><a name="enable_unlock_notify"></a>
|
|
<p><b>SQLITE_ENABLE_UNLOCK_NOTIFY</b></p><blockquote><p>
|
|
This option enables the <a href="c3ref/unlock_notify.html">sqlite3_unlock_notify()</a> interface and
|
|
its associated functionality. See the documentation titled
|
|
<a href="unlock_notify.html">Using the SQLite Unlock Notification Feature</a> for additional
|
|
information.
|
|
</p></blockquote><a name="introspection_pragmas"></a>
|
|
<p><b>SQLITE_INTROSPECTION_PRAGMAS</b></p><blockquote><p>
|
|
This option is obsolete. It used to enable some extra
|
|
some extra PRAGMA statements such as
|
|
<a href="pragma.html#pragma_function_list">PRAGMA function_list</a>, <a href="pragma.html#pragma_module_list">PRAGMA module_list</a>, and
|
|
<a href="pragma.html#pragma_pragma_list">PRAGMA pragma_list</a>, but those pragmas are now all
|
|
enabled by default. See <a href="compile.html#omit_introspection_pragmas">SQLITE_OMIT_INTROSPECTION_PRAGMAS</a>.
|
|
</p></blockquote><a name="soundex"></a>
|
|
<p><b>SQLITE_SOUNDEX</b></p><blockquote><p>
|
|
This option enables the <a href="lang_corefunc.html#soundex">soundex() SQL function</a>.
|
|
</p></blockquote><a name="use_alloca"></a>
|
|
<p><b>SQLITE_USE_ALLOCA</b></p><blockquote><p>
|
|
If this option is enabled, then the alloca() memory allocator will be
|
|
used in a few situations where it is appropriate. This results in a slightly
|
|
smaller and faster binary. The SQLITE_USE_ALLOCA compile-time only
|
|
works, of course, on systems that support alloca().
|
|
</p></blockquote><a name="use_fcntl_trace"></a>
|
|
<p><b>SQLITE_USE_FCNTL_TRACE</b></p><blockquote><p>
|
|
This option causes SQLite to issue extra <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntltrace">SQLITE_FCNTL_TRACE</a> file controls
|
|
to provide supplementary information to the VFS. The "vfslog.c" extension
|
|
makes use of this to provide enhanced logs of VFS activity.
|
|
</p></blockquote><a name="have_zlib"></a>
|
|
<p><b>SQLITE_HAVE_ZLIB</b></p><blockquote><p>
|
|
This option causes some extensions to link against the
|
|
<a href="https://zlib.net">zlib compression library</a>.
|
|
<p>
|
|
This option has no affect on the SQLite core. It is only used by extensions.
|
|
This is option is necessary for the compression and decompression
|
|
functions that are part of <a href="sqlar.html">SQL Archive</a> support in the
|
|
<a href="cli.html">command-line shell</a>.
|
|
<p>
|
|
When compiling with this option, it will normally
|
|
be necessary to add a linker option to include the zlib library in the
|
|
build. Normal this option is "-lz" but might be different on different
|
|
systems.
|
|
<p>
|
|
When building with MSVC on Windows systems, one can put the zlib source
|
|
code in the compat/zlib subdirectory of the source tree and then add
|
|
the USE_ZLIB=1 option to the nmake command to cause the The Makefile.msc
|
|
to automatically build and use an appropriate zlib library implementation.
|
|
</p></blockquote><a name="yytrackmaxstackdepth"></a>
|
|
<p><b>YYTRACKMAXSTACKDEPTH</b></p><blockquote><p>
|
|
This option causes the LALR(1) parser stack depth to be tracked
|
|
and reported using the <a href="c3ref/status.html">sqlite3_status</a>(<a href="c3ref/c_status_malloc_count.html#sqlitestatusparserstack">SQLITE_STATUS_PARSER_STACK</a>,...)
|
|
interface. SQLite's LALR(1) parser has a fixed stack depth
|
|
(determined at compile-time using the <a href="compile.html#yystackdepth">YYSTACKDEPTH</a> options).
|
|
This option can be used to help determine if an application is
|
|
getting close to exceeding the maximum LALR(1) stack depth.
|
|
</p></blockquote>
|
|
|
|
<a name="disablefeatures"></a>
|
|
<h1 id="_options_to_disable_features_normally_turned_on"><span>8. </span> Options To Disable Features Normally Turned On</h1>
|
|
|
|
<a name="disable_lfs"></a>
|
|
<p><b>SQLITE_DISABLE_LFS</b></p><blockquote><p>
|
|
If this C-preprocessor macro is defined, large file support
|
|
is disabled.
|
|
</p></blockquote><a name="disable_dirsync"></a>
|
|
<p><b>SQLITE_DISABLE_DIRSYNC</b></p><blockquote><p>
|
|
If this C-preprocessor macro is defined, directory syncs
|
|
are disabled. SQLite typically attempts to sync the parent
|
|
directory when a file is deleted to ensure the directory
|
|
entries are updated immediately on disk.
|
|
</p></blockquote><a name="disable_fts3_unicode"></a>
|
|
<p><b>SQLITE_DISABLE_FTS3_UNICODE</b></p><blockquote><p>
|
|
If this C-preprocessor macro is defined, the <a href="fts3.html#unicode61">unicode61</a> tokenizer
|
|
in <a href="fts3.html">FTS3</a> is omitted from the build and is unavailable to
|
|
applications.
|
|
</p></blockquote><a name="disable_fts4_deferred"></a>
|
|
<p><b>SQLITE_DISABLE_FTS4_DEFERRED</b></p><blockquote><p>
|
|
If this C-preprocessor macro disables the "deferred token" optimization
|
|
in <a href="fts3.html#fts4">FTS4</a>. The "deferred token" optimization avoids loading massive
|
|
posting lists for terms that are in most documents of the collection
|
|
and instead simply scans for those tokens in the document source. <a href="fts3.html#fts4">FTS4</a>
|
|
should get exactly the same answer both with and without this optimization.
|
|
</p></blockquote><a name="disable_intrinsic"></a>
|
|
<p><b>SQLITE_DISABLE_INTRINSIC</b></p><blockquote><p>
|
|
This option disables the use of compiler-specific built-in functions
|
|
such as __builtin_bswap32() and __builtin_add_overflow() in GCC and Clang,
|
|
or _byteswap_ulong() and _ReadWriteBarrier() with MSVC.
|
|
</p></blockquote>
|
|
|
|
<a name="omitfeatures"></a>
|
|
|
|
<h1 id="_options_to_omit_features"><span>9. </span> Options To Omit Features</h1>
|
|
|
|
<p>The following options can be used to
|
|
<a href="footprint.html">reduce the size of the compiled library</a>
|
|
by omitting unused features. This is probably only useful
|
|
in embedded systems where space is especially tight, as even with all
|
|
features included the SQLite library is relatively small. Don't forget
|
|
to tell your compiler to optimize for binary size! (the -Os option if
|
|
using GCC). Telling your compiler to optimize for size usually has
|
|
a much larger impact on library footprint than employing any of these
|
|
compile-time options. You should also verify that
|
|
<a href="#debugoptions">debugging options</a> are disabled.</p>
|
|
|
|
<p>The macros in this section do not require values. The following
|
|
compilation switches all have the same effect:<br>
|
|
-DSQLITE_OMIT_ALTERTABLE<br>
|
|
-DSQLITE_OMIT_ALTERTABLE=1<br>
|
|
-DSQLITE_OMIT_ALTERTABLE=0
|
|
</p>
|
|
|
|
<p>If any of these options are defined, then the same set of SQLITE_OMIT_*
|
|
options must also be defined when using the <a href="lemon.html">Lemon parser generator</a>
|
|
tool to generate the
|
|
parse.c file and when compiling the 'mkkeywordhash' tool which generates
|
|
the keywordhash.h file.
|
|
Because of this, these options may only be used when the library is built
|
|
from canonical source, not from the <a href="amalgamation.html">amalgamation</a>.
|
|
Some SQLITE_OMIT_* options might work, or appear to work, when used with
|
|
the <a href="amalgamation.html">amalgamation</a>. But this is not guaranteed. In general, always compile
|
|
from canonical sources in order to take advantage of SQLITE_OMIT_* options.
|
|
</p>
|
|
|
|
<blockquote>
|
|
<i><b>Important Note:</b> The SQLITE_OMIT_* options may not work with the
|
|
<a href="amalgamation.html">amalgamation</a>. SQLITE_OMIT_* compile-time
|
|
options usually work correctly only when SQLite is built from canonical
|
|
source files.
|
|
</i>
|
|
</blockquote>
|
|
|
|
|
|
<p>Special versions of the SQLite amalgamation that do work with a
|
|
predetermined set of SQLITE_OMIT_* options can be generated. To do so,
|
|
make a copy of the Makefile.linux-gcc makefile template in the canonical
|
|
source code distribution. Change the name of your copy to simply "Makefile".
|
|
Then edit "Makefile" to set up appropriate compile-time options. Then
|
|
type:
|
|
</p><div class="codeblock"><pre>make clean; make sqlite3.c
|
|
</pre></div>
|
|
<p>The resulting "sqlite3.c" amalgamation code file (and its associated
|
|
header file "sqlite3.h") can then be moved to a non-unix platform
|
|
for final compilation using a native compiler.</p>
|
|
|
|
<p>The SQLITE_OMIT_* options are unsupported. By this we mean that
|
|
an SQLITE_OMIT_* option that omits code from the build in the current
|
|
release might become a no-op in the next release. Or the other way around:
|
|
an SQLITE_OMIT_* that is a no-op in the current release might cause code
|
|
to be excluded in the next release. Also, not all SQLITE_OMIT_* options
|
|
are tested. Some SQLITE_OMIT_* options might cause SQLite to malfunction
|
|
and/or provide incorrect answers.
|
|
|
|
</p><blockquote>
|
|
<i><b>Important Note:</b>
|
|
The SQLITE_OMIT_* compile-time options are mostly unsupported.
|
|
</i></blockquote>
|
|
|
|
<p>The following are the available OMIT options:
|
|
|
|
<a name="omit_altertable"></a>
|
|
<p><b>SQLITE_OMIT_ALTERTABLE</b></p><blockquote><p>
|
|
When this option is defined, the
|
|
<a href="lang_altertable.html">ALTER TABLE</a> command is not included in the
|
|
library. Executing an <a href="lang_altertable.html">ALTER TABLE</a> statement causes a parse error.
|
|
</p></blockquote><a name="omit_analyze"></a>
|
|
<p><b>SQLITE_OMIT_ANALYZE</b></p><blockquote><p>
|
|
When this option is defined, the <a href="lang_analyze.html">ANALYZE</a> command is omitted from
|
|
the build.
|
|
</p></blockquote><a name="omit_attach"></a>
|
|
<p><b>SQLITE_OMIT_ATTACH</b></p><blockquote><p>
|
|
When this option is defined, the <a href="lang_attach.html">ATTACH</a> and <a href="lang_detach.html">DETACH</a> commands are
|
|
omitted from the build.
|
|
</p></blockquote><a name="omit_authorization"></a>
|
|
<p><b>SQLITE_OMIT_AUTHORIZATION</b></p><blockquote><p>
|
|
Defining this option omits the authorization callback feature from the
|
|
library. The <a href="c3ref/set_authorizer.html">sqlite3_set_authorizer()</a> API function is not present
|
|
in the library.
|
|
</p></blockquote><a name="omit_autoincrement"></a>
|
|
<p><b>SQLITE_OMIT_AUTOINCREMENT</b></p><blockquote><p>
|
|
This option is omits the <a href="autoinc.html">AUTOINCREMENT</a> feature.
|
|
When this is macro is defined, columns declared as
|
|
"<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> AUTOINCREMENT"
|
|
behave in the same way as columns declared as "<a href="lang_createtable.html#rowid">INTEGER PRIMARY KEY</a>" when a
|
|
NULL is inserted. The sqlite_sequence system table is neither created, nor
|
|
respected if it already exists.
|
|
</p></blockquote><a name="omit_autoinit"></a>
|
|
<p><b>SQLITE_OMIT_AUTOINIT</b></p><blockquote><p>
|
|
For backwards compatibility with older versions of SQLite that lack
|
|
the <a href="c3ref/initialize.html">sqlite3_initialize()</a> interface, the <a href="c3ref/initialize.html">sqlite3_initialize()</a> interface
|
|
is called automatically upon entry to certain key interfaces such as
|
|
<a href="c3ref/open.html">sqlite3_open()</a>, <a href="c3ref/vfs_find.html">sqlite3_vfs_register()</a>, and <a href="c3ref/mprintf.html">sqlite3_mprintf()</a>.
|
|
The overhead of invoking <a href="c3ref/initialize.html">sqlite3_initialize()</a> automatically in this
|
|
way may be omitted by building SQLite with the SQLITE_OMIT_AUTOINIT
|
|
C-preprocessor macro. When built using SQLITE_OMIT_AUTOINIT, SQLite
|
|
will not automatically initialize itself and the application is required
|
|
to invoke <a href="c3ref/initialize.html">sqlite3_initialize()</a> directly prior to beginning use of the
|
|
SQLite library.
|
|
</p></blockquote><a name="omit_automatic_index"></a>
|
|
<p><b>SQLITE_OMIT_AUTOMATIC_INDEX</b></p><blockquote><p>
|
|
This option is used to omit the
|
|
<a href="optoverview.html#autoindex">automatic indexing</a> functionality.
|
|
See also: <a href="compile.html#default_automatic_index">SQLITE_DEFAULT_AUTOMATIC_INDEX</a>.
|
|
</p></blockquote><a name="omit_autoreset"></a>
|
|
<p><b>SQLITE_OMIT_AUTORESET</b></p><blockquote><p>
|
|
By default, the <a href="c3ref/step.html">sqlite3_step()</a> interface will automatically invoke
|
|
<a href="c3ref/reset.html">sqlite3_reset()</a> to reset the <a href="c3ref/stmt.html">prepared statement</a> if necessary. This
|
|
compile-time option changes that behavior so that <a href="c3ref/step.html">sqlite3_step()</a> will
|
|
return <a href="rescode.html#misuse">SQLITE_MISUSE</a> if it called again after returning anything other
|
|
than <a href="rescode.html#row">SQLITE_ROW</a>, <a href="rescode.html#busy">SQLITE_BUSY</a>, or <a href="rescode.html#locked">SQLITE_LOCKED</a> unless there was an
|
|
intervening call to <a href="c3ref/reset.html">sqlite3_reset()</a>.</p>
|
|
|
|
<p> In SQLite <a href="releaselog/3_6_23_1.html">version 3.6.23.1</a> (2010-03-26)
|
|
and earlier, <a href="c3ref/step.html">sqlite3_step()</a> used to always
|
|
return <a href="rescode.html#misuse">SQLITE_MISUSE</a> if it was invoked again after returning anything
|
|
other than <a href="rescode.html#row">SQLITE_ROW</a> without an intervening call to <a href="c3ref/reset.html">sqlite3_reset()</a>.
|
|
This caused problems on some poorly written smartphone applications which
|
|
did not correctly handle the <a href="rescode.html#locked">SQLITE_LOCKED</a> and <a href="rescode.html#busy">SQLITE_BUSY</a> error
|
|
returns. Rather than fix the many defective smartphone applications,
|
|
the behavior of SQLite was changed in 3.6.23.2 to automatically reset
|
|
the prepared statement. But that changed caused issues in other
|
|
improperly implemented applications that were actually looking
|
|
for an <a href="rescode.html#misuse">SQLITE_MISUSE</a> return to terminate their query loops. (Anytime
|
|
an application gets an SQLITE_MISUSE error code from SQLite, that means the
|
|
application is misusing the SQLite interface and is thus incorrectly
|
|
implemented.) The SQLITE_OMIT_AUTORESET interface was added to SQLite
|
|
<a href="releaselog/3_7_5.html">version 3.7.5</a> (2011-02-01) in an effort to get all of the (broken)
|
|
applications to work again without having to actually fix the applications.
|
|
</p></blockquote><a name="omit_autovacuum"></a>
|
|
<p><b>SQLITE_OMIT_AUTOVACUUM</b></p><blockquote><p>
|
|
If this option is defined, the library cannot create or write to
|
|
databases that support <a href="pragma.html#pragma_auto_vacuum">auto_vacuum</a>.
|
|
Executing a <a href="pragma.html#pragma_auto_vacuum">PRAGMA auto_vacuum</a> statement is not an error
|
|
(since unknown PRAGMAs are silently ignored), but does not return a value
|
|
or modify the auto-vacuum flag in the database file. If a database that
|
|
supports auto-vacuum is opened by a library compiled with this option, it
|
|
is automatically opened in read-only mode.
|
|
</p></blockquote><a name="omit_between_optimization"></a>
|
|
<p><b>SQLITE_OMIT_BETWEEN_OPTIMIZATION</b></p><blockquote><p>
|
|
This option disables the use of indices with WHERE clause terms
|
|
that employ the BETWEEN operator.
|
|
</p></blockquote><a name="omit_blob_literal"></a>
|
|
<p><b>SQLITE_OMIT_BLOB_LITERAL</b></p><blockquote><p>
|
|
When this option is defined, it is not possible to specify a blob in
|
|
an SQL statement using the X'ABCD' syntax.
|
|
</p></blockquote><a name="omit_btreecount"></a>
|
|
<p><b>SQLITE_OMIT_BTREECOUNT</b></p><blockquote><p>
|
|
This option is no longer used for anything. It is a no-op.
|
|
</p></blockquote><a name="omit_builtin_test"></a>
|
|
<p><b>SQLITE_OMIT_BUILTIN_TEST</b></p><blockquote><p>
|
|
This compile-time option has been renamed to <a href="compile.html#untestable">SQLITE_UNTESTABLE</a>.
|
|
</p></blockquote><a name="omit_case_sensitive_like_pragma"></a>
|
|
<p><b>SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA</b></p><blockquote><p>
|
|
This compile-time option disables the <a href="pragma.html#pragma_case_sensitive_like">PRAGMA case_sensitive_like</a>
|
|
command.
|
|
</p></blockquote><a name="omit_cast"></a>
|
|
<p><b>SQLITE_OMIT_CAST</b></p><blockquote><p>
|
|
This option causes SQLite to omit support for the CAST operator.
|
|
</p></blockquote><a name="omit_check"></a>
|
|
<p><b>SQLITE_OMIT_CHECK</b></p><blockquote><p>
|
|
This option causes SQLite to omit support for CHECK constraints.
|
|
The parser will still accept CHECK constraints in SQL statements,
|
|
they will just not be enforced.
|
|
</p></blockquote><a name="omit_compileoption_diags"></a>
|
|
<p><b>SQLITE_OMIT_COMPILEOPTION_DIAGS</b></p><blockquote><p>
|
|
This option is used to omit the compile-time option diagnostics available
|
|
in SQLite, including the <a href="c3ref/compileoption_get.html">sqlite3_compileoption_used()</a> and
|
|
<a href="c3ref/compileoption_get.html">sqlite3_compileoption_get()</a> C/C++ functions, the
|
|
<a href="lang_corefunc.html#sqlite_compileoption_used">sqlite_compileoption_used()</a> and <a href="lang_corefunc.html#sqlite_compileoption_get">sqlite_compileoption_get()</a> SQL functions,
|
|
and the <a href="pragma.html#pragma_compile_options">compile_options pragma</a>.
|
|
</p></blockquote><a name="omit_complete"></a>
|
|
<p><b>SQLITE_OMIT_COMPLETE</b></p><blockquote><p>
|
|
This option causes the <a href="c3ref/complete.html">sqlite3_complete()</a> and <a href="c3ref/complete.html">sqlite3_complete16()</a>
|
|
interfaces to be omitted.
|
|
</p></blockquote><a name="omit_compound_select"></a>
|
|
<p><b>SQLITE_OMIT_COMPOUND_SELECT</b></p><blockquote><p>
|
|
This option is used to omit the compound <a href="lang_select.html">SELECT</a> functionality.
|
|
<a href="lang_select.html">SELECT</a> statements that use the
|
|
UNION, UNION ALL, INTERSECT or EXCEPT compound SELECT operators will
|
|
cause a parse error.</p>
|
|
|
|
<p> An <a href="lang_insert.html">INSERT</a> statement with multiple values in the VALUES clause is
|
|
implemented internally as a compound SELECT. Hence, this option also
|
|
disables the ability to insert more than a single row using an
|
|
INSERT INTO ... VALUES ... statement.
|
|
</p></blockquote><a name="omit_cte"></a>
|
|
<p><b>SQLITE_OMIT_CTE</b></p><blockquote><p>
|
|
This option causes support for <a href="lang_with.html">common table expressions</a> to be omitted.
|
|
</p></blockquote><a name="omit_datetime_funcs"></a>
|
|
<p><b>SQLITE_OMIT_DATETIME_FUNCS</b></p><blockquote><p>
|
|
If this option is defined, SQLite's built-in date and time manipulation
|
|
functions are omitted. Specifically, the SQL functions julianday(), date(),
|
|
time(), datetime() and strftime() are not available. The default column
|
|
values CURRENT_TIME, CURRENT_DATE and CURRENT_TIMESTAMP are still available.
|
|
</p></blockquote><a name="omit_decltype"></a>
|
|
<p><b>SQLITE_OMIT_DECLTYPE</b></p><blockquote><p>
|
|
This option causes SQLite to omit support for the
|
|
<a href="c3ref/column_decltype.html">sqlite3_column_decltype()</a> and <a href="c3ref/column_decltype.html">sqlite3_column_decltype16()</a>
|
|
interfaces.
|
|
</p></blockquote><a name="omit_deprecated"></a>
|
|
<p><b>SQLITE_OMIT_DEPRECATED</b></p><blockquote><p>
|
|
This option causes SQLite to omit support for interfaces
|
|
marked as deprecated. This includes
|
|
<a href="c3ref/aggregate_count.html">sqlite3_aggregate_count()</a>,
|
|
<a href="c3ref/aggregate_count.html">sqlite3_expired()</a>,
|
|
<a href="c3ref/aggregate_count.html">sqlite3_transfer_bindings()</a>,
|
|
<a href="c3ref/aggregate_count.html">sqlite3_global_recover()</a>,
|
|
<a href="c3ref/aggregate_count.html">sqlite3_thread_cleanup()</a> and
|
|
<a href="c3ref/aggregate_count.html">sqlite3_memory_alarm()</a> interfaces and
|
|
<a href="pragma.html#syntax">PRAGMA</a> statements <a href="pragma.html#pragma_count_changes">PRAGMA count_changes</a>,
|
|
<a href="pragma.html#pragma_data_store_directory">PRAGMA data_store_directory</a>,
|
|
<a href="pragma.html#pragma_default_cache_size">PRAGMA default_cache_size</a>,
|
|
<a href="pragma.html#pragma_empty_result_callbacks">PRAGMA empty_result_callbacks</a>,
|
|
<a href="pragma.html#pragma_full_column_names">PRAGMA full_column_names</a>,
|
|
<a href="pragma.html#pragma_short_column_names">PRAGMA short_column_names</a>, and
|
|
<a href="pragma.html#pragma_temp_store_directory">PRAGMA temp_store_directory</a>.
|
|
</p></blockquote><a name="omit_diskio"></a>
|
|
<p><b>SQLITE_OMIT_DISKIO</b></p><blockquote><p>
|
|
This option omits all support for writing to the disk and forces
|
|
databases to exist in memory only. This option has not been
|
|
maintained and probably does not work with newer versions of SQLite.
|
|
</p></blockquote><a name="omit_explain"></a>
|
|
<p><b>SQLITE_OMIT_EXPLAIN</b></p><blockquote><p>
|
|
Defining this option causes the <a href="lang_explain.html">EXPLAIN</a> command to be omitted from the
|
|
library. Attempting to execute an <a href="lang_explain.html">EXPLAIN</a> statement will cause a parse
|
|
error.
|
|
</p></blockquote><a name="omit_flag_pragmas"></a>
|
|
<p><b>SQLITE_OMIT_FLAG_PRAGMAS</b></p><blockquote><p>
|
|
This option omits support for a subset of <a href="pragma.html#syntax">PRAGMA</a> commands that
|
|
query and set boolean properties.
|
|
</p></blockquote><a name="omit_floating_point"></a>
|
|
<p><b>SQLITE_OMIT_FLOATING_POINT</b></p><blockquote><p>
|
|
This option is used to omit floating-point number support from the SQLite
|
|
library. When specified, specifying a floating point number as a literal
|
|
(i.e. "1.01") results in a parse error.</p>
|
|
|
|
<p> <p>In the future, this option may also disable other floating point
|
|
functionality, for example the <a href="c3ref/result_blob.html">sqlite3_result_double()</a>,
|
|
<a href="c3ref/bind_blob.html">sqlite3_bind_double()</a>, <a href="c3ref/value_blob.html">sqlite3_value_double()</a> and
|
|
<a href="c3ref/column_blob.html">sqlite3_column_double()</a> API functions.
|
|
</p>
|
|
</p></blockquote><a name="omit_foreign_key"></a>
|
|
<p><b>SQLITE_OMIT_FOREIGN_KEY</b></p><blockquote><p>
|
|
If this option is defined, then <a href="foreignkeys.html">foreign key constraint</a> syntax is
|
|
not recognized.
|
|
</p></blockquote><a name="omit_generated_columns"></a>
|
|
<p><b>SQLITE_OMIT_GENERATED_COLUMNS</b></p><blockquote><p>
|
|
If this option is defined, then <a href="gencol.html">generated column</a> syntax is
|
|
not recognized.
|
|
</p></blockquote><a name="omit_get_table"></a>
|
|
<p><b>SQLITE_OMIT_GET_TABLE</b></p><blockquote><p>
|
|
This option causes support for <a href="c3ref/free_table.html">sqlite3_get_table()</a> and
|
|
<a href="c3ref/free_table.html">sqlite3_free_table()</a> to be omitted.
|
|
</p></blockquote><a name="omit_hex_integer"></a>
|
|
<p><b>SQLITE_OMIT_HEX_INTEGER</b></p><blockquote><p>
|
|
This option omits support for <a href="lang_expr.html#hexint">hexadecimal integer literals</a>.
|
|
</p></blockquote><a name="omit_incrblob"></a>
|
|
<p><b>SQLITE_OMIT_INCRBLOB</b></p><blockquote><p>
|
|
This option causes support for <a href="c3ref/blob.html">incremental BLOB I/O</a>
|
|
to be omitted.
|
|
</p></blockquote><a name="omit_integrity_check"></a>
|
|
<p><b>SQLITE_OMIT_INTEGRITY_CHECK</b></p><blockquote><p>
|
|
This option omits support for the <a href="pragma.html#pragma_integrity_check">integrity_check pragma</a>.
|
|
</p></blockquote><a name="omit_introspection_pragmas"></a>
|
|
<p><b>SQLITE_OMIT_INTROSPECTION_PRAGMAS</b></p><blockquote><p>
|
|
This option omits support for
|
|
<a href="pragma.html#pragma_function_list">PRAGMA function_list</a>, <a href="pragma.html#pragma_module_list">PRAGMA module_list</a>, and
|
|
<a href="pragma.html#pragma_pragma_list">PRAGMA pragma_list</a>.
|
|
</p></blockquote><a name="omit_like_optimization"></a>
|
|
<p><b>SQLITE_OMIT_LIKE_OPTIMIZATION</b></p><blockquote><p>
|
|
This option disables the ability of SQLite to use indices to help
|
|
resolve <a href="lang_expr.html#like">LIKE</a> and <a href="lang_expr.html#glob">GLOB</a> operators in a WHERE clause.
|
|
</p></blockquote><a name="omit_load_extension"></a>
|
|
<p><b>SQLITE_OMIT_LOAD_EXTENSION</b></p><blockquote><p>
|
|
This option omits the entire extension loading mechanism from
|
|
SQLite, including <a href="c3ref/enable_load_extension.html">sqlite3_enable_load_extension()</a> and
|
|
<a href="c3ref/load_extension.html">sqlite3_load_extension()</a> interfaces.
|
|
</p></blockquote><a name="omit_localtime"></a>
|
|
<p><b>SQLITE_OMIT_LOCALTIME</b></p><blockquote><p>
|
|
This option omits the "localtime" modifier from the date and time
|
|
functions. This option is sometimes useful when trying to compile
|
|
the date and time functions on a platform that does not support the
|
|
concept of local time.
|
|
</p></blockquote><a name="omit_lookaside"></a>
|
|
<p><b>SQLITE_OMIT_LOOKASIDE</b></p><blockquote><p>
|
|
This option omits the <a href="malloc.html#lookaside">lookaside memory allocator</a>.
|
|
</p></blockquote><a name="omit_memorydb"></a>
|
|
<p><b>SQLITE_OMIT_MEMORYDB</b></p><blockquote><p>
|
|
When this is defined, the library does not respect the special database
|
|
name ":memory:" (normally used to create an <a href="inmemorydb.html">in-memory database</a>). If
|
|
":memory:" is passed to <a href="c3ref/open.html">sqlite3_open()</a>, <a href="c3ref/open.html">sqlite3_open16()</a>, or
|
|
<a href="c3ref/open.html">sqlite3_open_v2()</a>, a file with this name will be
|
|
opened or created.
|
|
</p></blockquote><a name="omit_or_optimization"></a>
|
|
<p><b>SQLITE_OMIT_OR_OPTIMIZATION</b></p><blockquote><p>
|
|
This option disables the ability of SQLite to use an index together
|
|
with terms of a WHERE clause connected by the OR operator.
|
|
</p></blockquote><a name="omit_pager_pragmas"></a>
|
|
<p><b>SQLITE_OMIT_PAGER_PRAGMAS</b></p><blockquote><p>
|
|
Defining this option omits pragmas related to the pager subsystem from
|
|
the build.
|
|
</p></blockquote><a name="omit_pragma"></a>
|
|
<p><b>SQLITE_OMIT_PRAGMA</b></p><blockquote><p>
|
|
This option is used to omit the <a href="pragma.html#syntax">PRAGMA</a> command
|
|
from the library. Note that it is useful to define the macros that omit
|
|
specific pragmas in addition to this, as they may also remove supporting code
|
|
in other sub-systems. This macro removes the <a href="pragma.html#syntax">PRAGMA</a> command only.
|
|
</p></blockquote><a name="omit_progress_callback"></a>
|
|
<p><b>SQLITE_OMIT_PROGRESS_CALLBACK</b></p><blockquote><p>
|
|
This option may be defined to omit the capability to issue "progress"
|
|
callbacks during long-running SQL statements. The
|
|
<a href="c3ref/progress_handler.html">sqlite3_progress_handler()</a>
|
|
API function is not present in the library.
|
|
</p></blockquote><a name="omit_quickbalance"></a>
|
|
<p><b>SQLITE_OMIT_QUICKBALANCE</b></p><blockquote><p>
|
|
This option omits an alternative, faster B-Tree balancing routine.
|
|
Using this option makes SQLite slightly smaller at the expense of
|
|
making it run slightly slower.
|
|
</p></blockquote><a name="omit_reindex"></a>
|
|
<p><b>SQLITE_OMIT_REINDEX</b></p><blockquote><p>
|
|
When this option is defined, the <a href="lang_reindex.html">REINDEX</a>
|
|
command is not included in the library.
|
|
Executing a <a href="lang_reindex.html">REINDEX</a> statement causes
|
|
a parse error.
|
|
</p></blockquote><a name="omit_schema_pragmas"></a>
|
|
<p><b>SQLITE_OMIT_SCHEMA_PRAGMAS</b></p><blockquote><p>
|
|
Defining this option omits pragmas for querying the database schema from
|
|
the build.
|
|
</p></blockquote><a name="omit_schema_version_pragmas"></a>
|
|
<p><b>SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS</b></p><blockquote><p>
|
|
Defining this option omits pragmas for querying and modifying the
|
|
database schema version and user version from the build. Specifically, the
|
|
<a href="pragma.html#pragma_schema_version">schema_version</a> and <a href="pragma.html#pragma_user_version">user_version</a> PRAGMAs are omitted.
|
|
</p></blockquote><a name="omit_shared_cache"></a>
|
|
<p><b>SQLITE_OMIT_SHARED_CACHE</b></p><blockquote><p>
|
|
This option builds SQLite without support for shared-cache mode.
|
|
The <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> is omitted along with a fair
|
|
amount of logic within the B-Tree subsystem associated with shared
|
|
cache management.
|
|
</p></blockquote><a name="omit_subquery"></a>
|
|
<p><b>SQLITE_OMIT_SUBQUERY</b></p><blockquote><p>
|
|
If defined, support for sub-selects and the IN() operator are omitted.
|
|
</p></blockquote><a name="omit_tcl_variable"></a>
|
|
<p><b>SQLITE_OMIT_TCL_VARIABLE</b></p><blockquote><p>
|
|
If this macro is defined, then the special "$<variable-name>" syntax
|
|
used to automatically bind SQL variables to TCL variables is omitted.
|
|
</p></blockquote><a name="omit_tempdb"></a>
|
|
<p><b>SQLITE_OMIT_TEMPDB</b></p><blockquote><p>
|
|
This option omits support for TEMP or TEMPORARY tables.
|
|
</p></blockquote><a name="omit_trace"></a>
|
|
<p><b>SQLITE_OMIT_TRACE</b></p><blockquote><p>
|
|
This option omits support for the <a href="c3ref/profile.html">sqlite3_profile()</a> and
|
|
<a href="c3ref/profile.html">sqlite3_trace()</a> interfaces and their associated logic.
|
|
</p></blockquote><a name="omit_trigger"></a>
|
|
<p><b>SQLITE_OMIT_TRIGGER</b></p><blockquote><p>
|
|
Defining this option omits support for TRIGGER objects. Neither the
|
|
<a href="lang_createtrigger.html">CREATE TRIGGER</a> or <a href="lang_droptrigger.html">DROP TRIGGER</a>
|
|
commands are available in this case, and attempting to execute
|
|
either will result in a parse error.
|
|
This option also disables enforcement of <a href="foreignkeys.html">foreign key constraints</a>,
|
|
since the code that implements triggers and which is omitted by this
|
|
option is also used to implement <a href="foreignkeys.html#fk_actions">foreign key actions</a>.
|
|
</p></blockquote><a name="omit_truncate_optimization"></a>
|
|
<p><b>SQLITE_OMIT_TRUNCATE_OPTIMIZATION</b></p><blockquote><p>
|
|
A default build of SQLite, if a <a href="lang_delete.html">DELETE</a> statement has no WHERE clause
|
|
and operates on a table with no triggers, an optimization occurs that
|
|
causes the DELETE to occur by dropping and recreating the table.
|
|
Dropping and recreating a table is usually much faster than deleting
|
|
the table content row by row. This is the "truncate optimization".
|
|
</p></blockquote><a name="omit_utf16"></a>
|
|
<p><b>SQLITE_OMIT_UTF16</b></p><blockquote><p>
|
|
This macro is used to omit support for UTF16 text encoding. When this is
|
|
defined all API functions that return or accept UTF16 encoded text are
|
|
unavailable. These functions can be identified by the fact that they end
|
|
with '16', for example <a href="c3ref/prepare.html">sqlite3_prepare16()</a>, <a href="c3ref/column_blob.html">sqlite3_column_text16()</a> and
|
|
<a href="c3ref/bind_blob.html">sqlite3_bind_text16()</a>.
|
|
</p></blockquote><a name="omit_vacuum"></a>
|
|
<p><b>SQLITE_OMIT_VACUUM</b></p><blockquote><p>
|
|
When this option is defined, the <a href="lang_vacuum.html">VACUUM</a>
|
|
command is not included in the library.
|
|
Executing a <a href="lang_vacuum.html">VACUUM</a> statement causes
|
|
a parse error.
|
|
</p></blockquote><a name="omit_view"></a>
|
|
<p><b>SQLITE_OMIT_VIEW</b></p><blockquote><p>
|
|
Defining this option omits support for VIEW objects. Neither the
|
|
<a href="lang_createview.html">CREATE VIEW</a> nor the <a href="lang_dropview.html">DROP VIEW</a>
|
|
commands are available in this case, and
|
|
attempting to execute either will result in a parse error.</p>
|
|
|
|
<p> WARNING: If this macro is defined, it will not be possible to open a database
|
|
for which the schema contains VIEW objects.
|
|
</p></blockquote><a name="omit_virtualtable"></a>
|
|
<p><b>SQLITE_OMIT_VIRTUALTABLE</b></p><blockquote><p>
|
|
This option omits support for the <a href="c3ref/vtab.html">Virtual Table</a>
|
|
mechanism in SQLite.
|
|
</p></blockquote><a name="omit_wal"></a>
|
|
<p><b>SQLITE_OMIT_WAL</b></p><blockquote><p>
|
|
This option omits the "<a href="wal.html">write-ahead log</a>" (a.k.a. "<a href="wal.html">WAL</a>") capability.
|
|
</p></blockquote><a name="omit_wsd"></a>
|
|
<p><b>SQLITE_OMIT_WSD</b></p><blockquote><p>
|
|
This option builds a version of the SQLite library that contains no
|
|
Writable Static Data (WSD). WSD is global variables and/or static
|
|
variables. Some platforms do not support WSD, and this option is necessary
|
|
in order for SQLite to work those platforms. </p>
|
|
|
|
<p> Unlike other OMIT options which make the SQLite library smaller,
|
|
this option actually increases the size of SQLite and makes it run
|
|
a little slower. Only use this option if SQLite is being built for an
|
|
embedded target that does not support WSD.
|
|
</p></blockquote><a name="omit_xfer_opt"></a>
|
|
<p><b>SQLITE_OMIT_XFER_OPT</b></p><blockquote><p>
|
|
This option omits support for optimizations that help statements
|
|
of the form "INSERT INTO ... SELECT ..." run faster.
|
|
</p></blockquote><a name="untestable"></a>
|
|
<p><b>SQLITE_UNTESTABLE</b></p><blockquote><p>
|
|
A standard SQLite build includes a small amount of logic associated
|
|
with <a href="c3ref/test_control.html">sqlite3_test_control()</a> to exercise
|
|
parts of the SQLite core that are otherwise difficult to validate.
|
|
This compile-time option omits that extra testing logic. This
|
|
compile-time option was called "SQLITE_OMIT_BUILTIN_TEST" prior
|
|
to SQLite version 3.16.0 (2017-01-02). The name was changed
|
|
to better describe the implications of using it.
|
|
<p>
|
|
Setting this compile-time option prevents SQLite from being fully
|
|
testable. Branch test coverage drops from 100% down to about 95%.
|
|
<p>
|
|
SQLite developers follow the NASA principle of
|
|
"fly what you test and test what you fly". This principle is violated
|
|
if this option is enabled for delivery but disabled for testing.
|
|
But if this option is enabled during testing, not all branches are
|
|
reachable. Therefore, the use of this compile-time option is discouraged.
|
|
</p></blockquote><a name="zero_malloc"></a>
|
|
<p><b>SQLITE_ZERO_MALLOC</b></p><blockquote><p>
|
|
This option omits both the <a href="malloc.html#defaultalloc">default memory allocator</a> and the
|
|
<a href="malloc.html#memdebug">debugging memory allocator</a> from the build and substitutes a stub
|
|
memory allocator that always fails. SQLite will not run with this
|
|
stub memory allocator since it will be unable to allocate memory. But
|
|
this stub can be replaced at start-time using
|
|
<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmalloc">SQLITE_CONFIG_MALLOC</a>,...) or
|
|
<a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigheap">SQLITE_CONFIG_HEAP</a>,...).
|
|
So the net effect of this compile-time option is that it allows SQLite
|
|
to be compiled and linked against a system library that does not support
|
|
malloc(), free(), and/or realloc().
|
|
</p></blockquote>
|
|
<a name="debugoptions"></a>
|
|
</p><h1 id="_analysis_and_debugging_options"><span>10. </span> Analysis and Debugging Options</h1>
|
|
<a name="debug"></a>
|
|
<p><b>SQLITE_DEBUG</b></p><blockquote><p>
|
|
The SQLite source code contains literally thousands of assert() statements
|
|
used to verify internal assumptions and subroutine preconditions and
|
|
postconditions. These assert() statements are normally turned off
|
|
(they generate no code) since turning them on makes SQLite run approximately
|
|
three times slower. But for testing and analysis, it is useful to turn
|
|
the assert() statements on. The SQLITE_DEBUG compile-time option does this.
|
|
<p>SQLITE_DEBUG also enables some other debugging features, such as
|
|
special <a href="pragma.html#syntax">PRAGMA</a> statements that turn on tracing and listing features
|
|
used for troubleshooting and analysis of the <a href="opcode.html">VDBE</a> and code generator.
|
|
</p></blockquote><a name="memdebug"></a>
|
|
<p><b>SQLITE_MEMDEBUG</b></p><blockquote><p>
|
|
The SQLITE_MEMDEBUG option causes an instrumented
|
|
<a href="malloc.html#memdebug">debugging memory allocator</a>
|
|
to be used as the default memory allocator within SQLite. The
|
|
instrumented memory allocator checks for misuse of dynamically allocated
|
|
memory. Examples of misuse include using memory after it is freed,
|
|
writing off the ends of a memory allocation, freeing memory not previously
|
|
obtained from the memory allocator, or failing to initialize newly
|
|
allocated memory.
|
|
</p></blockquote>
|
|
<a name="win32options"></a>
|
|
<h1 id="_windows_specific_options"><span>11. </span> Windows-Specific Options</h1>
|
|
<a name="win32_heap_create"></a>
|
|
<p><b>SQLITE_WIN32_HEAP_CREATE</b></p><blockquote><p>
|
|
This option forces the Win32 native memory allocator, when enabled, to
|
|
create a private heap to hold all memory allocations.
|
|
</p></blockquote><a name="win32_malloc_validate"></a>
|
|
<p><b>SQLITE_WIN32_MALLOC_VALIDATE</b></p><blockquote><p>
|
|
This option forces the Win32 native memory allocator, when enabled, to
|
|
make strategic calls into the HeapValidate() function if assert() is also
|
|
enabled.
|
|
</p></blockquote>
|
|
<a name="linkage"></a>
|
|
<h1 id="compiler_linkage_control"><span>12. </span>Compiler Linkage Control</h1>
|
|
|
|
<p>The following macros specify
|
|
interface linkage for certain kinds of SQLite builds. The Makefiles will normally
|
|
handle setting these macros automatically. Application developers should
|
|
not need to worry with these macros. The following documentation about these
|
|
macros is included completeness.</p>
|
|
|
|
<a name="api"></a>
|
|
<p><b>SQLITE_API</b></p><blockquote><p>
|
|
This macro identifies an externally visible interface for SQLite.
|
|
This macro is sometimes set to "extern". But the definition is
|
|
compiler-specific.
|
|
</p></blockquote><a name="apicall"></a>
|
|
<p><b>SQLITE_APICALL</b></p><blockquote><p>
|
|
This macro identifies the calling convention used by public interface
|
|
routines in SQLite. This macro is normally defined to be nothing,
|
|
though on Windows builds it can sometimes be set to "__cdecl" or "__stdcall".
|
|
The "__cdecl" setting is the default, but "__stdcall" is used when SQLite
|
|
is intended to be compiled as a Windows system library.
|
|
<p>
|
|
A single function declaration should contain no more than one of
|
|
the following: <a href="compile.html#apicall">SQLITE_APICALL</a>, <a href="compile.html#callback">SQLITE_CALLBACK</a>, <a href="compile.html#cdecl">SQLITE_CDECL</a>,
|
|
or <a href="compile.html#syscall">SQLITE_SYSCALL</a>.
|
|
</p></blockquote><a name="callback"></a>
|
|
<p><b>SQLITE_CALLBACK</b></p><blockquote><p>
|
|
This macro specifies the calling convention used by callback pointers
|
|
in SQLite. This macro is normally defined to be nothing, though on Windows
|
|
builds it can sometimes be set to "__cdecl" or "__stdcall". The
|
|
"__cdecl" setting is the default, but "__stdcall" is used when SQLite
|
|
is intended to be compiled as a Windows system library.
|
|
<p>
|
|
A single function declaration should contain no more than one of
|
|
the following: <a href="compile.html#apicall">SQLITE_APICALL</a>, <a href="compile.html#callback">SQLITE_CALLBACK</a>, <a href="compile.html#cdecl">SQLITE_CDECL</a>,
|
|
or <a href="compile.html#syscall">SQLITE_SYSCALL</a>.
|
|
</p></blockquote><a name="cdecl"></a>
|
|
<p><b>SQLITE_CDECL</b></p><blockquote><p>
|
|
This macro specifies the calling convention used by varargs interface
|
|
routines in SQLite. This macro is normally defined to be nothing,
|
|
though on Windows builds it can sometimes be set to "__cdecl". This
|
|
macro is used on varargs routines and so cannot be set to "__stdcall"
|
|
since the __stdcall calling convention does not support varargs functions.
|
|
<p>
|
|
A single function declaration should contain no more than one of
|
|
the following: <a href="compile.html#apicall">SQLITE_APICALL</a>, <a href="compile.html#callback">SQLITE_CALLBACK</a>, <a href="compile.html#cdecl">SQLITE_CDECL</a>,
|
|
or <a href="compile.html#syscall">SQLITE_SYSCALL</a>.
|
|
</p></blockquote><a name="syscall"></a>
|
|
<p><b>SQLITE_SYSCALL</b></p><blockquote><p>
|
|
This macro identifies the calling convention used by operating system
|
|
interfaces for target the platform for an SQLite build.
|
|
This macro is normally defined to be nothing, though on Windows
|
|
builds it can sometimes be set to "__stdcall".
|
|
<p>
|
|
A single function declaration should contain no more than one of
|
|
the following: <a href="compile.html#apicall">SQLITE_APICALL</a>, <a href="compile.html#callback">SQLITE_CALLBACK</a>, <a href="compile.html#cdecl">SQLITE_CDECL</a>,
|
|
or <a href="compile.html#syscall">SQLITE_SYSCALL</a>.
|
|
</p></blockquote><a name="tclapi"></a>
|
|
<p><b>SQLITE_TCLAPI</b></p><blockquote><p>
|
|
This macro specifies the calling convention used by the
|
|
<a href="http://www.tcl.tk">TCL</a> library interface routines.
|
|
This macro is not used by the SQLite core, but only by the <a href="tclsqlite.html">TCL Interface</a>
|
|
and <a href="testing.html#tcl">TCL test suite</a>.
|
|
This macro is normally defined to be nothing,
|
|
though on Windows builds it can sometimes be set to "__cdecl". This
|
|
macro is used on TCL library interface routines which are always compiled
|
|
as __cdecl, even on platforms that prefer to use __stdcall, so this
|
|
macro should not be set to __stdcall unless the platform as a custom
|
|
TCL library build that supports __stdcall.
|
|
<p>
|
|
This macro may not be used in combination with any of <a href="compile.html#apicall">SQLITE_APICALL</a>,
|
|
<a href="compile.html#callback">SQLITE_CALLBACK</a>, <a href="compile.html#cdecl">SQLITE_CDECL</a>, or <a href="compile.html#syscall">SQLITE_SYSCALL</a>.
|
|
</p></blockquote>
|
|
|