drizzle-team / drizzle-orm

Headless TypeScript ORM with a head. Runs on Node, Bun and Deno. Lives on the Edge and yes, it's a JavaScript ORM too 😅
https://orm.drizzle.team
Apache License 2.0
23.03k stars 555 forks source link

[BUG]: Mysql `query` generating invalid SQL #2151

Open gustavotrapp opened 5 months ago

gustavotrapp commented 5 months ago

What version of drizzle-orm are you using?

0.30.7

What version of drizzle-kit are you using?

No response

Describe the Bug

I am using MySQL version 5.6, but the SQL being generated is for MySQL >= 8, how can I configure drizzle so that it supports a lower version

select
    `vistoriachecklist`.`id`,
    `vistoriachecklist`.`nome`,
    `vistoriachecklist`.`modificacaoData`,
    `vistoriachecklist`.`modificacaoUsuario`,
    `vistoriachecklist`.`clienteId`,
    `vistoriachecklist`.`empreendimentoId`,
    `vistoriachecklist_auth_usuario`.`data` as `auth_usuario`,
    `vistoriachecklist_vistoriachecklistitem`.`data` as `vistoriachecklistitem`
from
    `vistoriachecklist`
left join lateral (
    select
        json_array(`vistoriachecklist_auth_usuario`.`id`, `vistoriachecklist_auth_usuario`.`nome`, `vistoriachecklist_auth_usuario`.`email`, `vistoriachecklist_auth_usuario`.`senha`, `vistoriachecklist_auth_usuario`.`status`, `vistoriachecklist_auth_usuario`.`qualificacaoProfissional`, `vistoriachecklist_auth_usuario`.`numRegistroConselho`, `vistoriachecklist_auth_usuario`.`alertas`, `vistoriachecklist_auth_usuario`.`criacaoData`, `vistoriachecklist_auth_usuario`.`modificacaoData`, `vistoriachecklist_auth_usuario`.`modificacaoUsuario`, `vistoriachecklist_auth_usuario`.`tipoAcesso`, `vistoriachecklist_auth_usuario`.`user_id`, `vistoriachecklist_auth_usuario`.`funcaoId`, `vistoriachecklist_auth_usuario`.`visualizouAvisoInicial`, `vistoriachecklist_auth_usuario`.`aceitouTermos`, `vistoriachecklist_auth_usuario`.`valorCobrado`, `vistoriachecklist_auth_usuario`.`dataAceiteTermos`, `vistoriachecklist_auth_usuario`.`currentWebSession`, `vistoriachecklist_auth_usuario`.`currentMobileSession`, `vistoriachecklist_auth_usuario`.`isPartner`, `vistoriachecklist_auth_usuario`.`dataDesativacao`, `vistoriachecklist_auth_usuario`.`loginType`) as `data`
    from
        (
        select
            *
        from
            `auth_usuario` `vistoriachecklist_auth_usuario`
        where
            `vistoriachecklist_auth_usuario`.`id` = `vistoriachecklist`.`modificacaoUsuario`
        limit 1) `vistoriachecklist_auth_usuario`) `vistoriachecklist_auth_usuario` on
    true
left join lateral (
    select
        coalesce(json_arrayagg(json_array(`vistoriachecklist_vistoriachecklistitem`.`id`, `vistoriachecklist_vistoriachecklistitem`.`checklistId`, `vistoriachecklist_vistoriachecklistitem`.`itemId`, `vistoriachecklist_vistoriachecklistitem`.`modificacaoData`, `vistoriachecklist_vistoriachecklistitem_vistoriacontroleambiental`.`data`)), json_array()) as `data`
    from
        `vistoriachecklistitem` `vistoriachecklist_vistoriachecklistitem`
    left join lateral (
        select
            json_array(`vistoriachecklist_vistoriachecklistitem_vistoriacontroleambiental`.`id`, `vistoriachecklist_vistoriachecklistitem_vistoriacontroleambiental`.`nome`, `vistoriachecklist_vistoriachecklistitem_vistoriacontroleambiental`.`modificacaoUsuario`, `vistoriachecklist_vistoriachecklistitem_vistoriacontroleambiental`.`modificacaoData`) as `data`
        from
            (
            select
                *
            from
                `vistoriacontroleambiental` `vistoriachecklist_vistoriachecklistitem_vistoriacontroleambiental`
            where
                `vistoriachecklist_vistoriachecklistitem_vistoriacontroleambiental`.`id` = `vistoriachecklist_vistoriachecklistitem`.`itemId`
            limit 1) `vistoriachecklist_vistoriachecklistitem_vistoriacontroleambiental`) `vistoriachecklist_vistoriachecklistitem_vistoriacontroleambiental` on
        true
    where
        `vistoriachecklist_vistoriachecklistitem`.`id` = `vistoriachecklist`.`id`) `vistoriachecklist_vistoriachecklistitem` on
    true
where
    `vistoriachecklist`.`id` = 1
limit 1

Here is the code that generates that query:

image

And here is the definition for the getClientDbDrizzle()

image

Expected behavior

For it to generate a valid query

Environment & setup

Development

samualtnorman commented 1 month ago

I'm running into the same problem but I'm using MariaDB not MySQL. I thought I would be able to use Drizzle with MariaDB by relying on its compat with MySQL but I guess I will need to switch back to Prisma.