/** * Gets the next row from the underlying SELECT results */ @Override protected Binding moveNext() { // No null check here because superclass will not call us after we are // closed and set to null if (this.nextResults.isEmpty()) { // Need to go to underlying result set this.previousResults.push(this.innerResults.nextBinding()); } else { // Continue through results we've previously seen and moved backwards from this.previousResults.push(this.nextResults.pop()); } return this.previousResults.peek(); }
/** * Gets the next row from the underlying SELECT results */ @Override protected Binding moveNext() { // No null check here because superclass will not call us after we are // closed and set to null if (this.nextResults.isEmpty()) { // Need to go to underlying result set this.previousResults.push(this.innerResults.nextBinding()); } else { // Continue through results we've previously seen and moved backwards from this.previousResults.push(this.nextResults.pop()); } return this.previousResults.peek(); }
private static ResultSetRewindable unique(ResultSetRewindable results) { // VERY crude. Utilises the fact that bindings have value equality. List<Binding> x = new ArrayList<>() ; Set<Binding> seen = new HashSet<>() ; for ( ; results.hasNext() ; ) { Binding b = results.nextBinding() ; if ( seen.contains(b) ) continue ; seen.add(b) ; x.add(b) ; } QueryIterator qIter = new QueryIterPlainWrapper(x.iterator()) ; ResultSet rs = new ResultSetStream(results.getResultVars(), ModelFactory.createDefaultModel(), qIter) ; return ResultSetFactory.makeRewindable(rs) ; }
public DifferenceResultSet(final ResultSet rs1, final ResultSet rs2) { vars = rs1.getResultVars(); index = 0; final ResultSetRewindable real = ResultSetFactory.makeRewindable(rs1); final ResultSetRewindable expected = ResultSetFactory.makeRewindable(rs2); real.reset(); while (real.hasNext()) { final Binding b1 = real.nextBinding(); expected.reset(); boolean toAdd = true; while (expected.hasNext()) { final Binding b2 = expected.nextBinding(); if (BindingBase.equals(b1, b2)) { toAdd = false; break; } } if (toAdd) solutions.add(b1); } }
private ResultSetRewindable convertToStrings(ResultSetRewindable resultsActual) { List<Binding> bindings = new ArrayList<>() ; while(resultsActual.hasNext()) { Binding b = resultsActual.nextBinding() ; BindingMap b2 = BindingFactory.create() ; for ( String vn : resultsActual.getResultVars() ) { Var v = Var.alloc(vn) ; Node n = b.get(v) ; String s ; if ( n == null ) s = "" ; else if ( n.isBlank() ) s = "_:"+n.getBlankNodeLabel() ; else s = NodeFunctions.str(n) ; b2.add(v, NodeFactory.createLiteral(s)) ; } bindings.add(b2) ; } ResultSet rs = new ResultSetStream(resultsActual.getResultVars(), null, new QueryIterPlainWrapper(bindings.iterator())) ; return ResultSetFactory.makeRewindable(rs) ; }