Skip to content

Package: QueryRunner

QueryRunner

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