Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | The FAQ links to c3ref/ pages instead of capi3ref.html. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
fe967c2c855de80d399d25ebeda9698b |
User & Date: | drh 2007-11-14 02:58:19.000 |
Context
2007-11-14
| ||
03:14 | Changes capi3ref.html references to c3ref/ pages everywhere. (check-in: c3a14fe2c7 user: drh tags: trunk) | |
02:58 | The FAQ links to c3ref/ pages instead of capi3ref.html. (check-in: fe967c2c85 user: drh tags: trunk) | |
02:46 | Various page tweaks. Added the amalgamation.in page. Clicking on the SQLite logo now takes you to the homepage. (check-in: ee2dd30d18 user: drh tags: trunk) | |
Changes
Changes to pages/faq.in.
︙ | ︙ | |||
37 38 39 40 41 42 43 | </pre></blockquote> <p>is logically equivalent to saying:</p> <blockquote><pre> INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123); </pre></blockquote> <p>There is a new API function named | | | 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | </pre></blockquote> <p>is logically equivalent to saying:</p> <blockquote><pre> INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123); </pre></blockquote> <p>There is a new API function named <a href="c3ref/last_insert_rowid.html"> sqlite3_last_insert_rowid()</a> which will return the integer key for the most recent insert operation.</p> <p>Note that the integer key is one greater than the largest key that was in the table just prior to the insert. The new key will be unique over all keys currently in the table, but it might overlap with keys that have been previously deleted from the |
︙ | ︙ | |||
146 147 148 149 150 151 152 | consider using a client/server database. But experience suggests that most applications need much less concurrency than their designers imagine. </p> <p>When SQLite tries to access a file that is locked by another process, the default behavior is to return SQLITE_BUSY. You can adjust this behavior from C code using the | | | | | | 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 | consider using a client/server database. But experience suggests that most applications need much less concurrency than their designers imagine. </p> <p>When SQLite tries to access a file that is locked by another process, the default behavior is to return SQLITE_BUSY. You can adjust this behavior from C code using the <a href="c3ref/busy_handler.html">sqlite3_busy_handler()</a> or <a href="c3ref/busy_timeout.html">sqlite3_busy_timeout()</a> API functions.</p> } faq { Is SQLite threadsafe? } { <p>Yes. Sometimes. In order to be thread-safe, SQLite must be compiled with the SQLITE_THREADSAFE preprocessor macro set to 1. Both the windows and linux precompiled binaries in the distribution are compiled this way. If you are unsure if the SQLite library you are linking against is compiled to be threadsafe you can call the <a href="c3ref/threadsafe.html">sqlite3_threadsafe()</a> interface to find out. </p> <p>Prior to version 3.3.1, an <b>sqlite3</b> structure could only be used in the same thread that called <a href="c3ref/open.html">sqlite3_open</a> to create it. You could not open a database in one thread then pass the handle off to another thread for it to use. This was due to limitations (bugs?) in many common threading implementations such as on RedHat9. Specifically, an fcntl() lock created by one thread cannot be removed or modified by a different thread on the troublesome systems. And since SQLite uses fcntl() |
︙ | ︙ | |||
350 351 352 353 354 355 356 | } faq {What is an SQLITE_SCHEMA error, and why am I getting one?} { <p>An SQLITE_SCHEMA error is returned when a prepared SQL statement is no longer valid and cannot be executed. When this occurs, the statement must be recompiled from SQL using the | | | | | | | | | | 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 | } faq {What is an SQLITE_SCHEMA error, and why am I getting one?} { <p>An SQLITE_SCHEMA error is returned when a prepared SQL statement is no longer valid and cannot be executed. When this occurs, the statement must be recompiled from SQL using the <a href="c3ref/prepare.html">sqlite3_prepare()</a> API. In SQLite version 3, an SQLITE_SCHEMA error can only occur when using the <a href="c3ref/prepare.html">sqlite3_prepare()</a>/<a href="c3ref/step.html">sqlite3_step()</a>/<a href="c3ref/finalize.html">sqlite3_finalize()</a> API to execute SQL, not when using the <a href="c3ref/exec.html">sqlite3_exec()</a>. This was not the case in version 2.</p> <p>The most common reason for a prepared statement to become invalid is that the schema of the database was modified after the SQL was prepared (possibly by another process). The other reasons this can happen are:</p> <ul> <li>A database was <a href="lang_detach.html">DETACH</a>ed. <li>The database was <a href="lang_vacuum.html">VACUUM</a>ed <li>A user-function definition was deleted or changed. <li>A collation sequence definition was deleted or changed. <li>The authorization function was changed. </ul> <p>In all cases, the solution is to recompile the statement from SQL and attempt to execute it again. Because a prepared statement can be invalidated by another process changing the database schema, all code that uses the <a href="c3ref/prepare.html">sqlite3_prepare()</a>/<a href="c3ref/step.html">sqlite3_step()</a>/<a href="c3ref/finalize.html">sqlite3_finalize()</a> API should be prepared to handle SQLITE_SCHEMA errors. An example of one approach to this follows:</p> <blockquote><pre> int rc; sqlite3_stmt *pStmt; |
︙ | ︙ |