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 2016/08/25 11:04:23 UTC

[2/8] marmotta git commit: Java cleanups for KiWi SPARQL

Java cleanups for KiWi SPARQL


Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/3828f654
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/3828f654
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/3828f654

Branch: refs/heads/develop
Commit: 3828f65455f61919b1a5de991649a6b7dda1b991
Parents: 9aa5c2a
Author: Sebastian Schaffert <ss...@apache.org>
Authored: Mon Aug 22 21:53:02 2016 +0200
Committer: Sebastian Schaffert <ss...@apache.org>
Committed: Mon Aug 22 21:53:02 2016 +0200

----------------------------------------------------------------------
 .../marmotta/kiwi/loader/pgsql/PGCopyUtil.java  |  4 ++-
 .../kiwi/sparql/builder/SQLBuilder.java         | 32 +++++++++-----------
 .../sparql/builder/collect/ConditionFinder.java |  8 +++--
 .../sparql/builder/collect/DistinctFinder.java  | 10 ++++--
 .../sparql/builder/collect/ExtensionFinder.java |  9 ++++--
 .../sparql/builder/collect/GroupFinder.java     |  9 ++++--
 .../sparql/builder/collect/OrderFinder.java     |  8 +++--
 .../sparql/builder/collect/VariableFinder.java  |  7 +++--
 .../kiwi/sparql/builder/model/SQLVariable.java  |  8 +++++
 .../evaluation/KiWiEvaluationStrategy.java      | 13 +++++---
 10 files changed, 73 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/marmotta/blob/3828f654/libraries/kiwi/kiwi-loader/src/main/java/org/apache/marmotta/kiwi/loader/pgsql/PGCopyUtil.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-loader/src/main/java/org/apache/marmotta/kiwi/loader/pgsql/PGCopyUtil.java b/libraries/kiwi/kiwi-loader/src/main/java/org/apache/marmotta/kiwi/loader/pgsql/PGCopyUtil.java
