Skip to content

Package: SoqlRunner

SoqlRunner

nameinstructionbranchcomplexitylinemethod
SoqlRunner(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%
lambda$testFindByAttributeInValues$2(OWLClassD, 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$testFindByAttributeInValues$3(List, 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$testJoinOnPluralAttribute$4(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$testJoinOnPluralAttribute$5(OWLClassJ, OWLClassJ)
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$testOrderBy$1(OWLClassT, 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%
lambda$testSelectByAbsoluteValueOfAnInteger$6(int, OWLClassM)
M: 0 C: 10
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
lambda$testSelectByAbsoluteValueOfAnInteger$7(OWLClassM, OWLClassM)
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$testSelectByAbsoluteValueOfAnInteger$8(List, OWLClassM)
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$testSimpleFindAll$0(OWLClassA, 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%
testFindByAttributeInValues()
M: 9 C: 39
81%
M: 1 C: 1
50%
M: 1 C: 1
50%
M: 1 C: 12
92%
M: 0 C: 1
100%
testFindByConjunctionOfAttributes()
M: 0 C: 49
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 11
100%
M: 0 C: 1
100%
testFindByDataNotPropertyAttribute()
M: 0 C: 39
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
testFindByDataNotPropertyAttributeAndPropertyAttribute()
M: 1 C: 55
98%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 0 C: 12
100%
M: 0 C: 1
100%
testFindByDataPropertyAttribute()
M: 0 C: 34
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
testFindByDisjunctionOfAttributes()
M: 0 C: 59
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 12
100%
M: 0 C: 1
100%
testFindByObjectPropertyAttribute()
M: 0 C: 31
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 7
100%
M: 0 C: 1
100%
testFindByTransitiveAttributeValue()
M: 0 C: 32
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 7
100%
M: 0 C: 1
100%
testJoinOnPluralAttribute()
M: 0 C: 36
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 11
100%
M: 0 C: 1
100%
testOrderBy()
M: 0 C: 37
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
testSelectByAbsoluteValueOfAnInteger()
M: 0 C: 34
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
testSelectByIdentifier()
M: 0 C: 25
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
testSelectByLikeWithUppercase()
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%
testSimpleCount()
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%
testSimpleFindAll()
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%

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.test.*;
21: import cz.cvut.kbss.jopa.test.environment.DataAccessor;
22: import cz.cvut.kbss.jopa.test.environment.Generators;
23: import cz.cvut.kbss.jopa.test.environment.TestEnvironment;
24: import cz.cvut.kbss.jopa.test.query.QueryTestEnvironment;
25: import cz.cvut.kbss.ontodriver.model.LangString;
26: import org.junit.jupiter.api.Test;
27: import org.slf4j.Logger;
28:
29: import java.util.Comparator;
30: import java.util.List;
31: import java.util.Locale;
32: import java.util.Set;
33: import java.util.stream.Collectors;
34:
35: import static cz.cvut.kbss.jopa.test.environment.util.ContainsSameEntities.containsSameEntities;
36: import static org.hamcrest.MatcherAssert.assertThat;
37: import static org.hamcrest.Matchers.hasItem;
38: import static org.hamcrest.Matchers.lessThanOrEqualTo;
39: import static org.junit.jupiter.api.Assertions.*;
40:
41: public abstract class SoqlRunner extends BaseQueryRunner {
42:
43: protected SoqlRunner(Logger logger, DataAccessor dataAccessor) {
44: super(logger, dataAccessor);
45: }
46:
47: @Test
48: public void testSimpleFindAll() {
49: final List<OWLClassA> expected = QueryTestEnvironment.getData(OWLClassA.class);
50: final List<OWLClassA> result = getEntityManager().createQuery("SELECT a FROM OWLClassA a", OWLClassA.class)
51: .getResultList();
52: assertEquals(expected.size(), result.size());
53:• for (OWLClassA a : result) {
54: assertNotNull(a.getStringAttribute());
55: assertTrue(expected.stream().anyMatch(aa -> aa.getUri().equals(a.getUri())));
56: }
57: }
58:
59: @Test
60: public void testSimpleCount() {
61: final List<OWLClassA> expected = QueryTestEnvironment.getData(OWLClassA.class);
62: final Object result = getEntityManager().createQuery("SELECT DISTINCT COUNT(a) FROM OWLClassA a", Integer.class)
63: .getSingleResult();
64: assertEquals(expected.size(), result);
65: }
66:
67: @Test
68: public void testFindByDataPropertyAttribute() {
69: final OWLClassA expected = Generators.getRandomItem(QueryTestEnvironment.getData(OWLClassA.class));
70: final OWLClassA result = getEntityManager()
71: .createQuery("SELECT a FROM OWLClassA a WHERE a.stringAttribute = :str", OWLClassA.class)
72: .setParameter("str", expected.getStringAttribute(), "en").getSingleResult();
73: assertEquals(expected.getUri(), result.getUri());
74: assertEquals(expected.getStringAttribute(), result.getStringAttribute());
75: assertEquals(expected.getTypes(), result.getTypes());
76: }
77:
78: @Test
79: public void testFindByDataNotPropertyAttribute() {
80: final OWLClassA unexpected = Generators.getRandomItem(QueryTestEnvironment.getData(OWLClassA.class));
81: final List<OWLClassA> result = getEntityManager()
82: .createQuery("SELECT a FROM OWLClassA a WHERE NOT a.stringAttribute = :str", OWLClassA.class)
83: .setParameter("str", unexpected.getStringAttribute(), "en").getResultList();
84:• for (OWLClassA item : result) {
85: assertNotEquals(unexpected.getUri(), item.getUri());
86: assertNotEquals(unexpected.getStringAttribute(), item.getStringAttribute());
87: }
88: }
89:
90: @Test
91: public void testFindByDataNotPropertyAttributeAndPropertyAttribute() {
92: final OWLClassT unexpected = Generators.getRandomItem(QueryTestEnvironment.getData(OWLClassT.class));
93: final int intThreshold = QueryTestEnvironment.getData(OWLClassT.class).size() / 2;
94: final List<OWLClassT> result = getEntityManager()
95: .createQuery("SELECT t FROM OWLClassT t WHERE NOT t.owlClassA = :a AND t.intAttribute < :intAtt",
96: OWLClassT.class)
97: .setParameter("a", unexpected.getOwlClassA().getUri())
98: .setParameter("intAtt", intThreshold).getResultList();
99: assertFalse(result.isEmpty());
100:• for (OWLClassT item : result) {
101: assertNotEquals(unexpected.getUri(), item.getUri());
102:• assertTrue(intThreshold > item.getIntAttribute());
103: }
104: }
105:
106: @Test
107: public void testFindByObjectPropertyAttribute() {
108: final OWLClassD expected = Generators.getRandomItem(QueryTestEnvironment.getData(OWLClassD.class));
109: final OWLClassD result = getEntityManager()
110: .createQuery("SELECT d FROM OWLClassD d WHERE d.owlClassA = :a", OWLClassD.class)
111: .setParameter("a", expected.getOwlClassA().getUri()).getSingleResult();
112: assertEquals(expected.getUri(), result.getUri());
113: assertEquals(expected.getOwlClassA().getUri(), result.getOwlClassA().getUri());
114: }
115:
116: @Test
117: public void testFindByConjunctionOfAttributes() {
118: final OWLClassT sample = Generators.getRandomItem(QueryTestEnvironment.getData(OWLClassT.class));
119: final List<OWLClassT> result = getEntityManager()
120: .createQuery("SELECT t FROM OWLClassT t WHERE t.owlClassA = :a AND t.intAttribute <= :intAtt",
121: OWLClassT.class)
122: .setParameter("a", sample.getOwlClassA().getUri())
123: .setParameter("intAtt", sample.getIntAttribute()).getResultList();
124: assertFalse(result.isEmpty());
125:• for (OWLClassT item : result) {
126: assertEquals(sample.getOwlClassA().getUri(), item.getOwlClassA().getUri());
127: assertThat(item.getIntAttribute(), lessThanOrEqualTo(sample.getIntAttribute()));
128: }
129: }
130:
131: @Test
132: public void testOrderBy() {
133: final List<OWLClassT> expected = QueryTestEnvironment.getData(OWLClassT.class);
134: expected.sort(Comparator.comparing(OWLClassT::getIntAttribute));
135: final List<OWLClassT> result = getEntityManager()
136: .createQuery("SELECT t FROM OWLClassT t ORDER BY t.intAttribute", OWLClassT.class).getResultList();
137: assertEquals(expected.size(), result.size());
138:• for (OWLClassT t : result) {
139: assertTrue(expected.stream().anyMatch(tt -> tt.getUri().equals(t.getUri())));
140: }
141: }
142:
143: @Test
144: public void testFindByDisjunctionOfAttributes() {
145: final OWLClassT sample = Generators.getRandomItem(QueryTestEnvironment.getData(OWLClassT.class));
146: final List<OWLClassT> result = getEntityManager()
147: .createQuery("SELECT t FROM OWLClassT t WHERE t.owlClassA = :a OR t.intAttribute <= :intAtt",
148: OWLClassT.class)
149: .setParameter("a", sample.getOwlClassA().getUri())
150: .setParameter("intAtt", sample.getIntAttribute()).getResultList();
151: assertFalse(result.isEmpty());
152:• for (OWLClassT item : result) {
153: boolean matches = item.getOwlClassA().getUri().equals(sample.getOwlClassA().getUri());
154:• matches |= item.getIntAttribute() <= sample.getIntAttribute();
155: assertTrue(matches);
156: }
157: }
158:
159: @Test
160: public void testFindByTransitiveAttributeValue() {
161: final OWLClassD expected = Generators.getRandomItem(QueryTestEnvironment.getData(OWLClassD.class));
162: final OWLClassD result = getEntityManager()
163: .createQuery("SELECT d FROM OWLClassD d WHERE d.owlClassA.stringAttribute = :stringAtt",
164: OWLClassD.class)
165: .setParameter("stringAtt", expected.getOwlClassA().getStringAttribute(), "en").getSingleResult();
166: assertEquals(expected.getUri(), result.getUri());
167: assertEquals(expected.getOwlClassA().getUri(), result.getOwlClassA().getUri());
168: }
169:
170: @Test
171: public void testFindByAttributeInValues() {
172: final List<OWLClassA> aInstances = QueryTestEnvironment.getData(OWLClassA.class);
173: final List<OWLClassA> matching;
174:• if (Generators.randomBoolean()) {
175: matching = aInstances.subList(0, aInstances.size() / 2);
176: } else {
177: matching = aInstances.subList(aInstances.size() / 2, aInstances.size());
178: }
179: final List<OWLClassD> expected = QueryTestEnvironment.getData(OWLClassD.class).stream()
180: .filter(d -> matching.stream().anyMatch(
181: a -> d.getOwlClassA().getUri().equals(a.getUri())))
182: .collect(Collectors.toList());
183: final List<OWLClassD> result =
184: getEntityManager().createQuery("SELECT d FROM OWLClassD d WHERE d.owlClassA IN :aInstances",
185: OWLClassD.class)
186: .setParameter("aInstances", matching)
187: .getResultList();
188: assertThat(result, containsSameEntities(expected));
189: }
190:
191: /**
192: * Bug #135
193: */
194: @Test
195: public void testJoinOnPluralAttribute() {
196: final List<OWLClassJ> jInstances = QueryTestEnvironment.getData(OWLClassJ.class);
197: final OWLClassJ matching = Generators.getRandomItem(jInstances);
198: final Set<LangString> stringSet =
199: matching.getOwlClassA().stream()
200: .map(a -> new LangString(a.getStringAttribute(), TestEnvironment.PERSISTENCE_LANGUAGE))
201: .collect(Collectors.toSet());
202:
203: final List<OWLClassJ> result = getEntityManager().createQuery(
204: "SELECT j FROM OWLClassJ j WHERE j.owlClassA.stringAttribute IN :stringSet", OWLClassJ.class)
205: .setParameter("stringSet", stringSet).getResultList();
206: assertFalse(result.isEmpty());
207: assertTrue(result.stream().anyMatch(j -> j.getUri().equals(matching.getUri())));
208: }
209:
210: /**
211: * Enhancement #138
212: */
213: @Test
214: public void testSelectByIdentifier() {
215: final OWLClassA instance = Generators.getRandomItem(QueryTestEnvironment.getData(OWLClassA.class));
216: final OWLClassA result =
217: getEntityManager().createQuery("SELECT a FROM OWLClassA a WHERE a.uri = :uri", OWLClassA.class)
218: .setParameter("uri", instance.getUri())
219: .getSingleResult();
220: assertNotNull(result);
221: assertEquals(instance.getUri(), result.getUri());
222: }
223:
224: @Test
225: public void testSelectByLikeWithUppercase() {
226: final OWLClassA instance = Generators.getRandomItem(QueryTestEnvironment.getData(OWLClassA.class));
227: final List<OWLClassA> result =
228: getEntityManager().createQuery("SELECT a FROM OWLClassA a WHERE UPPER(a.stringAttribute) LIKE :value",
229: OWLClassA.class)
230: .setParameter("value", instance.getStringAttribute().substring(0, 3)
231: .toUpperCase(Locale.ROOT) + ".+")
232: .getResultList();
233: assertFalse(result.isEmpty());
234: assertThat(result, hasItem(instance));
235: }
236:
237: @Test
238: public void testSelectByAbsoluteValueOfAnInteger() {
239: final List<OWLClassM> instances = QueryTestEnvironment.getData(OWLClassM.class);
240: final int value = Math.abs(Generators.randomInt());
241:• final List<OWLClassM> matching = instances.stream().filter(m -> Math.abs(m.getIntAttribute()) <= value).toList();
242: final List<OWLClassM> result = getEntityManager().createQuery("SELECT m FROM OWLClassM m WHERE ABS(m.intAttribute) <= :value", OWLClassM.class)
243: .setParameter("value", value)
244: .getResultList();
245: assertEquals(matching.size(), result.size());
246: matching.forEach(m -> assertTrue(result.stream().anyMatch(rm -> rm.getKey().equals(m.getKey()))));
247: }
248: }