Files
wfe/wfe-sqlite/README.md

68 lines
2.2 KiB
Markdown
Raw Normal View History

# 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