DELETED Doc/Extra/dbfactorysupport.html Index: Doc/Extra/dbfactorysupport.html ================================================================== --- Doc/Extra/dbfactorysupport.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - DbProviderFactory Support - - - - -
-
-

DbProviderFactories and You

-

One of the great new features of ADO.NET 2.0 is the use of reflection as a - means of instantiating database providers programmatically. The information - .NET uses to enumerate the available data providers in the system is relatively - simple. It merely looks in the machine.config and in your own app.config file for some XML data to tell it what providers are - installed and what assemblies those providers are in. -

-

- Scenario 1:  Version Independent (does not use the Global Assembly Cache)

-

- This method allows you to drop any new version of the System.Data.SQLite.DLL into - your application's folder and use it without any code modifications or recompiling.  - Add the following code to your app.config file:

-
-
<configuration>
-  <system.data>
-    <DbProviderFactories>
-      <remove invariant="System.Data.SQLite"/>
-      <add name="SQLite Data Provider" invariant="System.Data.SQLite"
-           description=".Net Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> - </DbProviderFactories> - </system.data> -</configuration> -
-
-

- Scenario 2:  Version Dependent, using either the DLL located in the same folder - as the application or the Global Assembly Cache

-

- This method expands on the above XML to provide the version number and key token - of the SQLite DLL so it can be found either in the same folder as the application - or looked up in the GAC.  The downside to this method is that DbProviderFactories - will use this version information to only load the version specified.  This - means if you update the DLL, you must also update this XML.

-
-
-<configuration>
-  <system.data>
-    <DbProviderFactories>
-      <remove invariant="System.Data.SQLite"/>
-      <add name="SQLite Data Provider" invariant="System.Data.SQLite" 
-           description=".Net Framework Data Provider for SQLite"
-           type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite,
-                 Version=1.0.77.0, Culture=neutral,
-                 PublicKeyToken=db937bc2d44ff139"/>
-    </DbProviderFactories>
-  </system.data>
-</configuration>
-
-
-

- The following C# code demonstrates - instantiating SQLite through DbProviderFactories:

-
      DbProviderFactory fact = DbProviderFactories.GetFactory("System.Data.SQLite");
-      using (DbConnection cnn = fact.CreateConnection())
-      {
-        cnn.ConnectionString = "Data Source=test.db3";
-        cnn.Open();
-      }
-
-
- -
-
- - DELETED Doc/Extra/designer.html Index: Doc/Extra/designer.html ================================================================== --- Doc/Extra/designer.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - Design-Time Support - - - - -
-
- -

Installing SQLite Visual Studio Design-Time Support

-

Supporting the Visual Studio query designer and allowing you to manipulate - SQLite databases from within Visual Studio is a great time-saver.  Though - the support is not yet fully-implemented, there's certainly enough there to - keep you busy.  You can create databases, design and execute queries, - create typed datasets and lots more all from Visual Studio.

-

Installation Instructions

-

- In Windows Explorer, navigate to SQLite.Net\bin\Designer - and execute the INSTALL.EXE program.  It will automatically - detect what eligible Visual Studio products are installed, and allow you to check - and uncheck which environments to install the designer for.

-

Express Edition Limitations

-

All Express Editions (except Visual Web Developer) are hard-coded to only allow you to design for Jet and Sql Server Database Files.  The only way for SQLite - to install its designer is to temporarily replace one of the existing "approved" - designers.  Therefore, when you install the SQLite designer for one of these - express editions, it will temporarily replace the Microsoft Access designer.  - You can revert back to the Access designer simply by re-running the install.exe - program and un-checking the boxes.

-
- -
-
- - DELETED Doc/Extra/lang_altertable.html Index: Doc/Extra/lang_altertable.html ================================================================== --- Doc/Extra/lang_altertable.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - ALTER TABLE - - - - -
-
-

- SQL As Understood By SQLite

-

- ALTER TABLE

-

- - - - - - - - - - - - - -
- sql-statement ::= - ALTER TABLE [database-name .] table-name alteration
- alteration ::= - RENAME TO new-table-name
- alteration ::= - ADD [COLUMN] column-def
-

-

- SQLite's version of the ALTER TABLE command allows the user to rename or add a new - column to an existing table. It is not possible to remove a column from a table. -

-

- The RENAME TO syntax is used to rename the table identified by [database-name.]table-name - to new-table-name. This command cannot be used to move a table between attached - databases, only to rename a table within the same database.

-

- If the table being renamed has triggers or indices, then these remain attached to - the table after it has been renamed. However, if there are any view definitions, - or statements executed by triggers that refer to the table being renamed, these - are not automatically modified to use the new table name. If this is required, the - triggers or view definitions must be dropped and recreated to use the new table - name by hand. -

-

- The ADD [COLUMN] syntax is used to add a new column to an existing table. The new - column is always appended to the end of the list of existing columns. Column-def - may take any of the forms permissable in a CREATE TABLE statement, with the following - restrictions: -

- -

- The execution time of the ALTER TABLE command is independent of the amount of data - in the table. The ALTER TABLE command runs as quickly on a table with 10 million - rows as it does on a table with 1 row. -

-

- After ADD COLUMN has been run on a database, that database will not be readable - by SQLite version 3.1.3 and earlier until the database is - VACUUMed.

-

-  

-
- -
-
- - DELETED Doc/Extra/lang_analyze.html Index: Doc/Extra/lang_analyze.html ================================================================== --- Doc/Extra/lang_analyze.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - ANALYZE - - - - -
-
-

- SQL As Understood By SQLite

-

- ANALYZE

-

- - - - - -
- sql-statement ::= - ANALYZE
- - - - - -
- sql-statement ::= - ANALYZE database-name
- - - - - -
- sql-statement ::= - ANALYZE [database-name .] table-name
-

-

- The ANALYZE command gathers statistics about indices and stores them in a special - tables in the database where the query optimizer can use them to help make better - index choices. If no arguments are given, all indices in all attached databases - are analyzed. If a database name is given as the argument, all indices in that one - database are analyzed. If the argument is a table name, then only indices associated - with that one table are analyzed.

-

- The initial implementation stores all statistics in a single table named sqlite_stat1. - Future enhancements may create additional tables with the same name pattern except - with the "1" changed to a different digit. The sqlite_stat1 table cannot be DROPped, but all the content can be - DELETEd which has the same effect.

-

-  

-
- -
-
- - DELETED Doc/Extra/lang_attach.html Index: Doc/Extra/lang_attach.html ================================================================== --- Doc/Extra/lang_attach.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - ATTACH DATABASE - - - - -
-
-

- SQL As Understood By SQLite

-

- ATTACH DATABASE

-

- - - - - -
- sql-statement ::= - ATTACH [DATABASE] database-filename AS database-name
-

-

- The ATTACH DATABASE statement adds another database file to the current database - connection. If the filename contains punctuation characters it must be quoted. The - names 'main' and 'temp' refer to the main database and the database used for temporary - tables. These cannot be detached. Attached databases are removed using the - DETACH DATABASE statement.

-

- You can read from and write to an attached database and you can modify the schema - of the attached database. This is a new feature of SQLite version 3.0. In SQLite - 2.8, schema changes to attached databases were not allowed.

-

- You cannot create a new table with the same name as a table in an attached database, - but you can attach a database which contains tables whose names are duplicates of - tables in the main database. It is also permissible to attach the same database - file multiple times.

-

- Tables in an attached database can be referred to using the syntax database-name.table-name. - If an attached table doesn't have a duplicate table name in the main database, it - doesn't require a database name prefix. When a database is attached, all of its - tables which don't have duplicate names become the default table of that name. Any - tables of that name attached afterwards require the table prefix. If the default - table of a given name is detached, then the last table of that name attached becomes - the new default.

-

- Transactions involving multiple attached databases are atomic, assuming that the - main database is not ":memory:". If the main database is ":memory:" then transactions - continue to be atomic within each individual database file. But if the host computer - crashes in the middle of a COMMIT where two or more database files are updated, - some of those files might get the changes where others might not. Atomic commit - of attached databases is a new feature of SQLite version 3.0. In SQLite version - 2.8, all commits to attached databases behaved as if the main database were ":memory:". -

-

- There is a compile-time limit of 10 attached database files.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_comment.html Index: Doc/Extra/lang_comment.html ================================================================== --- Doc/Extra/lang_comment.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - comment - - - - -
-
-

- SQL As Understood By SQLite

-

- comment

-

- - - - - - - - - - - - - -
- comment ::= - SQL-comment | C-comment
- SQL-comment ::= - -- single-line
- C-comment ::= - /* multiple-lines [*/]
-

-

- Comments aren't SQL commands, but can occur in SQL queries. They are treated as - whitespace by the parser. They can begin anywhere whitespace can be found, including - inside expressions that span multiple lines. -

-

- SQL comments only extend to the end of the current line.

-

- C comments can span any number of lines. If there is no terminating delimiter, they - extend to the end of the input. This is not treated as an error. A new SQL statement - can begin on a line after a multiline comment ends. C comments can be embedded anywhere - whitespace can occur, including inside expressions, and in the middle of - other SQL - statements. C comments do not nest. SQL comments inside a C comment will be ignored. -

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_conflict.html Index: Doc/Extra/lang_conflict.html ================================================================== --- Doc/Extra/lang_conflict.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - ON CONFLICT - - - - -
-
-

- SQL As Understood By SQLite

-

- ON CONFLICT clause

-

- - - - - - - - - -
- conflict-clause ::= - ON CONFLICT conflict-algorithm
- conflict-algorithm ::= - ROLLBACK | - ABORT | FAIL | IGNORE | REPLACE
-

-

- The ON CONFLICT clause is not a separate SQL command. It is a non-standard clause - that can appear in many - other SQL commands. It is given its own section in this - document because it is not part of standard SQL and therefore might not be familiar.

-

- The syntax for the ON CONFLICT clause is as shown above for the CREATE TABLE command. - For the INSERT and UPDATE commands, the keywords "ON CONFLICT" are replaced by "OR", - to make the syntax seem more natural. For example, instead of "INSERT ON CONFLICT - IGNORE" we have "INSERT OR IGNORE". The keywords change but the meaning of the clause - is the same either way.

-

- The ON CONFLICT clause specifies an algorithm used to resolve constraint conflicts. - There are five choices: ROLLBACK, ABORT, FAIL, IGNORE, and REPLACE. The default - algorithm is ABORT. This is what they mean:

-
-
ROLLBACK
-
-

- When a constraint violation occurs, an immediate ROLLBACK occurs, thus ending the - current transaction, and the command aborts with a return code of SQLITE_CONSTRAINT. - If no transaction is active (other than the implied transaction that is created - on every command) then this algorithm works the same as ABORT.

-
-
ABORT
-
-

- When a constraint violation occurs, the command backs out any prior changes it might - have made and aborts with a return code of SQLITE_CONSTRAINT. But no ROLLBACK is - executed so changes from prior commands within the same transaction are preserved. - This is the default behavior.

-
-
FAIL
-
-

- When a constraint violation occurs, the command aborts with a return code SQLITE_CONSTRAINT. - But any changes to the database that the command made prior to encountering the - constraint violation are preserved and are not backed out. For example, if an UPDATE - statement encountered a constraint violation on the 100th row that it attempts to - update, then the first 99 row changes are preserved but changes to rows 100 and - beyond never occur.

-
-
IGNORE
-
-

- When a constraint violation occurs, the one row that contains the constraint violation - is not inserted or changed. But the command continues executing normally. Other - rows before and after the row that contained the constraint violation continue to - be inserted or updated normally. No error is returned.

-
-
REPLACE
-
-

- When a UNIQUE constraint violation occurs, the pre-existing rows that are causing - the constraint violation are removed prior to inserting or updating the current - row. Thus the insert or update always occurs. The command continues executing normally. - No error is returned. If a NOT NULL constraint violation occurs, the NULL value - is replaced by the default value for that column. If the column has no default value, - then the ABORT algorithm is used. If a CHECK constraint violation occurs then the - IGNORE algorithm is used.

-

- When this conflict resolution strategy deletes rows in order to satisfy a constraint, - it does not invoke delete triggers on those rows. This behavior might change in - a future release.

-
-
-

- The algorithm specified in the OR clause of a INSERT or UPDATE overrides any algorithm - specified in a CREATE TABLE. If no algorithm is specified anywhere, the ABORT algorithm - is used.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_createindex.html Index: Doc/Extra/lang_createindex.html ================================================================== --- Doc/Extra/lang_createindex.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - CREATE INDEX - - - - -
-
-

