final List<Object> values = (List<Object>) asynchronousQueryResult.getValues(); final String newSql = sqlInfo.dbmsType().applySkipLimit(asynchronousQueryResult.getSql(), values, skip, limit); asynchronousQueryResult.setSql(newSql); Stream<T> result = AutoClosingStream.of(asynchronousQueryResult.stream(), allowStreamIteratorAndSpliterator) .onClose(this::close);
@Override public void close() { consumed = true; try { ComposeRunnableUtil.composedRunnable(closeHandlers); } finally { asynchronousQueryResult.close(); } }
public static <ENTITY> void modifySource( final List<FieldPredicate<ENTITY>> predicateBuilders, final SqlStreamOptimizerInfo<ENTITY> info, final AsynchronousQueryResult<ENTITY> query ) { requireNonNull(predicateBuilders); requireNonNull(info); requireNonNull(query); final List<FieldPredicate<ENTITY>> optimizedPredicateBuilders = optimize(predicateBuilders); final FieldPredicateView spv = info.getDbmsType().getFieldPredicateView(); final List<SqlPredicateFragment> fragments = optimizedPredicateBuilders.stream() .map(sp -> spv.transform(info.getSqlColumnNamer(), info.getSqlDatabaseTypeFunction(), sp)) .collect(toList()); final String sql = info.getSqlSelect() + " WHERE " + fragments.stream() .map(SqlPredicateFragment::getSql) .collect(joining(" AND ")); final List<Object> values = new ArrayList<>(fragments.size()); for (int i = 0; i < fragments.size(); i++) { final FieldPredicate<ENTITY> p = optimizedPredicateBuilders.get(i); final Field<ENTITY> referenceFieldTrait = p.getField(); @SuppressWarnings("unchecked") final TypeMapper<Object, Object> tm = (TypeMapper<Object, Object>) referenceFieldTrait.typeMapper(); fragments.get(i).objects() .map(tm::toDatabaseType) .forEach(values::add); } query.setSql(sql); query.setValues(values); }
= () -> asynchronousQueryResult.stream();
= () -> asynchronousQueryResult.stream();
final List<Object> values = (List<Object>) asynchronousQueryResult.getValues(); final String newSql = sqlInfo.dbmsType().applySkipLimit(asynchronousQueryResult.getSql(), values, skip, limit); asynchronousQueryResult.setSql(newSql); Stream<T> result = AutoClosingStream.of(asynchronousQueryResult.stream(), allowStreamIteratorAndSpliterator) .onClose(this::close);
@Override public void close() { consumed = true; try { ComposeRunnableUtil.composedRunnable(closeHandlers); } finally { asynchronousQueryResult.close(); } }
public static <ENTITY> void modifySource( final List<FieldPredicate<ENTITY>> predicateBuilders, final SqlStreamOptimizerInfo<ENTITY> info, final AsynchronousQueryResult<ENTITY> query ) { requireNonNull(predicateBuilders); requireNonNull(info); requireNonNull(query); final List<FieldPredicate<ENTITY>> optimizedPredicateBuilders = optimize(predicateBuilders); final FieldPredicateView spv = info.getDbmsType().getFieldPredicateView(); final List<SqlPredicateFragment> fragments = optimizedPredicateBuilders.stream() .map(sp -> spv.transform(info.getSqlColumnNamer(), info.getSqlDatabaseTypeFunction(), sp)) .collect(toList()); final String sql = info.getSqlSelect() + " WHERE " + fragments.stream() .map(SqlPredicateFragment::getSql) .collect(joining(" AND ")); final List<Object> values = new ArrayList<>(fragments.size()); for (int i = 0; i < fragments.size(); i++) { final FieldPredicate<ENTITY> p = optimizedPredicateBuilders.get(i); final Field<ENTITY> referenceFieldTrait = p.getField(); @SuppressWarnings("unchecked") final TypeMapper<Object, Object> tm = (TypeMapper<Object, Object>) referenceFieldTrait.typeMapper(); fragments.get(i).objects() .map(tm::toDatabaseType) .forEach(values::add); } query.setSql(sql); query.setValues(values); }