include-postgres-sql is an extension of include-sql for using Postgres SQL in Rust. It completes include-sql by providing impl_sql
macro to generate database access methods from the included SQL. include-postgres-sql uses Rust-Postgres for database access.
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 sql
folder:
```sql
SELECT booktitle FROM library WHERE loanedto = :user_id ORDER BY 1
-- param: book_titles: &str - book titles
UPDATE library SET loanedto = :userid , loanedon = currenttimestamp WHERE booktitle IN (:booktitles) ```
And then use it in Rust as:
```rust , ignore use includepostgressql::{includesql, implsql}; use postgres::{Config, NoTls, Error};
include_sql!("sql/library.sql");
fn main() -> Result<(),Error> { let mut db = Config::new().host("localhost").connect(NoTls)?;
db.loan_books(&["War and Peace", "Gone With the Wind"], "Sheldon Cooper")?;
db.get_loaned_books("Sheldon Cooper", |row| {
let book_title : &str = row.try_get(0)?;
println!("{book_title}");
Ok(())
})?;
Ok(())
} ```
Or, when include-postgres-sql tokio
feature is selected:
```rust , ignore use includepostgressql::{includesql, implsql}; use tokio_postgres::{Config, NoTls, Error};
include_sql!("sql/library.sql");
async fn main() -> Result<(),Error> { let (db, conn) = Config::new().host("localhost").connect(NoTls).await?; tokio::spawn(async move { if let Err(e) = conn.await { eprintln!("connection error: {}", e); } });
db.loan_books(&["War and Peace", "Gone With the Wind"], "Sheldon Cooper").await?;
db.get_loaned_books("Sheldon Cooper", |row| {
let book_title : &str = row.try_get(0)?;
println!("{book_title}");
Ok(())
}).await?;
Ok(())
} ```
The included documentation describes the supported SQL file format and provides additional details on the generated code.
;
to /
. SQL files that used ;
terminator would need to change it to /
or remove it completely.