在我从在线材料中找到的下面的jooq片段中,从“jooq结束”到“流开始”有一个转换。
这是否意味着SQL查询生成一直持续到fetch()? 然后在之后stream()开始,所有内容都在java进程内存中。
还是Java 8流像活动记录DSL,整个片段都被转换成包括stream()部分的SQL查询?
这是因为我看到很多在线示例中在流内部进行了sortBy/groupingBy等操作,而这些操作也可以在SQL中完成。
这是否意味着SQL查询生成一直持续到fetch()? 然后在之后stream()开始,所有内容都在java进程内存中。
还是Java 8流像活动记录DSL,整个片段都被转换成包括stream()部分的SQL查询?
这是因为我看到很多在线示例中在流内部进行了sortBy/groupingBy等操作,而这些操作也可以在SQL中完成。
DSL.using(c)
.select(
COLUMNS.TABLE_NAME,
COLUMNS.COLUMN_NAME,
COLUMNS.TYPE_NAME
)
.from(COLUMNS)
.orderBy(
COLUMNS.TABLE_CATALOG,
COLUMNS.TABLE_SCHEMA,
COLUMNS.TABLE_NAME,
COLUMNS.ORDINAL_POSITION
)
.fetch() // jOOQ ends here
.stream() // Streams start here
.collect(groupingBy(
r -> r.getValue(COLUMNS.TABLE_NAME),
LinkedHashMap::new,
mapping(
r -> new Column(
r.getValue(COLUMNS.COLUMN_NAME),
r.getValue(COLUMNS.TYPE_NAME)
),
toList()
)
))
.forEach(
(table, columns) -> {
// Just emit a CREATE TABLE statement
System.out.println(
"CREATE TABLE " + table + " (");
// Map each "Column" type into a String
// containing the column specification,
// and join them using comma and
// newline. Done!
System.out.println(
columns.stream()
.map(col -> " " + col.name +
" " + col.type)
.collect(Collectors.joining(",\n"))
);
System.out.println(");");
}
);