sql_engine 2.0.3
sql_engine: ^2.0.3 copied to clipboard
A thin yet powerful SQLite layer for Dart & Flutter.
[2.0.3] - 2025-06-12 #
Added #
- Initial Seed Data Support
@SqlSchema
now accepts aseedData
field:@SqlSchema( version: 1, columns: [...], seedData: [ {'name': 'Alice', 'male': false}, {'name': 'Bob', 'male': true}, ], )
- Seed rows are automatically inserted into the table on first creation only.
- Supports:
DateTime
(usemillisecondsSinceEpoch
)bool
(stored as0/1
)null
values
- Automatically skipped if the table already exists.
- Available during
db.open()
lifecycle — no extra config required.
Example #
@SqlSchema(
version: 1,
columns: [...],
seedData: [
{
'name': 'Ada',
'male': true,
'created_at': DateTime(2024, 1, 1).millisecondsSinceEpoch,
}
],
)
[2.0.2] - 2025-06-10 #
- updated documentation for models
[2.0.1] - 2025-06-08 #
✨ Added #
-
Strongly-Typed CRUD Code Generation
New generator methods now create full CRUD extensions for each model/table:insert<Entity>()
update<Entity>()
upsert<Entity>()
delete<Entity>ById()
delete<Entity>Where()
flush<Entity>s()
findAll<Entity>s()
find<Entity>sWhere()
These methods are emitted as
extension <Entity>Crud on SqlEngineDatabase
, with support for:- Named parameter helpers (
<Entity>CrudHelpers
) - Automatic conversion of
DateTime
→millisecondsSinceEpoch
- Nullable field safety
- Strongly-typed model mapping with
<Entity>Mapper.fromRow
Example
await User.insert( db, id: 1, name: 'Jane Smith', male: true, createdAt: DateTime.now(), ); final users = await User.findWhere(db, 'name = ?', 'Jane Smith');
[2.0.0] - 2025-06-01 #
⚠️ Breaking Changes #
-
SqlColumn.type
is now required to be aSqlType
enum instead of a string. This improves type safety and autocompletion.- Before:
SqlColumn(name: 'id', type: 'INTEGER')
- After:
SqlColumn(name: 'id', type: SqlType.integer)
- Before:
-
Code generators have been updated to map
SqlType
to proper SQL keywords inCREATE TABLE
,ALTER TABLE
, and index creation.
[1.0.6] - 2025-05-04 #
Added #
enableLog
parameter toSqlEngineDatabase
constructor. This allows consumers of the package to disable or control logging, instead of relying on a global compile-time flag.final db = SqlEngineDatabase(enableLog: false);
[1.0.5] – 2025‑05‑03 #
Fixed #
- Mapper code‑gen
- Removed illegal trailing
?
intoRow()
for nullable fields (e.g. now emits
'locationLat': locationLat,
instead of'locationLat': locationLat?,
). - Null‑safe write for
DateTime
(createdAt?.millisecondsSinceEpoch
) and forbool
(male == true ? 1 : null
).
- Removed illegal trailing
Added #
@SqlIndex
annotation- Define one or more indexes per table.
@SqlIndex(name: 'idx_user_email', columns: ['email'])
- Generator now outputs a
createIndexes
list inside each*Table
class. _onCreate()
automatically executes allCREATE INDEX
statements after tables are created.
- Define one or more indexes per table.
Migration #
No breaking API changes. Re‑run build_runner
to regenerate code and
indexes will be created automatically the next time the database is
initialized.
[1.0.4] - 2025-05-03 #
Added #
- Introduced
@SqlIndex
annotation for defining named indexes on tables. - Generator now reads and embeds indexes as part of the generated table class.
- Database applies all defined indexes automatically during
open()
on initial creation. - Added
createIndexes
override inSqlEngineTable
to allow per-table index registration. - Added test support:
- Verify index creation using
PRAGMA index_list
. - Verify index usage via
EXPLAIN QUERY PLAN
.
- Verify index creation using
Tests #
- New tests verify:
- Index is present (
PRAGMA index_list
) - Index is used (
EXPLAIN QUERY PLAN … USING INDEX
)
- Index is present (
Example usage #
@SqlTable(tableName: 'users', version: 1)
@SqlIndex(name: 'idx_user_name', columns: ['name'])
class User { ... }
[1.0.3] #
- Fixed analysis error.
- Added license