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%
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: 34
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
testGetSingleResultMultiples()
M: 4 C: 11
73%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 4
67%
M: 0 C: 1
100%
testGetSingleResultNoResult()
M: 4 C: 11
73%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 4
67%
M: 0 C: 1
100%
testSelectByDataProperty()
M: 0 C: 59
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 15
100%
M: 0 C: 1
100%
testSelectByObjectProperty()
M: 0 C: 49
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 11
100%
M: 0 C: 1
100%
testSelectByType()
M: 0 C: 66
100%
M: 1 C: 5
83%
M: 1 C: 3
75%
M: 0 C: 17
100%
M: 0 C: 1
100%
testSelectQueryWithPositionalParameters()
M: 0 C: 34
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
testSelectTypes()
M: 1 C: 63
98%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 0 C: 12
100%
M: 0 C: 1
100%
testSelectWithOptionalReturnsNullInUnfilledColumns()
M: 4 C: 54
93%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 1 C: 15
94%
M: 0 C: 1
100%
testSetMaxResults()
M: 1 C: 49
98%
M: 1 C: 1
50%
M: 1 C: 1
50%
M: 0 C: 14
100%
M: 0 C: 1
100%
testSetMaxResultsNegative()
M: 5 C: 11
69%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 4
67%
M: 0 C: 1
100%
testSetMaxResultsZero()
M: 0 C: 24
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%

Coverage

