extern crate redis; extern crate redis_graph; #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] use redis::aio::Connection; #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] use redis::{AsyncCommands, RedisResult}; #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] use redis_graph::*; #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] use std::env; #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] async fn get_con() -> Connection { let client = redis::Client::open(get_redis_url()).unwrap(); client.get_async_connection().await.unwrap() } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] async fn ensure_simple_data(name: &str) { let mut con = get_con().await; let _: () = con.del(name).await.unwrap(); let _ = con.graph_query( name, "CREATE (:person {name:'Pam', age:27})-[:works {since: 2010}]->(:employer {name:'Dunder Mifflin'})" ).await; } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] async fn ensure_test_data(name: &str) { let mut con = get_con().await; let _: () = con.del(name).await.unwrap(); let _ = con.graph_query(name, "CREATE (:Rider {name:'Valentino Rossi', born:1979})-[:rides]->(:Team {name:'Yamaha'}), \ (:Rider {name:'Dani Pedrosa', born:1985})-[:rides]->(:Team {name:'Honda'}), \ (:Rider {name:'Andrea Dovizioso'})-[:rides]->(:Team {name:'Ducati'})" ).await; } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_graph_create_command(name: &str) -> GraphResultSet { let mut con = get_con().await; let _: () = con.del(name).await.unwrap(); con.graph_query( name, "CREATE (:person {name:'Pam', age:27})-[:works {since: 2010}]->(:employer {name:'Dunder Mifflin'})" ).await.unwrap() } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_match_query_command(name: &str) -> GraphResultSet { ensure_simple_data(name).await; get_con() .await .graph_query(name, "MATCH (n1)-[r]->(n2) RETURN n1, r, n2.name") .await .unwrap() } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_match_ro_query_command(name: &str) -> GraphResultSet { ensure_simple_data(name).await; get_con() .await .graph_ro_query(name, "MATCH (n1)-[r]->(n2) RETURN n1, r, n2.name") .await .unwrap() } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_match_scalar_result(name: &str) -> GraphResultSet { ensure_test_data(name).await; get_con() .await .graph_query( name, "MATCH (r:Rider)-[:rides]->(t:Team) WHERE t.name = 'Yamaha' RETURN r.name, t.name", ) .await .unwrap() } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_query_all_nodes(name: &str) -> GraphResultSet { ensure_test_data(name).await; get_con() .await .graph_query(name, "MATCH (r:Rider) RETURN r") .await .unwrap() } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_query_option(name: &str) -> GraphResultSet { ensure_test_data(name).await; get_con() .await .graph_query(name, "MATCH (r:Rider) RETURN r.born") .await .unwrap() } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_graph_profile_query(name: &str) -> Vec { ensure_test_data(name).await; get_con() .await .graph_profile(name, "MATCH (r:Rider) RETURN r") .await .unwrap() } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_graph_slowlog_query(name: &str) -> Vec { ensure_test_data(name).await; get_con().await.graph_slowlog(name).await.unwrap() } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_graph_config_set() -> RedisResult { get_con() .await .graph_config_set("RESULTSET_SIZE", 500) .await } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_graph_config_set_invalid() -> RedisResult { get_con().await.graph_config_set("SOME", 500).await } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_graph_config_get() -> RedisResult { let _: bool = get_con() .await .graph_config_set("RESULTSET_SIZE", 500) .await .unwrap(); get_con().await.graph_config_get("RESULTSET_SIZE").await } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_graph_config_get_all() -> GraphConfig { let _: bool = get_con() .await .graph_config_set("RESULTSET_SIZE", 500) .await .unwrap(); get_con().await.graph_config_get_all().await.unwrap() } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_graph_delete(name: &str) -> RedisResult { ensure_test_data(name).await; get_con().await.graph_delete(name).await } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] pub async fn issue_graph_explain(name: &str) -> RedisResult> { ensure_test_data(name).await; get_con() .await .graph_explain(name, "MATCH (r:Rider) RETURN r") .await } #[cfg(any(feature = "tokio-comp", feature = "async-std-comp"))] fn get_redis_url() -> String { let redis_host_key = "REDIS_HOST"; let redis_host_port = "REDIS_PORT"; let redis_host = match env::var(redis_host_key) { Ok(host) => host, _ => "localhost".to_string(), }; let redis_port = match env::var(redis_host_port) { Ok(port) => port, _ => "6379".to_string(), }; format!("redis://{}:{}/", redis_host, redis_port) }