|
|
|
@ -27,13 +27,13 @@ fn creation() {
|
|
|
|
|
assert!(db.current_schema().unwrap().as_array().unwrap().is_empty());
|
|
|
|
|
let res = db.transact_attributes(&json!({
|
|
|
|
|
"attrs": [
|
|
|
|
|
{"put": {"keyword": "person/idd", "cardinality": "one", "type": "string", "index": "identity", "history": false}},
|
|
|
|
|
{"put": {"keyword": "person/first_name", "cardinality": "one", "type": "string", "index": true}},
|
|
|
|
|
{"put": {"keyword": "person/last_name", "cardinality": "one", "type": "string", "index": true}},
|
|
|
|
|
{"put": {"keyword": "person/age", "cardinality": "one", "type": "int"}},
|
|
|
|
|
{"put": {"keyword": "person/friend", "cardinality": "many", "type": "ref"}},
|
|
|
|
|
{"put": {"keyword": "person/weight", "cardinality": "one", "type": "float"}},
|
|
|
|
|
{"put": {"keyword": "person/covid", "cardinality": "one", "type": "bool"}},
|
|
|
|
|
{"put": {"keyword": "person.idd", "cardinality": "one", "type": "string", "index": "identity", "history": false}},
|
|
|
|
|
{"put": {"keyword": "person.first_name", "cardinality": "one", "type": "string", "index": true}},
|
|
|
|
|
{"put": {"keyword": "person.last_name", "cardinality": "one", "type": "string", "index": true}},
|
|
|
|
|
{"put": {"keyword": "person.age", "cardinality": "one", "type": "int"}},
|
|
|
|
|
{"put": {"keyword": "person.friend", "cardinality": "many", "type": "ref"}},
|
|
|
|
|
{"put": {"keyword": "person.weight", "cardinality": "one", "type": "float"}},
|
|
|
|
|
{"put": {"keyword": "person.covid", "cardinality": "one", "type": "bool"}},
|
|
|
|
|
]
|
|
|
|
|
}))
|
|
|
|
|
.unwrap();
|
|
|
|
@ -42,8 +42,8 @@ fn creation() {
|
|
|
|
|
let last_id = res["results"][6][0].as_u64().unwrap();
|
|
|
|
|
db.transact_attributes(&json!({
|
|
|
|
|
"attrs": [
|
|
|
|
|
{"put": {"id": first_id, "keyword": ":person/id", "cardinality": "one", "type": "string", "index": "identity", "history": false}},
|
|
|
|
|
{"retract": {"id": last_id, "keyword": ":person/covid", "cardinality": "one", "type": "bool"}}
|
|
|
|
|
{"put": {"id": first_id, "keyword": ":person.id", "cardinality": "one", "type": "string", "index": "identity", "history": false}},
|
|
|
|
|
{"retract": {"id": last_id, "keyword": ":person.covid", "cardinality": "one", "type": "bool"}}
|
|
|
|
|
]
|
|
|
|
|
})).unwrap();
|
|
|
|
|
assert_eq!(db.current_schema().unwrap().as_array().unwrap().len(), 6);
|
|
|
|
@ -55,56 +55,56 @@ fn creation() {
|
|
|
|
|
"tx": [
|
|
|
|
|
{"put": {
|
|
|
|
|
"_temp_id": "alice",
|
|
|
|
|
"person/first_name": "Alice",
|
|
|
|
|
"person/age": 7,
|
|
|
|
|
"person/last_name": "Amorist",
|
|
|
|
|
"person/id": "alice_amorist",
|
|
|
|
|
"person/weight": 25,
|
|
|
|
|
"person/friend": "eve"}},
|
|
|
|
|
"person.first_name": "Alice",
|
|
|
|
|
"person.age": 7,
|
|
|
|
|
"person.last_name": "Amorist",
|
|
|
|
|
"person.id": "alice_amorist",
|
|
|
|
|
"person.weight": 25,
|
|
|
|
|
"person.friend": "eve"}},
|
|
|
|
|
{"put": {
|
|
|
|
|
"_temp_id": "bob",
|
|
|
|
|
"person/first_name": "Bob",
|
|
|
|
|
"person/age": 70,
|
|
|
|
|
"person/last_name": "Wonderland",
|
|
|
|
|
"person/id": "bob_wonderland",
|
|
|
|
|
"person/weight": 100,
|
|
|
|
|
"person/friend": "alice"
|
|
|
|
|
"person.first_name": "Bob",
|
|
|
|
|
"person.age": 70,
|
|
|
|
|
"person.last_name": "Wonderland",
|
|
|
|
|
"person.id": "bob_wonderland",
|
|
|
|
|
"person.weight": 100,
|
|
|
|
|
"person.friend": "alice"
|
|
|
|
|
}},
|
|
|
|
|
{"put": {
|
|
|
|
|
"_temp_id": "eve",
|
|
|
|
|
"person/first_name": "Eve",
|
|
|
|
|
"person/age": 18,
|
|
|
|
|
"person/last_name": "Faking",
|
|
|
|
|
"person/id": "eve_faking",
|
|
|
|
|
"person/weight": 50,
|
|
|
|
|
"person/friend": [
|
|
|
|
|
"person.first_name": "Eve",
|
|
|
|
|
"person.age": 18,
|
|
|
|
|
"person.last_name": "Faking",
|
|
|
|
|
"person.id": "eve_faking",
|
|
|
|
|
"person.weight": 50,
|
|
|
|
|
"person.friend": [
|
|
|
|
|
"alice",
|
|
|
|
|
"bob",
|
|
|
|
|
{
|
|
|
|
|
"person/first_name": "Charlie",
|
|
|
|
|
"person/age": 22,
|
|
|
|
|
"person/last_name": "Goodman",
|
|
|
|
|
"person/id": "charlie_goodman",
|
|
|
|
|
"person/weight": 120,
|
|
|
|
|
"person/friend": "eve"
|
|
|
|
|
"person.first_name": "Charlie",
|
|
|
|
|
"person.age": 22,
|
|
|
|
|
"person.last_name": "Goodman",
|
|
|
|
|
"person.id": "charlie_goodman",
|
|
|
|
|
"person.weight": 120,
|
|
|
|
|
"person.friend": "eve"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}},
|
|
|
|
|
{"put": {
|
|
|
|
|
"_temp_id": "david",
|
|
|
|
|
"person/first_name": "David",
|
|
|
|
|
"person/age": 7,
|
|
|
|
|
"person/last_name": "Dull",
|
|
|
|
|
"person/id": "david_dull",
|
|
|
|
|
"person/weight": 25,
|
|
|
|
|
"person/friend": {
|
|
|
|
|
"person.first_name": "David",
|
|
|
|
|
"person.age": 7,
|
|
|
|
|
"person.last_name": "Dull",
|
|
|
|
|
"person.id": "david_dull",
|
|
|
|
|
"person.weight": 25,
|
|
|
|
|
"person.friend": {
|
|
|
|
|
"_temp_id": "george",
|
|
|
|
|
"person/first_name": "George",
|
|
|
|
|
"person/age": 7,
|
|
|
|
|
"person/last_name": "Geomancer",
|
|
|
|
|
"person/id": "george_geomancer",
|
|
|
|
|
"person/weight": 25,
|
|
|
|
|
"person/friend": "george"}}},
|
|
|
|
|
"person.first_name": "George",
|
|
|
|
|
"person.age": 7,
|
|
|
|
|
"person.last_name": "Geomancer",
|
|
|
|
|
"person.id": "george_geomancer",
|
|
|
|
|
"person.weight": 25,
|
|
|
|
|
"person.friend": "george"}}},
|
|
|
|
|
]
|
|
|
|
|
}))
|
|
|
|
|
.unwrap();
|
|
|
|
@ -119,9 +119,9 @@ fn creation() {
|
|
|
|
|
EntityId::MIN_PERM,
|
|
|
|
|
&json!([
|
|
|
|
|
"_id",
|
|
|
|
|
"person/first_name",
|
|
|
|
|
"person/last_name",
|
|
|
|
|
{"pull":"person/friend", "as": "friends", "recurse": true},
|
|
|
|
|
"person.first_name",
|
|
|
|
|
"person.last_name",
|
|
|
|
|
{"pull":"person.friend", "as": "friends", "recurse": true},
|
|
|
|
|
]),
|
|
|
|
|
Validity::current(),
|
|
|
|
|
)
|
|
|
|
@ -133,18 +133,18 @@ fn creation() {
|
|
|
|
|
"q": [
|
|
|
|
|
{
|
|
|
|
|
"rule": "ff",
|
|
|
|
|
"args": [["?a", "?b"], ["?a", "person/friend", "?b"]]
|
|
|
|
|
"args": [["?a", "?b"], ["?a", "person.friend", "?b"]]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"rule": "ff",
|
|
|
|
|
"args": [["?a", "?b"], ["?a", "person/friend", "?c"], {"rule": "ff", "args": ["?c", "?b"]}]
|
|
|
|
|
"args": [["?a", "?b"], ["?a", "person.friend", "?c"], {"rule": "ff", "args": ["?c", "?b"]}]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"rule": "?",
|
|
|
|
|
"args": [["?n", "?a"], {"pred": "Neq", "args": ["?n", "Alice"]}, {"rule": "ff", "args": [{"person/id": "alice_amorist"}, "?a"]}, ["?a", "person/first_name", "?n"]]
|
|
|
|
|
"args": [["?a"], {"pred": "Neq", "args": ["?n", "Alice"]}, {"rule": "ff", "args": [{"person.id": "alice_amorist"}, "?a"]}, ["?a", "person.first_name", "?n"]]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
// "out": {"friend": {"pull": "?a", "spec": ["*"]}}
|
|
|
|
|
"out": {"friend": {"pull": "?a", "spec": ["person.first_name"]}}
|
|
|
|
|
});
|
|
|
|
|
let mut tx = db.transact().unwrap();
|
|
|
|
|
let ret = tx.run_query(&query).unwrap();
|
|
|
|
|