Skip to content

Commit 5541a34

Browse files
committed
Corrections and test for JenaTDB data source
1 parent 0274eb4 commit 5541a34

File tree

2 files changed

+38
-27
lines changed

2 files changed

+38
-27
lines changed

src/org/linkeddatafragments/datasource/JenaTDBDataSource.java

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,47 +30,54 @@ public class JenaTDBDataSource extends DataSource {
3030

3131
private final Query query = QueryFactory.create(sparql, Syntax.syntaxSPARQL_11);
3232

33+
3334
@Override
3435
public TriplePatternFragment getFragment(Resource subject, Property predicate, RDFNode object, long offset, long limit) {
3536
checkBoundaries(offset, limit);
3637

37-
tdb.begin(ReadWrite.READ);
38-
3938
Model model = tdb.getDefaultModel();
4039
QuerySolutionMap map = new QuerySolutionMap();
41-
map.add("s", subject);
42-
map.add("p", predicate);
43-
map.add("o", object);
40+
if (subject != null) {
41+
map.add("s", subject);
42+
}
43+
if (predicate != null) {
44+
map.add("p", predicate);
45+
}
46+
if (object != null) {
47+
map.add("o", object);
48+
}
4449

4550
query.setOffset(offset);
4651
query.setLimit(limit);
4752

48-
QueryExecution qexec = QueryExecutionFactory.create(query, model, map);
49-
53+
5054
Model triples = ModelFactory.createDefaultModel();
51-
qexec.execConstruct(triples);
52-
qexec.close();
55+
56+
try (QueryExecution qexec = QueryExecutionFactory.create(query, model, map)) {
57+
qexec.execConstruct(triples);
58+
}
5359

60+
if (triples.isEmpty()) {
61+
return new TriplePatternFragmentBase();
62+
}
63+
5464
// Try to get an estimate
5565
long size = triples.size();
5666
long estimate = -1;
5767

5868
GraphStatisticsHandler stats = model.getGraph().getStatisticsHandler();
5969
if (stats != null) {
60-
estimate = stats.getStatistic(subject.asNode(), predicate.asNode(), object.asNode());
61-
}
70+
Node s = (subject != null) ? subject.asNode() : null;
71+
Node p = (predicate != null) ? predicate.asNode() : null;
72+
Node o = (object != null) ? object.asNode() : null;
73+
estimate = stats.getStatistic(s, p, o);
74+
}
75+
6276
// No estimate or incorrect
6377
if (estimate < offset + size) {
6478
estimate = (size == limit) ? offset + size + 1 : offset + size;
6579
}
66-
67-
tdb.end();
68-
69-
if (triples.isEmpty()) {
70-
return new TriplePatternFragmentBase();
71-
} else {
72-
return new TriplePatternFragmentBase(triples, estimate);
73-
}
80+
return new TriplePatternFragmentBase(triples, estimate);
7481
}
7582

7683

src/test/java/org/linkeddatafragments/datasource/JenaTDBDataSource.java renamed to src/test/java/org/linkeddatafragments/datasource/JenaTDBDataSourceTest.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.io.File;
1616
import org.junit.After;
1717
import org.junit.AfterClass;
18+
import org.junit.Assert;
1819
import org.junit.Before;
1920
import org.junit.BeforeClass;
2021
import org.junit.Test;
@@ -26,7 +27,7 @@
2627
*
2728
* @author Bart Hanssens <[email protected]>
2829
*/
29-
public class JenaTDBDataSource {
30+
public class JenaTDBDataSourceTest {
3031
private static IDataSource tdb;
3132
private static Dataset dataset;
3233
private static File jena;
@@ -38,7 +39,6 @@ public static void setUpClass() throws Exception {
3839
jena.mkdir();
3940

4041
dataset = TDBFactory.createDataset(jena.getAbsolutePath());
41-
Model model = ModelFactory.createDefaultModel();
4242

4343
JsonObject config = new JsonObject();
4444
config.addProperty("title", "jena test");
@@ -48,7 +48,7 @@ public static void setUpClass() throws Exception {
4848
JsonObject settings = new JsonObject();
4949
settings.addProperty("directory", tmpdir);
5050
config.add("settings", settings);
51-
51+
5252
tdb = DataSourceFactory.create(config);
5353
}
5454

@@ -63,9 +63,9 @@ public void setUp() throws Exception {
6363
Model model = dataset.getDefaultModel();
6464

6565
// Generate a set of statements
66-
int subjs = 150;
67-
int preds = 20;
68-
int objs = 10;
66+
int subjs = 153;
67+
int preds = 29;
68+
int objs = 17;
6969

7070
for (int s = 0; s < subjs; s++) {
7171
Resource subj = model.createResource("http://test.ldf.org/s/" + s);
@@ -80,6 +80,10 @@ public void setUp() throws Exception {
8080
model.commit();
8181
}
8282

83+
/**
84+
* Check if estimate is based on jena query plan, or just a fake one.
85+
*
86+
*/
8387
@Test
8488
public void testEstimate() {
8589
Model model = dataset.getDefaultModel();
@@ -93,8 +97,8 @@ public void testEstimate() {
9397
TriplePatternFragment fragment =
9498
tdb.getFragment(subj, pred, obj, offset, limit);
9599
long totalSize = fragment.getTotalSize();
96-
System.out.println(totalSize);
97-
100+
101+
Assert.assertTrue("Estimate is fake", totalSize != 51);
98102
}
99103

100104
@After

0 commit comments

Comments
 (0)