Repository: marmotta Updated Branches: refs/heads/develop d7935fcea -> 22a52b32d
code improvements for query construction Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/22a52b32 Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/22a52b32 Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/22a52b32 Branch: refs/heads/develop Commit: 22a52b32d476176c83f503e99ae76bec69078a90 Parents: d7935fc Author: Sebastian Schaffert <[email protected]> Authored: Wed Oct 8 15:24:50 2014 +0200 Committer: Sebastian Schaffert <[email protected]> Committed: Wed Oct 8 15:24:50 2014 +0200 ---------------------------------------------------------------------- .../kiwi/sparql/builder/SQLBuilder.java | 44 ++++++++++---------- .../kiwi/sparql/builder/SQLSubQuery.java | 6 ++- .../persistence/KiWiSparqlConnection.java | 2 +- .../kiwi/sparql/test/KiWiSparqlJoinTest.java | 38 ----------------- 4 files changed, 26 insertions(+), 64 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/22a52b32/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 cba14a9..bf55800 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 @@ -462,9 +462,7 @@ public class SQLBuilder { if (v instanceof KiWiNode) { long nodeId = ((KiWiNode) v).getId(); - cCond.append(varName); - cCond.append(".context = "); - cCond.append(nodeId); + cCond.append(varName).append(".context = ").append(nodeId); if (it.hasNext()) { cCond.append(" OR "); @@ -513,7 +511,7 @@ public class SQLBuilder { } - private String buildSelectClause() { + private StringBuilder buildSelectClause() { List<String> projections = new ArrayList<>(); // enforce order in SELECT part, we need this for merging UNION subqueries @@ -547,11 +545,11 @@ public class SQLBuilder { selectClause.append(CollectionUtils.fold(projections,", ")); - return selectClause.toString(); + return selectClause; } - private String buildFromClause() { + private StringBuilder buildFromClause() { // build the from-clause of the query; the from clause is constructed as follows: // 1. for each pattern P, there will be a "KiWiTriple P" in the from clause // 2. for each variable V in P occurring in @@ -568,11 +566,11 @@ public class SQLBuilder { } } - return fromClause.toString(); + return fromClause; } - private String buildWhereClause() { + private StringBuilder buildWhereClause() { // build the where clause as follows: // 1. iterate over all patterns and for each resource and literal field in subject, // property, object, or context, and set a query condition according to the @@ -623,10 +621,10 @@ public class SQLBuilder { } } } - return whereClause.toString(); + return whereClause; } - private String buildOrderClause() { + private StringBuilder buildOrderClause() { StringBuilder orderClause = new StringBuilder(); if(orderby.size() > 0) { for(Iterator<OrderElem> it = orderby.iterator(); it.hasNext(); ) { @@ -644,10 +642,10 @@ public class SQLBuilder { orderClause.append(" \n"); } - return orderClause.toString(); + return orderClause; } - private String buildGroupClause() { + private StringBuilder buildGroupClause() { StringBuilder groupClause = new StringBuilder(); if(groupLabels.size() > 0) { for(Iterator<String> it = groupLabels.iterator(); it.hasNext(); ) { @@ -670,11 +668,11 @@ public class SQLBuilder { groupClause.append(" \n"); } - return groupClause.toString(); + return groupClause; } - private String buildLimitClause() { + private StringBuilder buildLimitClause() { // construct limit and offset StringBuilder limitClause = new StringBuilder(); if(limit > 0) { @@ -687,7 +685,7 @@ public class SQLBuilder { limitClause.append(offset); limitClause.append(" "); } - return limitClause.toString(); + return limitClause; } @@ -1163,13 +1161,13 @@ public class SQLBuilder { * * @return */ - public String build() { - String selectClause = buildSelectClause(); - String fromClause = buildFromClause(); - String whereClause = buildWhereClause(); - String orderClause = buildOrderClause(); - String groupClause = buildGroupClause(); - String limitClause = buildLimitClause(); + public StringBuilder build() { + StringBuilder selectClause = buildSelectClause(); + StringBuilder fromClause = buildFromClause(); + StringBuilder whereClause = buildWhereClause(); + StringBuilder orderClause = buildOrderClause(); + StringBuilder groupClause = buildGroupClause(); + StringBuilder limitClause = buildLimitClause(); StringBuilder queryString = new StringBuilder(); @@ -1197,7 +1195,7 @@ public class SQLBuilder { log.debug("SPARQL -> SQL node variable mappings:\n {}", variables); log.debug("projected variables:\n {}", projectedVars); - return queryString.toString(); + return queryString; } } http://git-wip-us.apache.org/repos/asf/marmotta/blob/22a52b32/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLSubQuery.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLSubQuery.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLSubQuery.java index af8444c..d2bb74a 100644 --- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLSubQuery.java +++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/builder/SQLSubQuery.java @@ -86,9 +86,11 @@ public class SQLSubQuery extends SQLAbstractSubquery { for(VariableMapping var : getJoinFields()) { fromClause.append(" LEFT JOIN nodes AS "); // outer join because binding might be NULL - fromClause.append(alias + "_" + var.getParentName()); + fromClause.append(alias).append("_").append(var.getParentName()); - fromClause.append(" ON " + alias + "." + var.getSubqueryName() + " = " + alias + "_" + var.getParentName() + ".id "); + fromClause + .append(" ON ").append(alias).append(".").append(var.getSubqueryName()) + .append(" = ").append(alias).append("_").append(var.getParentName()).append(".id "); } return fromClause.toString(); http://git-wip-us.apache.org/repos/asf/marmotta/blob/22a52b32/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/persistence/KiWiSparqlConnection.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/persistence/KiWiSparqlConnection.java b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/persistence/KiWiSparqlConnection.java index d242b3e..1f86982 100644 --- a/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/persistence/KiWiSparqlConnection.java +++ b/libraries/kiwi/kiwi-sparql/src/main/java/org/apache/marmotta/kiwi/sparql/persistence/KiWiSparqlConnection.java @@ -88,7 +88,7 @@ public class KiWiSparqlConnection { try { final SQLBuilder builder = new SQLBuilder(join, bindings, dataset, valueFactory, parent.getDialect(), projectedVars); - final PreparedStatement queryStatement = parent.getJDBCConnection().prepareStatement(builder.build()); + final PreparedStatement queryStatement = parent.getJDBCConnection().prepareStatement(builder.build().toString()); if (parent.getDialect().isCursorSupported()) { queryStatement.setFetchSize(parent.getConfiguration().getCursorSize()); } http://git-wip-us.apache.org/repos/asf/marmotta/blob/22a52b32/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java index 2d7d7b4..b3b2e2e 100644 --- a/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java +++ b/libraries/kiwi/kiwi-sparql/src/test/java/org/apache/marmotta/kiwi/sparql/test/KiWiSparqlJoinTest.java @@ -351,44 +351,6 @@ public class KiWiSparqlJoinTest { testUpdate("update01.sparql", FOAF.name); } - @Ignore("test for MARMOTTA-548/SES-2109") - @Test - public void testIRI() throws Exception { - String queryString = "SELECT * WHERE <http://it.dbpedia.org/resource/Acigné> ?p ?o } LIMIT 1"; - - RepositoryConnection con1 = repository.getConnection(); - RepositoryConnection con2 = reference.getConnection(); - try { - con2.begin(); - - TupleQuery query2 = con2.prepareTupleQuery(QueryLanguage.SPARQL, queryString); - TupleQueryResult result2 = query2.evaluate(); - - con2.commit(); - - Assume.assumeTrue(result2.hasNext()); - - con1.begin(); - - TupleQuery query1 = con1.prepareTupleQuery(QueryLanguage.SPARQL, queryString); - TupleQueryResult result1 = query1.evaluate(); - - con1.commit(); - - Assert.assertTrue(result1.hasNext()); - - - compareResults(result1, result2); - - } catch(RepositoryException ex) { - con1.rollback(); - } finally { - con1.close(); - con2.close(); - } - } - - // fulltext search filter @Test
