Expand description
Bevy SQLx is a database plugin for Bevy’s ECS which allows for SQL queries to be performed and data entities to be spawned and managed.
§Setup
- Define a
ComponentwithFromRowandPrimaryKey
#[derive(Component, FromRow)]
struct Foo {
id: u32,
flag: bool,
text: String,
}
impl PrimaryKey for Foo {
type Column = u32;
fn primary_key(&self) -> Self::Column { self.id }
}- Add the
SqlxPluginto theApp
let url = "sqlite:db/sqlite.db";
let app = App::new()
.add_plugins(DefaultPlugins)
.add_plugins(SqlxPlugin::<Sqlite, Foo>::from_url(&url))
.run();§Usage (return component directly)
- Send events with
SqlxEvent::queryorSqlxEvent::callto query the database
fn select(mut events: EventWriter<SqlxEvent<Sqlite, Foo>>) {
let sql = "SELECT * FROM foos";
events.send(SqlxEvent::<Sqlite, Foo>::query(sql));
}- Respond to
SqlxEventStatus::Returnevents
fn status(
foos: Query<&Foo>,
mut statuses: EventReader<SqlxEventStatus<Sqlite, Foo>>,
) {
for status in statuses.read() {
match status {
SqlxEventStatus::Return(_, component) => {
dbg!(component);
},
_ => {}
}
}
}§Usage (synchronize component with entities)
- Send events with
SqlxEvent::query_syncorSqlxEvent::call_syncto query the database
fn select(mut events: EventWriter<SqlxEvent<Sqlite, Foo>>) {
let sql = "SELECT * FROM foos";
events.send(SqlxEvent::<Sqlite, Foo>::query_sync(sql));
}- Notice the effects of
SqlxTasks::handle_tasks
fn query(mut foos: Query<&Foo>) {
for foo in &foos {
dbg!(foo);
}
}- And/or, respond to
SqlxEventStatus::SpawnandSqlxEventStatus::Updateevents
fn status(
foos: Query<&Foo>,
mut statuses: EventReader<SqlxEventStatus<Sqlite, Foo>>,
) {
for status in statuses.read() {
match status {
SqlxEventStatus::Spawn(_, pk, _) |
SqlxEventStatus::Update(_, pk, _) => {
for foo in &foos {
if foo.primary_key() == *pk {
dbg!(foo);
}
}
},
_ => {}
}
}
}Re-exports§
Modules§
- component
- Components represent data backed by rows in the database
- event
- Both writer
SqlxEventand readerSqlxEventStatus
Structs§
- Sqlx
Database - A
Resourceholding a connection to the underlyingPool - Sqlx
Plugin - A
Pluginto add to anApp - Sqlx
Tasks - A
Resourceof tasks with the resulting components from the database