public QueryResult execute()

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();
            }
        });
    }