Skip to content

Package: QueryRunner

QueryRunner

nameinstructionbranchcomplexitylinemethod
QueryRunner(Logger)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
executeUpdateRunsDeleteOnRepository()
M: 0 C: 37
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
executeUpdateRunsInsertOnRepository()
M: 0 C: 38
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
executeUpdateRunsUpdateOnRepository()
M: 0 C: 41
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
lambda$1(Query)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
lambda$4(Map, OWLClassA)
M: 0 C: 12
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
lambda$5(Map, OWLClassA)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
lambda$6(Map, OWLClassA)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
lambda$7(Map, OWLClassD)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
lambda$8(Map, OWLClassT)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
querySupportsProcessingResultsUsingStream()
M: 0 C: 50
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
queryWithConstructorMappingReturnsCorrectInstances()
M: 0 C: 21
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
queryWithEntityMappingLoadsReferencedEntitiesAsWell()
M: 0 C: 77
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 18
100%
M: 0 C: 1
100%
queryWithEntityMappingLoadsReferencedEntityAndInheritedAttributes()
M: 0 C: 90
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 21
100%
M: 0 C: 1
100%
queryWithEntityMappingReturnsCorrectManagedInstances()
M: 0 C: 36
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
queryWithMappingReturnsResultWithVariablesMappedAccordingly()
M: 0 C: 57
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 13
100%
M: 0 C: 1
100%
selectWithOptionalReturnsNullInUnfilledColumns()
M: 4 C: 50
93%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 1 C: 14
93%
M: 0 C: 1
100%
selectionByObjectPropertySupportsEntityAsQueryParameter()
M: 0 C: 43
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
settingStringParameterEscapesTheParameterValue()
M: 0 C: 20
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
testCreateNamedNativeQueryWithParameterSetting()
M: 0 C: 26
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
testGetSingleResult()
M: 0 C: 30
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
testGetSingleResultMultiples()
M: 0 C: 14
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
testGetSingleResultNoResult()
M: 0 C: 16
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
testSelectByDataProperty()
M: 0 C: 54
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 14
100%
M: 0 C: 1
100%
testSelectByObjectProperty()
M: 0 C: 44
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
testSelectByType()
M: 0 C: 60
100%
M: 1 C: 5
83%
M: 1 C: 3
75%
M: 0 C: 16
100%
M: 0 C: 1
100%
testSelectQueryWithPositionalParameters()
M: 0 C: 30
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
testSelectTypes()
M: 1 C: 59
98%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 0 C: 11
100%
M: 0 C: 1
100%
testSetMaxResults()
M: 1 C: 40
98%
M: 1 C: 1
50%
M: 1 C: 1
50%
M: 0 C: 11
100%
M: 0 C: 1
100%
testSetMaxResultsNegative()
M: 0 C: 11
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
testSetMaxResultsZero()
M: 0 C: 18
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
verifyOWLClassAInstances(List, Map)
M: 0 C: 31
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
verifyOwlClassAInstance(OWLClassA, OWLClassA)
M: 3 C: 20
87%
M: 1 C: 1
50%
M: 1 C: 1
50%
M: 2 C: 6
75%
M: 0 C: 1
100%

Coverage

