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);