DISQLite3 implements a self-contained, embeddable, zero-configuration SQL database engine for Delphi (Embarcadero / CodeGear / Borland).
- ACID transactions, even after system crashes and power failures.
- Zero-configuration – no setup or administration needed.
- Implements most of SQL-92.
- A complete database is stored in a single disk file.
- Supports terabyte-sized databases and gigabyte-sized strings and blobs. Self-contained: no external dependencies, no DLLs.
- Small footprint and smart linking: Only required code is compiled in, adding as little as 300 KB code space only.
- Full Text Search (FTS) with customizable tokenizer, prefix matching, and optional word stemming for 15 languages.
- Database AES encryption with SHA256 key generator.
Db.pasis not required, which allows DISQLite3 to compile with all flavours of Delphi, including Delphi Standard and Delphi Personal.
- Faster than popular database engines for most common operations.
- Simple, easy to use API.
- Database files created with DISQLite3 can also be accessed by Linux and MacOS using the SQLite3 libraries.
DISQLite3 understands most of the SQL-92 language standard:
- ALTER TABLE
- ATTACH DATABASE
- BEGIN TRANSACTION
- COMMIT TRANSACTION
- CREATE INDEX
- CREATE TABLE
- CREATE TRIGGER
- CREATE VIEW
- DETACH DATABASE
- DROP INDEX
- DROP TABLE
- DROP TRIGGER
- DROP VIEW
- END TRANSACTION
- ON CONFLICT clause
- ROLLBACK TRANSACTION
The complete SQL syntax is described in full length in the DISQLite3 HTML Help, part of the installation package.
Simple Programming Interface
DISQLite3 provides a comprehensive list of functions and procedures to manage database records with ease and efficiency. It includes the full SQLite3 functionality, plus a number of Delphi specific extras:
- AnsiString, UnicodeString / WideString, and Variant support.
- Database and Statement wrapper classes.
- TDataSet support.
- TStream support for BLOBs.
- Growing number of Delphi example projects.
Despite of its rich set of features, a DISQLite3 database application can be realized with just three different function calls.
Pro and Personal Editions
DISQLite3 comes in two editions: DISQLite3 Personal and DISQLite3 Pro.
DISQLite3 Personal is free for personal, educational, and non-commercial use. It omits some functionality of DISQLite3 Pro, but does not compromize on essential features like ACID transactions, virtually unlimited database size, full text search, and others.
DISQLite3 Pro is required for commercial use and may be purchased online. It adds functionality usually desired by advanced users. This includes SQL triggers and views, arbitrary encryption passwords, user-defined SQL functions, and more. Since DISQLite3 Pro is fully compatible to the Personal edition, it is possible to upgrade existing projects without any code changes.
The feature chart is available for a side-by-side comparison of the two editions.
DISQLite3 5.18.0 – 16 Feb 2017
- Better performance from the R-Tree extension.
- Uses the sqlite3_blob key/value access object instead of SQL for pulling content out of R-Tree nodes.
- Other miscellaneous enhancements such as loop unrolling.
- Increase the default lookaside size from 512,125 to 1200,100 as this provides better performance while only adding 56KB of extra memory per connection. Memory-sensitive applications can restore the old default at compile-time, start-time, or run-time.
- Reduce the default number of pages initially allocated for the pagecache from 100 to 20, for improved performance.
- Perform some UPDATE operations in a single pass instead of in two passes.
- Enhance the session extension to support WITHOUT ROWID tables.
- Fixed performance problems and potential stack overflows when creating views from multi-row VALUES clauses with hundreds of thousands of rows.
- Added the sha1 extension.
- Other performance improvements. Uses about 6.5% fewer CPU cycles.
- Throw an error if the ON clause of a LEFT JOIN references tables to the right of the ON clause. This is the same behavior as PostgreSQL. Formerly, SQLite silently converted the LEFT JOIN into an INNER JOIN.
- Use the correct affinity for columns of automatic indexes.
- Ensure that the sqlite3_blob_reopen interface can correctly handle short rows.