@Override public void run() { synchronized (lockTimeout) { // Abort query if and only if we are the expected callback. // If the first row has appeared, and we are removing timeout1 // callback, // it still may go off so it needs to check here it's still // wanted. if ( expectedCallback.get() == this ) QueryExecutionBase.this.abort(); } } }
@Override public void setTimeout(long timeout1, TimeUnit timeUnit1, long timeout2, TimeUnit timeUnit2) { // Two timeouts. long x1 = asMillis(timeout1, timeUnit1); long x2 = asMillis(timeout2, timeUnit2); this.timeout1 = x1; if ( timeout2 < 0 ) this.timeout2 = TIMEOUT_UNSET; else this.timeout2 = x2; }
private ResultSet execResultSet() { startQueryIterator(); return asResultSet(queryIterator); }
@Override public Dataset execConstructDataset(Dataset dataset) { DatasetGraph dsg = dataset.asDatasetGraph() ; try { execConstructQuads().forEachRemaining(dsg::add); insertPrefixesInto(dataset); } finally { this.close(); } return dataset ; }
@Override public Model execConstruct(Model model) { checkNotClosed(); try { Iterator<Triple> it = execConstructTriples(); // Prefixes for result insertPrefixesInto(model); while (it.hasNext()) { Triple t = it.next(); Statement stmt = ModelUtils.tripleToStatement(model, t); if ( stmt != null ) model.add(stmt); } } finally { this.close(); } return model; }
protected static QueryExecution make(Query query, Dataset dataset, DatasetGraph dsg, Context context) { if ( dsg == null && dataset != null ) dsg = dataset.asDatasetGraph(); query.setResultVars() ; if ( context == null ) context = ARQ.getContext() ; // .copy done in QueryExecutionBase -> Context.setupContext. QueryEngineFactory f = findFactory(query, dsg, context) ; if ( f == null ) { Log.warn(QueryExecutionFactory.class, "Failed to find a QueryEngineFactory") ; return null ; } return new QueryExecutionBase(query, dataset, dsg, context, f) ; }
@Override public Model execDescribe(Model model) { checkNotClosed() ; if ( ! query.isDescribeType() ) throw new QueryExecException("Attempt to get a DESCRIBE result from a "+labelForQuery(query)+" query") ; ResultSet qRes = execResultSet() ; insertPrefixesInto(model) ; if ( qRes != null ) { for ( ; qRes.hasNext() ; ) { getContext().put(ARQConstants.sysCurrentDataset, getDataset()) ; dh.start(model, getContext()) ; dh.finish(); this.close(); return model;
@Override public Iterator<JsonObject> execJsonItems() { checkNotClosed() ; if ( ! query.isJsonType() ) throw new QueryExecException("Attempt to get a JSON result from a " + labelForQuery(query)+" query") ; startQueryIterator() ; return new JsonIterator(queryIterator, query.getResultVars()) ; }
@Override public boolean execAsk() { checkNotClosed(); if ( !query.isAskType() ) throw new QueryExecException("Attempt to have boolean from a " + labelForQuery(query) + " query"); startQueryIterator(); boolean r; try { // Not has next because setting timeout1 which applies to getting // the first result, not testing for it. queryIterator.next(); r = true; } catch (NoSuchElementException ex) { r = false; } this.close(); return r; }
execInit() ; if ( queryIterator != null ) Log.warn(this, "Query iterator has already been started") ; if ( !isTimeoutSet(timeout1) && !isTimeoutSet(timeout2) ) { queryIterator = getPlan().iterator(); return; if ( !isTimeoutSet(timeout1) && isTimeoutSet(timeout2) ) { timeout2Alarm = alarmClock.add(callback, timeout2) ; queryIterator = getPlan().iterator() ; queryIterator = getPlan().iterator() ;
@Override public ResultSet execSelect() { checkNotClosed(); if ( !query.isSelectType() ) throw new QueryExecException("Attempt to have ResultSet from a " + labelForQuery(query) + " query"); ResultSet rs = execResultSet(); return new ResultSetCheckCondition(rs, this); }
try ( QueryExecution qExec = QueryExecutionFactory.create(query, getModStore().getDataset()) ) { if ( isVerbose() ) PrintSDB.print(((QueryExecutionBase)qExec).getPlan().getOp()) ;
@Override public QueryExecution createQueryExecution(Query query) { // Copied from internals of jena's QueryExecutionFactory.create(query, dataset); query.setResultVars() ; if ( context == null ) context = ARQ.getContext(); // .copy done in QueryExecutionBase -> Context.setupContext. DatasetGraph dsg = null ; if ( dataset != null ) dsg = dataset.asDatasetGraph() ; QueryEngineFactory f = QueryEngineRegistry.get().find(query, dsg, context); if ( f == null ) { Log.warn(QueryExecutionFactory.class, "Failed to find a QueryEngineFactory for query: "+query) ; return null ; } //dataset.begin(ReadWrite.WRITE); return new QueryExecutionBase(query, dataset, context, f) ; }
@Override public Iterator<Quad> execConstructQuads() { checkNotClosed(); if ( ! query.isConstructType() ) throw new QueryExecException("Attempt to get a CONSTRUCT model from a "+labelForQuery(query)+" query") ; // This causes there to be no PROJECT around the pattern. // That in turn, exposes the initial bindings. query.setQueryResultStar(true) ; startQueryIterator() ; Template template = query.getConstructTemplate() ; return TemplateLib.calcQuads(template.getQuads(), queryIterator); }
try(QueryExecution qExec1 = new QueryExecutionBase(query, ds, null, f)) { rs1 = ResultSetFactory.makeRewindable(qExec1.execSelect()) ;
@Override public Iterator<Triple> execConstructTriples() { checkNotClosed(); if ( ! query.isConstructType() ) throw new QueryExecException("Attempt to get a CONSTRUCT model from a "+labelForQuery(query)+" query") ; // This causes there to be no PROJECT around the pattern. // That in turn, exposes the initial bindings. query.setQueryResultStar(true) ; startQueryIterator() ; Template template = query.getConstructTemplate() ; return TemplateLib.calcTriples(template.getTriples(), queryIterator); }
@Override public void setTimeout(long timeout, TimeUnit timeUnit) { // Overall timeout - recorded as (UNSET,N) long x = asMillis(timeout, timeUnit); this.timeout1 = TIMEOUT_UNSET; this.timeout2 = x; }
try(QueryExecution qExec1 = new QueryExecutionBase(query, ds, null, f)) { rs1 = ResultSetFactory.makeRewindable(qExec1.execSelect()) ;
@Override public JsonArray execJson() { checkNotClosed() ; if ( ! query.isJsonType() ) throw new QueryExecException("Attempt to get a JSON result from a " + labelForQuery(query)+" query") ; startQueryIterator() ; JsonArray jsonArray = new JsonArray() ; List<String> resultVars = query.getResultVars() ; while (queryIterator.hasNext()) { Binding binding = queryIterator.next() ; JsonObject jsonObject = new JsonObject() ; for (String resultVar : resultVars) { Node n = binding.get(Var.alloc(resultVar)) ; JsonValue value = RDFTerm2Json.fromNode(n) ; jsonObject.put(resultVar, value) ; } jsonArray.add(jsonObject) ; } return jsonArray ; }
try(QueryExecution qExec1 = new QueryExecutionBase(query, ds, null, f)) { rs1$ = ResultSetFactory.makeRewindable(qExec1.execSelect()) ;