diff --git a/lib/sparql/sparql.js b/lib/sparql/sparql.js index 3c31ed128..79bba63d3 100644 --- a/lib/sparql/sparql.js +++ b/lib/sparql/sparql.js @@ -127,7 +127,11 @@ function query (sparql, graphUri, accept, explorer = false) { function queryJson (sparql, graphUri, explorer = false) { // const timer = Timer('sparql query') - return query(sparql, graphUri, 'application/sparql-results+json', explorer).then(parseResult, handleError) + if (sparql.includes('LIMIT')) { + return query(sparql, graphUri, 'application/sparql-results+json', explorer).then(parseResult, handleError) + } else { + return queryJsonStaggered(sparql, graphUri, explorer) + } function parseResult (res) { // timer() @@ -154,18 +158,25 @@ function queryJson (sparql, graphUri, explorer = false) { } } -function queryJsonStaggered (sparql, graphUri) { +function queryJsonStaggered (sparql, graphUri, explorer = false) { var offset = 0 var limit = config.get('staggeredQueryLimit') var resultsUnion = [] + if (!sparql.includes('ORDER BY')) { + let bound = sparql.match(/\?[A-Za-z0-9_]+/) + if (bound !== null) { + let term = bound[0] + sparql = sparql + ' ORDER BY ' + term + } + } return performQuery() function performQuery () { console.log('queryJsonStaggered: offset ' + offset + ', limit ' + limit + ', ' + resultsUnion.length + ' results so far') - return queryJson(sparql + ' OFFSET ' + offset + ' LIMIT ' + limit, graphUri).then((results) => { + return queryJson(sparql + ' OFFSET ' + offset + ' LIMIT ' + limit, graphUri, explorer).then((results) => { // console.log('qj results') // console.log(JSON.stringify(results))