2016-01-29 1 views
0

Как я могу динамически преобразовать SQL-запрос? Я знаю, что есть Select.getSelect(), но как я могу добавить поля в select-query?Transform select statement

Пример использования: для запроса на отдых у меня есть много разбитых на страницы ресурсов, и у меня есть абстракция для создания постраничного запроса. Он принимает SelectConditionStep и добавляет остальное, в зависимости от дополнительных параметров. Он работает очень хорошо для простых запросов, но для запросов, содержащих объединения, потребуется немного преобразовать запрос. (Главным образом, потому что я не могу наивно ограничить число результатов, так как соединение может быть отношением один ко многим)

ответ

1

Самый простой способ - сохранить List<Field<?>>, где вы добавляете поля для вашего предложения select(), а затем создайте 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();