Index: pages/cli.in ================================================================== --- pages/cli.in +++ pages/cli.in @@ -914,11 +914,11 @@ are considered to be part of the .archive command. For example, the following commands are equivalent: sqlite3 new_archive.db -Acv file1 file2 file3 -sqlite3 new_archive.db ".ar -tv file1 file2 file3" +sqlite3 new_archive.db ".ar -cv file1 file2 file3"

Long and short style options may be mixed. For example, the following are equivalent: Index: pages/cpu.in ================================================================== --- pages/cpu.in +++ pages/cpu.in @@ -5,11 +5,11 @@

Overview

The graph below shows the number of CPU cycles used by SQLite on a standard workload, for all versions of SQLite going back about 9 years. -Recent version so SQLite use less then a third of the CPU cycles +Recent versions of SQLite use less than a third of the CPU cycles compared to older versions.

This article describes how the SQLite developers measure CPU usage, what those measurements actually mean, and the techniques used by Index: pages/howtocorrupt.in ================================================================== --- pages/howtocorrupt.in +++ pages/howtocorrupt.in @@ -229,10 +229,27 @@ the unix OS interface will attempt to resolve symbolic links and open the database file by its canonical name. Prior to version 3.10.0, opening a database file through a symbolic link was similar to opening a database file that had multiple hard links and resulted in undefined behavior.

+ +hd_fragment fork +

Carrying an open database connection across a fork()

+ +

Do not open an SQLite database connection, then fork(), then try +to use that database connection in the child process. All kinds of +locking problems will result and you can easily end up with a corrupt +database. SQLite is not designed to support that kind of behavior. +Any database connection that is used in a child process must be opened +in the child process, not inherited from the parent. + +

Do not even call [sqlite3_close()] on a database connection from a +child process if the connection was opened in the parent. It is safe +to close the underlying file descriptor, but the [sqlite3_close()] +interface might invoke cleanup activities that will delete content out +from under the parent, leading to errors and perhaps even database +corruption.

Failure to sync

In order to guarantee that database files are always consistent, SQLite will occasionally ask the operating system to flush all pending writes to Index: pages/lang.in ================================================================== --- pages/lang.in +++ pages/lang.in @@ -837,11 +837,11 @@ hd_fragment uniqueidx {unique index}

^If the UNIQUE keyword appears between CREATE and INDEX then duplicate index entries are not allowed. ^Any attempt to insert a duplicate entry will result in an error. ^For the purposes of unique indices, all NULL values -are considered to different from all other NULL values and are thus unique. +are considered different from all other NULL values and are thus unique. This is one of the two possible interpretations of the SQL-92 standard (the language in the standard is ambiguous) and is the interpretation followed by PostgreSQL, MySQL, Firebird, and Oracle. Informix and Microsoft SQL Server follow the other interpretation of the standard.

@@ -932,11 +932,11 @@ Expression Affinity Column Declared Type TEXT "TEXT" NUMERIC "NUM" INTEGER "INT" REAL "REAL" - NONE "" (empty string) + BLOB (a.k.a "NONE") "" (empty string) )^

^(A table created using CREATE TABLE AS has no PRIMARY KEY and no constraints of any kind. The default value of each column is NULL. The default collation sequence for each column of the new table is BINARY.)^ Index: pages/whentouse.in ================================================================== --- pages/whentouse.in +++ pages/whentouse.in @@ -65,10 +65,14 @@ performance, reduced cost and complexity, and improved reliability. See technical notes [file-format benefits|"aff_short.html"] and [application file-format|"appfileformat.html"] and [faster than the filesystem|"fasterthanfs.html"] for more information. +This use case is closely related to the +data transfer format and +data container use cases below. + hd_fragment website {using SQLite for websites}

  • Websites

    SQLite works great as the database engine for most low to @@ -153,14 +157,36 @@ an issue. Concurrency is also improved by "database sharding": using separate database files for different subdomains. For example, the server might have a separate SQLite database for each user, so that the server can handle hundreds or thousands of simultaneous connections, but each SQLite database is only used by one connection.

    +
  • + +hd_fragment wireproto {data transfer format} +
  • Data transfer format

    +

    Because an SQLite database is a single compact file in a +[file format|well-defined cross-platform format], it is often used +as a container for transfering content from one system to another. +The sender gathers content into an SQLite database file, transfers +that one file to the receiver, then the receiver uses SQL to extract +the content as needed. +

    An SQLite database facilitates data transfer between systems even +when the endpoints have different word sizes and/or byte orders. +The data can be a complex mix of large binary blobs, text, and small +numeric or boolean values. The data format can be easily extended +by adding new tables and/or columns, without breaking legacy receivers. +The SQL query language means that receivers are not required to parse +the entire transfer all at once, but can instead query the +received content as needed. The data format is "transparent" in the +sense that it is easily decoded for human viewing using +a variety of universally available, open-source tools, from multiple +vendors.

  • +hd_fragment container {data container}
  • File archive and/or data container

    The [SQLite Archive] idea shows how SQLite can be used as a substitute for ZIP archives or Tarballs. @@ -305,11 +331,11 @@

  • High Concurrency

    SQLite supports an unlimited number of simultaneous readers, but it will only allow one writer at any instant in time. -For many situations, this is not a problem. Writer queue up. Each application +For many situations, this is not a problem. Writers queue up. Each application does its database work quickly and moves on, and no lock lasts for more than a few dozen milliseconds. But there are some applications that require more concurrency, and those applications may need to seek a different solution.

    Index: pages/whynotgit.in ================================================================== --- pages/whynotgit.in +++ pages/whynotgit.in @@ -1,6 +1,6 @@ -Why SQLite Does Not Use Git? +Why SQLite Does Not Use Git

    Introduction