private <T extends Document & HasId> void tableChilds(
            final Table table,
            final Class<T> childType,
            final Supplier<T> childSupplier,
            final SqlSupplier<ResultSet> resultSetSupplier,
            final SqlFunction<ResultSet, String> childIdGetter,
            final TableChildMutator<T> resultSetMutator,
            final SqlPredicate<ResultSet> filter) {

        requireNonNulls(childSupplier, resultSetSupplier, resultSetMutator);

        try (final ResultSet rsChild = resultSetSupplier.get()) {

            if (SHOW_METADATA) {
                final ResultSetMetaData rsmd = rsChild.getMetaData();
                final int numberOfColumns = rsmd.getColumnCount();
                for (int x = 1; x <= numberOfColumns; x++) {
                    final int columnType = rsmd.getColumnType(x);
                    LOGGER.info(x + ":" + rsmd.getColumnName(x) + ", " +
                        rsmd.getColumnClassName(x) + ", " + columnType);
                }
            }

            while (rsChild.next()) {
                if (SHOW_METADATA) {
                    final ResultSetMetaData rsmd = rsChild.getMetaData();
                    final int numberOfColumns = rsmd.getColumnCount();
                    for (int x = 1; x <= numberOfColumns; x++) {
                        final Object val = rsChild.getObject(x);
                        LOGGER.info(x + ":" + rsmd.getColumnName(x) + ":'" +
                            val + "'");
                    }
                }

                if (filter.test(rsChild)) {
                    final String id = childIdGetter.apply(rsChild);
                    final Optional<T> existing = DocumentDbUtil.typedChildrenOf(table)
                        .filter(childType::isInstance)
                        .map(childType::cast)
                        .filter(idx -> id.equals(idx.getId()))
                        .findAny();

                    final T child = existing.orElseGet(childSupplier);
                    resultSetMutator.mutate(child, rsChild);
                } else {
                    LOGGER.info("Skipped due to RS filtering. This is normal " +
                        "for some DBMS types.");
                }
            }
        } catch (final SQLException sqle) {
            LOGGER.error(sqle, "Unable to read table child.");
            throw new SpeedmentException(sqle);
        }
    }
'true' below might speed up metadata retrieval since approximations can
be used. See https://github.com/speedment/speedment-enterprise/issues/168
runtime-parent/runtime-connector-parent/sqlite/src/main/java/com/speedment/runtime/connector/sqlite/internal/SqliteMetadataHandlerImpl.java