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
Component
withFromRow
andPrimaryKey
#[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
SqlxPlugin
to 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::query
orSqlxEvent::call
to 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::Return
events
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_sync
orSqlxEvent::call_sync
to 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::Spawn
andSqlxEventStatus::Update
events
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
SqlxEvent
and readerSqlxEventStatus
Structs§
- Sqlx
Database - A
Resource
holding a connection to the underlyingPool
- Sqlx
Plugin - A
Plugin
to add to anApp
- Sqlx
Tasks - A
Resource
of tasks with the resulting components from the database