aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/reasoner
diff options
context:
space:
mode:
authorRncLsn <rnc.lsn@gmail.com>2015-05-19 18:22:26 +0100
committerRncLsn <rnc.lsn@gmail.com>2015-05-19 18:22:26 +0100
commit612729386b645b120f8397a007cd8421986af0ad (patch)
treef5d15c839092c1dd65e951aa98f4256bfa391a0b /src/uk/ac/ox/cs/pagoda/reasoner
parent5d54af2638a53721b414a41356a93686a9616272 (diff)
downloadACQuA-612729386b645b120f8397a007cd8421986af0ad.tar.gz
ACQuA-612729386b645b120f8397a007cd8421986af0ad.zip
Changes in the upper store querying (mainly in MyQueryReasoner).
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/reasoner')
-rw-r--r--src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java66
-rw-r--r--src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java102
2 files changed, 91 insertions, 77 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java
index 0d24a02..6da86ac 100644
--- a/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java
+++ b/src/uk/ac/ox/cs/pagoda/reasoner/ELHOUQueryReasoner.java
@@ -2,7 +2,6 @@ package uk.ac.ox.cs.pagoda.reasoner;
2 2
3import org.semanticweb.karma2.profile.ELHOProfile; 3import org.semanticweb.karma2.profile.ELHOProfile;
4import org.semanticweb.owlapi.model.OWLOntology; 4import org.semanticweb.owlapi.model.OWLOntology;
5
6import uk.ac.ox.cs.pagoda.multistage.MultiStageQueryEngine; 5import uk.ac.ox.cs.pagoda.multistage.MultiStageQueryEngine;
7import uk.ac.ox.cs.pagoda.owl.EqualitiesEliminator; 6import uk.ac.ox.cs.pagoda.owl.EqualitiesEliminator;
8import uk.ac.ox.cs.pagoda.owl.OWLHelper; 7import uk.ac.ox.cs.pagoda.owl.OWLHelper;
@@ -26,59 +25,60 @@ public class ELHOUQueryReasoner extends QueryReasoner {
26 KarmaQueryEngine elLowerStore = null; 25 KarmaQueryEngine elLowerStore = null;
27 26
28 boolean multiStageTag, equalityTag; 27 boolean multiStageTag, equalityTag;
29 28 String originalMarkProgram;
29 private Timer t = new Timer();
30
30 public ELHOUQueryReasoner(boolean multiStageTag, boolean considerEqualities) { 31 public ELHOUQueryReasoner(boolean multiStageTag, boolean considerEqualities) {
31 this.multiStageTag = multiStageTag; 32 this.multiStageTag = multiStageTag;
32 this.equalityTag = considerEqualities; 33 this.equalityTag = considerEqualities;
33 rlLowerStore = new BasicQueryEngine("rl-lower-bound"); 34 rlLowerStore = new BasicQueryEngine("rl-lower-bound");
34 elLowerStore = new KarmaQueryEngine("el-lower-bound"); 35 elLowerStore = new KarmaQueryEngine("el-lower-bound");
35 36
36 if (!multiStageTag) 37 if(!multiStageTag)
37 rlUpperStore = new BasicQueryEngine("rl-upper-bound"); 38 rlUpperStore = new BasicQueryEngine("rl-upper-bound");
38 else 39 else
39 rlUpperStore = new MultiStageQueryEngine("rl-upper-bound", false); 40 rlUpperStore = new MultiStageQueryEngine("rl-upper-bound", false);
40 } 41 }
41
42 private Timer t = new Timer();
43 42
44 @Override 43 @Override
45 public void evaluate(QueryRecord queryRecord) { 44 public void evaluate(QueryRecord queryRecord) {
46 AnswerTuples rlAnswer = null; 45 AnswerTuples rlAnswer = null;
47 t.reset(); 46 t.reset();
48 try { 47 try {
49 rlAnswer = rlLowerStore.evaluate(queryRecord.getQueryText(), queryRecord.getAnswerVariables()); 48 rlAnswer = rlLowerStore.evaluate(queryRecord.getQueryText(), queryRecord.getAnswerVariables());
50 queryRecord.updateLowerBoundAnswers(rlAnswer); 49 queryRecord.updateLowerBoundAnswers(rlAnswer);
51 } finally { 50 } finally {
52 if (rlAnswer != null) rlAnswer.dispose(); 51 if(rlAnswer != null) rlAnswer.dispose();
53 } 52 }
54 queryRecord.addProcessingTime(Step.LowerBound, t.duration()); 53 queryRecord.addProcessingTime(Step.LowerBound, t.duration());
55 54
56 String extendedQueryText = queryRecord.getExtendedQueryText()[0]; 55 String extendedQueryText = queryRecord.getExtendedQueryText().get(0);
57 String[] toQuery = queryRecord.getQueryText().equals(extendedQueryText) ? 56 String[] toQuery = queryRecord.getQueryText().equals(extendedQueryText) ?
58 new String[] {queryRecord.getQueryText()} : 57 new String[]{queryRecord.getQueryText()} :
59 new String[] {queryRecord.getQueryText(), extendedQueryText}; 58 new String[] {queryRecord.getQueryText(), extendedQueryText};
60 59
61 for (String queryText: toQuery) { 60 for (String queryText: toQuery) {
62 rlAnswer = null; 61 rlAnswer = null;
63 t.reset(); 62 t.reset();
64 try { 63 try {
65 rlAnswer = rlUpperStore.evaluate(queryText, queryRecord.getAnswerVariables()); 64 rlAnswer = rlUpperStore.evaluate(queryText, queryRecord.getAnswerVariables());
66 queryRecord.updateUpperBoundAnswers(rlAnswer); 65 queryRecord.updateUpperBoundAnswers(rlAnswer);
67 } finally { 66 } finally {
68 if (rlAnswer != null) rlAnswer.dispose(); 67 if(rlAnswer != null) rlAnswer.dispose();
69 } 68 }
70 queryRecord.addProcessingTime(Step.UpperBound, t.duration()); 69 queryRecord.addProcessingTime(Step.UpperBound, t.duration());
71 70
72 if (queryRecord.processed()) { 71 if (queryRecord.processed()) {
73 queryRecord.setDifficulty(Step.UpperBound); 72 queryRecord.setDifficulty(Step.UpperBound);
74 return ; 73 return;
75 } 74 }
76 } 75 }
77 76
78 AnswerTuples elAnswer = null; 77 AnswerTuples elAnswer = null;
79 t.reset(); 78 t.reset();
80 try { 79 try {
81 elAnswer = elLowerStore.evaluate(extendedQueryText, queryRecord.getAnswerVariables(), queryRecord.getLowerBoundAnswers()); 80 elAnswer =
81 elLowerStore.evaluate(extendedQueryText, queryRecord.getAnswerVariables(), queryRecord.getLowerBoundAnswers());
82 queryRecord.updateLowerBoundAnswers(elAnswer); 82 queryRecord.updateLowerBoundAnswers(elAnswer);
83 } finally { 83 } finally {
84 if (elAnswer != null) elAnswer.dispose(); 84 if (elAnswer != null) elAnswer.dispose();
@@ -88,19 +88,19 @@ public class ELHOUQueryReasoner extends QueryReasoner {
88 88
89 @Override 89 @Override
90 public void evaluateUpper(QueryRecord queryRecord) { 90 public void evaluateUpper(QueryRecord queryRecord) {
91 AnswerTuples rlAnswer = null; 91 AnswerTuples rlAnswer = null;
92 try { 92 try {
93 rlAnswer = rlUpperStore.evaluate(queryRecord.getQueryText(), queryRecord.getAnswerVariables()); 93 rlAnswer = rlUpperStore.evaluate(queryRecord.getQueryText(), queryRecord.getAnswerVariables());
94 queryRecord.updateUpperBoundAnswers(rlAnswer, true); 94 queryRecord.updateUpperBoundAnswers(rlAnswer, true);
95 } finally { 95 } finally {
96 if (rlAnswer != null) rlAnswer.dispose(); 96 if(rlAnswer != null) rlAnswer.dispose();
97 } 97 }
98 } 98 }
99 99
100 @Override 100 @Override
101 public void dispose() { 101 public void dispose() {
102 if (elLowerStore != null) elLowerStore.dispose(); 102 if (elLowerStore != null) elLowerStore.dispose();
103 if (rlUpperStore != null) rlUpperStore.dispose(); 103 if(rlUpperStore != null) rlUpperStore.dispose();
104 super.dispose(); 104 super.dispose();
105 } 105 }
106 106
@@ -110,19 +110,17 @@ public class ELHOUQueryReasoner extends QueryReasoner {
110 EqualitiesEliminator eliminator = new EqualitiesEliminator(o); 110 EqualitiesEliminator eliminator = new EqualitiesEliminator(o);
111 o = eliminator.getOutputOntology(); 111 o = eliminator.getOutputOntology();
112 eliminator.save(); 112 eliminator.save();
113 } 113 }
114
115 OWLOntology ontology = o;
116 program = new DatalogProgram(ontology, properties.getToClassify());
114 117
115 OWLOntology ontology = o;
116 program = new DatalogProgram(ontology, properties.getToClassify());
117
118 importData(program.getAdditionalDataFile()); 118 importData(program.getAdditionalDataFile());
119 119
120 elho_ontology = new ELHOProfile().getFragment(ontology); 120 elho_ontology = new ELHOProfile().getFragment(ontology);
121 elLowerStore.processOntology(elho_ontology); 121 elLowerStore.processOntology(elho_ontology);
122 originalMarkProgram = OWLHelper.getOriginalMarkProgram(ontology); 122 originalMarkProgram = OWLHelper.getOriginalMarkProgram(ontology);
123 } 123 }
124
125 String originalMarkProgram;
126 124
127 @Override 125 @Override
128 public boolean preprocess() { 126 public boolean preprocess() {
diff --git a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java
index dfbcb4d..b10e2d1 100644
--- a/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java
+++ b/src/uk/ac/ox/cs/pagoda/reasoner/MyQueryReasoner.java
@@ -20,28 +20,25 @@ import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoderDisjVar1;
20import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoderWithGap; 20import uk.ac.ox.cs.pagoda.tracking.TrackingRuleEncoderWithGap;
21import uk.ac.ox.cs.pagoda.util.Timer; 21import uk.ac.ox.cs.pagoda.util.Timer;
22import uk.ac.ox.cs.pagoda.util.Utility; 22import uk.ac.ox.cs.pagoda.util.Utility;
23import uk.ac.ox.cs.pagoda.util.tuples.Tuple;
23 24
24import java.util.Collection; 25import java.util.Collection;
25import java.util.HashMap; 26import java.util.HashMap;
26 27
27public class MyQueryReasoner extends QueryReasoner { 28public class MyQueryReasoner extends QueryReasoner {
28 29
29 OWLOntology ontology; 30 OWLOntology ontology;
31 DatalogProgram program;
30 32
31// String additonalDataFile; 33// String additonalDataFile;
32
33 DatalogProgram program;
34
35 BasicQueryEngine rlLowerStore = null; 34 BasicQueryEngine rlLowerStore = null;
36 BasicQueryEngine lazyUpperStore = null; 35 BasicQueryEngine lazyUpperStore = null;
37 BasicQueryEngine limitedSkolemUpperStore; 36 BasicQueryEngine limitedSkolemUpperStore;
38// boolean[] namedIndividuals_lazyUpper;
39
40 OWLOntology elho_ontology; 37 OWLOntology elho_ontology;
38// boolean[] namedIndividuals_lazyUpper;
41 KarmaQueryEngine elLowerStore = null; 39 KarmaQueryEngine elLowerStore = null;
42
43 BasicQueryEngine trackingStore = null; 40 BasicQueryEngine trackingStore = null;
44// boolean[] namedIndividuals_tracking; 41 // boolean[] namedIndividuals_tracking;
45 TrackingRuleEncoder encoder; 42 TrackingRuleEncoder encoder;
46 private boolean equalityTag; 43 private boolean equalityTag;
47 private boolean multiStageTag; 44 private boolean multiStageTag;
@@ -53,7 +50,6 @@ public class MyQueryReasoner extends QueryReasoner {
53 public MyQueryReasoner() { 50 public MyQueryReasoner() {
54 setup(true, true); 51 setup(true, true);
55 } 52 }
56
57 public MyQueryReasoner(boolean multiStageTag, boolean considerEqualities) { 53 public MyQueryReasoner(boolean multiStageTag, boolean considerEqualities) {
58 setup(multiStageTag, considerEqualities); 54 setup(multiStageTag, considerEqualities);
59 } 55 }
@@ -65,7 +61,7 @@ public class MyQueryReasoner extends QueryReasoner {
65 else 61 else
66 return new BasicQueryEngine(name); 62 return new BasicQueryEngine(name);
67 } 63 }
68 64
69 public void setup(boolean multiStageTag, boolean considerEqualities) { 65 public void setup(boolean multiStageTag, boolean considerEqualities) {
70 satisfiable = SatisfiabilityStatus.UNCHECKED; 66 satisfiable = SatisfiabilityStatus.UNCHECKED;
71 this.multiStageTag = multiStageTag; 67 this.multiStageTag = multiStageTag;
@@ -115,7 +111,7 @@ public class MyQueryReasoner extends QueryReasoner {
115 public Collection<String> getPredicatesWithGap() { 111 public Collection<String> getPredicatesWithGap() {
116 return predicatesWithGap; 112 return predicatesWithGap;
117 } 113 }
118 114
119 @Override 115 @Override
120 public boolean preprocess() { 116 public boolean preprocess() {
121 t.reset(); 117 t.reset();
@@ -192,18 +188,40 @@ public class MyQueryReasoner extends QueryReasoner {
192 188
193 return true; 189 return true;
194 } 190 }
195 191
196 @Override 192 @Override
197 public boolean isConsistent() { 193 public boolean isConsistent() {
198 if(satisfiable == SatisfiabilityStatus.UNCHECKED) { 194 if(satisfiable == SatisfiabilityStatus.UNCHECKED) {
199 satisfiable = consistency.check() ? SatisfiabilityStatus.SATISFIABLE : SatisfiabilityStatus.UNSATISFIABLE; 195 satisfiable = consistency.check() ? SatisfiabilityStatus.SATISFIABLE : SatisfiabilityStatus.UNSATISFIABLE;
200 Utility.logInfo("time for satisfiability checking: " + t.duration()); 196 Utility.logInfo("time for satisfiability checking: " + t.duration());
201 } 197 }
202 return satisfiable == SatisfiabilityStatus.SATISFIABLE ? true : false; 198 return satisfiable == SatisfiabilityStatus.SATISFIABLE;
199 }
200
201 // TODO why the following???
202 private void queryUpperStore(BasicQueryEngine upperStore, QueryRecord queryRecord, Tuple<String> extendedQuery) {
203
204// Utility.logInfo("1");
205// queryUpperBound(upperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables());
206//
207// boolean conditionA = !queryRecord.processed() && !queryRecord.getQueryText().equals(extendedQuery.get(0));
208// boolean conditionB = !queryRecord.processed() && queryRecord.hasNonAnsDistinguishedVariables();
209//
210// if(conditionA ^ conditionB)
211// throw new Error("It really happened! I thought it was impossible");
212//
213// if (conditionA) {
214// Utility.logInfo("2");
215 queryUpperBound(upperStore, queryRecord, extendedQuery.get(0), queryRecord.getAnswerVariables());
216// }
217// if (conditionB) {
218// Utility.logInfo("3");
219// queryUpperBound(upperStore, queryRecord, extendedQuery.get(1), queryRecord.getDistinguishedVariables());
220// }
203 } 221 }
204 222
205 /** 223 /**
206 * Returns the relevant part of the ontology, while computing the bound answers. 224 * Returns the part of the ontology relevant for Hermit, while computing the bound answers.
207 * */ 225 * */
208 private OWLOntology relevantPart(QueryRecord queryRecord) { 226 private OWLOntology relevantPart(QueryRecord queryRecord) {
209 AnswerTuples rlAnswer = null, elAnswer = null; 227 AnswerTuples rlAnswer = null, elAnswer = null;
@@ -219,28 +237,23 @@ public class MyQueryReasoner extends QueryReasoner {
219 queryRecord.addProcessingTime(Step.LowerBound, t.duration()); 237 queryRecord.addProcessingTime(Step.LowerBound, t.duration());
220 238
221 t.reset(); 239 t.reset();
222 BasicQueryEngine upperStore = queryRecord.isBottom() || lazyUpperStore == null ? trackingStore : lazyUpperStore;
223 240
224 String[] extendedQuery = queryRecord.getExtendedQueryText(); 241 Tuple<String> extendedQueryTexts = queryRecord.getExtendedQueryText();
225 242
226 // TODO why the following??? 243// BasicQueryEngine upperStore;
227 queryUpperBound(upperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); 244// if(queryRecord.isBottom()) upperStore = trackingStore;
245// upperStore = queryRecord.isBottom() || lazyUpperStore == null ? trackingStore : lazyUpperStore;
228 246
229 if (!queryRecord.processed() && !queryRecord.getQueryText().equals(extendedQuery[0])) { 247 // TODO
230 queryUpperBound(upperStore, queryRecord, extendedQuery[0], queryRecord.getAnswerVariables()); 248// if(queryRecord.isBottom() || (lazyUpperStore == null && limitedSkolemUpperStore == null))
231 } 249// queryUpperStore(trackingStore, queryRecord, extendedQueryTexts);
232 if (!queryRecord.processed() && queryRecord.hasNonAnsDistinguishedVariables()) { 250// else {
233 queryUpperBound(upperStore, queryRecord, extendedQuery[1], queryRecord.getDistinguishedVariables());
234 }
235
236// Utility.logDebug(toJsonKeyValuePair("upperBound", queryRecord));
237 251
238 // TODO test intersection and new upper bound 252 queryUpperStore(trackingStore, queryRecord, extendedQueryTexts);
239 if (!queryRecord.isBottom() && lazyUpperStore != null) { 253 if(!(queryRecord.isBottom() || (lazyUpperStore == null && limitedSkolemUpperStore == null))) {
240 queryUpperBound(trackingStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables()); 254 if(lazyUpperStore != null) queryUpperStore(lazyUpperStore, queryRecord, extendedQueryTexts);
241 } 255 if(limitedSkolemUpperStore != null)
242 if (!queryRecord.isBottom() && limitedSkolemUpperStore != null) { 256 queryUpperStore(limitedSkolemUpperStore, queryRecord, extendedQueryTexts);
243 queryUpperBound(limitedSkolemUpperStore, queryRecord, queryRecord.getQueryText(), queryRecord.getAnswerVariables());
244 } 257 }
245 258
246 queryRecord.addProcessingTime(Step.UpperBound, t.duration()); 259 queryRecord.addProcessingTime(Step.UpperBound, t.duration());
@@ -251,7 +264,8 @@ public class MyQueryReasoner extends QueryReasoner {
251 264
252 t.reset(); 265 t.reset();
253 try { 266 try {
254 elAnswer = elLowerStore.evaluate(extendedQuery[0], queryRecord.getAnswerVariables(), queryRecord.getLowerBoundAnswers()); 267 elAnswer = elLowerStore.evaluate(extendedQueryTexts.get(0), queryRecord.getAnswerVariables(),
268 queryRecord.getLowerBoundAnswers());
255 Utility.logDebug(t.duration()); 269 Utility.logDebug(t.duration());
256 queryRecord.updateLowerBoundAnswers(elAnswer); 270 queryRecord.updateLowerBoundAnswers(elAnswer);
257 } finally { 271 } finally {
@@ -268,7 +282,7 @@ public class MyQueryReasoner extends QueryReasoner {
268 282
269 QueryTracker tracker = new QueryTracker(encoder, rlLowerStore, queryRecord); 283 QueryTracker tracker = new QueryTracker(encoder, rlLowerStore, queryRecord);
270 284
271 OWLOntology knowledgebase; 285 OWLOntology knowledgeBase;
272 t.reset(); 286 t.reset();
273// if (program.getGeneral().isHorn()) { 287// if (program.getGeneral().isHorn()) {
274// knowledgebase = tracker.extract(lazyUpperStore, consistency.getQueryRecords(), true); 288// knowledgebase = tracker.extract(lazyUpperStore, consistency.getQueryRecords(), true);
@@ -276,14 +290,14 @@ public class MyQueryReasoner extends QueryReasoner {
276// return knowledgebase; 290// return knowledgebase;
277// } 291// }
278// else { 292// else {
279 knowledgebase = tracker.extract(trackingStore, consistency.getQueryRecords(), true); 293 knowledgeBase = tracker.extract(trackingStore, consistency.getQueryRecords(), true);
280 queryRecord.addProcessingTime(Step.Fragment, t.duration()); 294 queryRecord.addProcessingTime(Step.Fragment, t.duration());
281// } 295// }
282 296
283 if(knowledgebase.isEmpty() || queryRecord.isBottom()) 297 if(knowledgeBase.isEmpty() || queryRecord.isBottom())
284 return knowledgebase; 298 return knowledgeBase;
285 299
286 if(program.getGeneral().isHorn()) return knowledgebase; 300 if(program.getGeneral().isHorn()) return knowledgeBase;
287 301
288// t.reset(); 302// t.reset();
289// if (queryRecord.isHorn() && lazyUpperStore != null) { 303// if (queryRecord.isHorn() && lazyUpperStore != null) {
@@ -298,7 +312,7 @@ public class MyQueryReasoner extends QueryReasoner {
298// if (knowledgebase == null) 312// if (knowledgebase == null)
299// queryRecord.setDifficulty(Step.FragmentRefinement); 313// queryRecord.setDifficulty(Step.FragmentRefinement);
300 314
301 return knowledgebase; 315 return knowledgeBase;
302 } 316 }
303 317
304 private String toJsonKeyValuePair(String key, Object value) { 318 private String toJsonKeyValuePair(String key, Object value) {
@@ -307,8 +321,6 @@ public class MyQueryReasoner extends QueryReasoner {
307 return QueryRecord.GsonCreator.getInstance().toJson(map); 321 return QueryRecord.GsonCreator.getInstance().toJson(map);
308 } 322 }
309 323
310// int counter = 0;
311
312 private void queryUpperBound(BasicQueryEngine upperStore, QueryRecord queryRecord, String queryText, String[] answerVariables) { 324 private void queryUpperBound(BasicQueryEngine upperStore, QueryRecord queryRecord, String queryText, String[] answerVariables) {
313 AnswerTuples rlAnswer = null; 325 AnswerTuples rlAnswer = null;
314 try { 326 try {
@@ -317,11 +329,13 @@ public class MyQueryReasoner extends QueryReasoner {
317 Utility.logDebug(t.duration()); 329 Utility.logDebug(t.duration());
318 queryRecord.updateUpperBoundAnswers(rlAnswer); 330 queryRecord.updateUpperBoundAnswers(rlAnswer);
319 } finally { 331 } finally {
320 if (rlAnswer != null) rlAnswer.dispose(); 332 if(rlAnswer != null) rlAnswer.dispose();
321 rlAnswer = null; 333 rlAnswer = null;
322 } 334 }
323 } 335 }
324 336
337// int counter = 0;
338
325 @Override 339 @Override
326 public void evaluate(QueryRecord queryRecord) { 340 public void evaluate(QueryRecord queryRecord) {
327 OWLOntology knowledgeBase = relevantPart(queryRecord); 341 OWLOntology knowledgeBase = relevantPart(queryRecord);
@@ -349,6 +363,7 @@ public class MyQueryReasoner extends QueryReasoner {
349 363
350 @Override 364 @Override
351 public void evaluateUpper(QueryRecord queryRecord) { 365 public void evaluateUpper(QueryRecord queryRecord) {
366 // TODO add new upper store
352 AnswerTuples rlAnswer = null; 367 AnswerTuples rlAnswer = null;
353 boolean useFull = queryRecord.isBottom() || lazyUpperStore == null; 368 boolean useFull = queryRecord.isBottom() || lazyUpperStore == null;
354 try { 369 try {
@@ -359,7 +374,7 @@ public class MyQueryReasoner extends QueryReasoner {
359 if(rlAnswer != null) rlAnswer.dispose(); 374 if(rlAnswer != null) rlAnswer.dispose();
360 } 375 }
361 } 376 }
362 377
363 @Override 378 @Override
364 public void dispose() { 379 public void dispose() {
365 if (encoder != null) encoder.dispose(); 380 if (encoder != null) encoder.dispose();
@@ -367,6 +382,7 @@ public class MyQueryReasoner extends QueryReasoner {
367 if (lazyUpperStore != null) lazyUpperStore.dispose(); 382 if (lazyUpperStore != null) lazyUpperStore.dispose();
368 if (elLowerStore != null) elLowerStore.dispose(); 383 if (elLowerStore != null) elLowerStore.dispose();
369 if (trackingStore != null) trackingStore.dispose(); 384 if (trackingStore != null) trackingStore.dispose();
385 if(limitedSkolemUpperStore != null) limitedSkolemUpperStore.dispose();
370 super.dispose(); 386 super.dispose();
371 } 387 }
372 388