2016-04-18 1 views
1

Скажем, у меня есть запрос типа:Преобразование запроса SQL в массив в PostgreSQL с jOOQ

SELECT * FROM users WHERE access_codes @> 
    ARRAY[(SELECT access_code FROM provisional_access)]; 

Как бы я пишу это в jooq? Лучшее, что я сделал до сих пор:

ctx.selectFrom(Tables.USERS).where(Tables.USERS.ACCESS_CODES).contains(
    ?? ctx.select(Tables.PROVISIONAL_ACCESS.ACCESS_CODE).from(Tables.PROVISIONAL_ACCESS) ?? 
); 

ответ

1

Это в настоящее время не поддерживается jOOQ из коробки, но вы можете очень легко реализовать функцию полезности с помощью "plain SQL":

public static <T> Condition arrayContains(
    Field<T[]> left, Select<? extends Record1<T>> right 
) { 
    return DSL.condition("{0} @> ARRAY[({1})]", left, right); 
}