datum_sqlite 1.1.0 copy "datum_sqlite: ^1.1.0" to clipboard
datum_sqlite: ^1.1.0 copied to clipboard

A SQLite-backed persistence layer for the Datum ecosystem — native SQL query pushdown, real transactions, and ALTER TABLE schema migrations via SqlMigrationExecutor.

datum_sqlite #

A SQLite-backed persistence layer for the Datum offline-first sync ecosystem, built on package:sqlite3.

Entities live in a real table with one column per field, which unlocks the SQL-native half of Datum's feature set:

  • Query pushdownDatumQuery compiles to SQL (WHERE/ORDER BY/LIMIT run inside SQLite), instead of loading everything and filtering in memory.
  • Real transactionstransaction() maps to BEGIN/COMMIT/ROLLBACK; SQLite rolls DDL and DML back together.
  • Native schema migrations — mixes in RawQueryCapable, so SqlMigrationExecutor runs your SchemaMigration chains as real ALTER TABLE/UPDATE statements.
  • Reactive watch streamswatchAll/watchById/watchQuery/watchCount/watchFirst, change-notified.
  • Certified — passes the official datum_test conformance suite.

Usage #

import 'package:datum_sqlite/datum_sqlite.dart';
import 'package:sqlite3/sqlite3.dart';

final db = sqlite3.open('app.db'); // one db can back many adapters

final adapter = SqliteLocalAdapter<Task>(
  database: db,
  table: 'tasks',
  fromMap: Task.fromMap,
  // Payload columns: toDatumMap key -> SQLite type. The sync core columns
  // (id, userId, modifiedAt, createdAt, version, isDeleted) are automatic.
  columns: {'title': 'TEXT', 'priority': 'INTEGER', 'done': 'BOOLEAN'},
);
await adapter.initialize();

Columns declared BOOLEAN are stored as 0/1 and decoded back to bool.

Schema migrations #

The same declarative SchemaMigration list that drives schemaless stores runs here as real DDL:

await SqlMigrationExecutor<Task>(
  localAdapter: adapter,
  table: 'tasks',
  migrations: [
    SchemaMigration(fromVersion: 0, toVersion: 1, operations: [
      ColumnOperation.add('status', defaultValue: 'active'),
      ColumnOperation.rename('title', to: 'name'),
    ]),
  ],
  targetVersion: 1,
  logger: logger,
).execute();

Every statement is generated and validated before anything touches the database, and a failure mid-chain rolls back DDL and data atomically.

Flutter #

Add sqlite3_flutter_libs to bundle the SQLite binary on Android/iOS/macOS/Windows/Linux.

0
likes
130
points
84
downloads

Documentation

Documentation
API reference

Publisher

unverified uploader

Weekly Downloads

A SQLite-backed persistence layer for the Datum ecosystem — native SQL query pushdown, real transactions, and ALTER TABLE schema migrations via SqlMigrationExecutor.

Homepage
Repository (GitHub)
View/report issues

Topics

#offline-first #synchronization #database #sqlite #flutter

Funding

Consider supporting this project:

buymeacoffee.com

License

MIT (license)

Dependencies

datum, meta, sqlite3

More

Packages that depend on datum_sqlite