Skip to content

Commit

Permalink
For update requests, avoid creating a sparql query string . This is very
Browse files Browse the repository at this point in the history
inefficient for large queries.
  • Loading branch information
jad-elkhoury committed Nov 29, 2021
1 parent 44f8430 commit 180b741
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,7 @@ public void insertJenaModel(final URI namedGraph, final Model model) {
quadAccumulator.addTriple(triple);
}
final UpdateDataInsert dataInsertUpdate = new UpdateDataInsert(quadAccumulator);
final String queryString = dataInsertUpdate.toString();
final UpdateProcessor up = queryExecutor.prepareSparqlUpdate(queryString);
final UpdateProcessor up = queryExecutor.prepareSparqlUpdate(dataInsertUpdate);
up.execute();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.apache.jena.tdb.TDBFactory;
import org.apache.jena.update.GraphStore;
import org.apache.jena.update.GraphStoreFactory;
import org.apache.jena.update.Update;
import org.apache.jena.update.UpdateExecutionFactory;
import org.apache.jena.update.UpdateFactory;
import org.apache.jena.update.UpdateProcessor;
Expand Down Expand Up @@ -64,13 +65,21 @@ public QueryExecution prepareSparqlQuery(final String query) {
}

@Override
public UpdateProcessor prepareSparqlUpdate(final String query) {
public UpdateProcessor prepareSparqlUpdate(final UpdateRequest updateRequest) {
if(released) {
throw new IllegalStateException("Cannot execute queries after releasing the connection");
}
log.debug("Running update: '{}'", query);
final UpdateRequest update = UpdateFactory.create(query);
return UpdateExecutionFactory.create(update, dataset);
return UpdateExecutionFactory.create(updateRequest, dataset);
}

@Override
public UpdateProcessor prepareSparqlUpdate(final Update update) {
return prepareSparqlUpdate(new UpdateRequest(update));
}

@Override
public UpdateProcessor prepareSparqlUpdate(final String query) {
return prepareSparqlUpdate(UpdateFactory.create(query));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.eclipse.lyo.store.internals.query;

import java.io.InputStream;

/*
* Copyright (c) 2020 Contributors to the Eclipse Foundation
*
Expand All @@ -15,7 +17,9 @@
*/

import org.apache.jena.query.QueryExecution;
import org.apache.jena.update.Update;
import org.apache.jena.update.UpdateProcessor;
import org.apache.jena.update.UpdateRequest;

/**
* QueryExecutor is an interface that allows to run SPARQL queries on different triplestore
Expand All @@ -34,6 +38,22 @@ public interface JenaQueryExecutor {
*/
QueryExecution prepareSparqlQuery(String query);

/**
* Prepares a SPARQL Update processor (write-only).
*
* @param query SPARQL query string
* @return prepared processor
*/
UpdateProcessor prepareSparqlUpdate(final UpdateRequest updateRequest);

/**
* Prepares a SPARQL Update processor (write-only).
*
* @param query SPARQL query string
* @return prepared processor
*/
UpdateProcessor prepareSparqlUpdate(final Update update);

/**
* Prepares a SPARQL Update processor (write-only).
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,16 @@
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.update.Update;
import org.apache.jena.update.UpdateExecutionFactory;
import org.apache.jena.update.UpdateFactory;
import org.apache.jena.update.UpdateProcessor;
import org.apache.jena.update.UpdateRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.InputStream;

/**
* SparqlQueryExecutorImpl is a SPARQL endpoint-based implementation of {@link JenaQueryExecutor}.
Expand Down Expand Up @@ -65,17 +68,27 @@ public QueryExecution prepareSparqlQuery(final String query) {
}

@Override
public UpdateProcessor prepareSparqlUpdate(final String query) {
public UpdateProcessor prepareSparqlUpdate(final UpdateRequest updateRequest) {
if (released) {
throw new IllegalStateException("Cannot execute queries after releasing the connection");
}
return UpdateExecutionFactory.createRemote(
UpdateFactory.create(query),
updateRequest,
updateEndpoint,
client
);
}

@Override
public UpdateProcessor prepareSparqlUpdate(final Update update) {
return prepareSparqlUpdate(new UpdateRequest(update));
}

@Override
public UpdateProcessor prepareSparqlUpdate(final String query) {
return prepareSparqlUpdate(UpdateFactory.create(query));
}

@Override
public void release() {
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@

import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.update.Update;
import org.apache.jena.update.UpdateExecutionFactory;
import org.apache.jena.update.UpdateFactory;
import org.apache.jena.update.UpdateProcessor;
import org.apache.jena.update.UpdateRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -45,9 +47,20 @@ public QueryExecution prepareSparqlQuery(final String query) {
return QueryExecutionFactory.sparqlService(queryEndpoint, query);
}


@Override
public UpdateProcessor prepareSparqlUpdate(final UpdateRequest updateRequest) {
return UpdateExecutionFactory.createRemote(updateRequest, updateEndpoint);
}

@Override
public UpdateProcessor prepareSparqlUpdate(final Update update) {
return prepareSparqlUpdate(new UpdateRequest(update));
}

@Override
public UpdateProcessor prepareSparqlUpdate(final String query) {
return UpdateExecutionFactory.createRemote(UpdateFactory.create(query), updateEndpoint);
return prepareSparqlUpdate(UpdateFactory.create(query));
}

@Override
Expand Down

0 comments on commit 180b741

Please sign in to comment.