programing

jooq jsonArrayAgg 쿼리 mariadb/mysql은 항상 "SQL 구문의 오류" 예외를 받습니다.

sourcetip 2023. 8. 20. 18:15
반응형

jooq jsonArrayAgg 쿼리 mariadb/mysql은 항상 "SQL 구문의 오류" 예외를 받습니다.

SQL 문에 jsonArrayAgg 명령이 있는 경우 jOOQ는 항상 다음 오류를 발생시킵니다.

"SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서에서 사용하기에 적합한 구문을 확인하십시오."

하지만 MariaDB에서 "general_log"를 켜고 jooq generate SQL 문을 복사/게시하여 데이터베이스를 쿼리하면 모든 것이 정상이며 결과는 제가 원하는 것입니다.

내 코드는 그냥.

     list = ctx.select(
                MAIN.KEYID,
                field(
                select(jsonArrayAgg(
                    jsonObject(
                        key("id").value(CONNECTOR.ID),
                        key("standard").value(CONNECTOR.STANDARD)
                ))).from(CONNECTOR)
                .where(CONNECTOR.MAINKEYID.eq(MAIN.KEYID))).as("connectors")                                
            ).from(MAIN)           
            .fetchInto(JSON_POJO.class);

jooq log

at org.jooq_3.15.12.MARIADB.debug(Unknown Source) ~[?:?]
    at org.jooq.impl.Tools.translate(Tools.java:2997) ~[jooq-3.15.12.jar:?]
    at org.jooq.impl.DefaultExecuteContext.sqlException(DefaultExecuteContext.java:639) ~[jooq-3.15.12.jar:?]
    at org.jooq.impl.AbstractQuery.execute(AbstractQuery.java:354) ~[jooq-3.15.12.jar:?]
    at org.jooq.impl.AbstractResultQuery.fetchLazy(AbstractResultQuery.java:295) ~[jooq-3.15.12.jar:?]
    at org.jooq.impl.AbstractResultQuery.fetchLazyNonAutoClosing(AbstractResultQuery.java:316) ~[jooq-3.15.12.jar:?]
    at org.jooq.impl.SelectImpl.fetchLazyNonAutoClosing(SelectImpl.java:2866) ~[jooq-3.15.12.jar:?]
    at org.jooq.impl.ResultQueryTrait.collect(ResultQueryTrait.java:357) ~[jooq-3.15.12.jar:?]
    at org.jooq.impl.ResultQueryTrait.fetchInto(ResultQueryTrait.java:1423) ~[jooq-3.15.12.jar:?]

jooq는 이렇게 간단하게 sql 코드를 생성합니다.

set @t = @@group_concat_max_len; set @@group_concat_max_len = 4294967295; 
select `mydb`.`main`.`keyid`, 
(select json_merge_preserve('[]', concat('[', group_concat(json_merge_preserve('{}', json_object('id', `mydb`.`Connector`.`id`), json_object('standard', `mydb`.`Connector`.`standard`)) separator ','), ']')) 
from `mydb`.`Connector` where `mydb`.`Connector`.`mainKeyid` = `mydb`.`main`.`keyid`) as `connectors` from `mydb`.`main`; 
set @@group_concat_max_len = @t

저는 3.12에서 3.16까지 jooq 버전을 시도해 보았습니다.

MariaDB 10.3 및 10.11로 업그레이드

Java 11.0.18

다중 쿼리 허용 = true

하지만 아무도 효과가 없었어요이 문제를 해결하거나 해결 방법을 찾을 수 있는 방법은 무엇입니까?

언급URL : https://stackoverflow.com/questions/76142850/jooq-jsonarrayagg-query-mariadb-mysql-always-get-an-error-in-your-sql-syntax-e

반응형