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 <[email protected]> Authored: Mon Aug 22 21:53:02 2016 +0200 Committer: Sebastian Schaffert <[email protected]> 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);
