@Override public <T> Observable<List<T>> query(final N1qlQuery query) { return bucket.query(query) .flatMap(aqr -> Observable.zip(aqr.rows().toList(), aqr.errors().toList(), aqr.finalSuccess().singleOrDefault(Boolean.FALSE), (rows, errors, finalSuccess) -> { if (!finalSuccess) { throw new QueryExecutionException( "execution of query resulted in exception: ", Try.apply(() -> errors.get(0)).orElse(null)); } List<T> value = new ArrayList<>(); for (AsyncN1qlQueryRow row : rows) { try { T v = converter.fromBytes(row.byteValue()); value.add(v); } catch (IOException ex) { throw new QueryExecutionException( "execution of query resulted in exception", null, ex); } } return value; })); }
@Override public Observable<AsyncN1qlQueryRow> call(final AsyncN1qlQueryResult aqr) { return aqr.finalSuccess() .flatMap(new Func1<Boolean, Observable<AsyncN1qlQueryRow>>() { @Override public Observable<AsyncN1qlQueryRow> call(Boolean success) { if (success) { return aqr.rows(); } else { return aqr.errors().toList().flatMap(errorHandler); } } }); } }).map(ROW_VALUE_TO_INDEXINFO);
@Override public Observable<Boolean> call(final AsyncN1qlQueryResult aqr) { return aqr.finalSuccess() .flatMap(new Func1<Boolean, Observable<Boolean>>() { @Override public Observable<Boolean> call(Boolean success) { if (success) { return Observable.just(true); } else { return aqr.errors().toList() .flatMap(new Func1<List<JsonObject>, Observable<Boolean>>() { @Override public Observable<Boolean> call(List<JsonObject> errors) { if (errors.size() == 1 && errors.get(0).getString("msg").contains("not found")) { if (ignoreIfNotExist) { return Observable.just(false); } else { return Observable.error(new IndexDoesNotExistException(errorPrefix)); } } else { return Observable.error(new CouchbaseException(errorPrefix + ": " + errors)); } } }); } } }); } });
@Override public Observable<N1qlQueryResult> call(AsyncN1qlQueryResult aqr) { final boolean parseSuccess = aqr.parseSuccess(); final String requestId = aqr.requestId(); final String clientContextId = aqr.clientContextId(); return Observable.zip(aqr.rows().toList(), aqr.signature().singleOrDefault(JsonObject.empty()), aqr.info().singleOrDefault(N1qlMetrics.EMPTY_METRICS), aqr.errors().toList(), aqr.profileInfo().singleOrDefault(JsonObject.empty()), aqr.status(), aqr.finalSuccess().singleOrDefault(Boolean.FALSE), new Func7<List<AsyncN1qlQueryRow>, Object, N1qlMetrics, List<JsonObject>, JsonObject, String, Boolean, N1qlQueryResult>() { @Override public N1qlQueryResult call(List<AsyncN1qlQueryRow> rows, Object signature, N1qlMetrics info, List<JsonObject> errors, JsonObject profileInfo, String finalStatus, Boolean finalSuccess) { return new DefaultN1qlQueryResult(rows, signature, info, errors, profileInfo, finalStatus, finalSuccess, parseSuccess, requestId, clientContextId); } }); } };