sql >> Databasteknik >  >> RDS >> Mysql

jooq utöka befintlig dialekt. Använd MySQL-dialekt för att apache Hive-dialekt

Tyvärr är det inte särskilt enkelt att utöka jOOQ för att grundligt stödja en ny SQL-dialekt. jOOQ:s API har vuxit omfattande med tiden och stöder en stor uppsättning standard- och leverantörsspecifika SQL-syntaxvarianter. Även om Apache Hive-dialekten kan likna MySQL, finns det förmodligen massor av subtila skillnader som skulle behöva implementeras i jOOQs interna funktioner. Den olika implementeringen av LIMIT .. OFFSET-klausulen är bara en fråga. Som sagt, det är i allmänhet inte en bra idé att använda jOOQ med en "okänd" eller "ej stödd" dialekt.

Lösning:På kort sikt

På kort sikt kommer du förmodligen att behöva patcha jOOQs renderade SQL. Den bästa tekniken för detta är att använda en ExecuteListener som dokumenteras här:

När du får en "renderEnd()"-händelse kommer du att kunna komma åt den renderade SQL-koden och modifiera den med reguljära uttryck eller vilken teknik du än föredrar.

Lösning:På lång sikt

I det långa loppet kan det finnas en bättre lösning om / när #2337 är implementerat (men vi kommer förmodligen inte att implementera det)



  1. SQL-uppdatering, radera och infoga på samma gång

  2. Hur man skapar och manipulerar SQL-databaser med Python

  3. ORA-00942:tabell eller vy finns inte med Spring JDBC-mall i Spring Boot

  4. Är vänsteranslutningen kommutativ? Vilka är dess egenskaper?