From 6b3409a0a362dda3f7264d1a7a016c56223cfe26 Mon Sep 17 00:00:00 2001 From: Ziyang Hu Date: Sun, 1 May 2022 22:00:41 +0800 Subject: [PATCH] insertion from test data --- src/db/mutation.rs | 45 +++++++++++++++++++++++++++++++++++++++++---- src/db/plan.rs | 2 +- test_data/hr.cozo | 34 +++++++++++++++++----------------- 3 files changed, 59 insertions(+), 22 deletions(-) diff --git a/src/db/mutation.rs b/src/db/mutation.rs index 4c9d2ea9..f209e81f 100644 --- a/src/db/mutation.rs +++ b/src/db/mutation.rs @@ -61,10 +61,10 @@ impl<'a, 't> Session<'a, 't> { _ => unreachable!() } } - println!("{:?}", kind); - println!("{:?}", expr); - println!("{:?}", default_kind); - println!("{:?}", filters); + // println!("{:?}", kind); + // println!("{:?}", expr); + // println!("{:?}", default_kind); + // println!("{:?}", filters); let mut mutation_manager = MutationManager::new(self, default_kind); // Coercion @@ -293,4 +293,41 @@ mod tests { drop(engine); let _ = fs::remove_dir_all(db_path); } + + #[test] + fn test_big_mutation() { + let db_path = "_test_big_mutation"; + let engine = Engine::new(db_path.to_string(), true).unwrap(); + + { + let mut sess = engine.session().unwrap(); + let s = fs::read_to_string("test_data/hr.cozo").unwrap(); + for p in Parser::parse(Rule::file, &s).unwrap() { + if p.as_rule() == Rule::EOI { + break; + } + sess.run_definition(p).unwrap(); + } + sess.commit().unwrap(); + } + + { + let mut sess = engine.session().unwrap(); + let data = fs::read_to_string("test_data/hr.json").unwrap(); + let s = format!("insert {};", data); + let p = Parser::parse(Rule::file, &s).unwrap().next().unwrap(); + assert!(sess.run_mutation(p.clone()).is_ok()); + sess.commit().unwrap(); + assert!(sess.run_mutation(p.clone()).is_err()); + sess.rollback().unwrap(); + let it = sess.txn.iterator(true, &sess.perm_cf); + it.to_first(); + for (k, v) in it.iter() { + println!("K: {:?}, V: {:?}", Tuple::new(k), Tuple::new(v)); + } + } + + drop(engine); + let _ = fs::remove_dir_all(db_path); + } } \ No newline at end of file diff --git a/src/db/plan.rs b/src/db/plan.rs index f909db33..f79d2ebd 100644 --- a/src/db/plan.rs +++ b/src/db/plan.rs @@ -204,7 +204,7 @@ mod tests { let s = "from a:Friend, (b:Person)-[:Friend]->(c:Person), x:Person"; let parsed = Parser::parse(Rule::from_pattern, s).unwrap().next().unwrap(); assert_eq!(parsed.as_rule(), Rule::from_pattern); - sess.parse_from_pattern(parsed); + sess.parse_from_pattern(parsed).unwrap(); } drop(engine); let _ = fs::remove_dir_all(db_path); diff --git a/test_data/hr.cozo b/test_data/hr.cozo index a607e47f..80f8818b 100644 --- a/test_data/hr.cozo +++ b/test_data/hr.cozo @@ -1,50 +1,50 @@ create node Job { *id: Int, - title: String, + title: Text, min_salary: Float, max_salary: Float } create node Employee { *id: Int, - first_name: String, - last_name: String, - email: String, - phone_number: ?String + first_name: Text, + last_name: Text, + email: Text, + phone_number: ?Text } create node Dependent { *id: Int, - first_name: String, - last_name: String + first_name: Text, + last_name: Text } create node Department { *id: Int, - name: String + name: Text } create node Location { *id: Int, - street_address: String, - postal_code: ?String, - city: String, - state_province: ?String + street_address: Text, + postal_code: ?Text, + city: Text, + state_province: ?Text } create node Country { - *id: String, - name: String + *id: Text, + name: Text } create node Region { *id: Int, - name: String + name: Text } create edge (Employee)-[HasJob]->(Job) { salary: Float, - hire_date: String + hire_date: Text } create edge (Employee)-[InDepartment]->(Department) @@ -52,7 +52,7 @@ create edge (Employee)-[InDepartment]->(Department) create edge (Employee)-[Manages]->(Employee) create edge (Employee)-[HasDependent]->(Dependent) { - relationship: String + relationship: Text } create edge (Department)-[InLocation]->(Location)