@Override public <T>Observable<T> findByView(ViewQuery query, Class<T> entityClass) { if (!query.isIncludeDocs() || !query.includeDocsTarget().equals(RawJsonDocument.class)) { if (query.isOrderRetained()) { query.includeDocsOrdered(RawJsonDocument.class); } else { query.includeDocs(RawJsonDocument.class); } } //we'll always map the document to the entity, hence reduce never makes sense. query.reduce(false); return queryView(query) .flatMap(asyncViewResult -> asyncViewResult.error() .flatMap(error -> Observable.error(new CouchbaseQueryExecutionException("Unable to execute view query due to error:" + error.toString()))) .switchIfEmpty(asyncViewResult.rows())) .map(row -> { AsyncViewRow asyncViewRow = (AsyncViewRow) row; return asyncViewRow.document(RawJsonDocument.class) .map(doc -> mapToEntity(doc.id(), doc, entityClass)).toBlocking().single(); }) .doOnError(throwable -> Observable.error(new CouchbaseQueryExecutionException("Unable to execute view query", throwable))); }
@Override public <T>Observable<T> findByView(ViewQuery query, Class<T> entityClass) { if (!query.isIncludeDocs() || !query.includeDocsTarget().equals(RawJsonDocument.class)) { if (query.isOrderRetained()) { query.includeDocsOrdered(RawJsonDocument.class); } else { query.includeDocs(RawJsonDocument.class); } } //we'll always map the document to the entity, hence reduce never makes sense. query.reduce(false); return queryView(query) .flatMap(asyncViewResult -> asyncViewResult.error() .flatMap(error -> Observable.error(new CouchbaseQueryExecutionException("Unable to execute view query due to error:" + error.toString()))) .switchIfEmpty(asyncViewResult.rows())) .map(row -> { AsyncViewRow asyncViewRow = (AsyncViewRow) row; return asyncViewRow.document(RawJsonDocument.class) .map(doc -> mapToEntity(doc.id(), doc, entityClass)).toBlocking().single(); }) .doOnError(throwable -> Observable.error(new CouchbaseQueryExecutionException("Unable to execute view query", throwable))); }