- SQL As Understood By SQLite

-

- CREATE INDEX

-

- - - - - - - - - -
- sql-statement ::= - CREATE [UNIQUE] INDEX [IF NOT EXISTS] [database-name .] - index-name -
- ON
table-name - ( column-name - [, - column-name]* )
- column-name ::= - name [ COLLATE collation-name] [ ASC | DESC ]
-

-

- The CREATE INDEX command consists of the keywords "CREATE INDEX" followed by the - name of the new index, the keyword "ON", the name of a previously created table - that is to be indexed, and a parenthesized list of names of columns in the table - that are used for the index key. Each column name can be followed by one of the - "ASC" or "DESC" keywords to indicate sort order, but the sort order is ignored in - the current implementation. Sorting is always done in ascending order.

-

- The COLLATE clause following each column name defines a collating sequence used - for text entires in that column. The default collating sequence is the collating - sequence defined for that column in the CREATE TABLE statement. Or if no collating - sequence is otherwise defined, the built-in BINARY collating sequence is used.

-

- There are no arbitrary limits on the number of indices that can be attached to a - single table, nor on the number of columns in an 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.

-

- The exact text of each CREATE INDEX statement is stored in the sqlite_master - or sqlite_temp_master table, depending on whether the table being indexed - is temporary. Every time the database is opened, all CREATE INDEX statements are - read from the sqlite_master table and used to regenerate - SQLite's internal - representation of the index layout.

-

- If the optional IF NOT EXISTS clause is present and another index with the same name aleady exists, then this command becomes a no-op.

-

- Indexes are removed with the DROP INDEX command.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_createtable.html Index: Doc/Extra/lang_createtable.html ================================================================== --- Doc/Extra/lang_createtable.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - CREATE TABLE - - - - -
-
-

- SQL As Understood By SQLite

-

- CREATE TABLE

-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- sql-command ::= - CREATE [TEMP - | TEMPORARY] - TABLE [IF NOT EXISTS] - [database-name .] - table-name (
-    
column-def - [, - column-def]*
-    
[, - constraint]*
- )
- sql-command ::= - CREATE [TEMP - | TEMPORARY] - TABLE [database-name.] - table-name AS - select-statement
- column-def ::= - name [type] [[CONSTRAINT name] - column-constraint]*
- type ::= - typename |
-
typename - ( number - ) |
-
typename - ( number - , number - )
- column-constraint ::= - NOT NULL [ - conflict-clause - ] |
- PRIMARY KEY
[sort-order] [ - conflict-clause - ] [AUTOINCREMENT] |
- UNIQUE
[ conflict-clause ] |
- CHECK (
expr - ) |
- DEFAULT
value - |
- COLLATE
collation-name
- constraint ::= - PRIMARY KEY ( - column-list ) [ conflict-clause ] |
- UNIQUE (
column-list ) [ - conflict-clause - ] |
- CHECK (
expr - )
- conflict-clause ::= - ON CONFLICT conflict-algorithm
-

-

- A CREATE TABLE statement is basically the keywords "CREATE TABLE" followed by the - name of a new table and a parenthesized list of column definitions and constraints. - The table name can be either an identifier or a string. Tables names that begin - with "sqlite_" are reserved for use by the engine.

-

- Each column definition is the name of the column followed by the datatype for that - column, then one or more optional column constraints. The datatype for the column - does not restrict what data may be put in that column. See - Datatypes In SQLite Version 3 for additional information. The UNIQUE constraint - causes an index to be created on the specified columns. This index must contain - unique keys. The COLLATE clause specifies what text - collating function to use when comparing text entries for the column. The - built-in BINARY collating function is used by default. -

-

- The DEFAULT constraint specifies a default value to use when doing an INSERT. The - value may be NULL, a string constant or a number. Starting with version 3.1.0, the - default value may also be one of the special case-independant keywords CURRENT_TIME, CURRENT_DATE or CURRENT_TIMESTAMP. If the value is NULL, a string constant or number, - it is literally inserted into the column whenever an INSERT statement that does - not specify a value for the column is executed. If the value is CURRENT_TIME, CURRENT_DATE - or CURRENT_TIMESTAMP, then the current UTC date and/or time is inserted into the - columns. For CURRENT_TIME, the format is HH:MM:SS. For CURRENT_DATE, YYYY-MM-DD. - The format for CURRENT_TIMESTAMP is "YYYY-MM-DD HH:MM:SS". -

-

- Specifying a PRIMARY KEY normally just creates a UNIQUE index on the corresponding - columns. However, if primary key is on a single column that has datatype INTEGER, - then that column is used internally as the actual key of the B-Tree for the table. - This means that the column may only hold unique integer values. (Except for this - one case, SQLite ignores the datatype specification of columns and allows any kind - of data to be put in a column regardless of its declared datatype.) If a table does - not have an INTEGER PRIMARY KEY column, then the B-Tree key will be a automatically - generated integer. The B-Tree key for a row can always be accessed using one of - the special names "ROWID", "OID", or "_ROWID_". This is true - regardless of whether or not there is an INTEGER PRIMARY KEY. An INTEGER PRIMARY - KEY column man also include the keyword AUTOINCREMENT. The AUTOINCREMENT keyword - modified the way that B-Tree keys are automatically generated. Additional detail - on automatic B-Tree key generation is available - separately.

-

- If the "TEMP" or "TEMPORARY" keyword occurs in between "CREATE" and "TABLE" then - the table that is created is only visible within that same database connection and - is automatically deleted when the database connection is closed. Any indices created - on a temporary table are also temporary. Temporary tables and indices are stored - in a separate file distinct from the main database file.

-

- If a <database-name> is specified, then the table is created in the named - database. It is an error to specify both a <database-name> and the TEMP keyword, - unless the <database-name> is "temp". If no database name is specified, and - the TEMP keyword is not present, the table is created in the main database.

-

- The optional conflict-clause following each constraint allows the specification - of an alternative default constraint conflict resolution algorithm for that constraint. The default is abort ABORT. Different constraints within the same table may have - different default conflict resolution algorithms. If an COPY, INSERT, or UPDATE - command specifies a different conflict resolution algorithm, then that algorithm - is used in place of the default algorithm specified in the CREATE TABLE statement. - See the section titled ON CONFLICT for additional - information.

-

- CHECK constraints are supported as of version 3.3.0. Prior to version 3.3.0, CHECK - constraints were parsed but not enforced.

-

- There are no arbitrary limits on the number of columns or on the number of constraints - in a table. The total amount of data in a single row is limited to about 1 megabytes - in version 2.8. In version 3.0 there is no arbitrary limit on the amount of data - in a row.

-

- The CREATE TABLE AS form defines the table to be the result set of a query. The - names of the table columns are the names of the columns in the result.

-

- The exact text of each CREATE TABLE statement is stored in the sqlite_master - table. Every time the database is opened, all CREATE TABLE statements are read from - the sqlite_master table and used to regenerate - SQLite's internal representation - of the table layout. If the original command was a CREATE TABLE AS then then an - equivalent CREATE TABLE statement is synthesized and store in sqlite_master - in place of the original command. The text of CREATE TEMPORARY TABLE statements - are stored in the sqlite_temp_master table. -

-

- If the optional IF NOT EXISTS clause is present and another table with the same - name aleady exists, then this command becomes a no-op.

-

- Tables are removed using the DROP TABLE statement. -

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_createtrigger.html Index: Doc/Extra/lang_createtrigger.html ================================================================== --- Doc/Extra/lang_createtrigger.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - CREATE TABLE - - - - -
-
-

- SQL As Understood By SQLite

-

- CREATE TRIGGER

-

- - - - - -
- sql-statement ::= - CREATE [TEMP - | TEMPORARY] - TRIGGER trigger-name - [ BEFORE | - AFTER ]
-
database-event - ON [database-name .] - table-name
-
trigger-action
- - - - - -
- sql-statement ::= - CREATE [TEMP - | TEMPORARY] - TRIGGER trigger-name - INSTEAD OF
-
database-event - ON [database-name .] - view-name
-
trigger-action
- - - - - -
- database-event ::= - DELETE | -
- INSERT
| -
- UPDATE
| -
- UPDATE OF
column-list
- - - - - -
- trigger-action ::= - [ FOR EACH ROW - | FOR EACH STATEMENT ] [ WHEN - expression ] -
- BEGIN -
-    
trigger-step ; [ - trigger-step ; ]*
- END
- - - - - -
- trigger-step ::= - update-statement | insert-statement - | -
-
delete-statement - | - select-statement
-

-

- The CREATE TRIGGER statement is used to add triggers to the database schema. Triggers - are database operations (the trigger-action) that are automatically performed - when a specified database event (the database-event) occurs. -

-

- A trigger may be specified to fire whenever a DELETE, INSERT or UPDATE of a particular - database table occurs, or whenever an UPDATE of one or more specified columns of - a table are updated.

-

- At this time SQLite supports only FOR EACH ROW triggers, not FOR EACH STATEMENT - triggers. Hence explicitly specifying FOR EACH ROW is optional. FOR EACH ROW implies - that the SQL statements specified as trigger-steps may be executed (depending - on the WHEN clause) for each database row being inserted, updated or deleted by - the statement causing the trigger to fire.

-

- Both the WHEN clause and the trigger-steps may access elements of the row - being inserted, deleted or updated using references of the form "NEW.column-name" - and "OLD.column-name", where column-name is the name of a column from the table that the trigger is associated with. OLD and NEW references may only be - used in triggers on trigger-events for which they are relevant, as follows:

-

- - - - - - - - - - - - - -
- INSERT - NEW references are valid
- UPDATE - NEW and OLD references are valid
- DELETE - OLD references are valid
-

-

-

-

- If a WHEN clause is supplied, the SQL statements specified as trigger-steps - are only executed for - rows for which the WHEN clause is true. If no WHEN clause - is supplied, the SQL statements are executed for all rows.

-

- The specified trigger-time determines when the trigger-steps will - be executed relative to the insertion, modification or removal of the associated - row.

-

- An ON CONFLICT clause may be specified as part of an UPDATE or INSERT trigger-step. - However if an ON CONFLICT clause is specified as part of the statement causing the - trigger to fire, then this conflict handling policy is used instead.

-

- Triggers are automatically dropped when the table that they are associated with - is dropped.

-

- Triggers may be created on views, as well as ordinary tables, by specifying INSTEAD - OF in the CREATE TRIGGER statement. If one or more ON INSERT, ON DELETE or ON UPDATE - triggers are defined on a view, then it is not an error to execute an INSERT, DELETE - or UPDATE statement on the view, respectively. Thereafter, executing an INSERT, - DELETE or UPDATE on the view causes the associated triggers to fire. The real tables - underlying the view are not modified (except possibly explicitly, by a trigger program).

-

- Example:

-

- Assuming that customer records are stored in the "customers" table, and that order - records are stored in the "orders" table, the following trigger ensures that all - associated orders are redirected when a customer changes his or her address:

-
-
-CREATE TRIGGER update_customer_address UPDATE OF address ON customers 
-  BEGIN
-    UPDATE orders SET address = new.address WHERE customer_name = old.name;
-  END;
-
-
-

- With this trigger installed, executing the statement:

-
-
-UPDATE customers SET address = '1 Main St.' WHERE name = 'Jack Jones';
-
-
-

- causes the following to be automatically executed:

-
-
-UPDATE orders SET address = '1 Main St.' WHERE customer_name = 'Jack Jones';
-
-
-

- Note that currently, triggers may behave oddly when created on tables with INTEGER - PRIMARY KEY fields. If a BEFORE trigger program modifies the INTEGER PRIMARY KEY - field of a row that will be subsequently updated by the statement that causes the - trigger to fire, then the update may not occur. The workaround is to declare the - table with a PRIMARY KEY column instead of an INTEGER PRIMARY KEY column.

-

- A special SQL function RAISE() may be used within a trigger-program, with the following - syntax

-

- - - - - -
- raise-function ::= - RAISE ( ABORT, error-message ) - | -
- RAISE ( FAIL,
error-message ) | -
- RAISE ( ROLLBACK,
error-message ) | -
- RAISE ( IGNORE )
-

-

- When one of the first three forms is called during trigger-program execution, the - specified ON CONFLICT processing is performed (either ABORT, FAIL or ROLLBACK) and - the current query terminates. An error code of SQLITE_CONSTRAINT is returned to - the user, along with the specified error message.

