code: @SafeVarargs
      public final <T> Stream<T> streamAll(final String sql, final StatementSetter statementSetter,
              final JdbcUtil.BiRecordGetter<T, RuntimeException> recordGetter, final JdbcSettings jdbcSettings, final Object... parameters) {
          checkJdbcSettingsForAllQuery(jdbcSettings);
  
          if (jdbcSettings == null || N.isNullOrEmpty(jdbcSettings.getQueryWithDataSources())) {
              return stream(sql, statementSetter, recordGetter, jdbcSettings, parameters);
          }
  
          final Collection<String> dss = jdbcSettings.getQueryWithDataSources();
  
          return Stream.of(dss).map(new Function<String, JdbcSettings>() {
              @Override
              public JdbcSettings apply(String ds) {
                  return jdbcSettings.copy().setQueryWithDataSources(null).setQueryWithDataSource(ds);
              }
          }).__(new Function<Stream<JdbcSettings>, Stream<JdbcSettings>>() {
              @Override
              public Stream<JdbcSettings> apply(Stream<JdbcSettings> s) {
                  return jdbcSettings.isQueryInParallel() ? s.parallel(dss.size()) : s;
              }
          }).flatMap(new Function<JdbcSettings, Stream<T>>() {
              @Override
              public Stream<T> apply(JdbcSettings newJdbcSettings) {
                  return stream(sql, statementSetter, recordGetter, newJdbcSettings, parameters);
              }
          });
      }
docs: Remember to close the returned <code>Stream</code> list to close the underlying <code>ResultSet</code> list.
  {@code stream} operation won't be part of transaction or use the connection created by {@code Transaction} even it's in transaction block/range.
  
  @param sql
  @param statementSetter
  @param jdbcSettings
  @param parameters
  @return