1: /**
2: * Copyright (C) 2016 Czech Technical University in Prague
3: * <p>
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: * <p>
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.query.QueryTestEnvironment;
24: import org.junit.Test;
25: import org.slf4j.Logger;
26:
27: import java.net.URI;
28: import java.util.List;
29: import java.util.Set;
30: import java.util.stream.Collectors;
31:
32: import static org.junit.Assert.*;
33:
34: public abstract class QueryRunner extends BaseQueryRunner {
35:
36: protected QueryRunner(Logger logger) {
37: super(logger);
38: }
39:
40: @Test
41: public void testSelectByType() {
42: logger.debug("Test: get URIs of individuals of a certain type.");
43: final String query = "SELECT ?x WHERE { ?x a <http://krizik.felk.cvut.cz/ontologies/jopa/entities#TypeA> . }";
44: final Query q = getEntityManager().createNativeQuery(query);
45: final List<OWLClassA> as = QueryTestEnvironment.getDataByContext(null, OWLClassA.class);
46: assertNotNull(q);
47:
48: final List res = q.getResultList();
49:
50: assertNotNull(res);
51: assertFalse(res.isEmpty());
52: assertEquals(as.size(), res.size());
53: boolean found;
54:• for (OWLClassA a : as) {
55: found = false;
56:• for (Object row : res) {
57:• if (a.getUri().equals(row)) {
58: found = true;
59: break;
60: }
61: }
62: assertTrue(found);
63: }
64: }
65:
66: @Test
67: public void testSelectByDataProperty() {
68: logger.debug("Test: select data property values.");
69: final String query =
70: "SELECT ?y WHERE { ?x ?stringAtt ?y . }";
71: final Query q = getEntityManager().createNativeQuery(query)
72: .setParameter("stringAtt", URI.create(Vocabulary.P_B_STRING_ATTRIBUTE));
73: final Set<String> exp = QueryTestEnvironment.getDataByContext(null, OWLClassB.class).stream()
74: .map(OWLClassB::getStringAttribute).collect(Collectors.toSet());
75:
76: final List res = q.getResultList();
77:
78: assertNotNull(res);
79: assertFalse(res.isEmpty());
80: assertEquals(exp.size(), res.size());
81:• for (Object lst2 : res) {
82: assertTrue(lst2 instanceof String);
83: // False means we got the expected value
84: assertFalse(exp.add((String) lst2));
85: }
86: }
87:
88: @Test
89: public void testSelectByObjectProperty() {
90: logger.debug("Test: select object property values.");
91: final OWLClassD d = QueryTestEnvironment.getData(OWLClassD.class).get(0);
92: final String query = "SELECT ?x WHERE { ?x a ?type ; ?hasA ?y . }";
93: final Query q = getEntityManager().createNativeQuery(query);
94: q.setParameter("type", URI.create(Vocabulary.C_OWL_CLASS_D))
95: .setParameter("hasA", URI.create(Vocabulary.P_HAS_OWL_CLASS_A)).setParameter("y", d.getOwlClassA().getUri());
96:
97: final List res = q.getResultList();
98:
99: assertEquals(1, res.size());
100: final Object subRes = res.get(0);
101: assertEquals(d.getUri(), subRes);
102: }
103:
104: @Test
105: public void testSelectTypes() {
106: logger.debug("Test: select individual's types.");
107: final OWLClassA a = QueryTestEnvironment.getData(OWLClassA.class).get(0);
108: final Set<String> types = a.getTypes();
109: types.add(a.getClass().getAnnotation(OWLClass.class).iri());
110: final String query = "SELECT ?x WHERE { ?instance a ?x . }";
111: final Query q = getEntityManager().createNativeQuery(query);
112: q.setParameter("instance", a.getUri());
113:
114: final List res = q.getResultList();
115: // The result can contain more types (inference)
116:• assertTrue(res.size() >= types.size());
117:• for (String type : types) {
118: assertTrue(res.contains(URI.create(type)));
119: }
120: }
121:
122: @Test
123: public void testSetMaxResults() {
124: logger.debug("Test: set maximum number of results.");
125: final String query =
126: "SELECT ?x WHERE { ?x a <http://krizik.felk.cvut.cz/ontologies/jopa/entities#OWLClassE> . }";
127: final Query q = getEntityManager().createNativeQuery(query);
128: final int max = 5;
129:• assertTrue(max < QueryTestEnvironment.getData(OWLClassE.class).size());
130: assertEquals(Integer.MAX_VALUE, q.getMaxResults());
131: q.setMaxResults(max);
132: assertEquals(max, q.getMaxResults());
133:
134: final List res = q.getResultList();
135: assertNotNull(res);
136: assertFalse(res.isEmpty());
137: assertEquals(max, res.size());
138: }
139:
140: @Test(expected = IllegalArgumentException.class)
141: public void testSetMaxResultsNegative() {
142: logger.debug("Test: set maximum number of results. Negative argument.");
143: final String query =
144: "SELECT ?x WHERE { ?x a <http://krizik.felk.cvut.cz/ontologies/jopa/entities#OWLClassE> . }";
145: final Query q = getEntityManager().createNativeQuery(query);
146: q.setMaxResults(-1);
147: }
148:
149: @Test
150: public void testSetMaxResultsZero() {
151: logger.debug("Test: set maximum number of results. Zero argument.");
152: final String query =
153: "SELECT ?x WHERE { ?x a <http://krizik.felk.cvut.cz/ontologies/jopa/entities#OWLClassE> . }";
154: final Query q = getEntityManager().createNativeQuery(query);
155: q.setMaxResults(0);
156:
157: final List res = q.getResultList();
158: assertNotNull(res);
159: assertTrue(res.isEmpty());
160: }
161:
162: @Test
163: public void testGetSingleResult() {
164: logger.debug("Test: get single result.");
165: final OWLClassA a = QueryTestEnvironment.getData(OWLClassA.class).get(0);
166: final String query =
167: "SELECT ?x WHERE { ?x <http://krizik.felk.cvut.cz/ontologies/jopa/attributes#A-stringAttribute> ?y .}";
168: final Query q = getEntityManager().createNativeQuery(query);
169: q.setParameter("y", a.getStringAttribute(), "en");
170:
171: final Object res = q.getSingleResult();
172: assertNotNull(res);
173: assertEquals(a.getUri(), res);
174: }
175:
176: @Test(expected = NoUniqueResultException.class)
177: public void testGetSingleResultMultiples() {
178: logger.debug("Test: get single result. No unique result.");
179: final String query =
180: "SELECT ?x WHERE { ?x a <http://krizik.felk.cvut.cz/ontologies/jopa/entities#OWLClassE> . }";
181: final Query q = getEntityManager().createNativeQuery(query);
182: q.getSingleResult();
183: }
184:
185: @Test(expected = NoResultException.class)
186: public void testGetSingleResultNoResult() {
187: logger.debug("Test: get single result. No result.");
188: final String query =
189: "SELECT ?x WHERE { ?x a <http://krizik.felk.cvut.cz/ontologies/jopa/entities#OWLClassX> . }";
190: final Query q = getEntityManager().createNativeQuery(query);
191: q.getSingleResult();
192: }
193:
194: @Test
195: public void testSelectQueryWithPositionalParameters() {
196: logger.debug("Test: select query using positional parameters.");
197: final OWLClassA a = QueryTestEnvironment.getData(OWLClassA.class).get(0);
198: final String query =
199: "SELECT ?x WHERE { ?x <http://krizik.felk.cvut.cz/ontologies/jopa/attributes#A-stringAttribute> $ .}";
200: final Query q = getEntityManager().createNativeQuery(query);
201: q.setParameter(1, a.getStringAttribute(), "en");
202:
203: final Object res = q.getSingleResult();
204: assertNotNull(res);
205: assertEquals(a.getUri(), res);
206: }
207:
208: @Test
209: public void testSelectWithOptionalReturnsNullInUnfilledColumns() throws Exception {
210: logger.debug("Test: select query with optional. The result should have nulls in places of empty values.");
211: final String query =
212: "SELECT ?x ?s WHERE { ?x a <http://krizik.felk.cvut.cz/ontologies/jopa/entities#OWLClassE> ." +
213: " OPTIONAL {?x <http://krizik.felk.cvut.cz/ontologies/jopa/attributes#E-stringAttribute> ?s . } }";
214: final OWLClassE e = new OWLClassE();
215: final EntityManager em = getEntityManager();
216: em.getTransaction().begin();
217: em.persist(e);
218: em.getTransaction().commit();
219: final Query q = em.createNativeQuery(query);
220:
221: final List result = q.getResultList();
222: assertFalse(result.isEmpty());
223:• for (Object row : result) {
224: final Object[] rowArr = (Object[]) row;
225:• if (rowArr[0].equals(e.getUri().toString())) {
226: assertNull(rowArr[1]);
227: }
228: }
229: }
230:
231: @Test
232: public void testCreateNamedNativeQueryWithParameterSetting() {
233: final OWLClassA a = QueryTestEnvironment.getData(OWLClassA.class).get(0);
234: final List res = getEntityManager().createNamedQuery("OWLClassA.findByString")
235: .setParameter("str", a.getStringAttribute(), "en").getResultList();
236: assertFalse(res.isEmpty());
237: assertTrue(res.contains(a.getUri()));
238: }
239: }