DISQLite3 v5.50.0 for Delphi 11 & 12 Athens DCUs
DISQLite3 v5.50.0 for Delphi 11 & 12 Athens
DISQLite3 implements a self-contained, embeddable, zero-configuration SQL database engine for Delphi (Embarcadero / CodeGear / Borland).
Overview
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 30 languages.
Database AES encryption with SHA256 key generator.
Db.pas is 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.
SQL-92 Support
DISQLite3 Drive Catalog Demo ApplicationDISQLite3 understands most of the SQL-92 language standard:
ALTER TABLE
ANALYZE
ATTACH DATABASE
BEGIN TRANSACTION
Comments
COMMIT TRANSACTION
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DISQLite3 Mathematical Expression Evaluator Demo Applicationdrop TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
Expressions
INSERT
ON CONFLICT clause
PRAGMA
REINDEX
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE
VACUUM
The complete SQL syntax is described in full length in the DISQLite3 HTML Help, part of the installation package.
Simple Programming Interface
DISQLite3 Database Encryption Demo ApplicationDISQLite3 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 v5.50.0 – 8 Nov 2024
Update to SQLite Version 3.47.0.
Allow arbitrary expressions in the second argument to the RAISE function.
If the RHS of the →> operator is negative, then access array elements counting from the right.
FTS5 tables can now be dropped even if they use a non-standard tokenizer that has not been registered.
Fix the group_concat() aggregate function so that it returns an empty string, not a NULL, if it receives a single input value which is an empty string.
Enhance the generate_series table-valued function so that it is able to recognize and use constraints on its output value.
Preupdate hooks now recognize when a column added by ALTER TABLE ADD COLUMN has a non-NULL default value.
Enhance the sqlite_dbpage table-valued function such that INSERT can be used to increase or decrease the size of the database file.
Performance optimizations:
Improved reuse of subqueries associated with the IN operator, especially when the IN operator has been duplicated due to predicate push-down.
Use a Bloom filter on subqueries on the right-hand side of the IN operator, in cases where that seems likely to improve performance.
Ensure that queries like “SELECT func(a) FROM tab GROUP BY 1” only invoke the func() function once per row.
No attempt is made to create automatic indexes on a column that is known to be non-selective because of its use in other indexes that have been analyzed.
Adjustments to the query planner so that it produces better plans for star queries with a large number of dimension tables.
Add the “order-by-subquery” optimization, that seeks to disable sort operations in outer queries if the desired order is obtained naturally due to ORDER BY clauses in subqueries.
The “indexed-subtype-expr” optimization strives to use expressions that are part of an index rather than recomputing the expression based on table values, as long as the query planner can prove that the subtype of the expression will never be used.
FTS5 Changes:
Add the fts5_tokenizer_v2 API and the locale=1 option, for creating custom locale-aware tokenizers and fts5 tables that may take advantage of them. See DISQLite3Fts5Tokenizer_v2 for a fts5_tokenizer_v2 example tokenizer.
Add the contentless_unindexed=1 option, for creating contentless fts5 tables that store the values of any UNINDEXED columns persistently in the database.
Allow an FTS5 table to be dropped even if it uses a custom tokenizer whose implementation is not available.
Update to SQLite Version 3.47.0.
Allow arbitrary expressions in the second argument to the RAISE function.
If the RHS of the →> operator is negative, then access array elements counting from the right.
FTS5 tables can now be dropped even if they use a non-standard tokenizer that has not been registered.
Fix the group_concat() aggregate function so that it returns an empty string, not a NULL, if it receives a single input value which is an empty string.
Enhance the generate_series table-valued function so that it is able to recognize and use constraints on its output value.
Preupdate hooks now recognize when a column added by ALTER TABLE ADD COLUMN has a non-NULL default value.
Enhance the sqlite_dbpage table-valued function such that INSERT can be used to increase or decrease the size of the database file.
Performance optimizations:
Improved reuse of subqueries associated with the IN operator, especially when the IN operator has been duplicated due to predicate push-down.
Use a Bloom filter on subqueries on the right-hand side of the IN operator, in cases where that seems likely to improve performance.
Ensure that queries like “SELECT func(a) FROM tab GROUP BY 1” only invoke the func() function once per row.
No attempt is made to create automatic indexes on a column that is known to be non-selective because of its use in other indexes that have been analyzed.
Adjustments to the query planner so that it produces better plans for star queries with a large number of dimension tables.
Add the “order-by-subquery” optimization, that seeks to disable sort operations in outer queries if the desired order is obtained naturally due to ORDER BY clauses in subqueries.
The “indexed-subtype-expr” optimization strives to use expressions that are part of an index rather than recomputing the expression based on table values, as long as the query planner can prove that the subtype of the expression will never be used.
FTS5 Changes:
Add the fts5_tokenizer_v2 API and the locale=1 option, for creating custom locale-aware tokenizers and fts5 tables that may take advantage of them. See DISQLite3Fts5Tokenizer_v2 for a fts5_tokenizer_v2 example tokenizer.
Add the contentless_unindexed=1 option, for creating contentless fts5 tables that store the values of any UNINDEXED columns persistently in the database.
Allow an FTS5 table to be dropped even if it uses a custom tokenizer whose implementation is not available.
ONLY for V.I.P/Platinum Members
Warning! You are not allowed to view this text.