转换 select 语句

Transform select statement

如何动态转换 SQL-Query? 我知道有一个 Select.getSelect(),但我如何在 select 查询中添加字段?

用例:对于 Rest-Query,我有很多分页资源,并且我有一个抽象来创建分页查询。它采用 SelectConditionStep 并添加其余部分,具体取决于其他参数。它对于简单的查询非常有效,但对于包含连接的查询,需要对查询进行一些转换。 (主要是因为我不能天真地限制结果的数量,因为连接可以是一对多的关系)

最简单的方法是在为 select() 子句添加字段的地方保留 List<Field<?>>,然后仅在实际执行时才创建 Select 语句,而不是传递一个 Select 对象。示例:

List<Field<?>> fields = new ArrayList<>();

// Just some examples:
fields.addAll(getDefaultFields());
fields.addAll(getFieldsFromUI());
fields.addAll(getCalculatedFields());

// Much later on, you finally create the statement:
DSL.using(configuration)
   .select(fields)
   .from(...)
   .fetch();