-

- When RAISE(IGNORE) is called, the remainder of the current trigger program, the - statement that caused the trigger program to execute and any subsequent trigger - programs that would of been executed are abandoned. No database changes are rolled - back. If the statement that caused the trigger program to execute is itself part - of a trigger program, then that trigger program resumes execution at the beginning - of the next step. -

-

- Triggers are removed using the DROP TRIGGER - statement.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_createview.html Index: Doc/Extra/lang_createview.html ================================================================== --- Doc/Extra/lang_createview.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - CREATE VIEW - - - - -
-
-

- SQL As Understood By SQLite

-

- CREATE VIEW

-

- - - - - -
- sql-command ::= - CREATE [TEMP - | TEMPORARY] - VIEW [database-name.] - view-name AS - select-statement
-

-

- The CREATE VIEW command assigns a name to a pre-packaged - SELECT statement. Once the view is created, it can be used in the FROM clause - of another SELECT in place of a table name. -

-

- If the "TEMP" or "TEMPORARY" keyword occurs in between "CREATE" and "VIEW" then - the view that is created is only visible to the process that opened the database - and is automatically deleted when the database is closed.

-

- If a <database-name> is specified, then the view is created in the named database. - It is an error to specify both a <database-name> and the TEMP keyword, unless - the <database-name> is "temp". If no database name is specified, and the TEMP - keyword is not present, the table is created in the main database.

-

- You cannot COPY, DELETE, INSERT or UPDATE a view. Views are read-only in SQLite. - However, in many cases you can use a TRIGGER - on the view to accomplish the same thing. Views are removed with the - DROP VIEW command.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_createvtab.html Index: Doc/Extra/lang_createvtab.html ================================================================== --- Doc/Extra/lang_createvtab.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - CREATE VIRTUAL TABLE - - - - -
-
-

- SQL As Understood By SQLite

-

- CREATE VIRTUAL TABLE

-

- - - - - -
- sql-command ::= - CREATE VIRTUAL TABLE [database-name .] table-name USING module-name [( - arguments )]
-

-

- A virtual table is an interface to an external storage or computation engine that - appears to be a table but does not actually store information in the database file.

-

- In general, you can do anything with a virtual table that can be done with an ordinary - table, except that you cannot create triggers on a virtual table. Some virtual table - implementations might impose additional restrictions. For example, many virtual - tables are read-only.

-

- The <module-name> is the - name of an object that implements the virtual table. - The <module-name> must be registered with the SQLite database connection using - sqlite3_create_module prior to - issuing the CREATE VIRTUAL TABLE statement. The module takes zero or more comma-separated - arguments. The arguments can be just about any text as long as it has balanced parentheses. - The argument syntax is sufficiently general that the arguments can be made to appear - as column definitions in a traditional CREATE TABLE - statement. SQLite passes the module arguments directly to the module without any - interpretation. It is the responsibility of the module implementation to parse and - interpret its own arguments.

-

- A virtual table is destroyed using the ordinary DROP - TABLE statement. There is no DROP VIRTUAL TABLE statement.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_datetime.html Index: Doc/Extra/lang_datetime.html ================================================================== --- Doc/Extra/lang_datetime.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - DateTime Functions - - - - -
-
-

Date and Time Functions

-

Five date and time functions are available, as follows: - -

    -
  1. date( timestring, modifier, modifier, ...) -
  2. time( timestring, modifier, modifier, ...) -
  3. datetime( timestring, modifier, modifier, ...) -
  4. julianday( timestring, modifier, modifier, ...) -
  5. strftime( format, timestring, modifier, modifier, ...) -
- -

All five functions take a time string as an argument. This -time string may be followed by zero or more modifiers. The -strftime() function also takes a format string as its first -argument. - -

The date() function returns the date in this format: YYYY-MM-DD. -The time() function returns the time as HH:MM:SS. The datetime() -function returns "YYYY-MM-DD HH:MM:SS". The julianday() function -returns the number of days since noon in Greenwich on November 24, 4714 B.C. -The julian day number is the preferred internal representation of -dates. The strftime() routine returns the date formatted according -to the format string specified as the first argument. The format string -supports most, but not all, of the more common substitutions found in -the strftime() function from the standard C library: - -

-   %d  day of month
-   %f  ** fractional seconds  SS.SSS
-   %H  hour 00-24
-   %j  day of year 001-366
-   %J  ** Julian day number
-   %m  month 01-12
-   %M  minute 00-59
-   %s  seconds since 1970-01-01
-   %S  seconds 00-59
-   %w  day of week 0-6  sunday==0
-   %W  week of year 00-53
-   %Y  year 0000-9999
-   %%  %
-
- -

The %f and %J conversions are new. Notice that all of the other four -functions could be expressed in terms of strftime(). - -

-   date(...)      ->  strftime("%Y-%m-%d", ...)
-   time(...)      ->  strftime("%H:%M:%S", ...)
-   datetime(...)  ->  strftime("%Y-%m-%d %H:%M:%S", ...)
-   julianday(...) ->  strftime("%J", ...)
-
- -

The only reasons for providing functions other than strftime() is for -convenience and for efficiency. - -

Time Strings - -

A time string can be in any of the following formats: - -

    -
  1. YYYY-MM-DD -
  2. YYYY-MM-DD HH:MM -
  3. YYYY-MM-DD HH:MM:SS -
  4. YYYY-MM-DD HH:MM:SS.SSS -
  5. YYYY-MM-DDTHH:MM -
  6. YYYY-MM-DDTHH:MM:SS -
  7. YYYY-MM-DDTHH:MM:SS.SSS -
  8. HH:MM -
  9. HH:MM:SS -
  10. HH:MM:SS.SSS -
  11. now -
  12. DDDD.DDDD -
- -

In formats 5 through 7, the "T" is a literal character separating the date and the time, as required by the ISO-8601 standard. These formats are supported in SQLite 3.2.0 and later. -Formats 8 through 10 that specify only a time assume a date of 2000-01-01. -Format 11, the string 'now', is converted into the current date and time. -Universal Coordinated Time (UTC) is used. -Format 12 is the julian day number expressed as a floating point value. - -

Modifiers - -

