From 4c6d35f7696de7ec9355aeca84d3a25292580e08 Mon Sep 17 00:00:00 2001 From: Adrienne Cohea Date: Wed, 3 Nov 2021 21:35:27 -0700 Subject: [PATCH] Provide a working example. --- README.md | 78 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index c6775c4a..b9858c36 100644 --- a/README.md +++ b/README.md @@ -16,36 +16,56 @@ This driver is compatible with neo4j 4.x versions ## Example ```rust - // concurrent queries - let uri = "127.0.0.1:7687"; - let user = "neo4j"; - let pass = "neo"; - let graph = Arc::new(Graph::new(&uri, user, pass).await.unwrap()); - for _ in 1..=42 { - let graph = graph.clone(); - tokio::spawn(async move { - let mut result = graph.execute( - query("MATCH (p:Person {name: $name}) RETURN p").param("name", "Mark") - ).await.unwrap(); - while let Ok(Some(row)) = result.next().await { - let node: Node = row.get("p").unwrap(); - let name: String = node.get("name").unwrap(); - println!("{}", name); - } - }); +use neo4rs::{Graph, Node, query}; +use std::sync::Arc; + +#[tokio::main] +async fn main() { + // concurrent queries + let uri = "127.0.0.1:7687"; + let user = "neo4j"; + let pass = "neo"; + let graph = Arc::new(Graph::new(uri, user, pass).await.unwrap()); + let q = graph.clone(); + let mut tasks = std::vec::Vec::new(); + + tasks.push(tokio::spawn(async move { + loop { + let mut result = q.execute( + query("MATCH (p:Person {name: $name}) RETURN p").param("name", "mark")) + .await.unwrap(); + + tokio::select! { + Ok(maybe_row) = result.next() => { + match maybe_row { + Some(row) => { + let node: Node = row.get("p").unwrap(); + let name: String = node.get("name").unwrap(); + println!("Found {} in the graph", name); + return; + }, + None => println!("Waiting for mark to be added to the graph") + } + }, + } } - - //Transactions - let mut txn = graph.start_txn().await.unwrap(); - txn.run_queries(vec![ - query("CREATE (p:Person {name: 'mark'})"), - query("CREATE (p:Person {name: 'jake'})"), - query("CREATE (p:Person {name: 'luke'})"), - ]) - .await - .unwrap(); - txn.commit().await.unwrap(); //or txn.rollback().await.unwrap(); - + })); + + //Transactions + let txn = graph.start_txn().await.unwrap(); + + txn.run_queries(vec![ + query("CREATE (p:Person {name: 'mark'})"), + query("CREATE (p:Person {name: 'jake'})"), + query("CREATE (p:Person {name: 'luke'})"), + ]) + .await + .unwrap(); + + txn.commit().await.unwrap(); //or txn.rollback().await.unwrap(); + + futures::future::join_all(tasks).await; +} ```