68 lines
2.2 KiB
Markdown
68 lines
2.2 KiB
Markdown
|
|
# wfe-sqlite
|
||
|
|
|
||
|
|
SQLite persistence provider for the WFE workflow engine.
|
||
|
|
|
||
|
|
## What it does
|
||
|
|
|
||
|
|
Implements the full `PersistenceProvider` trait (workflows, events, subscriptions, scheduled commands, execution errors) backed by SQLite via sqlx. Supports both in-memory and file-based databases. Tables and indexes are created automatically on startup -- no migrations to run.
|
||
|
|
|
||
|
|
## Quick start
|
||
|
|
|
||
|
|
```rust
|
||
|
|
use wfe_sqlite::SqlitePersistenceProvider;
|
||
|
|
|
||
|
|
// In-memory (good for tests and single-process deployments)
|
||
|
|
let provider = SqlitePersistenceProvider::new(":memory:").await?;
|
||
|
|
|
||
|
|
// File-based (persistent across restarts)
|
||
|
|
let provider = SqlitePersistenceProvider::new("sqlite:///tmp/wfe.db").await?;
|
||
|
|
```
|
||
|
|
|
||
|
|
Wire it into the WFE host as your persistence layer:
|
||
|
|
|
||
|
|
```rust
|
||
|
|
let host = WorkflowHost::new(provider);
|
||
|
|
```
|
||
|
|
|
||
|
|
## API
|
||
|
|
|
||
|
|
| Type | Trait |
|
||
|
|
|------|-------|
|
||
|
|
| `SqlitePersistenceProvider` | `PersistenceProvider`, `WorkflowRepository`, `EventRepository`, `SubscriptionRepository`, `ScheduledCommandRepository` |
|
||
|
|
|
||
|
|
Key methods come from the traits -- `create_new_workflow`, `persist_workflow`, `get_runnable_instances`, `create_event`, `schedule_command`, and so on. See `wfe-core` for the full trait definitions.
|
||
|
|
|
||
|
|
## Configuration
|
||
|
|
|
||
|
|
The constructor takes a standard SQLite connection string:
|
||
|
|
|
||
|
|
| Value | Behavior |
|
||
|
|
|-------|----------|
|
||
|
|
| `":memory:"` | In-memory database, single connection, lost on drop |
|
||
|
|
| `"sqlite:///path/to/db"` | File-backed, WAL journal mode, up to 4 connections |
|
||
|
|
|
||
|
|
WAL mode and foreign keys are enabled automatically. For in-memory mode, the pool is capped at 1 connection to avoid separate database instances.
|
||
|
|
|
||
|
|
## Schema
|
||
|
|
|
||
|
|
Six tables are created in the default schema:
|
||
|
|
|
||
|
|
- `workflows` -- workflow instance state and metadata
|
||
|
|
- `execution_pointers` -- step execution state, linked to workflows via foreign key
|
||
|
|
- `events` -- published events pending processing
|
||
|
|
- `event_subscriptions` -- active event subscriptions with CAS-style token locking
|
||
|
|
- `scheduled_commands` -- deferred commands with dedup on `(command_name, data)`
|
||
|
|
- `execution_errors` -- error log for failed step executions
|
||
|
|
|
||
|
|
## Testing
|
||
|
|
|
||
|
|
No external dependencies required. Tests run against `:memory:`:
|
||
|
|
|
||
|
|
```sh
|
||
|
|
cargo test -p wfe-sqlite
|
||
|
|
```
|
||
|
|
|
||
|
|
## License
|
||
|
|
|
||
|
|
MIT
|