mod test_db; use agdb::DbElement; use agdb::DbId; use agdb::QueryBuilder; use test_db::TestDb; #[test] fn select_values_ids() { let mut db = TestDb::new(); db.exec_mut( QueryBuilder::insert() .nodes() .aliases(["alias1", "alias2"]) .values([ [ ("key", "value").into(), ("key2", "value2").into(), ("key3", "value3").into(), ], [ ("key", "value4").into(), ("key2", "value5").into(), ("key3", "value6").into(), ], ]) .query(), 2, ); db.exec_elements( QueryBuilder::select() .values(["key", "key2"]) .ids(["alias1", "alias2"]) .query(), &[ DbElement { id: DbId(1), from: None, to: None, values: vec![("key", "value").into(), ("key2", "value2").into()], }, DbElement { id: DbId(2), from: None, to: None, values: vec![("key", "value4").into(), ("key2", "value5").into()], }, ], ); } #[test] fn select_values_ids_missing_key() { let mut db = TestDb::new(); db.exec_mut( QueryBuilder::insert() .nodes() .aliases(["alias1", "alias2"]) .values([ vec![ ("key", "value").into(), ("key2", "value2").into(), ("key3", "value3").into(), ], vec![("key", "value4").into()], ]) .query(), 2, ); db.exec_error( QueryBuilder::select() .values(["key", "key2"]) .ids(["alias1", "alias2"]) .query(), "Missing key 'key2' for id '2'", ); } #[test] fn select_values_search() { let mut db = TestDb::new(); db.exec_mut( QueryBuilder::insert() .nodes() .count(5) .values_uniform([ ("key1", 1).into(), ("key2", 10).into(), ("key3", 100).into(), ]) .query(), 5, ); db.exec_mut( QueryBuilder::insert() .edges() .from([1, 3]) .to([3, 5]) .query(), 2, ); db.exec_elements( QueryBuilder::select() .values("key2") .ids(QueryBuilder::search().from(3).query()) .query(), &[ DbElement { id: DbId(3), from: None, to: None, values: vec![("key2", 10).into()], }, DbElement { id: DbId(-7), from: Some(DbId(3)), to: Some(DbId(5)), values: vec![], }, DbElement { id: DbId(5), from: None, to: None, values: vec![("key2", 10).into()], }, ], ); } #[test] fn select_values_search_alt() { let mut db = TestDb::new(); db.exec_mut( QueryBuilder::insert() .nodes() .count(5) .values_uniform([ ("key1", 1).into(), ("key2", 10).into(), ("key3", 100).into(), ]) .query(), 5, ); db.exec_mut( QueryBuilder::insert() .edges() .from([1, 3]) .to([3, 5]) .query(), 2, ); db.exec_elements( QueryBuilder::select() .values("key2") .search() .from(3) .query(), &[ DbElement { id: DbId(3), from: None, to: None, values: vec![("key2", 10).into()], }, DbElement { id: DbId(-7), from: Some(DbId(3)), to: Some(DbId(5)), values: vec![], }, DbElement { id: DbId(5), from: None, to: None, values: vec![("key2", 10).into()], }, ], ); }