use std::future::IntoFuture;
use xitca_postgres::{ExecuteBlocking, Postgres, Statement, types::Type};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let rt = tokio::runtime::Builder::new_current_thread().enable_all().build()?;
let (cli, drv) = rt.block_on(Postgres::new("postgres://postgres:postgres@localhost:5432").connect())?;
let handle = std::thread::spawn(move || rt.block_on(drv.into_future()));
{
"CREATE TEMPORARY TABLE foo (id SERIAL, name TEXT)".execute_blocking(&cli)?;
"INSERT INTO foo (name) VALUES ('alice'), ('bob'), ('charlie');".execute_blocking(&cli)?;
let stmt = Statement::named("INSERT INTO foo (name) VALUES ($1)", &[Type::TEXT]).execute_blocking(&cli)?;
let row_affected = stmt.bind(["david"]).execute_blocking(&cli)?;
assert_eq!(row_affected, 1);
let stmt = Statement::named(
"SELECT id, name FROM foo WHERE id = $1 AND name = $2",
&[Type::INT4, Type::TEXT],
)
.execute_blocking(&cli)?;
let stream = stmt.bind_dyn(&[&4i32, &"david"]).query_blocking(&cli)?;
for item in stream {
let row = item?;
assert_eq!(row.get::<i32>("id"), 4);
assert_eq!(row.get::<&str>("name"), "david");
}
}
drop(cli);
handle.join().unwrap()?;
Ok(())
}