devlog/TIL

[TIL] jooq 잘 모르겠다 🤔

bandal-gom 2020. 2. 14. 21:18
삽질 로그 | 2019-05-30

갑분 1 = 0 ?!

conditionStep = conditionStep.and(opo.ORDER_STATUS_TYPE.in(Lists.newArrayList(request.getOrderStatusTypes())));

 

이런 경우의 jooq에서는 conditionStep.and(~~~) 자체가 AND 1 = 0 로 변경되어 쿼리가 실행됨.

고로 전 후에 무수히 추가한 and 조건들이 먹지 않음.

🐸개구려

 

갑자기 미국날짜? 

String 으로 받아온 평범한 날짜입력값이 미국식 포맷으로 바뀌는 매직. 

conditionStep = conditionStep.and(opo.ORDER_YMDT.between(DateUtils.forceParse(request.getStartYmdt()),
                                                                             DateUtils.forceParse(request.getEndYmdt())));

 

극히 평범하고 잘 동작할 것 같은 코드이다.

DateUtils.forceParse 는 **yyyy-MM-dd HH:mm:ss** 이 형태의 LocalDateTime을 반환해 준다. 반환된 값을 가지고 between 으로 뿅 하고 잘 될 것 같았지만..! 쿼리로 날아가는 값은 사실 이렇게 바뀌어서 실행된다. 

 AND od_order_product_option.order_ymdt BETWEEN
             '04/04/2019 00:00:00.000' AND '06/04/2019 23:59:59.000'

 

다시 내가 원하는 포맷으로 실행하려면 이런식으로 수정했다. 

conditionStep = conditionStep.and(opo.ORDER_YMDT.between(dateFormat(request.getStartYmdt()),
                                                                     dateFormat(request.getEndYmdt())));
                                                                     ...
                                                                     
public static Field dateFormat(String field) {
        return DSL.field("{0}", SQLDataType.LOCALDATETIME, DSL.inline(field));
    }

 

반응형