The time string can be followed by zero or more modifiers that alter the -date or alter the interpretation of the date. The available modifiers -are as follows. - -

    -
  1. NNN days -
  2. NNN hours -
  3. NNN minutes -
  4. NNN.NNNN seconds -
  5. NNN months (see #551 - and [1163] -) -
  6. NNN years (see #551 - and [1163] -) -
  7. start of month -
  8. start of year -
  9. start of week (withdrawn -- will not be implemented) -
  10. start of day -
  11. weekday N (see #551 - and [1163] -) -
  12. unixepoch -
  13. localtime -
  14. utc -
- -

The first six modifiers (1 through 6) simply add the specified amount -of time to the date specified by the preceding timestring. - -

The "start of" modifiers (7 through 10) shift the date backwards to -the beginning of the current month, year or day. - -

The "weekday" modifier advances the date forward to the next date where -the weekday number is N. Sunday is 0, Monday is 1, and so forth. - -

The "unixepoch" modifier (12) only works if it immediately follows -a timestring in the DDDDDDDDDD format. This modifier causes the DDDDDDDDDD -to be interpreted not as a julian day number as it normally would be, but -as the number of seconds since 1970. This modifier allows unix-based times -to be converted to julian day numbers easily. - -

The "localtime" modifier (13) adjusts the previous time string so that it -displays the correct local time. "utc" undoes this. - -

Examples - -

Compute the current date. - -

-  SELECT date('now');
-
- -

Compute the last day of the current month. - -

-  SELECT date('now','start of month','+1 month','-1 day');
-
- -

Compute the date and time given a unix timestamp 1092941466. - -

-  SELECT datetime(1092941466, 'unixepoch');
-
- -

Compute the date and time given a unix timestamp 1092941466, and compensate for your local timezone. - -

-  SELECT datetime(1092941466, 'unixepoch', 'localtime');
-
- -

Compute the current unix timestamp. - -

-  SELECT strftime('%s','now');
-
- -

Compute the number of days since the battle of Hastings. - -

-  SELECT julianday('now') - julianday('1066-10-14','gregorian');
-
- -

Compute the number of seconds between two dates: - -

-  SELECT julianday('now')*86400 - julianday('2004-01-01 02:34:56')*86400;
-
- -

Compute the date of the first Tuesday in October (January + 9) for the current -year. - -

-  SELECT date('now','start of year','+9 months','weekday 2');
-
- -

Caveats And Bugs - -

The computation of local time depends heavily on the whim of local -politicians and is thus difficult to get correct for all locales. In -this implementation, the standard C library function localtime() is -used to assist in the calculation of local time. -Note that localtime() is not -threadsafe, so use of the "localtime" modifier is not threadsafe. -Also, the localtime() C function normally only works for years between -1970 and 2037. For dates outside this range, SQLite attempts to -map the year into an equivalent year within this range, do the -calculation, then map the year back. - -

Please surround uses of localtime() with sqliteOsEnterMutex() and sqliteOsLeaveMutex() so threads -using SQLite are protected, at least! --- e It is so. --drh - -

[Consider instead, using localtime_r which is reentrant and may be used -*without* expensive mutex locking. Although non-standard it's available -on most Unixes --hauk] But it is not available on windows, as far as I -am aware. --drh On windows localtime() is thread-safe if the MT C runtime is used. The MT runtime uses thread-local storage for the static variables, the kind functions use.--gr [What about using localtime_r, and on systems where it -is unavailable defining it as sqliteOsEnterMutext() ; locatime() ; sqliteOsLeaveMutex() -so that non-windows systems get the maximum advantage, with almost zero -code impact?] The autoconfigury and patch for localtime_r is here: ¤http://www.sqlite.org/cvstrac/tktview?tn=1906 . I'm curious why this obvious fix is not applied. gmtime() also suffers from this same threadsafety problem. - -

Date computations do not give correct results for dates before Julian -day number 0 (-4713-11-24 12:00:00). - -

All internal computations assume the Gregorian calendar system. - -


-An anonymous user adds:
- -For my use I added new functions and functionalities to the date functions that -come with the sqlite 3.3.0 (can be used in older versions as well with small effort). - -

In main lines they are as follows: - -

    -
  1. NNN days -
  2. NNN hours -
  3. NNN minutes -
  4. NNN.NNNN seconds -
  5. NNN months (see #551 - and [1163] -) -
  6. NNN years (see #551 - and [1163] -) -
  7. start of month -
  8. start of year -
  9. start of week (!!! implemented) -
  10. start of day -
  11. weekday N (see #551 - and [1163] -) -
  12. unixepoch -
  13. localtime -
  14. utc -
  15. julian (not implemented as of 2004-01-05) -
  16. gregorian (not implemented as of 2004-01-05) -
  17. start of minute -
  18. start of hour -
  19. end of minute -
  20. end of hour -
  21. end of day -
  22. end of week -
  23. end of month -
  24. end of year -
  25. group seconds by -
  26. group minutes by -
  27. group hours by -
  28. group days by -
  29. group weeks by -
  30. group months by -
  31. group years by -
- -

The "start of" modifiers (7 through 10 and 17 through 18) shift the date backwards to the beginning of the current minute, hour, week, month, year or day. - -

The "end of" modifiers (19 through 24) shift the date forwards to -the end of the current minute, hour, week, month, year or day. - -

The "group * by" modifiers (25 through 31) round the date to the closest backward multiple supplied, with some limitations, to the current seconds (1 through 30), minutes (1 through 30), hours (1 through 12), days (1 through 15), weeks (1 through 26), months (1 through 6), years (1 through 100), these limitations are due to dont complicate the calculations when a multiple can span beyound the unit modified. - -

Ex: - -

SELECT datetime('2006-02-04 20:09:23','group hours by 3'); => '2006-02-04 18:00:00' - -

SELECT datetime('2006-02-05 20:09:23','group days by 3'); => '2006-02-04 00:00:00' - -

New functions "week_number(date)" returns the week number of the year on the supplied date parameter, "datetime2seconds(datetime)" return the number of seconds from the supplied datetime parameter. -


- -
-
- - DELETED Doc/Extra/lang_delete.html Index: Doc/Extra/lang_delete.html ================================================================== --- Doc/Extra/lang_delete.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - DELETE - - - - -
-
-

- SQL As Understood By SQLite

-

- DELETE

-

- - - - - -
- sql-statement ::= - DELETE FROM [database-name .] table-name [WHERE - expr]
-

-

- The DELETE command is used to remove records from a table. The command consists - of the "DELETE FROM" keywords followed by the - name of the table from which records - are to be removed. -

-

- Without a WHERE clause, all rows of the table are removed. If a WHERE clause is - supplied, then only those rows that match the expression are removed.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_detach.html Index: Doc/Extra/lang_detach.html ================================================================== --- Doc/Extra/lang_detach.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - DETACH - - - - -
-
-

- SQL As Understood By SQLite

-

- DETACH

-

- - - - - -
- sql-command ::= - DETACH [DATABASE] database-name
-

-

- This statement detaches an additional database connection previously attached using - the ATTACH DATABASE statement. It is possible to have the same database file attached multiple times using different names, and detaching - one connection to a file will leave the others intact.

-

- This statement will fail if SQLite is in the middle of a transaction.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_dropindex.html Index: Doc/Extra/lang_dropindex.html ================================================================== --- Doc/Extra/lang_dropindex.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - DROP INDEX - - - - -
-
-

- SQL As Understood By SQLite

-

- DROP INDEX

-

- - - - - -
- sql-command ::= - DROP INDEX [IF EXISTS] [database-name .] - index-name
-

-

- The DROP INDEX statement removes an index added with the - CREATE INDEX statement. The index named is completely removed from the disk. - The only way to recover the index is to reenter the appropriate CREATE INDEX command.

-

- The DROP INDEX statement does not reduce the size of the database file in the default - mode. Empty space in the database is retained for later INSERTs. To remove free - space in the database, use the - VACUUM command. If - AUTOVACUUM mode is enabled for a database then space will be freed automatically by DROP INDEX.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_droptable.html Index: Doc/Extra/lang_droptable.html ================================================================== --- Doc/Extra/lang_droptable.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - DROP TABLE - - - - -
-
-

- SQL As Understood By SQLite

-

- DROP TABLE

-

- - - - - -
- sql-command ::= - DROP TABLE [IF EXISTS] [database-name.] - table-name
-

-

- The DROP TABLE statement removes a table added with the CREATE TABLE statement. The - name specified is the table name. It is completely removed - from the database schema and the disk file. The table can not be recovered. All - indices associated with the table are also deleted.

-

- The DROP TABLE statement does not reduce the size of the database file in the default - mode. Empty space in the database is retained for later INSERTs. To remove free - space in the database, use the - VACUUM command. If - AUTOVACUUM mode is enabled for a database then space will be freed automatically by DROP TABLE.

-

- The optional IF EXISTS clause suppresses the error that would normally result if the table does not exist.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_droptrigger.html Index: Doc/Extra/lang_droptrigger.html ================================================================== --- Doc/Extra/lang_droptrigger.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - DROP TRIGGER - - - - -
-
-

- SQL As Understood By SQLite

-

- DROP TRIGGER

-

- - - - - -
- sql-statement ::= - DROP TRIGGER [database-name .] trigger-name
-

-

- The DROP TRIGGER statement removes a trigger created by the - CREATE TRIGGER statement. The trigger is deleted from the database schema. - Note that triggers are automatically dropped when the associated table is dropped.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_dropview.html Index: Doc/Extra/lang_dropview.html ================================================================== --- Doc/Extra/lang_dropview.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - DROP VIEW - - - - -
-
-

- SQL As Understood By SQLite

-

- DROP VIEW

-

- - - - - -
- sql-command ::= - DROP VIEW view-name
-

-

- The DROP VIEW statement removes a view created by the CREATE VIEW statement. The - name specified is the view name. It is removed from the - database schema, but no actual data - in the underlying base tables is modified.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_explain.html Index: Doc/Extra/lang_explain.html ================================================================== --- Doc/Extra/lang_explain.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - EXPLAIN - - - - -
-
-

- SQL As Understood By SQLite

-

- EXPLAIN

-

- - - - - -
- sql-statement ::= - EXPLAIN sql-statement
-

-

- The EXPLAIN command modifier is a non-standard extension. The idea comes from a similar command found in PostgreSQL, but the operation is completely different.

-

- If the EXPLAIN keyword appears before any - other SQLite SQL command then instead - of actually executing the command, the SQLite library will report back the sequence - of virtual machine instructions it would have used to execute the command had the - EXPLAIN keyword not been present. For additional information about virtual machine - instructions see the architecture description - or the documentation on available opcodes - for the virtual machine.

-

-  

-
- -
-
- - DELETED Doc/Extra/lang_expr.html Index: Doc/Extra/lang_expr.html ================================================================== --- Doc/Extra/lang_expr.html +++ /dev/null @@ -1,905 +0,0 @@ - - - - expression - - - - - -
-
-

- SQL As Understood By SQLite

-

- expression

-

- - - - - - - - - -
- expr ::= - expr binary-op expr - |
-
expr - [NOT] - like-op - expr [ESCAPE expr] |
-
unary-op - expr - |
- (
expr - ) |
-
column-name - |
-
table-name - . column-name - |
-
database-name - . table-name - . column-name - |
-
literal-value - |
-
parameter - |
-
function-name - ( expr-list - | * ) - |
-
expr ISNULL - |
-
expr NOTNULL - |
-
expr - [NOT] BETWEEN - expr AND - expr - |
-
expr - [NOT] IN ( - value-list - ) |
-
expr - [NOT] IN ( - select-statement - ) |
-
expr - [NOT] IN - [database-name .] - table-name - |
-
[EXISTS] - ( select-statement - ) |
- CASE
[expr] ( - WHEN expr - THEN expr - )+ [ELSE - expr] END |
- CAST (
expr - AS type - )
- like-op ::= - LIKE | GLOB - | REGEXP | MATCH
-

-

- This section is different from the others. Most other sections of this document - talks about a particular SQL command. This section does not talk about a standalone - command but about "expressions" which are subcomponents of most other commands.

-

- SQLite understands the following binary operators, in order from highest to lowest - precedence:

-
-
|| * / % + - << >> & | < <= >
-  >= = == != <> IN AND OR
-
-
-

- Supported unary operators are these:

-
-
- + ! ~ NOT
-
-
-

- The unary operator [Operator +] is a no-op. It can be applied to strings, numbers, - or blobs and it always gives as its result the value of the operand.

-

- Note that there are two variations of the equals and not equals operators. Equals - can be either = or - ==. The non-equals operator can be either - != or <>. The - || operator is "concatenate" - it joins together the two - strings of its operands. The operator % - outputs the remainder of its left operand modulo its right operand.

-

- The result of any binary operator is a numeric value, except for the - || concatenation operator which gives a string result.

- -

- A literal value is an integer number or a floating point number. Scientific notation - is supported. The "." character is always used as the decimal point even if the - locale setting specifies "," for this role - the use of "," for the decimal point - would result in syntactic ambiguity. A string constant is formed by enclosing the - string in single quotes ('). A single quote within the string can be encoded by - putting two single quotes in a row - as in Pascal. C-style escapes using the backslash - character are not supported because they are not standard SQL. BLOB literals are - string literals containing hexadecimal data and preceded by a single "x" or "X" - character. For example:

-
-
X'53514697465'
-
-
-

- A literal value can also be the token "NULL". -

-

- A parameter specifies a placeholder in the expression for a literal value that is - filled in at runtime using the sqlite3_bind - API. Parameters can take several forms: -

-

- - - - - - - - - - - - - - - - - - - - - - - - - - -
- ?NNN - - A question mark followed by a number NNN holds a spot for the NNN-th parameter. - NNN must be between 1 and 999.
- ? - - A question mark that is not followed by a number holds a spot for the next unused - parameter.
- :AAAA - - A colon followed by an identifier name holds a spot for a named parameter with the - name AAAA. Named parameters are also numbered. The number assigned is the next unused - number. To avoid confusion, it is best to avoid mixing named and numbered parameters.
- @AAAA - - An "at" sign works exactly like a colon.
- $AAAA - - A dollar-sign followed by an identifier name also holds a spot for a named parameter - with the name AAAA. The identifier name in this case can include one or more occurances - of "::" and a suffix enclosed in "(...)" containing any text at all. This syntax - is the form of a variable name in the Tcl programming language.
-

-
-
-

- Parameters that are not assigned values using - sqlite3_bind are treated as NULL.

- -

- The LIKE operator does a pattern matching comparison. The operand to the right contains - the pattern, the left hand operand contains the string to match against the pattern. - A percent symbol % in the pattern matches - any sequence of zero or more characters in the string. An underscore - _ in the pattern matches any single character in the string. - Any other character matches itself or it's lower/upper case equivalent (i.e. case-insensitive - matching). (A bug: SQLite only understands upper/lower case for 7-bit Latin characters. - Hence the LIKE operator is case sensitive for 8-bit iso8859 characters or UTF-8 - characters. For example, the expression 'a' LIKE 'A' is TRUE but 'æ' LIKE - 'Æ' is FALSE.).

-

- If the optional ESCAPE clause is present, then the expression following the ESCAPE - keyword must evaluate to a string consisting of a single character. This character - may be used in the LIKE pattern to include literal percent or underscore characters. - The escape character followed by a percent symbol, underscore or itself matches - a literal percent symbol, underscore or escape character in the string, respectively. - The infix LIKE operator is implemented by calling the user function - like(X,Y).

-

- The LIKE operator is not case sensitive and will match upper case characters on - one side against lower case characters on the other. (A bug: SQLite only understands - upper/lower case for 7-bit Latin characters. Hence the LIKE operator is case sensitive - for 8-bit iso8859 characters or UTF-8 characters. For example, the expression 'a' - LIKE 'A' is TRUE but 'æ' LIKE 'Æ' is FALSE.). -

-

-

-

- The infix LIKE operator is implemented by calling the user function - like(X,Y). If an ESCAPE clause is present, it adds a third parameter - to the function call. If the functionality of LIKE can be overridden by defining - an alternative implementation of the like() SQL function.

-

-

- -

- The GLOB operator is similar to LIKE but uses the Unix file globbing syntax for - its wildcards. Also, GLOB is case sensitive, unlike LIKE. Both GLOB and LIKE may - be preceded by the NOT keyword to invert the sense of the test. The infix GLOB operator - is implemented by calling the user function glob(X,Y) - and can be modified by overriding that function.

- -

- The REGEXP operator is a special syntax for the regexp() user function. No regexp() - user function is defined by default and so use of the REGEXP operator will normally - result in an error message. If a user-defined function named "regexp" is added at - run-time, that function will be called in order to implement the REGEXP operator.

- -

- The MATCH operator is a special syntax for the match() user function. The default - match() function implementation raises and exception and is not really useful for - anything. But extensions can override the match() function with more helpful logic.

-

- A column name can be any of the names defined in the CREATE TABLE statement or one - of the following special identifiers: "ROWID", "OID", or "_ROWID_". - These special identifiers all describe the unique random integer key (the "row key") - associated with every row of every table. The special identifiers only refer to - the row key if the CREATE TABLE statement does not define a real column with the - same name. Row keys act like read-only columns. A row key can be used anywhere a - regular column can be used, except that you cannot change the value of a row key - in an UPDATE or INSERT statement. "SELECT * ..." does not return the row key.

-

- SELECT statements can appear in expressions as either the right-hand operand of - the IN operator, as a scalar quantity, or as the operand of an EXISTS operator. - As a scalar quantity or the operand of an IN operator, the SELECT should have only - a single column in its result. Compound SELECTs (connected with keywords like UNION - or EXCEPT) are allowed. With the EXISTS operator, the columns in the result set - of the SELECT are ignored and the expression returns TRUE if one or more rows exist - and FALSE if the result set is empty. If no terms in the SELECT expression refer - to value in the containing query, then the expression is evaluated once prior to - any other processing and the result is reused as necessary. If the SELECT expression - does contain variables from the outer query, then the SELECT is reevaluated every - time it is needed.

-

- When a SELECT is the right operand of the IN operator, the IN operator returns TRUE - if the result of the left operand is any of the values generated by the select. - The IN operator may be preceded by the NOT keyword to invert the sense of the test.

-

- When a SELECT appears within an expression but is not the right operand of an IN - operator, then the first row of the result of the SELECT becomes the value used - in the expression. If the SELECT yields more than one result row, all rows after the first are ignored. If the SELECT yields no rows, then the value of the SELECT - is NULL.

-

- A CAST expression changes the datatype of the - - - into the type specified by <type>. <type> can be any non-empty type - name that is valid for the type in a column definition of a CREATE TABLE statement.

-

- Both simple and aggregate functions are supported. A simple function can be used - in any expression. Simple functions return a result immediately based on their inputs. - Aggregate functions may only be used in a SELECT statement. Aggregate functions - compute their result across all rows of the result set.

-

- Core Functions -

-

- The core functions shown below are available by default. Additional functions may - be written in C and added to the database engine using the - sqlite3_create_function() API.

-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- abs(X) - Return the absolute value of argument X.
- acos(X) - A mathematical function that returns the angle, in radians, whose cosine is the - specified double expression
- acosh(X) - Inverse hyperbolic cosine
- asin(X) - Returns the angle, in radians, whose sine is the specified double - expression
- asinh(X) - Inverse hyperbolic sine
- atan(X) - Returns the angle in radians whose tangent is a specified double - expression
- atanh(X) - Inverse hyperbolic tangent
- atn2(X,Y)
- atan2(X,Y)
- Returns the angle, in radians, between the positive x-axis and the ray from the - origin to the point (y, x), where x and y are the values of the two specified - double expressions
- ceil(X)
- ceiling(X)
- Returns the smallest integer greater than, or equal to, the specified numeric - expression
- charindex(X,Y[,Z]) - Returns the 1-based position of the string X inside the string Y - starting at position Z.  Returns 0 if not X is not found - within Y.
- coalesce(X,Y,...) - Return a copy of the first non-NULL argument. If all arguments are NULL then NULL - is returned. There must be at least 2 arguments.
- cos(X) - a mathematical function that returns the trigonometric cosine of the specified - angle, in radians, in the specified expression
- cosh(X) - Hyperbolic cosine
- cot(X) - A mathematical function that returns the trigonometric cotangent of the - specified angle, in radians, in the specified double expression
- coth(X) - Hyperbolic cotangent
- difference(X,Y) - Returns an integer value that indicates the difference between the SOUNDEX - values of two character expressions
- degrees(X) - Converts radians to degrees
- exp(X) - Returns the exponential value of the specified expression
- floor(X) - Returns the largest integer less than or equal to the specified numeric - expression
- glob(X,Y) - This function is used to implement the "X GLOB Y" syntax of SQLite. The sqlite3_create_function() interface - can be used to override this function and thereby change the operation of the GLOB operator.
- ifnull(X,Y) - Return a copy of the first non-NULL argument. If both arguments are NULL then NULL - is returned. This behaves the same as coalesce() above.
- last_insert_rowid() - Return the ROWID of the last row insert from this connection to the database. This - is the same value that would be returned from the sqlite_last_insert_rowid() - API function.
- last_rows_affected() - Returns the number of rows affected by the last insert/update operation
- leftstr(X,Y) - Returns the leftmost Y characters in string X.
- length(X) - Return the string length of X in characters. If SQLite is configured to support - UTF-8, then the number of UTF-8 characters is returned, not the number of bytes.
- like(X,Y [,Z]) - This function is used to implement the "X LIKE Y [ESCAPE Z]" syntax of SQL. - If the optional ESCAPE clause is present, then the user-function is invoked with - three arguments. Otherwise, it is invoked with two arguments only. The - sqlite_create_function() interface can be used to override this function and - thereby change the operation of the LIKE operator. When doing - this, it may be important to override both the two and three argument versions of - the like() function. Otherwise, different code may be called to implement the LIKE - operator depending on whether or not an ESCAPE clause was specified.
- load_extension(X)
- load_extension(X,Y)
- Load SQLite extensions out of the shared library file named X using the entry - point Y. The result is a NULL. If Y is omitted then the default entry - point of sqlite3_extension_init is used. This function raises an exception - if the extension fails to load or initialize correctly. -
- log(X) - Returns the natural logarithm of the specified double expression
- log10(X) - Returns the base-10 logarithm of the specified double expression
- lower(X) - Return a copy of string X will all characters converted to lower case. The - C library tolower() routine is used for the conversion, which means that - this function might not work correctly on UTF-8 characters.
- max(X,Y,...) - Return the argument with the maximum value. Arguments may be strings in addition - to numbers. The maximum value is determined by the usual sort order. Note that - max() is a simple function when it has 2 or more arguments but converts to - an aggregate function if given only a single argument.
- min(X,Y,...) - Return the argument with the minimum value. Arguments may be strings in addition - to numbers. The minimum value is determined by the usual sort order. Note that - min() is a simple function when it has 2 or more arguments but converts to - an aggregate function if given only a single argument.
- nullif(X,Y) - Return the first argument if the arguments are different, otherwise return NULL.
- padc(X,Y) - Pads the given string X on the left and the right with spaces until it is - the specified length Y
- padl(X,Y) - Pads the given string X on the left with spaces until it is the specified - length Y
- padr(X,Y) - Pads the given string X on the right with spaces until it is the - specified length Y
- pi - Returns the value of pi
- power(X,Y) - Returns the value of the specified expression X to the specified power - Y
- proper(X) - Proper-case the given string X
- quote(X) - This routine returns a string which is the value of its argument suitable for inclusion - into another SQL statement. Strings are surrounded by single-quotes with escapes - on interior quotes as needed. BLOBs are encoded as hexadecimal literals. The current - implementation of - VACUUM uses this function. The function is also useful when writing - triggers to implement undo/redo functionality. -
- radians(X) - Converts degrees to radians
- random(*) - Return a pseudo-random integer between -9223372036854775808 and +9223372036854775807.
- replace(X,Y,Z) - Replace all occurances of Y inside string X with the replacement - text Z.  Case-sensitive.
- replicate(X,Y) - Return the concatenation of string X repeated Y times
- reverse(X) - Returns the string X reversed
- rightstr(X,Y) - Returns the right-most Y characters in string X.
- round(X)
- round(X,Y)
- Round off the number X to Y digits to the right of the decimal point. - If the Y argument is omitted, 0 is assumed.
- sign(X) - Returns the positive (+1), zero (0), or negative (-1) sign of the specified - expression
- sin(X) - Returns the trigonometric sine of the specified angle, in radians, and in an - approximate numeric, double, expression
- soundex(X) - Compute the soundex encoding of the string X. The string "?000" is - returned if the argument is NULL.
- sqlite_version(*) - Return the version string for the SQLite library that is running. Example: "3.6.0"
- sqrt(X) - Returns the square root of the specified value
- square(X) - Returns the square of the specified value
- strfilter(X,Y) - Given a source string X and the characters to filter Y, returns - X with all characters not found in Y removed.
- substr(X,Y,Z) - Return a substring of input string X that begins with the Y-th character - and which is Z characters long. The left-most character of X is number - 1. If Y is negative the the first character of the substring is found by - counting from the right rather than the left. If SQLite is configured to support - UTF-8, then characters indices refer to actual UTF-8 characters, not bytes.
- tan(X) - Returns the tangent of the input expression
- tanh(X) - Hyperbolic tangent
- typeof(X) - Return the type of the expression X. The only return values are "null", "integer", - "real", "text", and "blob". - SQLite's type handling is explained in - Datatypes in SQLite Version 3.
- upper(X) - Return a copy of input string X converted to all upper-case letters. The - implementation of this function uses the C library routine toupper() which - means it may not work correctly on UTF-8 strings.
-

-

- Aggregate Functions -

-

- The aggregate functions shown below are available by default. Additional aggregate - functions written in C may be added using the - sqlite3_create_function() API.

-

- In any aggregate function that takes a single argument, that argument can be preceeded - by the keyword DISTINCT. In such cases, duplicate elements are filtered before being - passed into the aggregate function. For example, the function "count(distinct X)" - will return the number of distinct values of column X instead of the total number - of non-null values in column X. -

-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- avg(X) - Return the average value of all non-NULL X within a group. String and BLOB - values that do not look like numbers are interpreted as 0. The result of avg() is - always a floating point value even if all inputs are integers. -

-

-
- count(X)
- count(*)
- The first form return a count of the number of times that X is not NULL in - a group. The second form (with no argument) returns the total number of rows in - the group.
- lower_quartile(X) - Returns the lower quartile of the given numbers in the set
- max(X) - Return the maximum value of all values in the group. The usual sort order is used - to determine the maximum.
- median(X) - Returns the middle value in a set of ordered numbers. (The medial value is - unlike the mean value, which is the sum of a set of numbers divided by the count - of numbers in the set). The median value is determined by choosing the smallest - value such that at least half of the values in the set are no greater than the - chosen value. If the number of values within the set is odd, the median value - corresponds to a single value. If the number of values within the set is even, - the median value corresponds to the sum of the two middle values divided by two.
- min(X) - Return the minimum non-NULL value of all values in the group. The usual sort order - is used to determine the minimum. NULL is only returned if all values in the group - are NULL.
- mode(X) - Computes the most frequently occurring value in a sample set
- stdev(X) - Returns the statistical standard deviation of all values in the specified - expression
- sum(X)
- total(X)
- Return the numeric sum of all non-NULL values in the group. If there are no non-NULL - input rows then sum() returns NULL but total() returns 0.0. NULL is not normally - a helpful result for the sum of no rows but the SQL standard requires it and most - other SQL database engines implement sum() that way so SQLite does it in the same - way in order to be compatible. The non-standard total() function is provided as - a convenient way to work around this design problem in the SQL language. -

-

-

- The result of total() is always a floating point value. The result of sum() is an - integer value if all non-NULL inputs are integers. If any input to sum() is neither - an integer or a NULL then sum() returns a floating point value which might be an - approximation to the true sum.

-

- Sum() will throw an "integer overflow" exception if all inputs are integers or NULL - and an integer overflow occurs at any point during the computation. Total() never - throws an exception.

-
- upper_quartile(X) - Returns the upper quartile of the numbers in the given set
-

-
- -
-
- - DELETED Doc/Extra/lang_insert.html Index: Doc/Extra/lang_insert.html ================================================================== --- Doc/Extra/lang_insert.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - INSERT - - - - -
-
-

- SQL As Understood By SQLite

-

- INSERT

-

- - - - - -
- sql-statement ::= - INSERT [OR - conflict-algorithm] INTO [database-name .] - table-name - [(column-list)] VALUES(value-list) - |
- INSERT
[OR - conflict-algorithm] - INTO [database-name .] - table-name - [(column-list)] select-statement
-

-

- The INSERT statement comes in two basic forms. The first form (with the "VALUES" - keyword) creates a single new row in an existing table. If no column-list is specified - then the number of values must be the same as the number of columns in the table. - If a column-list is specified, then the number of values must match the number of - specified columns. Columns of the table that do not appear in the column list are - filled with the default value, or with NULL if not default value is specified. -

-

- The second form of the INSERT statement takes it data - from a SELECT statement. The - number of columns in the result of the SELECT must exactly match the number of columns - in the table if no column list is specified, or it must match the number of columns - name in the column list. A new entry is made in the table for every row of the SELECT - result. The SELECT may be simple or compound. If the SELECT statement has an ORDER - BY clause, the ORDER BY is ignored.

-

- The optional conflict-clause allows the specification of an alternative constraint conflict resolution algorithm to use during this one command. See the section titled - ON CONFLICT for additional information. For compatibility - with MySQL, the parser allows the use of the single keyword - REPLACE as an alias for "INSERT OR REPLACE". -

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_reindex.html Index: Doc/Extra/lang_reindex.html ================================================================== --- Doc/Extra/lang_reindex.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - REINDEX - - - - -
-
-

- SQL As Understood By SQLite

-

- REINDEX

-

- - - - - -
- sql-statement ::= - REINDEX collation - name
- - - - - -
- sql-statement ::= - REINDEX [database-name .] table/index-name
-

-

- The REINDEX command is used to delete and recreate indices from scratch. This is - useful when the definition of a collation sequence has changed. -

-

- In the first form, all indices in all attached databases that use the named collation - sequence are recreated. In the second form, if [database-name.]table/index-name - identifies a table, then all indices associated with the table are rebuilt. If an - index is identified, then only this specific index is deleted and recreated. -

-

- If no database-name is specified and there exists both a table or index and - a collation sequence of the specified name, then indices associated with the collation - sequence only are reconstructed. This ambiguity may be dispelled by always specifying - a database-name when reindexing a specific table or index. -

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_replace.html Index: Doc/Extra/lang_replace.html ================================================================== --- Doc/Extra/lang_replace.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - REPLACE - - - - -
-
-

- SQL As Understood By SQLite

-

- REPLACE

-

- - - - - -
- sql-statement ::= - REPLACE INTO [database-name .] table-name [( - column-list )] VALUES ( value-list ) |
- REPLACE INTO
[database-name .] - table-name - [( column-list )] - select-statement
-

-

- The REPLACE command is an alias for the "INSERT OR REPLACE" variant of the - INSERT command. This alias is provided for compatibility with MySQL. See the - INSERT command documentation for additional information.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_select.html Index: Doc/Extra/lang_select.html ================================================================== --- Doc/Extra/lang_select.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - SELECT - - - - -
-
-

- SQL As Understood By SQLite

-

- SELECT

-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- sql-statement ::= - SELECT [ALL - | DISTINCT] - result - [FROM table-list]
-
[WHERE expr]
-
[GROUP BY - expr-list]
-
[HAVING expr]
-
[compound-op select]*
-
[ORDER BY - sort-expr-list]
-
[LIMIT integer [( - OFFSET | , - ) integer]]
- result ::= - result-column [, - result-column]*
- result-column ::= - * | - table-name - . * | - expr - [ [AS] string - ]
- table-list ::= - table [join-op table - join-args]*
- table ::= - table-name [AS - alias] - |
- (
select - ) [AS - alias]
- join-op ::= - , | - [NATURAL] - [LEFT | - RIGHT | FULL] - [OUTER | - INNER | CROSS] JOIN
- join-args ::= - [ON expr] - [USING ( - id-list )]
- sort-expr-list ::= - expr [sort-order] [, - expr - [sort-order]]*
- sort-order ::= - [ COLLATE - collation-name - ] [ ASC - | DESC ]
- compound_op ::= - UNION | UNION - ALL | INTERSECT | EXCEPT
-

-

- The SELECT statement is used to query the database. The result of a SELECT is zero - or more rows of data where each row has a fixed number of columns. The number of - columns in the result is specified by the expression list in between the SELECT - and FROM keywords. Any arbitrary expression can be used as a result. If a result - expression is * then all columns of all - tables are substituted for that one expression. If the expression is the name of - a table followed by .* then the result is - all columns in that one table.

-

- The DISTINCT keyword causes a subset of result rows to be returned, in which each - result row is different. NULL values are not treated as distinct from each other. - The default behavior is that all result rows be returned, which can be made explicit - with the keyword ALL.

-

- The query is executed against one or more tables specified after the FROM keyword. - If multiple tables names are separated by commas, then the query is against the - cross join of the various tables. The full SQL-92 join syntax can also be used to - specify joins. A sub-query in parentheses may be substituted for any table name - in the FROM clause. The entire FROM clause may be omitted, in which case the result - is a single row consisting of the values of the expression list. -

-

- The WHERE clause can be used to limit the number of rows over which the query operates.

-

- The GROUP BY clauses causes one or more rows of the result to be combined into a - single row of output. This is especially useful when the result contains aggregate - functions. The expressions in the GROUP BY clause do not have to be expressions - that appear in the result. The HAVING clause is similar to WHERE except that HAVING - applies after grouping has occurred. The HAVING expression may refer to values, - even aggregate functions, that are not in the result.

-

- The ORDER BY clause causes the output rows to be sorted. The argument to ORDER BY - is a list of expressions that are used as the key for the sort. The expressions - do not have to be part of the result for a simple SELECT, but in a compound SELECT - each sort expression must exactly match one of the result columns. Each sort expression - may be optionally followed by a COLLATE keyword and the name of a collating function - used for ordering text and/or keywords ASC or DESC to specify the sort order.

-

- The LIMIT clause places an upper bound on the number of rows returned in the result. - A negative LIMIT indicates no upper bound. The optional OFFSET following LIMIT specifies - how many rows to skip at the beginning of the result set. In a compound query, the - LIMIT clause may only appear on the final SELECT statement. The limit is applied - to the entire query not to the individual SELECT statement to which it is attached. - Note that if the OFFSET keyword is used in the LIMIT clause, then the limit is the - first number and the offset is the second number. If a comma is used instead of - the OFFSET keyword, then the offset is the first number and the limit is the second - number. This seeming contradition is intentional - it maximizes compatibility with - legacy SQL database systems. -

-

- A compound SELECT is formed from two or more simple SELECTs connected by one of - the operators UNION, UNION ALL, INTERSECT, or EXCEPT. In a compound SELECT, all - the constituent SELECTs must specify the same number of result columns. There may - be only a single ORDER BY clause at the end of the compound SELECT. The UNION and - UNION ALL operators combine the results of the SELECTs to the right and left into - a single big table. The difference is that in UNION all result rows are distinct - where in UNION ALL there may be duplicates. The INTERSECT operator takes the intersection - of the results of the left and right SELECTs. EXCEPT takes the result of left SELECT - after removing the results of the right SELECT. When three or more SELECTs are connected - into a compound, they group from left to right.

-

-  

-
- -
-
- - DELETED Doc/Extra/lang_transaction.html Index: Doc/Extra/lang_transaction.html ================================================================== --- Doc/Extra/lang_transaction.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - TRANSACTIONS - - - - -
-
-

- SQL As Understood By SQLite

-

- BEGIN TRANSACTION

-

- - - - - -
- sql-statement ::= - BEGIN [ DEFERRED - | IMMEDIATE | EXCLUSIVE ] [TRANSACTION [name]]
- - - - - -
- sql-statement ::= - END [TRANSACTION - [name]]
- - - - - -
- sql-statement ::= - COMMIT [TRANSACTION - [name]]
- - - - - -
- sql-statement ::= - ROLLBACK [TRANSACTION - [name]]
-

-

- Beginning in version 2.0, SQLite supports transactions with rollback and atomic - commit.

-

- The optional transaction name is ignored. SQLite currently does not allow nested - transactions.

-

- No changes can be made to the database except within a transaction. Any command - that changes the database (basically, any SQL command - other than SELECT) will automatically start a transaction if one is not already in effect. Automatically started transactions - are committed at the conclusion of the command. -

-

- Transactions can be started manually using the BEGIN command. Such transactions - usually persist until the next COMMIT or ROLLBACK command. But a transaction will - also ROLLBACK if the database is closed or if an error occurs and the ROLLBACK conflict - resolution algorithm is specified. See the documentation on the - ON CONFLICT clause for additional information about the ROLLBACK conflict - resolution algorithm. -

-

- In SQLite version 3.0.8 and later, transactions can be deferred, immediate, or exclusive. - Deferred means that no locks are acquired on the database until the database is - first accessed. Thus with a deferred transaction, the BEGIN statement itself does - nothing. Locks are not acquired until the first read or write operation. The first - read operation against a database creates a SHARED lock and the first write operation - creates a RESERVED lock. Because the acquisition of locks is deferred until they - are needed, it is possible that another thread or process could create a separate - transaction and write to the database after the BEGIN on the current thread has - executed. If the transaction is immediate, then RESERVED locks are acquired on all - databases as soon as the BEGIN command is executed, without waiting for the database - to be used. After a BEGIN IMMEDIATE, you are guaranteed that no other thread or - process will be able to write to the database or do a BEGIN IMMEDIATE or BEGIN EXCLUSIVE. - Other processes can continue to read from the database, however. An exclusive transaction - causes EXCLUSIVE locks to be acquired on all databases. After a BEGIN EXCLUSIVE, - you are guaranteed that no other thread or process will be able to read or write - the database until the transaction is complete. -

-

- A description of the meaning of SHARED, RESERVED, and EXCLUSIVE locks is available - separately. -

-

- The default behavior for SQLite version 3.0.8 is a deferred transaction. For SQLite - version 3.0.0 through 3.0.7, deferred is the only kind of transaction available. - For SQLite version 2.8 and earlier, all transactions are exclusive. -

-

- The COMMIT command does not actually perform a commit until all pending SQL commands - finish. Thus if two or more SELECT statements are in the middle of processing and - a COMMIT is executed, the commit will not actually occur until all SELECT statements - finish. -

-

- An attempt to execute COMMIT might result in an SQLITE_BUSY return code. This indicates - that another thread or process had a read lock on the database that prevented the - database from being updated. When COMMIT fails in this way, the transaction remains - active and the COMMIT can be retried later after the reader has had a chance to - clear. -

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_types.html Index: Doc/Extra/lang_types.html ================================================================== --- Doc/Extra/lang_types.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - TYPES - - - - -
-
-

- SQL As Understood By SQLite (sortof)

-

- TYPES

-

- - - - - - - - - -
- sql-statement ::= - TYPES [datatype name][,datatype name][,datatype - name][,...] ; select-stmt
- select-stmt ::= - see SELECT
-

-

- Use the TYPES keyword before a SELECT statement to provide the SQLite ADO.NET provider - a list of return datatypes to expect from the subsequent SELECT statement.  -

-

- This is a language extension (aka hack) to SQLite specifically for the ADO.NET data - provider.  It is a pseudo-statement, meaning only the ADO.NET provider understands - it.

-

- Background

-

- Due to SQLite's typeless nature, there are certain kinds of queries for which the - ADO.NET provider cannot determine the proper return data type.  Scalar and - aggregate functions pose a particular problem because - there is no requirement for a given scalar or aggregate function to return any particular - datatype.  As a matter of fact, scalar functions could theoretically return - a different datatype for every row or column in a query and this is perfectly legal - from SQLite's point of view.

-

- Since ADO.NET is designed around a typed system and we're shoe-horning SQLite into - it, this keyword helps the provider out in cases where the return type cannot be easily determined.

-

- This command must be used in conjunction with a SELECT statement.  It only - works when both the TYPES keyword and its value(s) are passed along with a SELECT - statement as a single semi-colon separated unit.

-

- Examples

-

- TYPES [bigint], [int], [smallint], [tinyint];
- SELECT 1, 2, 3, 4;

-

- The above query would return the columns as types System.Int64, System.Int32, System.Int16 - and System.Byte respectively.

-

- TYPES [bigint], [int], , [tinyint];
- SELECT 1, 2, 3, 4;

-

- In this sample, only columns 1, 2 and 4 would have explicit typing.  Column - 3's datatype would pass though the system and be discovered normally.

-

- TYPES real;
- SELECT SUM(Cost) FROM [Products];

-

- The above query explicitly tells the provider that the SUM aggregate function returns - a System.Double.

-

- Usage Notes

- -
- -
-
- - DELETED Doc/Extra/lang_update.html Index: Doc/Extra/lang_update.html ================================================================== --- Doc/Extra/lang_update.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - UPDATE - - - - -
-
-

- SQL As Understood By SQLite

-

- UPDATE

-

- - - - - - - - - -
- sql-statement ::= - UPDATE [ OR - conflict-algorithm - ] [database-name .] table-name
- SET
assignment - [, - assignment]*
-
[WHERE expr]
- assignment ::= - column-name = expr
-

-

- The UPDATE statement is used to change the value of columns in selected rows of - a table. Each assignment in an UPDATE specifies a column - name to the left of the - equals sign and an arbitrary expression to the right. The expressions may use the - values of - other columns. All expressions are evaluated before any assignments are - made. A WHERE clause can be used to restrict which rows are updated.

-

- The optional conflict-clause allows the specification of an alternative constraint conflict resolution algorithm to use during this one command. See the section titled - ON CONFLICT for additional information.

-

-


-  

- -
-
- - DELETED Doc/Extra/lang_vacuum.html Index: Doc/Extra/lang_vacuum.html ================================================================== --- Doc/Extra/lang_vacuum.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - TYPES - - - - -
-
-

- SQL As Understood By SQLite

-

- VACUUM

-

- - - - - -
- sql-statement ::= - VACUUM [index-or-tablename]
-

-

- The VACUUM command is an SQLite extension modeled after a similar command found - in PostgreSQL. If VACUUM is invoked with the name of a table or index then it is - suppose to clean up the named table or index. In version 1.0 of SQLite, the VACUUM - command would invoke gdbm_reorganize() to clean up the backend database file.

-

- VACUUM became a no-op when the GDBM backend was removed from SQLITE in version 2.0.0. - VACUUM was reimplemented in version 2.8.1. The index or table name argument is now - ignored. -

-

- When an object (table, index, or trigger) is dropped from the database, it leaves - behind empty space. This makes the database file larger than it needs to be, but - can speed up inserts. In time inserts and deletes can leave the database file structure - fragmented, which slows down disk access to the database contents. The VACUUM command - cleans the main database by copying its contents to a temporary database file and - reloading the original database file from the copy. This eliminates free pages, - aligns table data to be contiguous, and otherwise cleans up the database file structure. - It is not possible to perform the same process on an attached database file.

-

- This command will fail if there is an active transaction. This command has no effect - on an in-memory database.

-

- As of SQLite version 3.1, an alternative to using the VACUUM command is auto-vacuum - mode, enabled using the auto_vacuum pragma.

-

-  

-
- -
-
- - DELETED Doc/Extra/limitations.html Index: Doc/Extra/limitations.html ================================================================== --- Doc/Extra/limitations.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - Provider Limitations - - - - -
-
-

Limitations of this ADO.NET SQLite Data Provider

-

As providers go, this one doesn't have many restrictions. SQLite has no - support for row-level or table-level locks. When a connection locks the database for writing, no other connection or process may read or write to the database until the write operation is complete. The SQLite.NET provider attempts to retry - internally if a database is locked, up to the CommandTimeout property of the - command in question.

-

SQLite is inherently type-less, and only understands a few basic datatypes - natively. They are (in .NET-speak) Int64, Double, String and Blob. The - SQLite.NET provider will use the database schema information it can glean to - enforce type-ness, but it is an inexact science.

-

- Hierarchical DataReaders are not supported. In the - case of transactions, any SQLiteCommand created on a connection will (when - executed) automatically join a transaction in progress, regardless of whether - that transaction was created before or after the command.

-

A SQLiteCommand object can be re-assigned a new SQLiteConnection object - as long as no DataReaders are active on the command.

-

Opening a transaction is considered a write operation, so only use them when - you want to write to the database! If you hold open a transaction, all readers on other - connections - will be blocked until the transaction is closed!

-

-

Thread Safety

-

Multi-threading in SQLite must be done carefully. Here are the restrictions:

- -

Understand again that SQLite has no fine-grained locking mechanisms. It is - therefore your own responsibility in a multi-threaded environment to handle - potential timeouts that may occur if a long-running query in one thread - prevents a query in another thread from executing. These timeouts will only - occur if one thread is attempting to read while another thread is attempting to - write. Whichever thread got its lock first will be the one to execute, and the - other thread will block until the CommandTimeout value elapses or the other - thread finishes.

-
- -
-
- - DELETED Doc/Extra/ndoc.css Index: Doc/Extra/ndoc.css ================================================================== --- Doc/Extra/ndoc.css +++ /dev/null @@ -1,572 +0,0 @@ -.userDataStyle -{ - behavior: url(#default#userData); -} - -@media all -{ - tool\:tip{behavior: url(tooltip.htc)} -} - -body -{ - background: #FFFFFF; - color: #000000; - font-family: Verdana; - font-size: medium; - font-style: normal; - font-weight: normal; - margin: 0px; - width: 100%; -} - -a -{ - color: #0000FF; -} - -a:visited -{ - color: #0000FF; -} - -a:hover -{ - color: #3366FF; -} - -div#mainSection -{ - font-size: 70%; - width: 100%; -} - -div#mainBody -{ - font-size: 90%; - margin-left: 15px; - margin-top: 10px; - padding-bottom: 20px; -} -div#mainBody p, div#mainBody ol, div#mainBody ul, div#mainBody dl -{ - padding-right: 5; -} - -div#header -{ - background-color: #D4DFFF; - padding: 0px; - width: 100%; -} - -div#header table -{ - border-bottom: solid 1px #C8CDDE; - width: 100%; -} - -span#runningHeaderText -{ - color: #003399; - font-size: 90%; - padding-left: 13px; -} - - -span#nsrTitle -{ - color: #003399; - font-size: 120%; - font-weight: bold; - padding-left: 13px; -} - -div#header table td -{ - color: #0000FF; - font-size: 70%; - margin-top: 0px; - margin-bottom: 0px; - padding-right: 20px; -} - -div#header table tr#headerTableRow3 td -{ - padding-bottom: 2px; - padding-top: 5px; - padding-left: 15px; -} - -div#header table#bottomTable -{ - border-top: solid 1px #FFFFFF; - text-align: left; - padding-left: 15px; -} - -div#footer -{ - font-size: 90%; - margin: 0px; - padding: 2px; - width: 100%; -} - -hr#footerHR -{ - border-bottom: solid 1px #EEEEFF; - border-top: solid 1px #C8CDDE; - height: 3px; - color: #D4DFFF; -} -/* -div.saveHistory -{ - behavior:url(#default#saveHistory); -} -*/ -div.section -{ - padding-top: 2px; - padding-bottom: 2px; - padding-left: 16px; - padding-right: 15px; - width: 100%; -} - -.heading -{ - font-weight: bold; - margin-top: 18px; - margin-bottom: 8px; -} - -h1.heading -{ - color: #003399; - font-size: 130%; -} - -.subHeading -{ - font-weight: bold; - margin-bottom: 4px; -} - -h3.subHeading -{ - color: #000000; - font-size: 120%; - font-weight: normal; -} - -h4.subHeading -{ - color: #000000; - font-size: 100%; -} - -img.toggle -{ - border: none; - margin-right: 5px; -} - -img.copyCodeImage -{ - border: none; - margin: 1px; - margin-right: 3px; -} - -img.downloadCodeImage -{ - border: none; - margin-right: 3px; -} - -img.viewCodeImage -{ - border: none; - margin-right: 3px; -} - -img.note -{ - border: none; - margin-right: 3px; -} - -img#languageFilterImage -{ - border: none; - margin-left: 10px; - vertical-align: middle; -} - -img#membersOptionsFilterImage -{ - border: none; - margin-left: 10px; - vertical-align: middle; -} - -img#toggleAllImage -{ - margin-left: 4px; - vertical-align: middle; -} - -div#mainSection table -{ - border: none; - font-size: 100%; - width: 100%; - margin-top: 5px; - margin-bottom: 5px; -} - -div#mainSection table tr -{ - vertical-align: top; -} - -div#mainSection table th -{ - background-color: #EFEFF7; - border-bottom: solid 1px #C8CDDE; - color: #000066; - padding-left: 5px; - padding-right: 5px; - text-align: left; -} - -div#mainSection table td -{ - background-color: #F7F7FF; - border-bottom: solid 1px #D5D5D3; - /*border-left: solid 1px #D5D5D3;*/ - padding-left: 5px; - padding-right: 5px; - margin: 1px; -} - -div#mainSection table td.imageCell -{ - white-space: nowrap; - /*width: 1%;*/ -} - -div#mainSection table td.nameCell -{ - white-space: nowrap; -} - -div.code table -{ - border: none; - font-size: 95%; - margin-bottom: 5px; - margin-top:-.4em; - width: 100%; -} - -div.code table th -{ - background: #EFEFF7; - border-bottom: solid 1px #C8CDDE; - color: #000066; - font-weight: bold; - padding-left: 5px; - padding-right: 5px; -} - -div.code table td -{ - background: #F7F7FF; - border-top: solid 1px #FFFFFF; - padding-left: 5px; - padding-right: 5px; - padding-top: 5px; - padding-bottom: 15px; -} - -div.code table td.syntax -{ - font-family: Monospace, Courier New, Courier; - font-size: 105%; - color: #000066; - white-space: nowrap; -} - -div.code table td.message -{ -} - -div.alert table -{ - border: none; - font-size: 100%; - width: 100%; -} - -div.alert table th -{ - background: #EFEFF7; - border-bottom-width: 0px; - color: #000066; - padding-left: 5px; - padding-right: 5px; -} - -div.alert table td -{ - background: #F7F7FF; - border-top: solid 1px #FFFFFF; - padding-left: 5px; - padding-right: 5px; -} - -span.copyCode -{ - color: #0000ff; - font-size: 90%; - font-weight: normal; - cursor: hand; - float: right; - display: inline; - text-align: right; -} - -.downloadCode -{ - color: #0000ff; - font-size: 90%; - font-weight: normal; - cursor: hand; -} - -.viewCode -{ - color: #0000ff; - font-size: 90%; - font-weight: normal; - cursor: hand; -} - -code -{ - font-family: Monospace, Courier New, Courier; - font-size: 105%; - color: #000066; -} - -dl -{ - margin-top: 0px; - padding-left: 1px; -} - -dt -{ - font-style: italic; -} - -dd -{ - margin-bottom: 0px; - margin-left: 0px; -} - -ul -{ - margin-top:0px; - margin-bottom:0px; - margin-left: 17px; - list-style-type: disc; -} - -ul ul -{ - margin-bottom: 4px; - margin-left: 17px; - margin-top: 3px; - list-style-type: disc; -} - -ol -{ - margin-top:0px; - margin-bottom:0px; - margin-left: 28px; - list-style-type: decimal; -} - -ol ol -{ - margin-bottom: 4px; - margin-left: 24px; - margin-top: 3px; - list-style-type: lower-alpha; -} - -li -{ - margin-top:-2px; - margin-bottom: 3px; -} - -p -{ - margin-top: 10px; - margin-bottom: 5px; -} - -.tip -{ - color: #0000FF; - font-style: italic; - cursor: hand; - text-decoration: underline; -} - -.languageFilter -{ - color: #0000FF; - cursor: hand; - text-decoration: underline; - padding-bottom: 4px; -} - -.math -{ - font-family: Times New Roman; - font-size: 125%; -} - -.sourceCodeList -{ - font-family: Verdana; - font-size: 90%; -} - -pre.viewCode -{ - width: 100%; - overflow: auto; -} - -MSHelp\:link -{ - text-decoration: underline; - color: #0000ff; - hoverColor: #3366ff; - filterString: ; -} - - -/*----------------------------------------------*/ -/* -.attribute a:link -{ - color: #000088; - text-decoration: none; -} -.attribute a:visited -{ - color: #000088; - text-decoration: none; -} -.attribute a:hover -{ - color: #3366ff; -} - -.attribute MSHelp\:link - { - text-decoration: underline; - color: #0000ff; - hoverColor: #3366ff; - filterString: ; - } -*/ -.missing -{ - color: Red; - font-weight: bold; -} -div.hier -{ - margin-top: 0.5em; - margin-right: 0.0em; - margin-bottom: 0.5em; - margin-left: 1.0em; -} -div#mainSection table.hier -{ - border: none; - font-size: 100%; - padding: 0px; - margin: 0px; - border-collapse: collapse; - width: auto; -} -div#mainSection table.hier tr -{ - padding: 0px; - margin: 0px; -} -div#mainSection table.hier td -{ - border: none; - vertical-align: top; - padding: 0px; - margin: 50px; - background-color: transparent; -} - -div.code table td span.attribute -{ - padding: 0px; - margin: 0px; -} - -p.inheritDoc -{ - padding: 2px; - margin: 0px; - background-color: #FFFFE0; - border-top: solid 1px #E0E0C0; -} -p.inheritSource -{ - padding: 0px 2px; - margin: 0px; - font-size: 85%; - background-color: #F0F0D0; - color: #606050; -} -span.autoText -{ - padding: 2px; - margin: 0px; - background-color: #E0FFE0; - color: #206020; -} - -p.missing -{ - padding: 2px; - margin: 0px; - font-size: 85%; - background-color: #FFE0E0; - color: #800000; - font-weight: bold; -} - -.topicstatus /* Topic Status Boilerplate class */ - { - display: block; - color: red; - } DELETED Doc/Extra/optimizing.html Index: Doc/Extra/optimizing.html ================================================================== --- Doc/Extra/optimizing.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - Optimizing Your Queries - - - - -
-
-

Tips on Optimizing Your Queries

-

The next few paragraphs will attempt to give you a few rudimentary rules for - speeding up your queries in general, and especially how SQLite is adversely - affected by the kinds of SQL behaviors you may have taken for granted in other - providers. It is by no means a complete optimization guide. For even more - details on optimizing your queries, visit sqlite.org.

-

The Importance of Transactions

-

If you are inserting data in SQLite without first starting a transaction: DO - NOT PASS GO! Call BeginTransaction() right now, and finish with Commit()! - If you think I'm kidding, think again. SQLite's A.C.I.D. design means that - every single time you insert any data outside a transaction, an implicit - transaction is constructed, the insert made, and the transaction destructed. EVERY - TIME. If you're wondering why in the world your inserts are taking 100x - longer than you think they should, look no further.

-

Prepared Statements

-

Lets have a quick look at the following code and evaluate its performance:

-
-
-      using (SQLiteCommand mycommand = new SQLiteCommand(myconnection))
-      {
-        int n;
-        
-        for (n = 0; n < 100000; n ++)
-        {
-          mycommand.CommandText = String.Format("INSERT INTO [MyTable] ([MyId]) VALUES({0})", n + 1);
-          mycommand.ExecuteNonQuery();
-        }
-      }
-
-

This code seems pretty tight, but if you think it performs well, you're dead - wrong. Here's what's wrong with it:

- -

So lets rewrite that code slightly:

-
-
-      using (SQLiteTransaction mytransaction = myconnection.BeginTransaction())
-      {
-        using (SQLiteCommand mycommand = new SQLiteCommand(myconnection))
-        {
-          SQLiteParameter myparam = new SQLiteParameter();
-          int n;
-        
-          mycommand.CommandText = "INSERT INTO [MyTable] ([MyId]) VALUES(?)";
-          mycommand.Parameters.Add(myparam);
-          
-          for (n = 0; n < 100000; n ++)
-          {
-            myparam.Value = n + 1;
-            mycommand.ExecuteNonQuery();
-          }
-        }
-        mytransaction.Commit();
-      } 
-
-

Now this is a blazing fast insert for any database engine, not - just SQLite. The SQL statement is prepared one time -- on the first call to - ExecuteNonQuery(). Once prepared, it never needs re-evaluating. Furthermore, - we're allocating no memory in the loop and doing a very minimal number of - interop transitions. Surround the entire thing with a transaction, and the - performance of this insert is so far and away faster than the original that it - merits a hands-on-the-hips pirate-like laugh.

-

Every database engine worth its salt utilizes prepared statements. If you're - not coding for this, you're not writing optimized SQL, and that's the bottom - line. -

-
- -
-
- - DELETED Doc/Extra/pragma.html Index: Doc/Extra/pragma.html ================================================================== --- Doc/Extra/pragma.html +++ /dev/null @@ -1,644 +0,0 @@ - - - - PRAGMA - - - - -
-
-

- SQL As Understood By SQLite

-

- PRAGMA

-

- The PRAGMA command is a special command used to modify the - operation of the SQLite library or to query the library for internal (non-table) - data. The PRAGMA command is issued using the same interface as other SQLite commands - (e.g. SELECT, INSERT) but is different in the following important respects: -

- -

- The available pragmas fall into four basic categories:

- -
- -

- PRAGMA command syntax

-

- - - - - -
- sql-statement ::= - PRAGMA name [= - value] - |
- PRAGMA
function(arg)
-

-

- The pragmas that take an integer value also accept symbolic names. - The strings "on", "true", and "yes" are equivalent to 1. - The strings "off", "false", and "no" are equivalent to 0. - These strings are case- insensitive, and do not require quotes. An unrecognized - string will be treated as 1, and will not generate an error. When the value - is returned it is as an integer.

-
- -

- Pragmas to modify library operation

- -
- -

- Pragmas to query the database schema

- -
- -

- Pragmas to query/modify version values

- -
- -

- Pragmas to debug the library

- -

-


-  

- -
-
- - DELETED Doc/Extra/syntax.html Index: Doc/Extra/syntax.html ================================================================== --- Doc/Extra/syntax.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - SQLite Query Syntax - - - - -
-
-

- SQL As Understood By SQLite

-

- The SQLite library understands most of the standard SQL language. But it does omit - some features while at the same time adding a few features of its own. This document - attempts to describe precisely what parts of the SQL language SQLite does and does - not support. A list of keywords is also provided. In all of the syntax diagrams - that follow, literal text is shown in bold blue. Non-terminal symbols are shown - in italic red. Operators that are part of the syntactic markup itself are shown - in black roman. This document is just an overview of the SQL syntax implemented - by SQLite. -

-

- SQLite implements the follow syntax:

-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - ALTER TABLE
- - ANALYZE
- - ATTACH DATABASE
- - BEGIN TRANSACTION
- - comment
- - COMMIT TRANSACTION
- CREATE INDEX
- CREATE TABLE
- CREATE TRIGGER
- CREATE VIEW
- - CREATE VIRTUAL TABLE
- - DELETE
- - DETACH DATABASE
- DROP INDEX
- DROP TABLE
- DROP TRIGGER
- DROP VIEW
- - END TRANSACTION
- - EXPLAIN
- - expression
- - INSERT
- - ON CONFLICT clause
- - PRAGMA
- - REINDEX
- - REPLACE
- - ROLLBACK TRANSACTION
- - SELECT
- - TYPES
- - UPDATE
- - VACUUM
-

-
- -
-
- - DELETED Doc/Extra/version.html Index: Doc/Extra/version.html ================================================================== --- Doc/Extra/version.html +++ /dev/null @@ -1,1255 +0,0 @@ - - - - Version History - - - - -
-
-

Version History

-

1.0.77.0 - November 28, 2011

- -

1.0.76.0 - October 4, 2011

- -

1.0.75.0 - October 3, 2011

- -

1.0.74.0 - July 4, 2011

- -

1.0.73.0 - June 2, 2011

- -

1.0.72.0 - May 1, 2011

- -

1.0.71.0 - April 27, 2011

- -

1.0.69.0 - April 12, 2011

- -

1.0.68.0 - February 2011

- -

1.0.67.0 - January 3, 2011

- -

1.0.66.1 - August 1, 2010

- -

1.0.66.0 - April 18, 2010

- -

1.0.65.0 - July 26, 2009

- -

1.0.64.0 - July 9, 2009

- -

1.0.63.0 - June 29, 2009

- -

1.0.62.0 - June 20, 2009

- -

1.0.61.0 - April 28, 2009

- -

1.0.60.0 - October 3, 2008

- -

1.0.59.0 - September 22, 2008

- -

1.0.58.0 - August 30, 2008

- -

1.0.57.0 - August 29, 2008

- -

1.0.56.0 - August 11, 2008

- -

1.0.55.0 - August 6, 2008

- -

1.0.54.0 - July 25, 2008

- -

1.0.53.0 - July 24, 2008

- -

1.0.52.0 - July 16, 2008

- -

1.0.51.0 - July 1, 2008

- -

1.0.50.0 - June 27, 2008

- -

1.0.49.0 - May 28, 2008

- -

1.0.48.0 - December 28, 2007

- -

1.0.47.2 - December 10, 2007

- -

1.0.47.1 - December 5, 2007

- -

1.0.47.0 - December 4, 2007

- -

1.0.46.0 - September 30, 2007

- -

1.0.45.0 - September 25, 2007

- -

1.0.44.0 - July 21, 2007

- -

1.0.43.0 - June 21, 2007

- -

1.0.42.0 - June 1, 2007

- -

1.0.41.0 - April 23, 2007

- -

1.0.40.0 - January 31, 2007

- -

1.0.39.1 - January 11, 2007

- -

1.0.39.0 - January 10, 2007

- -

1.0.38.0 - November 22, 2006

- -

1.0.37.0 - November 19, 2006

- -

1.0.36.1 - October 25, 2006

- -

1.0.36.0 - October 23, 2006

- -

1.0.35.1 - September 12, 2006

- -

1.0.35.0 - September 10, 2006

- -

1.0.34.0 - September 4, 2006

- -

1.0.33.0 - August 21, 2006

- -

1.0.32.0 - August 6, 2006

- -

1.0.31.0 - July 16, 2006

- -

1.0.30.1 - July 2, 2006

- - -

1.0.29.0 - May 16, 2006

- -

1.0.28.0 - April 14, 2006

- -

1.0.27.1 - February 28, 2006

- -

1.0.27.0 - February 27, 2006

- -

1.0.26.2 - February 15, 2006

- -

1.0.26.1 - February 14, 2006

- -

1.0.26.0 - February 11, 2006

- -

1.0.25.0 - January 31, 2006

- -

1.0.24.6 beta - January 23, 2006

- -

1.0.24.5 beta - January 20, 2006

- -

1.0.24.4 beta - January 16, 2006

- -

1.0.24.3 beta - January 10, 2006

- -

1.0.24.2 - December 30, 2005

- -

1.0.24.1 - December 19, 2005

- -

1.0.24 - December 9, 2005

- -

1.0.23 - November 21, 2005

- -

1.0.22 - November 11, 2005

- -

1.0.21 - November 4, 2005

- -

1.0.20 - October 19, 2005

- -

1.0.19 - October 5, 2005

- -

1.0.18.1 - September 19, 2005

- -

1.0.18 - September 1, 2005

- -

1.0.17 - August 26, 2005

- -

1.0.16 - August 24, 2005

- -

1.0.15 - August 22, 2005
-

- -

1.0.14 - August 16, 2005
-

- -

1.0.13 - August 8, 2005
-

-
-
    -
  • - Fixed a named parameter bug in the base SQLite_UTF16 class, which of course - only showed up when a database connection was opened using the - UseUTF16Encoding=True parameter. -
  • - Fixed a performance issue in SQLite_UTF16 involving string marshaling.
-
-

1.0.12 - August 5, 2005
-

-
-
    -
  • - Full support for the Compact Framework.  Each build (Debug/Release) now - has a platform, either Win32 or Compact Framework.  The correct - projects are built accordingly.  See the Distributing - SQLite - section for information on what files need to be distributed for each - platform.  -
  • - Modified SQLite3.Reset() and Step() functions to transparently handle timeouts - while waiting on the database to become available (typically when a writer is - waiting on a reader to finish, or a reader is waiting on a writer to finish). -
  • - Lots of code cleanup as suggested by the Code Analyzer (FxCop). -
  • - Lots of updates to the helpfile (as you can see). -
  • - Statements were already prepared lazily in a SQLiteCommand, but now - its even more lazy.  Statements are now only prepared if the statements - haven't been previously prepared and a Prepare() function is called (and the - command is associated with a connection) or just prior to the command being - executed. 
-
-

1.0.11 - August 1, 2005
-

- -

1.0.10 - June 10, 2005
-

- -

1.0.09a - May 25, 2005
-

- -

1.0.09 - May 24, 2005
-

- -

1.0.08 Refresh - Mar 24, 2005
-
-

- -

1.0.08 - Mar 11, 2005
-
-

- -

1.0.07 - Mar 5, 2005
-

- -

1.0.06 - Mar 1, 2005
-
-

- -

1.0.05 - Feb 25, 2005 -

- -

1.0.04 - Feb 24, 2005 -

- -

1.0.03 - Feb 23, 2005 -

- -

1.0.02 - Feb 21, 2005

- -
- -
-
- - DELETED Doc/Extra/welcome.html Index: Doc/Extra/welcome.html ================================================================== --- Doc/Extra/welcome.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - Introduction - - - - -
-
-

About SQLite.NET

-

This class library is an ADO.NET wrapper around the popular (and free!) - SQLite database engine. For information on SQL syntax, features of SQLite and a - good understanding of how it works and what it does, I highly recommend heading - over to sqlite.org and - reading the documentation there.

-

The C# provider, the very minor C code modifications to SQLite, documentation and - etc were written by Robert - Simpson, and the SourceForge project page can be found - here.

-
-
-
-

What's New?

-

Click here to see the version history of this SQLite.NET - provider

-
-
-
-

Using this library

-

The following are links to information on various aspects of the library and - how to use it in your application(s) -

-

How to install Visual Studio Design-Time Support

-

How to configure and enumerate SQLite.NET - through the DbProviderFactories object

-

Getting the best performance out of SQLite

-

Limitations of the SQLite.NET provider and the SQLite - engine (compared to other providers and engines)

-
-

SQLite.NET Provider Features

-

This SQLite provider implements every feature of the underlying SQLite - database engine without omission. Here's a brief summary:

- -
-

Distributing the Binaries (Desktop)

-

System.Data.SQLite.DLL is a mixed assembly signed with a strong name - in case you want to add it to the Global Assembly Cache (GAC). This is the only DLL required to be redistributed with - your SQLite.NET application(s).  It - comes in 3 - flavors: Win32, Itanium and x64 (AMD64).

-

Distributing the Binaries (Compact Framework)

-

System.Data.SQLite.DLL and SQLite.Interop.XXX.DLL must be - deployed on the Compact Framework.  The XXX is the build number of the - System.Data.SQLite library (e.g. "077").  SQLite.Interop.XXX is a fully - native assembly compiled for the ARM processor, and System.Data.SQLite is the - fully-managed Compact Framework assembly.

-
- -
- - Index: Doc/SQLite.NET.chm ================================================================== --- Doc/SQLite.NET.chm +++ Doc/SQLite.NET.chm cannot compute difference between binary files DELETED Doc/SQLite.NET.hhc Index: Doc/SQLite.NET.hhc ================================================================== --- Doc/SQLite.NET.hhc +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - -