1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
package tools.refinery.store.query.viatra;
import org.junit.jupiter.api.Test;
import tools.refinery.store.model.ModelStore;
import tools.refinery.store.query.Dnf;
import tools.refinery.store.query.ModelQuery;
import tools.refinery.store.query.Variable;
import tools.refinery.store.query.view.KeyOnlyRelationView;
import tools.refinery.store.representation.Symbol;
import tools.refinery.store.tuple.Tuple;
import static org.junit.jupiter.api.Assertions.*;
class QueryTransactionTest {
@Test
void flushTest() {
var person = new Symbol<>("Person", 1, Boolean.class, false);
var asset = new Symbol<>("Asset", 1, Boolean.class, false);
var personView = new KeyOnlyRelationView<>(person);
var p1 = new Variable("p1");
var predicate = Dnf.builder("TypeConstraint")
.parameters(p1)
.clause(personView.call(p1))
.build();
var store = ModelStore.builder()
.symbols(person, asset)
.with(ViatraModelQuery.ADAPTER)
.queries(predicate)
.build();
var model = store.createEmptyModel();
var personInterpretation = model.getInterpretation(person);
var assetInterpretation = model.getInterpretation(asset);
var queryEngine = model.getAdapter(ModelQuery.ADAPTER);
var predicateResultSet = queryEngine.getResultSet(predicate);
assertEquals(0, predicateResultSet.countResults());
assertFalse(queryEngine.hasPendingChanges());
personInterpretation.put(Tuple.of(0), true);
personInterpretation.put(Tuple.of(1), true);
assetInterpretation.put(Tuple.of(1), true);
assetInterpretation.put(Tuple.of(2), true);
assertEquals(0, predicateResultSet.countResults());
assertTrue(queryEngine.hasPendingChanges());
queryEngine.flushChanges();
assertEquals(2, predicateResultSet.countResults());
assertFalse(queryEngine.hasPendingChanges());
personInterpretation.put(Tuple.of(4), true);
assertEquals(2, predicateResultSet.countResults());
assertTrue(queryEngine.hasPendingChanges());
queryEngine.flushChanges();
assertEquals(3, predicateResultSet.countResults());
assertFalse(queryEngine.hasPendingChanges());
}
}
|