# wasm-dbms-sql

[](https://opensource.org/licenses/MIT)
[](https://github.com/veeso/wasm-dbms/stargazers)
[](https://crates.io/crates/wasm-dbms-sql)
[](https://crates.io/crates/wasm-dbms-sql)
[](https://conventionalcommits.org)
[](https://github.com/veeso/wasm-dbms/actions)
[](https://coveralls.io/github/veeso/wasm-dbms)
[](https://docs.rs/wasm-dbms-sql)
SQL front-end for the [wasm-dbms](https://crates.io/crates/wasm-dbms) DBMS engine.
This crate parses SQL text, binds it to a `wasm-dbms` schema, and runs it
against a `DbmsContext`. It covers queries (`SELECT` with joins, `DISTINCT`,
aggregates, `GROUP BY`, `HAVING`, `ORDER BY`, `LIMIT`, `OFFSET`), writes
(`INSERT`, `UPDATE`, `DELETE`), and transactions (`BEGIN`, `COMMIT`,
`ROLLBACK`). Tables are still defined with `#[derive(Table)]`: there is no
schema-changing SQL.
## Usage
```toml
[dependencies]
wasm-dbms = "0.9"
wasm-dbms-api = "0.9"
wasm-dbms-memory = "0.9"
wasm-dbms-sql = "0.9"
```
```rust,ignore
use wasm_dbms::prelude::*;
use wasm_dbms_api::prelude::*;
use wasm_dbms_memory::prelude::HeapMemoryProvider;
use wasm_dbms_sql::SqlEngine;
#[derive(Clone, DatabaseSchema)]
#[tables(User = "users")]
pub struct MySchema;
let ctx = DbmsContext::new(HeapMemoryProvider::default());
MySchema::register_tables(&ctx)?;
let engine = SqlEngine::new(MySchema);
engine.execute(
&ctx,
None,
"INSERT INTO users (id, name) VALUES (?, ?)",
&[Value::from(1u32), Value::from("Alice")],
)?;
let result = engine.execute(
&ctx,
None,
"SELECT name FROM users WHERE id = 1",
&[],
)?;
```
## Documentation
- [SQL guide](https://wasm-dbms.cc/guides/sql.html)
- [SQL syntax reference](https://wasm-dbms.cc/reference/sql.html)
## License
This project is licensed under the MIT License. See the
[LICENSE](https://github.com/veeso/wasm-dbms/blob/main/LICENSE) file for
details.