in src/main/java/org/apache/sling/jcr/base/internal/mount/ProxyQuery.java [50:181]
public QueryResult execute() throws InvalidQueryException, RepositoryException {
final QueryResult result1 = delegate.execute();
QueryResult result2temp = null;
if (delegate2 != null) {
result2temp = delegate2.execute();
}
final QueryResult result2 = result2temp;
return this.mountSession.wrap(new QueryResult() {
@Override
public String[] getColumnNames() throws RepositoryException {
return result1.getColumnNames();
}
@Override
public RowIterator getRows() throws RepositoryException {
final RowIterator i1 = result1.getRows();
RowIterator i2 = null;
if (result2 != null) {
i2 = result2.getRows();
}
if ( i2 == null || !i2.hasNext() ) {
return i1;
}
if ( !i1.hasNext() ) {
return i2;
}
final List<RowIterator> list = new ArrayList<>();
list.add(i1);
list.add(i2);
@SuppressWarnings({ "unchecked", "rawtypes" })
final Iterator<Row> iter = new ChainedIterator(list.iterator());
return new RowIterator() {
private volatile long position = 0;
@Override
public Object next() {
position++;
return iter.next();
}
@Override
public boolean hasNext() {
return iter.hasNext();
}
@Override
public void skip(long skipNum) {
while (skipNum-- > 0) {
next();
}
}
@Override
public long getSize() {
return -1;
}
@Override
public long getPosition() {
return position;
}
@Override
public Row nextRow() {
position++;
return iter.next();
}
};
}
@Override
public NodeIterator getNodes() throws RepositoryException {
final NodeIterator i1 = result1.getNodes();
NodeIterator i2 = null;
if (result2 != null) {
i2 = result2.getNodes();
}
if ( i2 == null || !i2.hasNext() ) {
return i1;
}
if ( !i1.hasNext() ) {
return i2;
}
final List<NodeIterator> list = new ArrayList<>();
list.add(i1);
list.add(i2);
@SuppressWarnings({ "unchecked", "rawtypes" })
final Iterator<Node> iter = new ChainedIterator(list.iterator());
return new NodeIterator() {
private volatile long position = 0;
@Override
public Object next() {
position++;
return iter.next();
}
@Override
public boolean hasNext() {
return iter.hasNext();
}
@Override
public void skip(long skipNum) {
while (skipNum-- > 0) {
next();
}
}
@Override
public long getSize() {
return -1;
}
@Override
public long getPosition() {
return position;
}
@Override
public Node nextNode() {
position++;
return iter.next();
}
};
}
@Override
public String[] getSelectorNames() throws RepositoryException {
return result1.getSelectorNames();
}
});
}