Package: SesameStatement
SesameStatement
name | instruction | branch | complexity | line | method | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
SesameStatement(StatementExecutor) |
|
|
|
|
|
||||||||||||||||||||
close() |
|
|
|
|
|
||||||||||||||||||||
closeCurrentResultSet() |
|
|
|
|
|
||||||||||||||||||||
determineResult(String) |
|
|
|
|
|
||||||||||||||||||||
disableInference() |
|
|
|
|
|
||||||||||||||||||||
ensureOpen() |
|
|
|
|
|
||||||||||||||||||||
executeQuery(String) |
|
|
|
|
|
||||||||||||||||||||
executeUpdate(String) |
|
|
|
|
|
||||||||||||||||||||
getStatementOntology() |
|
|
|
|
|
||||||||||||||||||||
isAskQuery(String) |
|
|
|
|
|
||||||||||||||||||||
isInferenceDisabled() |
|
|
|
|
|
||||||||||||||||||||
isOpen() |
|
|
|
|
|
||||||||||||||||||||
setUseBackupOntology() |
|
|
|
|
|
||||||||||||||||||||
setUseTransactionalOntology() |
|
|
|
|
|
||||||||||||||||||||
useBackupOntology() |
|
|
|
|
|
||||||||||||||||||||
useOntology(Statement.StatementOntology) |
|
|
|
|
|
||||||||||||||||||||
useTransactionalOntology() |
|
|
|
|
|
||||||||||||||||||||
validateQueryParams(String) |
|
|
|
|
|
Coverage
1: /**
2: * Copyright (C) 2022 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.ontodriver.sesame.query;
16:
17: import cz.cvut.kbss.ontodriver.ResultSet;
18: import cz.cvut.kbss.ontodriver.Statement;
19: import cz.cvut.kbss.ontodriver.exception.OntoDriverException;
20: import cz.cvut.kbss.ontodriver.sesame.connector.StatementExecutor;
21: import cz.cvut.kbss.ontodriver.sesame.exceptions.SesameDriverException;
22: import org.eclipse.rdf4j.query.QueryEvaluationException;
23: import org.eclipse.rdf4j.query.QueryLanguage;
24: import org.eclipse.rdf4j.query.TupleQueryResult;
25: import org.eclipse.rdf4j.query.parser.ParsedBooleanQuery;
26: import org.eclipse.rdf4j.query.parser.QueryParserUtil;
27:
28: import java.util.Objects;
29:
30: public class SesameStatement implements Statement {
31:
32: private StatementOntology targetOntology = StatementOntology.TRANSACTIONAL;
33: private final StatementExecutor queryExecutor;
34: private ResultSet resultSet;
35:
36: private boolean open;
37:
38: public SesameStatement(StatementExecutor queryExecutor) {
39: this.queryExecutor = queryExecutor;
40: this.open = true;
41: }
42:
43: @Override
44: public ResultSet executeQuery(String sparql) throws OntoDriverException {
45: ensureOpen();
46: validateQueryParams(sparql);
47: closeCurrentResultSet();
48: this.resultSet = determineResult(sparql);
49: return resultSet;
50: }
51:
52: private ResultSet determineResult(String sparql) throws SesameDriverException {
53:• if (isAskQuery(sparql)) {
54: return new AskResultSet(queryExecutor.executeBooleanQuery(sparql), this);
55: } else {
56: final TupleQueryResult tqr = queryExecutor.executeSelectQuery(sparql);
57: try {
58: return new SelectResultSet(tqr, this);
59: } catch (QueryEvaluationException e) {
60: throw new SesameDriverException(e);
61: }
62: }
63: }
64:
65: private static boolean isAskQuery(String query) {
66: return QueryParserUtil.parseOperation(QueryLanguage.SPARQL, query, null) instanceof ParsedBooleanQuery;
67: }
68:
69: @Override
70: public void executeUpdate(String sparql) throws OntoDriverException {
71: ensureOpen();
72: validateQueryParams(sparql);
73: closeCurrentResultSet();
74: queryExecutor.executeUpdate(sparql);
75: }
76:
77: @Override
78: public void useOntology(StatementOntology ontology) {
79: this.targetOntology = ontology;
80: }
81:
82: @Override
83: public StatementOntology getStatementOntology() {
84: return targetOntology;
85: }
86:
87: private static void validateQueryParams(String sparql) {
88: Objects.requireNonNull(sparql);
89:• if (sparql.isEmpty()) {
90: throw new IllegalArgumentException("Query string cannot be empty.");
91: }
92: }
93:
94: @Override
95: public boolean isOpen() {
96: return open;
97: }
98:
99: @Override
100: public void close() throws OntoDriverException {
101:• if (!open) {
102: return;
103: }
104: this.open = false;
105: closeCurrentResultSet();
106: }
107:
108: @Override
109: public void disableInference() {
110: // Do nothing, not supported
111: }
112:
113: @Override
114: public boolean isInferenceDisabled() {
115: return false;
116: }
117:
118: private void closeCurrentResultSet() throws OntoDriverException {
119:• if (resultSet != null) {
120: resultSet.close();
121: this.resultSet = null;
122: }
123: }
124:
125: public void setUseTransactionalOntology() {
126: ensureOpen();
127: this.targetOntology = StatementOntology.TRANSACTIONAL;
128: }
129:
130: public boolean useTransactionalOntology() {
131: ensureOpen();
132:• return targetOntology == StatementOntology.TRANSACTIONAL;
133: }
134:
135: public void setUseBackupOntology() {
136: ensureOpen();
137: this.targetOntology = StatementOntology.CENTRAL;
138: }
139:
140: public boolean useBackupOntology() {
141: ensureOpen();
142:• return targetOntology == StatementOntology.CENTRAL;
143: }
144:
145: void ensureOpen() {
146:• if (!open) {
147: throw new IllegalStateException("This statement is closed.");
148: }
149: }
150: }