Skip to content

Commit

Permalink
JENA-1544: Merge commit 'refs/pull/417/head' of https://github.com/ap…
Browse files Browse the repository at this point in the history
  • Loading branch information
afs committed May 12, 2018
2 parents 8709451 + 11686e7 commit 03ad839
Show file tree
Hide file tree
Showing 9 changed files with 100 additions and 363 deletions.
3 changes: 2 additions & 1 deletion jena-arq/src/main/java/org/apache/jena/query/Query.java
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,8 @@ public boolean hasDatasetDescription()
/** Return a dataset description (FROM/FROM NAMED clauses) for the query. */
public DatasetDescription getDatasetDescription()
{
if ( ! hasDatasetDescription() ) return null;
if ( ! hasDatasetDescription() )
return null;

DatasetDescription description = new DatasetDescription() ;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,16 @@ public static Dataset dynamicDataset(DatasetDescription description, Dataset ds,

/** Given a DatasetGraph and a query, form a DatasetGraph that
* is the dynamic dataset from the query.
* Returns the original DatasetGraph if the dataset description is null.
* Returns the original DatasetGraph if the dataset description is null or empty.
*/
public static DatasetGraph dynamicDataset(DatasetDescription description, DatasetGraph dsg, boolean defaultUnionGraph)
{
if ( description == null )
return dsg ;
// //An empty description means leave the dataset as-is
// if (description.getDefaultGraphURIs().size() == 0 && description.getNamedGraphURIs().size() == 0) {
// return dsg;
// }
//An empty description means leave the dataset as-is
if (description.isEmpty() )
return dsg;

Set<Node> defaultGraphs = NodeUtils.convertToNodes(description.getDefaultGraphURIs()) ;
Set<Node> namedGraphs = NodeUtils.convertToNodes(description.getNamedGraphURIs()) ;
return dynamicDataset(defaultGraphs, namedGraphs, dsg, defaultUnionGraph) ;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,28 @@
import org.apache.jena.atlas.lib.Closeable ;
import org.apache.jena.atlas.logging.Log ;
import org.apache.jena.query.Query ;
import org.apache.jena.query.QueryExecException;
import org.apache.jena.riot.system.IRIResolver;
import org.apache.jena.sparql.ARQConstants ;
import org.apache.jena.sparql.algebra.Algebra ;
import org.apache.jena.sparql.algebra.Op ;
import org.apache.jena.sparql.core.DatasetDescription;
import org.apache.jena.sparql.core.DatasetGraph ;
import org.apache.jena.sparql.core.DynamicDatasets;
import org.apache.jena.sparql.core.Substitute ;
import org.apache.jena.sparql.engine.binding.Binding ;
import org.apache.jena.sparql.engine.binding.BindingRoot ;
import org.apache.jena.sparql.mgt.Explain ;
import org.apache.jena.sparql.mgt.QueryEngineInfo ;
import org.apache.jena.sparql.util.Context ;
import org.apache.jena.sparql.util.DatasetUtils;

/** Main part of a QueryEngine - something that takes responsibility for a complete query execution */
public abstract class QueryEngineBase implements OpEval, Closeable
{
public final static QueryEngineInfo queryEngineInfo = new QueryEngineInfo() ;
// See also ExecutinContext.getDataset()
// See also ExecutionContext.getDataset()
protected final DatasetGraph originalDataset ;
protected DatasetGraph dataset = null ;
protected Context context ;
private Binding startBinding ;
Expand All @@ -45,20 +51,41 @@ public abstract class QueryEngineBase implements OpEval, Closeable
private Op queryOp = null ;
private Plan plan = null ;

protected QueryEngineBase(Query query,
DatasetGraph dataset,
Binding input,
Context cxt)
{
this(dataset, input, cxt) ;
protected QueryEngineBase(Query query, DatasetGraph dsg, Binding input, Context cxt) {
this(dsg, input, cxt) ;
this.query = query ;
query.setResultVars() ;
// Unoptimized so far.
setOp(createOp(query)) ;
dataset = prepareDataset(dsg, query);
}

protected QueryEngineBase(Op op, DatasetGraph dataset, Binding input, Context cxt)
{

private DatasetGraph prepareDataset(DatasetGraph originalDataset, Query query) {
DatasetDescription dsDesc = DatasetDescription.create(query, context) ;
DatasetGraph dsg = originalDataset;

if ( dsg != null ) {
if ( dsDesc != null ) {
if ( query.hasDatasetDescription() )
dsg = dynamicDataset(dsDesc, dsg, false);
}
return dsg;
}

// No DatasetGraph
if ( ! query.hasDatasetDescription() )
throw new QueryExecException("No dataset and no dataset description for query");

// DatasetDescription : Build it.
String baseURI = query.getBaseURI() ;
if ( baseURI == null )
baseURI = IRIResolver.chooseBaseURI().toString() ;

dsg = DatasetUtils.createDatasetGraph(dsDesc, baseURI ) ;
return dsg ;
}

protected QueryEngineBase(Op op, DatasetGraph dataset, Binding input, Context cxt) {
this(dataset, input, cxt) ;
// Ensure context setup - usually done in QueryExecutionBase
// so it can be changed after initialization.
Expand All @@ -68,13 +95,11 @@ protected QueryEngineBase(Op op, DatasetGraph dataset, Binding input, Context cx
setOp(op) ;
}

private QueryEngineBase(DatasetGraph dataset, Binding input, Context context)
{
private QueryEngineBase(DatasetGraph dataset, Binding input, Context context) {
this.context = context ;
this.dataset = dataset ; // Maybe null e.g. in query

if ( input == null )
{
this.originalDataset = dataset ;
this.dataset = dataset ;
if ( input == null ) {
Log.warn(this, "Null initial input") ;
input = BindingRoot.create() ;
}
Expand Down Expand Up @@ -120,6 +145,20 @@ protected Op createOp(Query query)
return op ;
}

/** Calculate a dataset based on FROM and FROM NAMED in the query */
protected DatasetGraph dynamicDataset(DatasetDescription dsDesc, DatasetGraph dataset, boolean unionDftGraph) {
return DynamicDatasets.dynamicDataset(dsDesc, dataset, unionDftGraph) ;
}

/**
* Return whether the dataset to execute against is the original one, or a
* DatasetDescription modified one (including one for provided then the dataset was
* null).
*/
protected boolean isDynamicDataset() {
return originalDataset != dataset;
}

// Record the query operation as it goes pass and call the actual worker
@Override
final
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import org.apache.jena.graph.Triple;
import org.apache.jena.query.* ;
import org.apache.jena.rdf.model.* ;
import org.apache.jena.riot.system.IRIResolver;
import org.apache.jena.shared.PrefixMapping;
import org.apache.jena.sparql.ARQConstants;
import org.apache.jena.sparql.core.DatasetGraph;
Expand All @@ -52,19 +51,20 @@
import org.apache.jena.sparql.syntax.ElementGroup;
import org.apache.jena.sparql.syntax.Template;
import org.apache.jena.sparql.util.Context;
import org.apache.jena.sparql.util.DatasetUtils;
import org.apache.jena.sparql.util.ModelUtils;

/** All the SPARQL query result forms made from a graph-level execution object */

public class QueryExecutionBase implements QueryExecution
{
private Query query;
private Dataset dataset;
private QueryEngineFactory qeFactory;
private final Query query;
private final QueryEngineFactory qeFactory;
private final Context context;
private final Dataset dataset;
private final DatasetGraph dsg;

private QueryIterator queryIterator = null;
private Plan plan = null;
private Context context;
private QuerySolution initialBinding = null;

// Set if QueryIterator.cancel has been called
Expand All @@ -86,14 +86,13 @@ public QueryExecutionBase(Query query, Dataset dataset,
Context context, QueryEngineFactory qeFactory) {
this.query = query;
this.dataset = dataset ;
this.context = context ;
this.qeFactory = qeFactory ;
this.dsg = (dataset == null) ? null : dataset.asDatasetGraph() ;
this.context = Context.setupContextExec(context, dsg) ;
init() ;
}

private void init() {
DatasetGraph dsg = (dataset == null) ? null : dataset.asDatasetGraph() ;
context = Context.setupContextExec(context, dsg) ;
if ( query != null )
context.put(ARQConstants.sysCurrentQuery, query) ;
// NB: Setting timeouts via the context after creating a QueryExecutionBase
Expand Down Expand Up @@ -557,7 +556,6 @@ private ResultSet execResultSet() {

public Plan getPlan() {
if ( plan == null ) {
DatasetGraph dsg = prepareDataset(dataset, query);
Binding inputBinding = null;
if ( initialBinding != null )
inputBinding = BindingUtils.asBinding(initialBinding);
Expand Down Expand Up @@ -608,22 +606,6 @@ static private String labelForQuery(Query q) {
@Override
public Query getQuery() { return query ; }

private static DatasetGraph prepareDataset(Dataset dataset, Query query) {
if ( dataset != null )
return dataset.asDatasetGraph();

if ( ! query.hasDatasetDescription() )
//Query.Log.warn(this, "No data for query (no URL, no model)");
throw new QueryExecException("No dataset description for query");

String baseURI = query.getBaseURI() ;
if ( baseURI == null )
baseURI = IRIResolver.chooseBaseURI().toString() ;

DatasetGraph dsg = DatasetUtils.createDatasetGraph(query.getDatasetDescription(), baseURI ) ;
return dsg ;
}

@Override
public void setInitialBinding(QuerySolution startSolution) {
initialBinding = startSolution ;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public QueryEngineMain(Query query, DatasetGraph dataset, Binding input, Context
{
super(query, dataset, input, context) ;
}

@Override
public QueryIterator eval(Op op, DatasetGraph dsg, Binding input, Context context)
{
Expand Down
Loading

0 comments on commit 03ad839

Please sign in to comment.