Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Documentation updates, in particular in the new limits.html file is added. (CVS 4053) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
4ca6cdae94f6d0a2c95755d4a250f9f3 |
User & Date: | drh 2007-06-09 09:53:51.000 |
Context
2007-06-10
| ||
22:57 | Define isnan() on windows. Ticket #2399. (CVS 4054) (check-in: fed9373e27 user: drh tags: trunk) | |
2007-06-09
| ||
09:53 | Documentation updates, in particular in the new limits.html file is added. (CVS 4053) (check-in: 4ca6cdae94 user: drh tags: trunk) | |
2007-06-08
| ||
18:27 | Use C-sylte comments exclusively, never C++ comments. Ticket #2406. (CVS 4052) (check-in: 8f5b789fea user: drh tags: trunk) | |
Changes
Changes to Makefile.in.
︙ | ︙ | |||
580 581 582 583 584 585 586 587 588 589 590 591 592 593 | formatchng.html: $(TOP)/www/formatchng.tcl tclsh $(TOP)/www/formatchng.tcl >formatchng.html index.html: $(TOP)/www/index.tcl last_change tclsh $(TOP)/www/index.tcl >index.html lang.html: $(TOP)/www/lang.tcl tclsh $(TOP)/www/lang.tcl >lang.html pragma.html: $(TOP)/www/pragma.tcl tclsh $(TOP)/www/pragma.tcl >pragma.html lockingv3.html: $(TOP)/www/lockingv3.tcl | > > > | 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 | formatchng.html: $(TOP)/www/formatchng.tcl tclsh $(TOP)/www/formatchng.tcl >formatchng.html index.html: $(TOP)/www/index.tcl last_change tclsh $(TOP)/www/index.tcl >index.html limits.html: $(TOP)/www/limits.tcl last_change tclsh $(TOP)/www/limits.tcl >limits.html lang.html: $(TOP)/www/lang.tcl tclsh $(TOP)/www/lang.tcl >lang.html pragma.html: $(TOP)/www/pragma.tcl tclsh $(TOP)/www/pragma.tcl >pragma.html lockingv3.html: $(TOP)/www/lockingv3.tcl |
︙ | ︙ | |||
653 654 655 656 657 658 659 660 661 662 663 664 665 666 | docs.html \ download.html \ faq.html \ fileformat.html \ formatchng.html \ index.html \ lang.html \ lockingv3.html \ mingw.html \ nulls.html \ oldnews.html \ omitted.html \ opcode.html \ pragma.html \ | > | 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 | docs.html \ download.html \ faq.html \ fileformat.html \ formatchng.html \ index.html \ lang.html \ limits.html \ lockingv3.html \ mingw.html \ nulls.html \ oldnews.html \ omitted.html \ opcode.html \ pragma.html \ |
︙ | ︙ |
Changes to main.mk.
︙ | ︙ | |||
538 539 540 541 542 543 544 545 546 547 548 549 550 551 | formatchng.html: $(TOP)/www/formatchng.tcl tclsh $(TOP)/www/formatchng.tcl >formatchng.html index.html: $(TOP)/www/index.tcl last_change tclsh $(TOP)/www/index.tcl >index.html lang.html: $(TOP)/www/lang.tcl tclsh $(TOP)/www/lang.tcl doc >lang.html pragma.html: $(TOP)/www/pragma.tcl tclsh $(TOP)/www/pragma.tcl >pragma.html lockingv3.html: $(TOP)/www/lockingv3.tcl | > > > | 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 | formatchng.html: $(TOP)/www/formatchng.tcl tclsh $(TOP)/www/formatchng.tcl >formatchng.html index.html: $(TOP)/www/index.tcl last_change tclsh $(TOP)/www/index.tcl >index.html limits.html: $(TOP)/www/limits.tcl last_change tclsh $(TOP)/www/limits.tcl >limits.html lang.html: $(TOP)/www/lang.tcl tclsh $(TOP)/www/lang.tcl doc >lang.html pragma.html: $(TOP)/www/pragma.tcl tclsh $(TOP)/www/pragma.tcl >pragma.html lockingv3.html: $(TOP)/www/lockingv3.tcl |
︙ | ︙ | |||
619 620 621 622 623 624 625 626 627 628 629 630 631 632 | different.html \ docs.html \ download.html \ faq.html \ fileformat.html \ formatchng.html \ index.html \ lang.html \ lockingv3.html \ mingw.html \ nulls.html \ oldnews.html \ omitted.html \ opcode.html \ | > | 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 | different.html \ docs.html \ download.html \ faq.html \ fileformat.html \ formatchng.html \ index.html \ limits.html \ lang.html \ lockingv3.html \ mingw.html \ nulls.html \ oldnews.html \ omitted.html \ opcode.html \ |
︙ | ︙ |
Changes to src/limits.h.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** ** This file defines various limits of what SQLite can process. ** | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** ** This file defines various limits of what SQLite can process. ** ** @(#) $Id: limits.h,v 1.9 2007/06/09 09:53:51 drh Exp $ */ /* ** The maximum length of a TEXT or BLOB in bytes. This also ** limits the size of a row in a table or index. ** ** The hard limit is the ability of a 32-bit signed integer |
︙ | ︙ | |||
59 60 61 62 63 64 65 | ** The maximum depth of an expression tree. This is limited to ** some extent by SQLITE_MAX_SQL_LENGTH. But sometime you might ** want to place more severe limits on the complexity of an ** expression. A value of 0 (the default) means do not enforce ** any limitation on expression tree depth. */ #ifndef SQLITE_MAX_EXPR_DEPTH | | | | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | ** The maximum depth of an expression tree. This is limited to ** some extent by SQLITE_MAX_SQL_LENGTH. But sometime you might ** want to place more severe limits on the complexity of an ** expression. A value of 0 (the default) means do not enforce ** any limitation on expression tree depth. */ #ifndef SQLITE_MAX_EXPR_DEPTH # define SQLITE_MAX_EXPR_DEPTH 1000 #endif /* ** The maximum number of terms in a compound SELECT statement. ** The code generator for compound SELECT statements does one ** level of recursion for each term. A stack overflow can result ** if the number of terms is too large. In practice, most SQL ** never has more than 3 or 4 terms. Use a value of 0 to disable ** any limit on the number of terms in a compount SELECT. */ #ifndef SQLITE_MAX_COMPOUND_SELECT # define SQLITE_MAX_COMPOUND_SELECT 500 #endif /* ** The maximum number of opcodes in a VDBE program. ** Not currently enforced. */ #ifndef SQLITE_MAX_VDBE_OP |
︙ | ︙ |
Changes to www/faq.tcl.
1 2 3 | # # Run this script to generated a faq.html output file # | | | 1 2 3 4 5 6 7 8 9 10 11 | # # Run this script to generated a faq.html output file # set rcsid {$Id: faq.tcl,v 1.37 2007/06/09 09:53:51 drh Exp $} source common.tcl header {SQLite Frequently Asked Questions</title>} set cnt 1 proc faq {question answer} { set ::faq($::cnt) [list [string trim $question] [string trim $answer]] incr ::cnt |
︙ | ︙ | |||
89 90 91 92 93 94 95 | that column, SQLite will attempt to convert the string into an integer. If it can, it inserts the integer instead. If not, it inserts the string. This feature is sometimes call <a href="datatype3.html#affinity">type or column affinity</a>. </p> } | < < < < < < < < < < < < < < < < < < < < < < | 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | that column, SQLite will attempt to convert the string into an integer. If it can, it inserts the integer instead. If not, it inserts the string. This feature is sometimes call <a href="datatype3.html#affinity">type or column affinity</a>. </p> } faq { Why doesn't SQLite allow me to use '0' and '0.0' as the primary key on two different rows of the same table? } { <p>Your primary key must have a numeric type. Change the datatype of your primary key to TEXT and it should work.</p> <p>Every row must have a unique primary key. For a column with a numeric type, SQLite thinks that <b>'0'</b> and <b>'0.0'</b> are the same value because they compare equal to one another numerically. (See the previous question.) Hence the values are not unique.</p> } faq { Can multiple applications or multiple instances of the same application access a single database file at the same time? } { <p>Multiple processes can have the same database open at the same time. Multiple processes can be doing a SELECT |
︙ | ︙ | |||
278 279 280 281 282 283 284 | ORDER BY name </pre></blockquote> } faq { Are there any known size limits to SQLite databases? } { | < < < < < | < < < < < < | < < < < < < < < < < < < < < < < < < | 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 | ORDER BY name </pre></blockquote> } faq { Are there any known size limits to SQLite databases? } { <p>See <a href="limits.html">limits.html</a> for a full discussion of the limits of SQLite.</p> } faq { What is the maximum size of a VARCHAR in SQLite? } { <p>SQLite does not enforce the length of a VARCHAR. You can declare a VARCHAR(10) and SQLite will be happy to let you put 500 characters |
︙ | ︙ |
Changes to www/index.tcl.
︙ | ︙ | |||
23 24 25 26 27 28 29 | even after system crashes and power failures. <li>Zero-configuration - no setup or administration needed.</li> <li>Implements most of SQL92. (<a href="omitted.html">Features not supported</a>)</li> <li>A complete database is stored in a single disk file.</li> <li>Database files can be freely shared between machines with different byte orders.</li> | | | < < | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | even after system crashes and power failures. <li>Zero-configuration - no setup or administration needed.</li> <li>Implements most of SQL92. (<a href="omitted.html">Features not supported</a>)</li> <li>A complete database is stored in a single disk file.</li> <li>Database files can be freely shared between machines with different byte orders.</li> <li>Supports terabyte-sized databases and gigabyte-sized strings and blobs. (See <a href="limits.html">limits.html</a>.) <li>Small code footprint: <a href="http://www.sqlite.org/cvstrac/wiki?p=SizeOfSqlite"> less than 250KiB</a> fully configured or less than 150KiB with optional features omitted.</li> <li><a href="speed.html">Faster</a> than popular client/server database engines for most common operations.</li> <li>Simple, easy to use <a href="capi3.html">API</a>.</li> |
︙ | ︙ | |||
118 119 120 121 122 123 124 | PRAGMA integrity_check</a> has been enhanced. } puts { <p align="right"><a href="oldnews.html">Old news...</a></p> </td></tr></table> } | | | 116 117 118 119 120 121 122 123 | PRAGMA integrity_check</a> has been enhanced. } puts { <p align="right"><a href="oldnews.html">Old news...</a></p> </td></tr></table> } footer {$Id: index.tcl,v 1.155 2007/06/09 09:53:51 drh Exp $} |
Added www/limits.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 | # # Run this script to generate the limits.html output file # set rcsid {$Id: limits.tcl,v 1.1 2007/06/09 09:53:51 drh Exp $} source common.tcl header {Implementation Limits For SQLite} puts { <h2>Limits In SQLite</h2> <p> "Limits" in the context of this article means sizes or quantities that can not be exceeded. We are concerned with things like the maximum number of bytes in a BLOB or the maximum number of columns in a table. </p> <p> SQLite was originally designed with a policy of avoiding arbitrary limits. Of course, every program that runs on a machine with finite memory and disk space has limits of some kind. But in SQLite, those limits were not well defined. The policy was that if it would fit in memory and you could count it with a 32-bit integer, then it should work. </p> <p> Unfortunately, the no-limits policy has been shown to create problems. Because the upper bounds where not well defined, they were not tested, and bugs (including possible security exploits) where often found when pushing SQLite to extremes. For this reason, newer versions of SQLite have well-defined limits and those limits are tested as part of the test suite. </p> <p> This article defines what the limits of SQLite are and how they can be customized for specific applications. The default settings for limits are normally quite large and adequate for almost every application. Some applications may what to increase a limit here or there, but we expect such needs to be rare. More commonly, an application might want to recompile SQLite with much lower limits to avoid excess resource utilization in the event of bug in higher-level SQL statement generators or to help thwart attackers who inject malicious SQL statements. </p> } proc limititem {title text} { puts "<li><p><b>$title</b></p>\n$text</li>" } puts { <ol> } limititem {Maximum length of a string or BLOB} { <p> The maximum number of bytes in a string or BLOB in SQLite is defined by the preprocessor macro SQLITE_MAX_LENGTH. The default value of this macro is 1 billion (1 thousand million or 1,000,000,000). You can raise or lower this value at compile-time using a command-line option like this: </p> <blockquote>-DSQLITE_MAX_LENGTH=123456789</blockquote> <p> The current implementation will only support a string or BLOB length up to 2<small><sup>31</sup></small>-1 or 2147483647. And some built-in functions such as hex() might fail well before that point. In security-sensitive applications it is best not to try to increase the maximum string and blob length. In fact, you might do well to lower the maximum string and blob length to something more in the range of a few million if that is possible. </p> <p> During part of SQLite's INSERT and SELECT processing, the complete content of each row in the database is encoded as a single BLOB. So the SQLTIE_MAX_LENGTH parameter also determines the maximum number of bytes in a row. </p> } limititem {Maximum Number Of Columns} { <p> The SQLITE_MAX_COLUMN compile-time parameter is used to set an upper bound on: </p> <ul> <li>The number of columns in a table</li> <li>The number of columns in an index</li> <li>The number of columns in a view</li> <li>The number of terms in the SET clause of an UPDATE statement</li> <li>The number of columns in the result set of a SELECT statement</li> <li>The number of terms in a GROUP BY or ORDER BY clause</li> <li>The number of values in an INSERT statement</li> </ul> <p> The default setting for SQLITE_MAX_COLUMN is 2000. You can change it at compile time to values as large as 32676. You might be able to redefine this value to be as large as billions, though nobody has ever tried doing that so we do not know if it will work. On the other hand, there are people who will argument that a well-normalized database design will never need a value larger than about 100. </p> <p> In most applications, the number of columns is small - a few dozen. There are places in the SQLite code generator that use algorithms that are O(N²) where N is the number of columns. So if you redefine SQLITE_MAX_COLUMN to be a really huge number and you generate SQL that uses a large number of columns, you may find that <a href="capi3ref.html#sqlite3_prepare_v2">sqlite3_prepare_v2()</a> runs slowly. } limititem {Maximum Length Of An SQL Statement} { <p> The maximum number of bytes in the text of an SQL statement is limited to SQLITE_MAX_SQL_LENGTH which defaults to 1000000. You can redefine this limit to be as large as the smaller of SQLITE_MAX_LENGTH and 1073741824. </p> <p> If an SQL statement is limited to be a million bytes in length, then obviously you will not be able to insert multi-million byte strings by embedding them as literals inside of INSERT statements. But you should not do that anyway. Use host parameters for your data. Prepare short SQL statements like this: </p> <blockquote> INSERT INTO tab1 VALUES(?,?,?); </blockquote> <p> Then use the <a href="capi3ref.html#sqlite3_bind_text">sqlite3_bind_XXXX()</a> functions to bind your large string values to the SQL statement. The use of binding obviates the need to escape quote characters in the string, reducing the risk of SQL injection attacks. It is also runs faster since the large string does not need to be parsed or copied as much. </p> } limititem {Maximum Number Of Tables In A Join} { <p> SQLite does not support joins containing more than 64 tables. This limit arises from the fact that the SQLite code generator uses bitmaps with one bit per join-table in the query optimizer. </p> } limititem {Maximum Depth Of An Expression Tree} { <p> SQLite parses expressions into a tree for processing. During code generation, SQLite walks this tree recursively. The depth of expression trees is therefore limited in order to avoid using too much stack space. </p> <p> The SQLITE_MAX_EXPR_DEPTH parameter determines the maximum expression tree depth. If the value is 0, then no limit is enforced. The current implementation has a default value of 1000. </p> } limititem {Maximum Number Of Arguments On A Function} { <p> The SQLITE_MAX_FUNCTION_ARG parameter determines the maximum number of parameters that can be passed to an SQL function. The default value of this limit is 100. We know of no technical reason why SQLite would not work with functions that have millions of parameters. However, we suspect that anybody who tries to invoke a function with millions of parameters is really trying to find security exploits in systems that use SQLite, not do useful work, and so for that reason we have set this parameter relatively low. } limititem {Maximum Number Of Terms In A Compound SELECT Statement} { <p> A compound SELECT statement is two or more SELECT statements connected by operators UNION, UNION ALL, EXCEPT, or INTERSECT. We call each individual SELECT statement within a compound SELECT a "term". </p> <p> The code generator in SQLite processes compound SELECT statements using a recursive algorithm. In order to limit the size of the stack, we therefore limit the number of terms in a compound SELECT. The maximum number of terms is SQLITE_MAX_COMPOUND_SELECT which defaults to 500. We think this is a generous allotment since in practice we almost never see the number of terms in a compound select exceed single digits. </p> } limititem {Maximum Length Of A LIKE Or GLOB Pattern} { <p> The pattern matching algorithm used in the default LIKE and GLOB implementation of SQLite can exhibit O(N²) performance (where N is the number of characters in the pattern) for certain pathological cases. To avoid denial-of-service attacks from miscreants who are able to specify their own LIKE or GLOB patterns, the length of the LIKE or GLOB pattern is limited to SQLITE_MAX_LIKE_PATTERN_LENGTH bytes. The default value of this limit is 50000. A modern workstation can evaluate even a pathological LIKE or GLOB pattern of 50000 bytes relatively quickly. The denial of service problem only comes into play when the pattern length gets into millions of bytes. Nevertheless, since most useful LIKE or GLOB patterns are at most a few dozen bytes in length, paranoid application developers may want to reduce this parameter to something in the range of a few hundred if they know that external users are able to generate arbitrary patterns. </p> } limititem {Maximum Number Of Host Parameters In A Single SQL Statement} { <p> A host parameter is a place-holder in an SQL statement that is filled in using one of the <a href="capi3ref.html#sqlite3_bind_blob">sqlite3_bind_XXXX()</a> interfaces. Many SQL programmers are familiar with using a question mark ("?") as a host parameter. SQLite also supports named host parameters prefaced by ":", "$", or "@" and numbered host parameters of the form "?123". </p> <p> Each host parameter in an SQLite statement is assigned a number. The numbers normally begin with 1 and increase by one with each new parameter. However, when the "?123" form is used, the host parameter number is the number that follows the question mark. </p> <p> The maximum value of a host parameter number is SQLITE_MAX_VARIABLE_NUMBER. This setting defaults to 999. </p> } limititem {Maximum Number Of Attached Databases} { <p> The <a href="lang_attach.html">ATTACH</a> statement is an SQLite extension that allows two or more databases to be associated to the same database connection and to operate as if they were a single database. The number of simulataneously attached databases is limited to SQLITE_MAX_ATTACHED which is set to 10 by default. The code generator in SQLite uses bitmaps to keep track of attached databases. That means that the number of attached databases cannot be increased above 30 on a 32-bit machine or 62 on a 64-bit machine. } limititem {Maximum Database Page Size} { <p> An SQLite database file is organized as pages. The size of each page is a power of 2 between 512 and SQLITE_MAX_PAGE_SIZE. The default value for SQLITE_MAX_PAGE_SIZE is 32768. The current implementation will not support a larger value. </p> <p> It used to be the case that SQLite would allocate some stack structures whose size was proportional to the maximum page size. For this reason, SQLite would sometimes be compiled with a smaller maximum page size on embedded devices with limited stack memory. But more recent versions of SQLite put these large structures on the heap, not on the stack, so reducing the maximum page size is no longer necessary on embedded devices. </p> } limititem {Maximum Number Of Pages In A Database File} { <p> SQLite is able to limit the size of a database file to prevent the database file from growing too large and consuming too much disk or flash space. The SQLITE_MAX_PAGE_COUNT parameter, which is normally set to 1073741823, is the maximum number of pages allowed in a single database file. An attempt to insert new data that would cause the database file to grow larger than this will return SQLITE_FULL. </p> <p> The <a href="pragma.html#pragma_max_page_count"> max_page_count PRAGMA</a> can be used to raise or lower this limit at run-time. </p> <p> Note that the transaction processing in SQLite requires two bits of heap memory for every page in the database file. For databases of a few megabytes in size, this amounts to only a few hundred bytes of heap memory. But for gigabyte-sized database the amount of heap memory required is getting into the kilobyte range and for terabyte-sized databases, megabytes of heap memory must be allocated and zeroed at each transaction. SQLite will support very large databases in theory, but the current implementation is optimized for the common SQLite use cases of embedded devices and persistent stores for desktop applications. In other words, SQLite is designed for use with databases sized in kilobytes or megabytes not gigabytes. If you are building an application to work with databases that are hundreds of gigabytes or more in size, then you should perhaps consider using a different database engine that is explicitly designed for such large data sets. </p> } puts {</ol>} footer $rcsid |