use pg_wired::{AsyncConn, WireConn};
fn env_or<'a>(var: &str, default: &'a str) -> std::borrow::Cow<'a, str> {
match std::env::var(var) {
Ok(v) => std::borrow::Cow::Owned(v),
Err(_) => std::borrow::Cow::Borrowed(default),
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let addr = env_or("RESOLUTE_TEST_ADDR", "127.0.0.1:54322");
let user = env_or("RESOLUTE_TEST_USER", "postgres");
let pass = env_or("RESOLUTE_TEST_PASSWORD", "postgres");
let db = env_or("RESOLUTE_TEST_DB", "postgrest_test");
let wire = WireConn::connect(&addr, &user, &pass, &db).await?;
let conn = AsyncConn::new(wire);
println!("connected, backend pid = {}", conn.backend_pid());
let rows = conn
.exec_query("SELECT 1 AS n, 'hello' AS s", &[], &[])
.await?;
let n = std::str::from_utf8(rows[0].cell(0).unwrap())?;
let s = std::str::from_utf8(rows[0].cell(1).unwrap())?;
println!("simple query: n = {n}, s = {s}");
let rows = conn
.exec_query(
"SELECT $1::text || ' world'",
&[Some(b"hello" as &[u8])],
&[25],
)
.await?;
let v = std::str::from_utf8(rows[0].cell(0).unwrap())?;
println!("parameterized: {v}");
let rows = conn
.exec_transaction(
"BEGIN",
"SELECT count(*)::text FROM pg_catalog.pg_namespace",
&[],
&[],
)
.await?;
let count = std::str::from_utf8(rows[0].cell(0).unwrap())?;
println!("namespaces: {count}");
Ok(())
}