use cqlite::{Error, Graph, Property}; #[macro_use] mod common; #[test] fn return_parameter() { let graph = Graph::open_anon().unwrap(); let stmt = graph.prepare("RETURN $val").unwrap(); let res: Vec = stmt .query_map(&mut graph.txn().unwrap(), ("val", 1u64), |m| m.get(0)) .unwrap() .collect::>() .unwrap(); assert_eq!(vec![Property::Id(1)], res); let res: Vec = stmt .query_map(&mut graph.txn().unwrap(), ("val", 42), |m| m.get(0)) .unwrap() .collect::>() .unwrap(); assert_eq!(vec![Property::Integer(42)], res); let res: Vec = stmt .query_map(&mut graph.txn().unwrap(), ("val", 0.5), |m| m.get(0)) .unwrap() .collect::>() .unwrap(); assert_eq!(vec![Property::Real(0.5)], res); let res: Vec = stmt .query_map(&mut graph.txn().unwrap(), ("val", true), |m| m.get(0)) .unwrap() .collect::>() .unwrap(); assert_eq!(vec![Property::Boolean(true)], res); let res: Vec = stmt .query_map(&mut graph.txn().unwrap(), ("val", "Hello World!"), |m| { m.get(0) }) .unwrap() .collect::>() .unwrap(); assert_eq!(vec![Property::Text("Hello World!".into())], res); let res: Vec = stmt .query_map(&mut graph.txn().unwrap(), ("val", b"Hello World!"), |m| { m.get(0) }) .unwrap() .collect::>() .unwrap(); assert_eq!(vec![Property::Blob(b"Hello World!".to_vec())], res); let res: Vec = stmt .query_map(&mut graph.txn().unwrap(), (), |m| m.get(0)) .unwrap() .collect::>() .unwrap(); assert_eq!(vec![Property::Null], res); } #[test] fn return_id_of() { let graph = Graph::open_anon().unwrap(); let mut txn = graph.mut_txn().unwrap(); graph .prepare("CREATE (:TEST) CREATE (:TEST) CREATE (:TEST)") .unwrap() .execute(&mut txn, ()) .unwrap(); txn.commit().unwrap(); let mut txn = graph.mut_txn().unwrap(); let mut labels: Vec = graph .prepare("MATCH (p) RETURN ID(p)") .unwrap() .query_map(&mut txn, (), |m| m.get(0)) .unwrap() .collect::>() .unwrap(); labels.sort_unstable(); assert_eq!(labels, vec![0, 1, 2]); txn.commit().unwrap(); } #[test] fn return_label_of() { let graph = Graph::open_anon().unwrap(); let mut txn = graph.mut_txn().unwrap(); graph .prepare("CREATE (:PERSON) CREATE (:CITY) CREATE (:my_label)") .unwrap() .execute(&mut txn, ()) .unwrap(); txn.commit().unwrap(); let mut txn = graph.mut_txn().unwrap(); let mut labels: Vec = graph .prepare("MATCH (p) RETURN LABEL(p)") .unwrap() .query_map(&mut txn, (), |m| m.get(0)) .unwrap() .collect::>() .unwrap(); labels.sort(); assert_eq!(labels, vec!["CITY", "PERSON", "my_label"]); txn.commit().unwrap(); } #[test] fn create_and_return() { let graph = Graph::open_anon().unwrap(); let mut txn = graph.mut_txn().unwrap(); let vals = graph .prepare("CREATE (a:TEST { name: 'Peter Parker', age: 42 }) RETURN a.name, a.age") .unwrap() .query_map(&mut txn, (), |m| Ok((m.get(0)?, m.get(1)?))) .unwrap() .collect::, _>>() .unwrap(); assert_eq!(vals, vec![("Peter Parker".into(), 42)]); txn.commit().unwrap(); let vals = graph .prepare("MATCH (a) RETURN a.name, a.age") .unwrap() .query_map(&mut graph.txn().unwrap(), (), |m| { Ok((m.get(0)?, m.get(1)?)) }) .unwrap() .collect::, _>>() .unwrap(); assert_eq!(vals, vec![("Peter Parker".into(), 42)]); } #[test] fn set_and_return() { let graph = Graph::open_anon().unwrap(); let mut txn = graph.mut_txn().unwrap(); graph .prepare("CREATE (:PERSON)") .unwrap() .execute(&mut txn, ()) .unwrap(); txn.commit().unwrap(); let mut txn = graph.mut_txn().unwrap(); let name: Vec = graph .prepare("MATCH (p) SET p.name = 'Stacey' RETURN p.name") .unwrap() .query_map(&mut txn, (), |m| m.get(0)) .unwrap() .collect::>() .unwrap(); assert_eq!(name, vec!["Stacey"]); txn.commit().unwrap(); } #[test] fn delete_and_return() { let graph = Graph::open_anon().unwrap(); let mut txn = graph.mut_txn().unwrap(); graph .prepare("CREATE (:PERSON { name: 'Bruce' })") .unwrap() .execute(&mut txn, ()) .unwrap(); txn.commit().unwrap(); let mut txn = graph.mut_txn().unwrap(); let name: Vec = graph .prepare("MATCH (p) DELETE p RETURN p.name") .unwrap() .query_map(&mut txn, (), |m| m.get(0)) .unwrap() .collect::>() .unwrap(); assert_eq!(name, vec!["Bruce"]); txn.commit().unwrap(); } #[test] fn return_out_of_bounds() { let graph = Graph::open_anon().unwrap(); let mut txn = graph.txn().unwrap(); let stmt = graph.prepare("RETURN 'test', 42").unwrap(); let mut query = stmt.query(&mut txn, ()).unwrap(); let m = query.step().unwrap().unwrap(); assert_eq!(m.get::(0).unwrap(), "test"); assert_eq!(m.get::(1).unwrap(), 42); assert_err!(m.get::(2), Error::IndexOutOfBounds); }