diff --git a/Cargo.lock b/Cargo.lock index fcaee7fe..f50adeb8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2149,6 +2149,7 @@ dependencies = [ name = "tokio-postgres-on-workers" version = "0.1.0" dependencies = [ + "anyhow", "tokio-postgres", "worker", ] diff --git a/examples/tokio-postgres/Cargo.toml b/examples/tokio-postgres/Cargo.toml index 8e94474e..54af7cb5 100644 --- a/examples/tokio-postgres/Cargo.toml +++ b/examples/tokio-postgres/Cargo.toml @@ -17,3 +17,4 @@ crate-type = ["cdylib"] [dependencies] worker = { workspace=true, features=["tokio-postgres"] } tokio-postgres = { version="0.7", features=['js'], default-features=false } +anyhow="1" \ No newline at end of file diff --git a/examples/tokio-postgres/src/lib.rs b/examples/tokio-postgres/src/lib.rs index 610fcc02..68e599e5 100644 --- a/examples/tokio-postgres/src/lib.rs +++ b/examples/tokio-postgres/src/lib.rs @@ -1,20 +1,19 @@ -use worker::postgres_tls::PassthroughTls; -use worker::*; +use worker::{postgres_tls::PassthroughTls, *}; #[event(fetch)] -async fn main(_req: Request, _env: Env, _ctx: Context) -> Result { - let mut config = tokio_postgres::config::Config::new(); - // Configure username, password, database as needed. - config.user("postgres"); +async fn main(_req: Request, env: Env, _ctx: Context) -> anyhow::Result { + let hyperdrive = env.hyperdrive("DB")?; // Connect using Worker Socket let socket = Socket::builder() .secure_transport(SecureTransport::StartTls) - .connect("database_url", 5432)?; - let (_client, connection) = config - .connect_raw(socket, PassthroughTls) - .await - .map_err(|e| worker::Error::RustError(format!("tokio-postgres: {:?}", e)))?; + .connect(hyperdrive.host(), hyperdrive.port())?; + + let config = hyperdrive + .connection_string() + .parse::()?; + + let (client, connection) = config.connect_raw(socket, PassthroughTls).await?; wasm_bindgen_futures::spawn_local(async move { if let Err(error) = connection.await { @@ -22,7 +21,14 @@ async fn main(_req: Request, _env: Env, _ctx: Context) -> Result { } }); - // Use `client` to make queries. + // Setup table: + // CREATE TABLE IF NOT EXISTS foo (id SERIAL PRIMARY KEY, name TEXT); + // INSERT INTO foo (name) VALUES ('Fred'); + + // `query` uses a prepared statement which is not supported by Hyperdrive + let result = client.simple_query("SELECT * FROM FOO").await?; + + console_log!("{:?}", result); - Response::ok("Hello, World!") + Ok(Response::ok("Hello, World!")?) } diff --git a/examples/tokio-postgres/wrangler.toml b/examples/tokio-postgres/wrangler.toml index 59cd728d..40fa60bc 100644 --- a/examples/tokio-postgres/wrangler.toml +++ b/examples/tokio-postgres/wrangler.toml @@ -1,6 +1,10 @@ -name = "tokio-postgres-on-workers" +name = "hyperdrive-test" main = "build/worker/shim.mjs" -compatibility_date = "2023-03-22" +compatibility_date = "2024-05-01" + +[[hyperdrive]] +binding = "DB" +id = "" [build] -command = "cargo install --path ../../worker-build && worker-build --release" +command = "cargo install --path ../../worker-build && worker-build --release" \ No newline at end of file