index d6a8387..a749509 100644
--- a/libraries/kiwi/kiwi-loader/src/main/java/org/apache/marmotta/kiwi/loader/pgsql/PGCopyUtil.java
+++ b/libraries/kiwi/kiwi-loader/src/main/java/org/apache/marmotta/kiwi/loader/pgsql/PGCopyUtil.java
@@ -82,7 +82,9 @@ public class PGCopyUtil {
 
 
     // PostgreSQL expects the empty string to be quoted to distinguish between null and empty
-    final static CsvPreference nodesPreference = new CsvPreference.Builder('"', ',', "\r\n").useEncoder(new DefaultCsvEncoder() {
+    final static CsvPreference nodesPreference = new CsvPreference
+            .Builder('"', ',', "\r\n")
+            .useEncoder(new DefaultCsvEncoder() {
         /**
          * {@inheritDoc}
          */

http://git-wip-us.apache.org/repos/asf/marmotta/blob/3828f654/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java
index 3b2da50..45b2340 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLBuilder.java
@@ -203,25 +203,24 @@ public class SQLBuilder {
         limit    = new LimitFinder(query).limit;
 
         // check if query is distinct
-        distinct = new DistinctFinder(query).distinct;
+        distinct = DistinctFinder.find(query);
 
         // find the ordering
-        orderby  = new OrderFinder(query).elements;
+        orderby = OrderFinder.find(query);
 
         // find the grouping
-        GroupFinder gf  = new GroupFinder(query);
-        groupLabels      = gf.bindings;
+        groupLabels = GroupFinder.find(query);
 
         // find extensions (BIND)
-        extensions = new ExtensionFinder(query).elements;
+        extensions = ExtensionFinder.find(query);
 
         // find variables that need to be resolved
-        resolveVariables = new ConditionFinder(query).neededVariables;
+        resolveVariables = ConditionFinder.find(query);
 
         int variableCount = 0;
 
         // find all variables that have been bound already, even if they do not appear in a pattern
-        for(Var v : new VariableFinder(query).variables) {
+        for(Var v : VariableFinder.find(query)) {
             if (v.hasValue() && !isConst(v)) {
                 SQLVariable sv = variables.get(v.getName());
                 if(sv == null) {
@@ -232,7 +231,7 @@ public class SQLBuilder {
                         sv.setProjectionType(ValueType.NODE);
                     }
 
-                    sv.getExpressions().add(""+ converter.convert(v.getValue()).getId());
+                    sv.addExpression(""+ converter.convert(v.getValue()).getId());
 
                     addVariable(sv);
                 }
@@ -340,7 +339,7 @@ public class SQLBuilder {
             }
 
             try {
-                sv.getExpressions().add(evaluateExpression(ext.getExpr(), ValueType.NODE));
+                sv.addExpression(evaluateExpression(ext.getExpr(), ValueType.NODE));
                 if(sv.getProjectionType() == ValueType.NODE && getProjectionType(ext.getExpr()) != ValueType.NODE) {
                     sv.setProjectionType(getProjectionType(ext.getExpr()));
                 }
@@ -364,7 +363,7 @@ public class SQLBuilder {
                         String pName = p.getName();
 
                         // if the variable has been used before, add a join condition to the first occurrence
-                        if (!sv.getExpressions().isEmpty()) {
+                        if (sv.hasExpressions()) {
                             // case distinction: is this variable projected as node or as another value in an extension?
                             // if it is a value, we need to refer to the corresponding typed column of the node, otherwise
                             // to the node ID (field ID is sufficient)
@@ -394,7 +393,7 @@ public class SQLBuilder {
                             }
                         }
 
-                        sv.getExpressions().add(pName + "." + positions[i]);
+                        sv.addExpression(pName + "." + positions[i]);
                     }
                 }
             }
@@ -411,7 +410,7 @@ public class SQLBuilder {
                         sq.addCondition(sv.getExpressions().get(0) + " = " + sqName + "." + sq_v.getName());
                     }
 
-                    sv.getExpressions().add(sqName + "." + sq_v.getName());
+                    sv.addExpression(sqName + "." + sq_v.getName());
 
                 }
             }
@@ -421,7 +420,7 @@ public class SQLBuilder {
             Var v = new Var(ext.getName());
 
             SQLVariable sv = variables.get(v.getName());
-            sv.getExpressions().add(evaluateExpression(ext.getExpr(), ValueType.NODE));
+            sv.addExpression(evaluateExpression(ext.getExpr(), ValueType.NODE));
         }
 
         // find context restrictions of patterns and match them with potential restrictions given in the
@@ -529,8 +528,7 @@ public class SQLBuilder {
                         }
 
                         if (nodeId >= 0) {
-                            String condition = pName + "." + positions[i] + " = " + nodeId;
-                            p.addCondition(condition);
+                            p.addCondition(pName + "." + positions[i] + " = " + nodeId);
                         }
                     }
                 }
@@ -618,7 +616,7 @@ public class SQLBuilder {
             if(v.getProjectionType() != ValueType.NONE && (projectedVars.isEmpty() || projectedVars.contains(v.getSparqlName()))) {
 
 
-                if (v.getExpressions() != null && v.getExpressions().size() > 0) {
+                if (v.hasExpressions()) {
                     String fromName = v.getExpressions().get(0);
                     projections.add(fromName + " AS " + projectedName);
                 }
@@ -701,7 +699,7 @@ public class SQLBuilder {
             for(String v : bindings.getBindingNames()) {
                 SQLVariable sv = variables.get(v);
 
-                if(sv != null && !sv.getExpressions().isEmpty()) {
+                if(sv != null && sv.hasExpressions()) {
                     List<String> vNames = sv.getExpressions();
                     String vName = vNames.get(0);
                     Value binding = converter.convert(bindings.getValue(v));

http://git-wip-us.apache.org/repos/asf/marmotta/blob/3828f654/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ConditionFinder.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ConditionFinder.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ConditionFinder.java
index 64fd830..a167b51 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ConditionFinder.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ConditionFinder.java
@@ -35,12 +35,16 @@ public class ConditionFinder extends QueryModelVisitorBase<RuntimeException> {
     int valueNeeded = 0;
 
     // set of variables that need a value to be resolved (used by ExtensionElem resolution)
-    public Set<String> neededVariables = new HashSet<>();
+    private Set<String> neededVariables = new HashSet<>();
 
-    public ConditionFinder(TupleExpr expr) {
+    private ConditionFinder(TupleExpr expr) {
         expr.visit(this);
     }
 
+    public static Set<String> find(TupleExpr expr) {
+        return new ConditionFinder(expr).neededVariables;
+    }
+
     @Override
     public void meet(Var node) throws RuntimeException {
         if(valueNeeded > 0) {

http://git-wip-us.apache.org/repos/asf/marmotta/blob/3828f654/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/DistinctFinder.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/DistinctFinder.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/DistinctFinder.java
index 31fb293..2074e2f 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/DistinctFinder.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/DistinctFinder.java
@@ -20,6 +20,8 @@ package org.apache.marmotta.kiwi.sparql.builder.collect;
 import org.openrdf.query.algebra.*;
 import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
 
+import java.util.List;
+
 /**
 * Find distinct/reduced in a tuple expression.
 *
@@ -27,12 +29,16 @@ import org.openrdf.query.algebra.helpers.QueryModelVisitorBase;
 */
 public class DistinctFinder extends QueryModelVisitorBase<RuntimeException> {
 
-    public boolean distinct = false;
+    private boolean distinct = false;
 
-    public DistinctFinder(TupleExpr expr) {
+    private DistinctFinder(TupleExpr expr) {
         expr.visit(this);
     }
 
+    public static boolean find(TupleExpr expr) {
+        return new DistinctFinder(expr).distinct;
+    }
+
     @Override
     public void meet(Distinct node) throws RuntimeException {
         distinct = true;

http://git-wip-us.apache.org/repos/asf/marmotta/blob/3828f654/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ExtensionFinder.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ExtensionFinder.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ExtensionFinder.java
index 75579d7..d6b7cbe 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ExtensionFinder.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/ExtensionFinder.java
@@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 /**
 * Find the offset and limit values in a tuple expression
@@ -34,12 +35,16 @@ public class ExtensionFinder extends QueryModelVisitorBase<RuntimeException> {
 
     private static Logger log = LoggerFactory.getLogger(ExtensionFinder.class);
 
-    public List<ExtensionElem> elements = new ArrayList<>();
+    private List<ExtensionElem> elements = new ArrayList<>();
 
-    public ExtensionFinder(TupleExpr expr) {
+    private ExtensionFinder(TupleExpr expr) {
         expr.visit(this);
     }
 
+    public static List<ExtensionElem> find(TupleExpr expr) {
+        return new ExtensionFinder(expr).elements;
+    }
+
     @Override
     public void meet(Extension node) throws RuntimeException {
         // visit children before, as there might be dependencies

http://git-wip-us.apache.org/repos/asf/marmotta/blob/3828f654/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/GroupFinder.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/GroupFinder.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/GroupFinder.java
index 81fa0bf..ae52df8 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/GroupFinder.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/GroupFinder.java
@@ -32,13 +32,16 @@ import java.util.Set;
 */
 public class GroupFinder extends QueryModelVisitorBase<RuntimeException> {
 
-    public Set<String>     bindings = new HashSet<>();
-    public List<GroupElem> elements = new ArrayList<>();
+    private Set<String>     bindings = new HashSet<>();
+    private List<GroupElem> elements = new ArrayList<>();
 
-    public GroupFinder(TupleExpr expr) {
+    private GroupFinder(TupleExpr expr) {
         expr.visit(this);
     }
 
+    public static Set<String> find(TupleExpr expr) {
+        return new GroupFinder(expr).bindings;
+    }
     @Override
     public void meet(Group node) throws RuntimeException {
         bindings.addAll(node.getGroupBindingNames());

http://git-wip-us.apache.org/repos/asf/marmotta/blob/3828f654/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/OrderFinder.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/OrderFinder.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/OrderFinder.java
index dc5d2f2..97349ff 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/OrderFinder.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/OrderFinder.java
@@ -30,12 +30,16 @@ import java.util.List;
 */
 public class OrderFinder extends QueryModelVisitorBase<RuntimeException> {
 
-    public List<OrderElem> elements = new ArrayList<>();
+    private List<OrderElem> elements = new ArrayList<>();
 
-    public OrderFinder(TupleExpr expr) {
+    private OrderFinder(TupleExpr expr) {
         expr.visit(this);
     }
 
+    public static List<OrderElem> find(TupleExpr expr) {
+        return new OrderFinder(expr).elements;
+    }
+
     @Override
     public void meet(Order node) throws RuntimeException {
         elements.addAll(node.getElements());

http://git-wip-us.apache.org/repos/asf/marmotta/blob/3828f654/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/VariableFinder.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/VariableFinder.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/VariableFinder.java
index 2cc7f76..81d2b14 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/VariableFinder.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/collect/VariableFinder.java
@@ -32,12 +32,15 @@ import java.util.Set;
 */
 public class VariableFinder extends QueryModelVisitorBase<RuntimeException> {
 
-    public Set<Var> variables = new HashSet<>();
+    private Set<Var> variables = new HashSet<>();
 
-    public VariableFinder(TupleExpr expr) {
+    private VariableFinder(TupleExpr expr) {
         expr.visit(this);
     }
 
+    public static Set<Var> find(TupleExpr expr) {
+        return new VariableFinder(expr).variables;
+    }
 
     @Override
     public void meet(Var node) throws RuntimeException {

http://git-wip-us.apache.org/repos/asf/marmotta/blob/3828f654/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/model/SQLVariable.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/model/SQLVariable.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/model/SQLVariable.java
index 23715fe..f187e1e 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/model/SQLVariable.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/model/SQLVariable.java
@@ -113,10 +113,18 @@ public class SQLVariable  implements Cloneable{
         return bindings;
     }
 
+    public void addExpression(String e) {
+        expressions.add(e);
+    }
+
     public List<String> getExpressions() {
         return expressions;
     }
 
+    public boolean hasExpressions() {
+        return expressions != null && !expressions.isEmpty();
+    }
+
     public ValueType getProjectionType() {
         return projectionType;
     }

http://git-wip-us.apache.org/repos/asf/marmotta/blob/3828f654/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategy.java
----------------------------------------------------------------------
diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategy.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategy.java
index 6315886..a198ebc 100644
--- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategy.java
+++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/evaluation/KiWiEvaluationStrategy.java
@@ -240,7 +240,8 @@ public class KiWiEvaluationStrategy extends EvaluationStrategyImpl{
                         long[] nodeIds = new long[vars.size()];
                         for(int i=0; i<vars.size(); i++) {
                             SQLVariable sv = vars.get(i);
-                            if(sv.getProjectionType() == ValueType.NODE && (builder.getProjectedVars().isEmpty() || builder.getProjectedVars().contains(sv.getSparqlName()))) {
+                            if(sv.getProjectionType() == ValueType.NODE && (builder.getProjectedVars().isEmpty()
+                                    || builder.getProjectedVars().contains(sv.getSparqlName()))) {
                                 nodeIds[i] = row.getLong(sv.getName());
                             }
                         }
@@ -251,14 +252,17 @@ public class KiWiEvaluationStrategy extends EvaluationStrategyImpl{
                             if(nodes[i] != null) {
                                 // resolved node
                                 resultRow.addBinding(sv.getSparqlName(), nodes[i]);
-                            } else if(sv.getProjectionType() != ValueType.NONE && (builder.getProjectedVars().isEmpty() || builder.getProjectedVars().contains(sv.getSparqlName()))) {
+                            } else if(sv.getProjectionType() != ValueType.NONE && (builder.getProjectedVars().isEmpty()
+                                    || builder.getProjectedVars().contains(sv.getSparqlName()))) {
                                 // literal value
                                 String svalue;
                                 switch (sv.getProjectionType()) {
                                     case URI:
                                         svalue = row.getString(sv.getName());
                                         if(svalue != null)
-                                            resultRow.addBinding(sv.getSparqlName(), new URIImpl(svalue));
+                                            try {
+                                                resultRow.addBinding(sv.getSparqlName(), new URIImpl(svalue));
+                                            } catch (IllegalArgumentException ex) {} // illegal URI unbound
                                         break;
                                     case BNODE:
                                         svalue = row.getString(sv.getName());
@@ -373,7 +377,8 @@ public class KiWiEvaluationStrategy extends EvaluationStrategyImpl{
                 });
 
 
-                return new ExceptionConvertingIteration<BindingSet, QueryEvaluationException>(new CloseableIteratorIteration<BindingSet, SQLException>(Iterations.asList(it).iterator())) {
+                return new ExceptionConvertingIteration<BindingSet, QueryEvaluationException>(
+                        new CloseableIteratorIteration<BindingSet, SQLException>(Iterations.asList(it).iterator())) {
                     @Override
                     protected QueryEvaluationException convert(Exception e) {
                         return new QueryEvaluationException(e);