flutter_rust_bridge
package, allowing for seamless communication between Rust and Dart.
Add the package to your project
pubspec.yaml
Initializing
CallLibsqlClient
constructor to create the database client. Different configurations are supported, allowing connection to in-memory database, local sqlite file, remote Turso / libSQL database, or embedded replica.
In-Memory Databases
libSQL supports connecting to in-memory databases for cases where you don’t require persistence:Local Development
You can work locally using an SQLite file and passing the path toLibsqlClient
:
Remote
You can work with remote database by passing your Turso Database URL:Embedded Replicas
You can work with embedded replicas by passing your Turso Database URL tosyncUrl
:
Embedded Replicas only works where you have access to the file system.
Connect
Manual Sync
Thesync()
function allows you to sync manually the local database with the remote counterpart:
Periodic Sync
You can automatically sync at intervals by configuring thesyncIntervalSeconds
property when instantiating the client:
Encryption at rest
To enable encryption on a SQLite file, pass theencryptionKey
:
Execute
Returns number of rows affected:Query
Returns rows asList<Map<String, dynamic>>
. Will returns empty list when is not performing select query:
Placeholders
libSQL supports the use of positional and named placeholders within SQL statements:libSQL supports the same named placeholder characters as SQLite —
:
, @
and $
.Batch Transactions
A batch consists of multiple SQL statements executed sequentially within an implicit transaction. The backend handles the transaction: success commits all changes, while any failure results in a full rollback with no modifications.Transaction Modes
Mode | SQLite command | Description |
---|---|---|
LibsqlTransactionBehavior.immediate | BEGIN IMMEDIATE | The transaction may execute statements that read and write data. Write transactions executed on a replica are forwarded to the primary instance, and can’t operate in parallel. |
LibsqlTransactionBehavior.readOnly | BEGIN TRANSACTION READONLY | The transaction may only execute statements that read data (select). Read transactions can occur on replicas, and can operate in parallel with other read transactions. |
LibsqlTransactionBehavior.deferred_ | BEGIN DEFERRED | The transaction starts in read mode, then changes to write as soon as a write statement is executed. This mode change may fail if there is a write transaction currently executing on the primary. |
Interactive Transactions
Interactive transactions in SQLite ensure the consistency of a series of read and write operations within a transaction’s scope. These transactions give you control over when to commit or roll back changes, isolating them from other client activity.Method | Description |
---|---|
execute() | Similar to execute() except within the context of the transaction |
query() | Similar to query() except within the context of the transaction |
commit() | Commits all write statements in the transaction |
rollback() | Rolls back the entire transaction |
Interactive transactions in libSQL lock the database for writing until
committed or rolled back, with a 5-second timeout. They can impact performance
on high-latency or busy databases.
ATTACH
You can attach multiple databases to the current connection using theATTACH
attachment:
Make sure to allow
ATTACH
and create a token
with the permission to attach a database — learn
more