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 = ?