You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by ss...@apache.org on 2013/07/04 17:44:39 UTC
[2/3] git commit: adapted resource utils so they work better with
resource-aware connections
adapted resource utils so they work better with resource-aware connections
Project: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/commit/c6779eda
Tree: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/tree/c6779eda
Diff: http://git-wip-us.apache.org/repos/asf/incubator-marmotta/diff/c6779eda
Branch: refs/heads/develop
Commit: c6779eda674285d063acf52233f3782ebc24ce70
Parents: 805c4fb
Author: Sebastian Schaffert <ss...@apache.org>
Authored: Thu Jul 4 17:43:37 2013 +0200
Committer: Sebastian Schaffert <ss...@apache.org>
Committed: Thu Jul 4 17:43:37 2013 +0200
----------------------------------------------------------------------
.../sesame/repository/ResourceUtils.java | 38 +++++++--
.../kiwi/persistence/KiWiConnection.java | 23 +++++
.../marmotta/kiwi/sail/KiWiSailConnection.java | 88 ++++++++++++++++++--
.../kiwi/persistence/h2/statements.properties | 3 +-
.../persistence/mysql/statements.properties | 1 +
.../persistence/pgsql/statements.properties | 1 +
6 files changed, 140 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/c6779eda/commons/marmotta-commons/src/main/java/org/apache/marmotta/commons/sesame/repository/ResourceUtils.java
----------------------------------------------------------------------
diff --git a/commons/marmotta-commons/src/main/java/org/apache/marmotta/commons/sesame/repository/ResourceUtils.java b/commons/marmotta-commons/src/main/java/org/apache/marmotta/commons/sesame/repository/ResourceUtils.java
index 9e0cab5..14c0138 100644
--- a/commons/marmotta-commons/src/main/java/org/apache/marmotta/commons/sesame/repository/ResourceUtils.java
+++ b/commons/marmotta-commons/src/main/java/org/apache/marmotta/commons/sesame/repository/ResourceUtils.java
@@ -28,6 +28,8 @@ import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.RepositoryResult;
import org.openrdf.repository.sail.SailRepositoryConnection;
+import org.openrdf.sail.SailConnection;
+import org.openrdf.sail.helpers.SailConnectionWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -248,13 +250,15 @@ public class ResourceUtils {
*
* @return
*/
- public static Iterable<Resource> listResources(final RepositoryConnection con) {
- if(con instanceof SailRepositoryConnection && ((SailRepositoryConnection)con).getSailConnection() instanceof ResourceConnection) {
+ public static Iterable<Resource> listResources(RepositoryConnection con) {
+ final ResourceConnection rcon = getWrappedResourceConnection(con);
+
+ if(rcon != null) {
return new Iterable<Resource>() {
@Override
public Iterator<Resource> iterator() {
try {
- return ResultUtils.unwrap(((ResourceConnection) ((SailRepositoryConnection) con).getSailConnection()).getResources());
+ return ResultUtils.unwrap(rcon.getResources());
} catch (RepositoryException e) {
ExceptionUtils.handleRepositoryException(e,ResourceUtils.class);
return Iterators.emptyIterator();
@@ -327,12 +331,14 @@ public class ResourceUtils {
* @param limit
*/
public static Iterable<URI> listResourcesByPrefix(final RepositoryConnection con, final String prefix, final int offset, final int limit) {
- if(con instanceof SailRepositoryConnection && ((SailRepositoryConnection)con).getSailConnection() instanceof ResourceConnection) {
+ final ResourceConnection rcon = getWrappedResourceConnection(con);
+
+ if(rcon != null) {
return new Iterable<URI>() {
@Override
public Iterator<URI> iterator() {
try {
- Iterator<URI> result = ResultUtils.unwrap(((ResourceConnection) ((SailRepositoryConnection) con).getSailConnection()).getResources(prefix));
+ Iterator<URI> result = ResultUtils.unwrap(rcon.getResources(prefix));
Iterators.advance(result,offset);
@@ -1388,5 +1394,25 @@ public class ResourceUtils {
public static boolean isLiteral(Value v) {
return v instanceof Literal;
}
-
+
+
+ private static ResourceConnection getWrappedResourceConnection(SailConnection connection) {
+ if(connection instanceof ResourceConnection) {
+ return (ResourceConnection)connection;
+ } else if(connection instanceof SailConnectionWrapper) {
+ return getWrappedResourceConnection(((SailConnectionWrapper) connection).getWrappedConnection());
+ } else {
+ return null;
+ }
+
+ }
+
+ private static ResourceConnection getWrappedResourceConnection(RepositoryConnection connection) {
+ if(connection instanceof SailRepositoryConnection) {
+ return getWrappedResourceConnection(((SailRepositoryConnection) connection).getSailConnection());
+ } else {
+ return null;
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/c6779eda/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java
index d92ed5c..dee2fe0 100644
--- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java
+++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/persistence/KiWiConnection.java
@@ -1262,6 +1262,29 @@ public class KiWiConnection {
}
+ /**
+ * List all contexts used in this triple store. See query.contexts .
+ * @return
+ * @throws SQLException
+ */
+ public CloseableIteration<KiWiUriResource, SQLException> listResources(String prefix) throws SQLException {
+ requireJDBCConnection();
+
+ PreparedStatement queryContexts = getPreparedStatement("query.resources_prefix");
+ queryContexts.setString(1, prefix+"%");
+
+ final ResultSet result = queryContexts.executeQuery();
+
+ return new ResultSetIteration<KiWiUriResource>(result, new ResultTransformerFunction<KiWiUriResource>() {
+ @Override
+ public KiWiUriResource apply(ResultSet row) throws SQLException {
+ return (KiWiUriResource)constructNodeFromDatabase(row);
+ }
+ });
+
+ }
+
+
public CloseableIteration<KiWiNamespace, SQLException> listNamespaces() throws SQLException {
requireJDBCConnection();
http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/c6779eda/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiSailConnection.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiSailConnection.java b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiSailConnection.java
index ac68b23..a9a1aec 100644
--- a/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiSailConnection.java
+++ b/libraries/kiwi/kiwi-triplestore/src/main/java/org/apache/marmotta/kiwi/sail/KiWiSailConnection.java
@@ -26,18 +26,14 @@ import info.aduna.iteration.ExceptionConvertingIteration;
import info.aduna.iteration.Iteration;
import info.aduna.iteration.Iterations;
import info.aduna.iteration.UnionIteration;
+import org.apache.marmotta.commons.sesame.repository.ResourceConnection;
import org.apache.marmotta.kiwi.model.rdf.KiWiNamespace;
import org.apache.marmotta.kiwi.model.rdf.KiWiNode;
import org.apache.marmotta.kiwi.model.rdf.KiWiResource;
import org.apache.marmotta.kiwi.model.rdf.KiWiTriple;
import org.apache.marmotta.kiwi.model.rdf.KiWiUriResource;
import org.apache.marmotta.kiwi.persistence.KiWiConnection;
-import org.openrdf.model.Namespace;
-import org.openrdf.model.Resource;
-import org.openrdf.model.Statement;
-import org.openrdf.model.URI;
-import org.openrdf.model.Value;
-import org.openrdf.model.ValueFactory;
+import org.openrdf.model.*;
import org.openrdf.query.BindingSet;
import org.openrdf.query.Dataset;
import org.openrdf.query.QueryEvaluationException;
@@ -50,6 +46,7 @@ import org.openrdf.query.algebra.evaluation.EvaluationStrategy;
import org.openrdf.query.algebra.evaluation.TripleSource;
import org.openrdf.query.algebra.evaluation.impl.*;
import org.openrdf.repository.RepositoryException;
+import org.openrdf.repository.RepositoryResult;
import org.openrdf.sail.Sail;
import org.openrdf.sail.SailChangedEvent;
import org.openrdf.sail.SailException;
@@ -70,7 +67,7 @@ import java.util.Set;
* <p/>
* Author: Sebastian Schaffert
*/
-public class KiWiSailConnection extends NotifyingSailConnectionBase implements InferencerConnection {
+public class KiWiSailConnection extends NotifyingSailConnectionBase implements InferencerConnection, ResourceConnection {
private static final Logger log = LoggerFactory.getLogger(KiWiSailConnection.class);
@@ -629,6 +626,83 @@ public class KiWiSailConnection extends NotifyingSailConnectionBase implements I
}
}
+ /**
+ * Return an iterator over the resources contained in this repository.
+ *
+ * @return
+ */
+ @Override
+ public RepositoryResult<Resource> getResources() throws RepositoryException {
+ try {
+ return new RepositoryResult<Resource>(new ExceptionConvertingIteration<Resource,RepositoryException>(databaseConnection.listResources()) {
+ @Override
+ protected RepositoryException convert(Exception e) {
+ return new RepositoryException(e);
+ }
+ });
+ } catch (SQLException e) {
+ throw new RepositoryException(e);
+ }
+ }
+
+ /**
+ * Return an iterator over the resources contained in this repository matching the given prefix.
+ *
+ * @return
+ */
+ @Override
+ public RepositoryResult<URI> getResources(String prefix) throws RepositoryException {
+ try {
+ return new RepositoryResult<URI>(new ExceptionConvertingIteration<URI,RepositoryException>(databaseConnection.listResources(prefix)) {
+ @Override
+ protected RepositoryException convert(Exception e) {
+ return new RepositoryException(e);
+ }
+ });
+ } catch (SQLException e) {
+ throw new RepositoryException(e);
+ }
+ }
+
+ /**
+ * Return the Sesame URI with the given uri identifier if it exists, or null if it does not exist.
+ *
+ * @param uri
+ * @return
+ */
+ @Override
+ public URI getURI(String uri) {
+ try {
+ return databaseConnection.loadUriResource(uri);
+ } catch (SQLException e) {
+ return null;
+ }
+ }
+
+ /**
+ * Return the Sesame BNode with the given anonymous ID if it exists, or null if it does not exist.
+ *
+ * @param id
+ * @return
+ */
+ @Override
+ public BNode getBNode(String id) {
+ try {
+ return databaseConnection.loadAnonResource(id);
+ } catch (SQLException e) {
+ return null;
+ }
+ }
+
+ /**
+ * Remove the resource given as argument from the triple store and the resource repository.
+ *
+ * @param resource
+ */
+ @Override
+ public void removeResource(Resource resource) {
+ // handled by garbage collection
+ }
protected static class KiWiEvaluationStatistics extends EvaluationStatistics {
http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/c6779eda/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/h2/statements.properties
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/h2/statements.properties b/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/h2/statements.properties
index 497a372..61c8557 100644
--- a/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/h2/statements.properties
+++ b/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/h2/statements.properties
@@ -68,7 +68,8 @@ query.size = SELECT count(*) FROM triples WHERE deleted = false
query.size_ctx = SELECT count(*) FROM triples WHERE context = ? AND deleted = false
query.contexts = SELECT DISTINCT context FROM triples WHERE deleted = false
query.namespaces = SELECT id,prefix,uri,createdAt FROM namespaces
-query.resources = SELECT id,ntype,svalue,createdAt FROM nodes WHERE ntype = 'uri' OR ntype = 'bnode'
+query.resources = SELECT id,ntype,svalue,createdAt FROM nodes WHERE ntype = 'uri' OR ntype = 'bnode'
+query.resources_prefix = SELECT id,ntype,svalue,createdAt FROM nodes WHERE ntype = 'uri' AND svalue LIKE ?
# delete entities
delete.triple = UPDATE triples SET deleted = true, deletedAt = now() WHERE id = ?
http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/c6779eda/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/mysql/statements.properties
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/mysql/statements.properties b/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/mysql/statements.properties
index 8cbdd25..eb089bf 100644
--- a/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/mysql/statements.properties
+++ b/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/mysql/statements.properties
@@ -77,6 +77,7 @@ query.size_ctx = SELECT count(*) FROM triples WHERE context = ? AND delete
query.contexts = SELECT DISTINCT context FROM triples WHERE deleted = false
query.namespaces = SELECT id,prefix,uri,createdAt FROM namespaces
query.resources = SELECT id,ntype,svalue,createdAt FROM nodes WHERE ntype = 'uri' OR ntype = 'bnode'
+query.resources_prefix = SELECT id,ntype,svalue,createdAt FROM nodes WHERE ntype = 'uri' AND svalue LIKE ?
# delete entities
delete.triple = UPDATE triples SET deleted = true, deletedAt = now() WHERE id = ?
http://git-wip-us.apache.org/repos/asf/incubator-marmotta/blob/c6779eda/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/pgsql/statements.properties
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/pgsql/statements.properties b/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/pgsql/statements.properties
index 9dc9877..4f00bba 100644
--- a/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/pgsql/statements.properties
+++ b/libraries/kiwi/kiwi-triplestore/src/main/resources/org/apache/marmotta/kiwi/persistence/pgsql/statements.properties
@@ -69,6 +69,7 @@ query.size_ctx = SELECT count(*) FROM triples WHERE context = ? AND delete
query.contexts = SELECT DISTINCT context FROM triples WHERE deleted = false
query.namespaces = SELECT id,prefix,uri,createdAt FROM namespaces
query.resources = SELECT id,ntype,svalue,createdAt FROM nodes WHERE ntype = 'uri' OR ntype = 'bnode'
+query.resources_prefix = SELECT id,ntype,svalue,createdAt FROM nodes WHERE ntype = 'uri' AND svalue LIKE ?
# delete entities
delete.triple = UPDATE triples SET deleted = true, deletedAt = now() WHERE id = ?