1: /**
2: * Copyright (C) 2020 Czech Technical University in Prague
3: *
4: * This program is free software: you can redistribute it and/or modify it under
5: * the terms of the GNU General Public License as published by the Free Software
6: * Foundation, either version 3 of the License, or (at your option) any
7: * later version.
8: *
9: * This program is distributed in the hope that it will be useful, but WITHOUT
10: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
12: * details. You should have received a copy of the GNU General Public License
13: * along with this program. If not, see <http://www.gnu.org/licenses/>.
14: */
15: package cz.cvut.kbss.jopa.test.query.runner;
16:
17: import cz.cvut.kbss.jopa.exceptions.NoResultException;
18: import cz.cvut.kbss.jopa.exceptions.NoUniqueResultException;
19: import cz.cvut.kbss.jopa.model.EntityManager;
20: import cz.cvut.kbss.jopa.model.annotations.OWLClass;
21: import cz.cvut.kbss.jopa.model.query.Query;
22: import cz.cvut.kbss.jopa.test.*;
23: import cz.cvut.kbss.jopa.test.environment.Generators;
24: import cz.cvut.kbss.jopa.test.query.QueryTestEnvironment;
25: import cz.cvut.kbss.jopa.vocabulary.RDFS;
26: import cz.cvut.kbss.ontodriver.model.LangString;
27: import org.junit.jupiter.api.Test;
28: import org.slf4j.Logger;
29:
30: import java.net.URI;
31: import java.util.HashMap;
32: import java.util.List;
33: import java.util.Map;
34: import java.util.Set;
35: import java.util.stream.Collectors;
36:
37: import static org.hamcrest.MatcherAssert.assertThat;
38: import static org.hamcrest.Matchers.greaterThanOrEqualTo;
39: import static org.junit.jupiter.api.Assertions.*;
40:
41: public abstract class QueryRunner extends BaseQueryRunner {
42:
43: private static final String SELECT_E_BY_TYPE =
44: "SELECT ?x WHERE { ?x a <http://krizik.felk.cvut.cz/ontologies/jopa/entities#OWLClassE> . }";
45:
46: protected QueryRunner(Logger logger) {
47: super(logger);
48: }
49:
50: @Test
51: void testSelectByType() {
52: final String query = "SELECT ?x WHERE { ?x a <http://krizik.felk.cvut.cz/ontologies/jopa/entities#TypeA> . }";
53: final Query q = getEntityManager().createNativeQuery(query);
54: final List<OWLClassA> as = QueryTestEnvironment.getDataByContext(null, OWLClassA.class);
55: assertNotNull(q);
56:
57: final List res = q.getResultList();
58:
59: assertNotNull(res);
60: assertFalse(res.isEmpty());
61: assertEquals(as.size(), res.size());
62: boolean found;
63:• for (OWLClassA a : as) {
64: found = false;
65:• for (Object row : res) {
66:• if (a.getUri().equals(row)) {
67: found = true;
68: break;
69: }
70: }
71: assertTrue(found);
72: }
73: }
74:
75: @Test
76: void testSelectByDataProperty() {
77: final String query =
78: "SELECT ?y WHERE { ?x ?stringAtt ?y . }";
79: final Query q = getEntityManager().createNativeQuery(query)
80: .setParameter("stringAtt", URI.create(Vocabulary.P_B_STRING_ATTRIBUTE));
81: final Set<String> exp = QueryTestEnvironment.getDataByContext(null, OWLClassB.class).stream()
82: .map(OWLClassB::getStringAttribute).collect(Collectors.toSet());
83:
84: final List res = q.getResultList();
85:
86: assertNotNull(res);
87: assertFalse(res.isEmpty());
88: assertEquals(exp.size(), res.size());
89:• for (Object lst2 : res) {
90: assertTrue(lst2 instanceof LangString);
91: // False means we got the expected value
92: assertFalse(exp.add(((LangString) lst2).getValue()));
93: }
94: }
95:
96: @Test
97: void testSelectByObjectProperty() {
98: final OWLClassD d = QueryTestEnvironment.getData(OWLClassD.class).get(0);
99: final String query = "SELECT ?x WHERE { ?x a ?type ; ?hasA ?y . }";
100: final Query q = getEntityManager().createNativeQuery(query);
101: q.setParameter("type", URI.create(Vocabulary.C_OWL_CLASS_D))
102: .setParameter("hasA", URI.create(Vocabulary.P_HAS_OWL_CLASS_A)).setParameter("y", d.getOwlClassA().getUri());
103:
104: final List res = q.getResultList();
105:
106: assertEquals(1, res.size());
107: final Object subRes = res.get(0);
108: assertEquals(d.getUri(), subRes);
109: }
110:
111: @Test
112: void testSelectTypes() {
113: final OWLClassA a = QueryTestEnvironment.getData(OWLClassA.class).get(0);
114: final Set<String> types = a.getTypes();
115: types.add(a.getClass().getAnnotation(OWLClass.class).iri());
116: final String query = "SELECT ?x WHERE { ?instance a ?x . }";
117: final Query q = getEntityManager().createNativeQuery(query);
118: q.setParameter("instance", a.getUri());
119:
120: final List res = q.getResultList();
121: // The result can contain more types (inference)
122:• assertTrue(res.size() >= types.size());
123:• for (String type : types) {
124: assertTrue(res.contains(URI.create(type)));
125: }
126: }
127:
128: @Test
129: void testSetMaxResults() {
130: final Query q = getEntityManager().createNativeQuery(SELECT_E_BY_TYPE);
131: final int max = 5;
132:• assertTrue(max < QueryTestEnvironment.getData(OWLClassE.class).size());
133: assertEquals(Integer.MAX_VALUE, q.getMaxResults());
134: q.setMaxResults(max);
135: assertEquals(max, q.getMaxResults());
136:
137: final List res = q.getResultList();
138: assertNotNull(res);
139: assertFalse(res.isEmpty());
140: assertEquals(max, res.size());
141: }
142:
143: @Test
144: void testSetMaxResultsNegative() {
145: final Query q = getEntityManager().createNativeQuery(SELECT_E_BY_TYPE);
146: assertThrows(IllegalArgumentException.class, () -> q.setMaxResults(-1));
147: }
148:
149: @Test
150: void testSetMaxResultsZero() {
151: final Query q = getEntityManager().createNativeQuery(SELECT_E_BY_TYPE);
152: q.setMaxResults(0);
153:
154: final List res = q.getResultList();
155: assertNotNull(res);
156: assertTrue(res.isEmpty());
157: }
158:
159: @Test
160: void testGetSingleResult() {
161: final OWLClassA a = QueryTestEnvironment.getData(OWLClassA.class).get(0);
162: final String query =
163: "SELECT ?x WHERE { ?x <http://krizik.felk.cvut.cz/ontologies/jopa/attributes#A-stringAttribute> ?y .}";
164: final Query q = getEntityManager().createNativeQuery(query);
165: q.setParameter("y", a.getStringAttribute(), "en");
166:
167: final Object res = q.getSingleResult();
168: assertNotNull(res);
169: assertEquals(a.getUri(), res);
170: }
171:
172: @Test
173: void testGetSingleResultMultiples() {
174: final Query q = getEntityManager().createNativeQuery(SELECT_E_BY_TYPE);
175: assertThrows(NoUniqueResultException.class, q::getSingleResult);
176: }
177:
178: @Test
179: void testGetSingleResultNoResult() {
180: final String query =
181: "SELECT ?x WHERE { ?x a <http://krizik.felk.cvut.cz/ontologies/jopa/entities#OWLClassX> . }";
182: final Query q = getEntityManager().createNativeQuery(query);
183: assertThrows(NoResultException.class, q::getSingleResult);
184: }
185:
186: @Test
187: void testSelectQueryWithPositionalParameters() {
188: final OWLClassA a = QueryTestEnvironment.getData(OWLClassA.class).get(0);
189: final String query =
190: "SELECT ?x WHERE { ?x <http://krizik.felk.cvut.cz/ontologies/jopa/attributes#A-stringAttribute> $ .}";
191: final Query q = getEntityManager().createNativeQuery(query);
192: q.setParameter(1, a.getStringAttribute(), "en");
193:
194: final Object res = q.getSingleResult();
195: assertNotNull(res);
196: assertEquals(a.getUri(), res);
197: }
198:
199: @Test
200: public void selectWithOptionalReturnsNullInUnfilledColumns() {
201: final String query =
202: "SELECT ?x ?s WHERE { ?x a <http://krizik.felk.cvut.cz/ontologies/jopa/entities#OWLClassE> ." +
203: " OPTIONAL {?x <http://krizik.felk.cvut.cz/ontologies/jopa/attributes#E-stringAttribute> ?s . } }";
204: final OWLClassE e = new OWLClassE();
205: final EntityManager em = getEntityManager();
206: em.getTransaction().begin();
207: em.persist(e);
208: em.getTransaction().commit();
209: final Query q = em.createNativeQuery(query);
210:
211: final List result = q.getResultList();
212: assertFalse(result.isEmpty());
213:• for (Object row : result) {
214: final Object[] rowArr = (Object[]) row;
215:• if (rowArr[0].equals(e.getUri().toString())) {
216: assertNull(rowArr[1]);
217: }
218: }
219: }
220:
221: @Test
222: void testCreateNamedNativeQueryWithParameterSetting() {
223: final OWLClassA a = QueryTestEnvironment.getData(OWLClassA.class).get(0);
224: final List res = getEntityManager().createNamedQuery("OWLClassA.findByString")
225: .setParameter("str", a.getStringAttribute(), "en").getResultList();
226: assertFalse(res.isEmpty());
227: assertTrue(res.contains(a.getUri()));
228: }
229:
230: @Test
231: void queryWithMappingReturnsResultWithVariablesMappedAccordingly() {
232: final List res = getEntityManager().createNativeQuery("SELECT * WHERE {" +
233: "?x a <" + Vocabulary.C_OWL_CLASS_A + "> ;" +
234: "<" + Vocabulary.P_A_STRING_ATTRIBUTE + "> ?y ." +
235: "}", OWLClassA.VARIABLE_MAPPING).getResultList();
236: final Map<String, Object> expected = new HashMap<>();
237: QueryTestEnvironment.getData(OWLClassA.class)
238: .forEach(a -> expected.put(a.getUri().toString(), new LangString(a.getStringAttribute(), "en")));
239: assertEquals(expected.size(), res.size());
240:• for (Object row : res) {
241: assertTrue(row instanceof Object[]);
242: final Object[] elems = (Object[]) row;
243: assertEquals(2, elems.length);
244: assertTrue(expected.containsKey(elems[0]));
245: assertEquals(expected.get(elems[0]), elems[1]);
246: }
247: }
248:
249: @Test
250: void queryWithConstructorMappingReturnsCorrectInstances() {
251: final List res = getEntityManager().createNativeQuery("SELECT * WHERE {" +
252: "?x a <" + Vocabulary.C_OWL_CLASS_A + "> ;" +
253: "<" + Vocabulary.P_A_STRING_ATTRIBUTE + "> ?y ." +
254: "}", OWLClassA.CONSTRUCTOR_MAPPING).getResultList();
255: final Map<URI, OWLClassA> expected = new HashMap<>();
256: QueryTestEnvironment.getData(OWLClassA.class).forEach(a -> expected.put(a.getUri(), a));
257:
258: verifyOWLClassAInstances(res, expected);
259: }
260:
261: private void verifyOWLClassAInstances(List res, Map<URI, OWLClassA> expected) {
262:• for (Object item : res) {
263: assertTrue(item instanceof OWLClassA);
264: final OWLClassA a = (OWLClassA) item;
265: assertTrue(expected.containsKey(a.getUri()));
266: assertEquals(expected.get(a.getUri()).getStringAttribute(), a.getStringAttribute());
267: }
268: }
269:
270: @Test
271: void queryWithEntityMappingReturnsCorrectManagedInstances() {
272: final List res = getEntityManager().createNativeQuery("SELECT * WHERE {" +
273: "?x a <" + Vocabulary.C_OWL_CLASS_A + "> ;" +
274: "<" + Vocabulary.P_A_STRING_ATTRIBUTE + "> ?stringAttribute ." +
275: "}", OWLClassA.ENTITY_MAPPING).getResultList();
276: final Map<URI, OWLClassA> expected = new HashMap<>();
277: QueryTestEnvironment.getData(OWLClassA.class).forEach(a -> expected.put(a.getUri(), a));
278:
279: verifyOWLClassAInstances(res, expected);
280:• for (Object item : res) {
281: assertTrue(getEntityManager().contains(item));
282: }
283: }
284:
285: @Test
286: void queryWithEntityMappingLoadsReferencedEntitiesAsWell() {
287: final List res = getEntityManager().createNativeQuery("SELECT ?x ?y WHERE {" +
288: "?x a ?dType ;" +
289: "?hasA ?y . }", OWLClassD.MAPPING_NAME)
290: .setParameter("dType", URI.create(Vocabulary.C_OWL_CLASS_D))
291: .setParameter("hasA", URI.create(Vocabulary.P_HAS_OWL_CLASS_A))
292: .getResultList();
293: final Map<URI, OWLClassD> expected = new HashMap<>();
294: QueryTestEnvironment.getData(OWLClassD.class).forEach(d -> expected.put(d.getUri(), d));
295:
296: assertEquals(expected.size(), res.size());
297:• for (Object row : res) {
298: assertTrue(row instanceof OWLClassD);
299: final OWLClassD inst = (OWLClassD) row;
300: assertTrue(expected.containsKey(inst.getUri()));
301: assertNotNull(inst.getOwlClassA());
302: final OWLClassA expectedA = expected.get(inst.getUri()).getOwlClassA();
303: verifyOwlClassAInstance(expectedA, inst.getOwlClassA());
304: assertTrue(getEntityManager().contains(inst));
305: assertTrue(getEntityManager().contains(inst.getOwlClassA()));
306: }
307: }
308:
309: private void verifyOwlClassAInstance(OWLClassA expected, OWLClassA actual) {
310:• if (expected == null) {
311: assertNull(actual);
312: return;
313: }
314: assertNotNull(actual);
315: assertEquals(expected.getUri(), actual.getUri());
316: assertEquals(expected.getStringAttribute(), actual.getStringAttribute());
317: assertEquals(expected.getTypes(), actual.getTypes());
318: }
319:
320: @Test
321: public void queryWithEntityMappingLoadsReferencedEntityAndInheritedAttributes() {
322: final List res = getEntityManager().createNativeQuery("SELECT * WHERE {" +
323: "?x a ?type ;" +
324: "?hasA ?y ;" +
325: "?rdfsLabel ?label ;" +
326: "?hasDescription ?description ;" +
327: "?hasInt ?intAttribute ." +
328: "}", OWLClassT.MAPPING_NAME)
329: .setParameter("type", URI.create(Vocabulary.C_OWL_CLASS_T))
330: .setParameter("hasA", URI.create(Vocabulary.P_HAS_OWL_CLASS_A))
331: .setParameter("rdfsLabel", URI.create(RDFS.LABEL))
332: .setParameter("hasDescription", URI.create(Vocabulary.DC_DESCRIPTION))
333: .setParameter("hasInt", URI.create(Vocabulary.P_T_INTEGER_ATTRIBUTE))
334: .getResultList();
335: final Map<URI, OWLClassT> expected = new HashMap<>();
336: QueryTestEnvironment.getData(OWLClassT.class).forEach(t -> expected.put(t.getUri(), t));
337:
338: assertEquals(expected.size(), res.size());
339:• for (Object row : res) {
340: assertTrue(row instanceof OWLClassT);
341: final OWLClassT tActual = (OWLClassT) row;
342: assertTrue(expected.containsKey(tActual.getUri()));
343: final OWLClassT tExpected = expected.get(tActual.getUri());
344: assertEquals(tExpected.getName(), tActual.getName());
345: assertEquals(tExpected.getDescription(), tActual.getDescription());
346: assertEquals(tExpected.getIntAttribute(), tActual.getIntAttribute());
347: verifyOwlClassAInstance(tExpected.getOwlClassA(), tActual.getOwlClassA());
348: }
349: }
350:
351: @Test
352: public void executeUpdateRunsUpdateOnRepository() {
353: final EntityManager em = getEntityManager();
354: final OWLClassA instance = QueryTestEnvironment.getData(OWLClassA.class).get(0);
355: final String newValue = "UpdatedValue";
356: final String update = "DELETE { ?inst ?property ?origValue . }" +
357: "INSERT { ?inst ?property ?newValue . } WHERE {" +
358: "?inst ?property ?origValue . }";
359: em.createNativeQuery(update).setParameter("inst", instance.getUri()).setParameter("property", URI.create(
360: Vocabulary.P_A_STRING_ATTRIBUTE)).setParameter("newValue", newValue, "en").executeUpdate();
361:
362: final OWLClassA result = em.find(OWLClassA.class, instance.getUri());
363: assertEquals(newValue, result.getStringAttribute());
364: }
365:
366: @Test
367: public void executeUpdateRunsDeleteOnRepository() {
368: final EntityManager em = getEntityManager();
369: final OWLClassA instance = QueryTestEnvironment.getData(OWLClassA.class).get(0);
370: assertNotNull(instance.getStringAttribute());
371: final String update = "DELETE { ?inst ?property ?origValue . } WHERE {" +
372: "?inst ?property ?origValue . }";
373: em.createNativeQuery(update).setParameter("inst", instance.getUri())
374: .setParameter("property", URI.create(Vocabulary.P_A_STRING_ATTRIBUTE)).executeUpdate();
375:
376: final OWLClassA result = em.find(OWLClassA.class, instance.getUri());
377: assertNull(result.getStringAttribute());
378: }
379:
380: @Test
381: public void executeUpdateRunsInsertOnRepository() {
382: final EntityManager em = getEntityManager();
383: final URI newType = Generators.generateUri();
384: final OWLClassA instance = QueryTestEnvironment.getData(OWLClassA.class).get(0);
385: final String update = "INSERT DATA { ?inst a ?newType . }";
386: em.createNativeQuery(update).setParameter("inst", instance.getUri())
387: .setParameter("newType", newType).executeUpdate();
388:
389: final OWLClassA result = em.find(OWLClassA.class, instance.getUri());
390: assertTrue(result.getTypes().contains(newType.toString()));
391: }
392:
393: @Test
394: void settingStringParameterEscapesTheParameterValue() {
395: final EntityManager em = getEntityManager();
396: final String query = "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n" +
397: "SELECT ?x WHERE { ?x rdfs:comment ?comment . }";
398: final String paramValue = "string\nWith\nNewlines";
399: final List result = em.createNativeQuery(query).setParameter("comment", paramValue, "en").getResultList();
400: assertTrue(result.isEmpty()); // The point here is that no exception is thrown and a result is returned
401: }
402:
403: @Test
404: void querySupportsProcessingResultsUsingStream() {
405: final OWLClassA a = QueryTestEnvironment.getData(OWLClassA.class).get(0);
406: final Set<String> types = a.getTypes();
407: types.add(a.getClass().getAnnotation(OWLClass.class).iri());
408: final String query = "SELECT ?x WHERE { ?instance a ?x . }";
409: final Query q = getEntityManager().createNativeQuery(query).setParameter("instance", a.getUri());
410:
411: final Set<String> result = (Set<String>) q.getResultStream().map(Object::toString).collect(Collectors.toSet());
412: assertTrue(result.containsAll(types));
413: assertThat(result.size(), greaterThanOrEqualTo(types.size()));
414: }
415:
416: @Test
417: void selectionByObjectPropertySupportsEntityAsQueryParameter() {
418: final OWLClassD d = QueryTestEnvironment.getData(OWLClassD.class).get(0);
419: final String query = "SELECT ?x WHERE { ?x a ?type ; ?hasA ?y . }";
420: final Query q = getEntityManager().createNativeQuery(query);
421: q.setParameter("type", URI.create(Vocabulary.C_OWL_CLASS_D))
422: .setParameter("hasA", URI.create(Vocabulary.P_HAS_OWL_CLASS_A)).setParameter("y", d.getOwlClassA());
423:
424: final List res = q.getResultList();
425:
426: assertEquals(1, res.size());
427: final Object subRes = res.get(0);
428: assertEquals(d.getUri(), subRes);
429: }
430: }