Crate bevy_sqlx

Source
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

#[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 }
}
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)

fn select(mut events: EventWriter<SqlxEvent<Sqlite, Foo>>) {
    let sql = "SELECT * FROM foos";
    events.send(SqlxEvent::<Sqlite, Foo>::query(sql));
}
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)

fn select(mut events: EventWriter<SqlxEvent<Sqlite, Foo>>) {
    let sql = "SELECT * FROM foos";
    events.send(SqlxEvent::<Sqlite, Foo>::query_sync(sql));
}
fn query(mut foos: Query<&Foo>) {
    for foo in &foos {
        dbg!(foo);
    }
}
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§

pub use self::component::*;
pub use self::event::*;

Modules§

component
Components represent data backed by rows in the database
event
Both writer SqlxEvent and reader SqlxEventStatus

Structs§

SqlxDatabase
A Resource holding a connection to the underlying Pool
SqlxPlugin
A Plugin to add to an App
SqlxTasks
A Resource of tasks with the resulting components from the database