private QueryIterator resultsToQueryIterator( Binding binding, Node s, Node score, Node literal, Collection<TextHit> results, ExecutionContext execCxt) { Var sVar = Var.isVar(s) ? Var.alloc(s) : null; Var scoreVar = (score == null) ? null : Var.alloc(score); Var literalVar = (literal == null) ? null : Var.alloc(literal); Function<TextHit, Binding> converter = (TextHit hit) -> { if (score == null && literal == null) return sVar != null ? BindingFactory.binding(binding, sVar, hit.getNode()) : BindingFactory.binding(binding); BindingMap bmap = BindingFactory.create(binding); if (sVar != null) bmap.add(sVar, hit.getNode()); if (scoreVar != null) bmap.add(scoreVar, NodeFactoryExtra.floatToNode(hit.getScore())); if (literalVar != null) bmap.add(literalVar, hit.getLiteral()); return bmap; }; Iterator<Binding> bIter = Iter.map(results.iterator(), converter); QueryIterator qIter = new QueryIterPlainWrapper(bIter, execCxt); return qIter; }
@Override public QueryIterator execEvaluated( final Binding binding, PropFuncArg argSubject, Node predicate, PropFuncArg argObject, ExecutionContext execCxt) { // check subject is a variable. if (!argSubject.getArg().isVariable()) throw new QueryExecException("Subject not a variable"); final Var var = Var.alloc(argSubject.getArg()); if (!argObject.getArg().isLiteral()) throw new QueryExecException("Subject not a literal"); String searchTerm = argObject.getArg().getLiteralLexicalForm(); Search search = searchEngine(); Iterator<String> x = search.search(searchTerm); Iter<String> iter = Iter.iter(x); QueryIterator qIter = new QueryIterPlainWrapper( iter.map( (item) -> { return BindingFactory.binding(binding, var, NodeFactory.createURI(item)); })); return qIter; }
private static Set<SqlTable> tables(Set<SqlColumn> cols) { return Iter.toSet(Iter.map(cols.iterator(), SqlColumn::getTable)); }