Включить условие в подготовленное заявление jooq условно - PullRequest
0 голосов
/ 10 мая 2018

Привет! Я использую JOOQ для построения оператора SQL в своем Java-приложении. Мне нужно включить условие или в мое заявление при определенных условиях и опустить при других. например,

org.jooq.Query ps =  select(field("q.*"))
                            .from(table("QUEUES q"))
                            .where(field("q.APPLICATION").eq("APP1"));

Затем мне нужно отключить или часть запроса, в зависимости от какой-то другой переменной.

org.jooq.Query ps =  select(field("q.*"))
                            .from(table("QUEUES q"))
                            .where(field("q.APPLICATION").eq("APP1"))
                            .or(field("q.APPLICATION").eq("APP2"));

Я не могу понять, как это сделать, не имея двух отдельных операторов, одно из которых включает оператор или, а другое - нет. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

благодаря Кошуксу Я сделал это так ...

Condition whereClause = field("q.APPLICATION").eq("APP1");
if(bothApps){
    whereClause = whereClause.or(field("q.APPLICATION").eq("APP2"));
}
org.jooq.Query ps =  select(field("q.*"))
                     .from(table("QUEUES q"))
                     .where(whereClause);
0 голосов
/ 10 мая 2018

То, что вы хотите сделать, это использовать расширения SelectConditionStep, которые позволят вам разбить запрос на отдельные шаги и использовать флаг в качестве средства для прикрепления только одного конкретного расширения SelectConditionStep к запросу.

С учетом вашего запроса и флага (boolean - для разделения используемого расширения SelectConditionStep), например, для вызова. checkBothApps.

boolean checkBothApps = false;

org.jooq.SelectJoinStep<R> joinStep =  select(field("q.*"))
                        .from(table("QUEUES q"));

org.jooq.SelectConditionStep<R> conditionStep = joinStep.where(field("q.APPLICATION").eq("APP1"));

if (checkBothApps) {
  // This condition will be added to the join step.
  joinStep.or(field("q.APPLICATION").eq("APP2"));
}

Редактировать: проверенный код.

...