7 releases
0.2.1 | Mar 7, 2023 |
---|---|
0.2.0 | Feb 10, 2023 |
0.1.5 | Feb 7, 2023 |
0.1.3 | Feb 22, 2022 |
#1612 in Database interfaces
28 downloads per month
20KB
308 lines
include-sqlite-sql is an extension of include-sql for using SQLite SQL in Rust. It completes include-sql by providing impl_sql
macro to generate database access methods from the included SQL. include-sqlite-sql uses Rusqlite for database access.
Example
Write your SQL and save it in a file. For example, let's say the following is saved as library.sql
in the project's src
folder:
-- name: get_loaned_books ?
--
-- Returns the list of books loaned to a patron
--
-- # Parameters
--
-- param: user_id: &str - user ID
--
SELECT book_title
FROM library
WHERE loaned_to = :user_id
ORDER BY 1
-- name: loan_books!
--
-- Updates the book records to reflect loan to a patron
--
-- # Parameters
--
-- param: book_titles: &str - book titles
-- param: user_id: &str - user ID
--
UPDATE library
SET loaned_to = :user_id
, loaned_on = current_timestamp
WHERE book_title IN (:book_titles)
And then use it in Rust as:
use include_sqlite_sql::{include_sql, impl_sql};
use rusqlite::{Result, Connection};
include_sql!("src/library.sql");
fn main() -> Result<()> {
let db = Connection::open("library.db")?;
db.loan_books(&["War and Peace", "Gone With the Wind"], "Sheldon Cooper")?;
db.get_loaned_books("Sheldon Cooper", |row| {
let book_title : &str = row.get_ref(0)?.as_str()?;
println!("{book_title}");
Ok(())
})?;
Ok(())
}
Documentation
The included documentation describes the supported SQL file format and provides additional details on the generated code.
💥 Breaking Changes in 0.2
- include-sql changed optional statement terminator from
;
to/
. SQL files that used;
terminator would need to change it to/
or remove it completely.
✨ New Features in 0.2
- include-sqlite-sql now supports statement batches. Statement variant selector for this is
&
. See library.sql for an example of its use.
Dependencies
~3.5–4.5MB
~91K SLoC