In a larger system we are building we need a text-to-sql capability for some structured data retrieval.
Is there a way one could utilize this library (sqlglot) to build a multi-dialect sql generator -- that is not currently solved by directly relying on a LLM that is better at code generation in general?
For example, on the JVM there is jOOQ, which allows you to write something like:
select(field("foo"), avg("bar")).from(table("todos"))
And then it will render dialect-specific SQL. It has very advanced emulation functionality for things like JSON aggregations and working around quirks of dialects.Alternatively, you can ask an LLM to generate a specific dialect of SQL, and then use jOOQ to parse it to an AST, and then render it as a different dialect, like:
val parser= DSL.using(SQLDialect.POSTGRES).parser()
val parsedQuery = parser.parseQuery(postgresQuery)
val renderedMySQL = DSL.using(SQLDialect.MYSQL).renderInlined(parsedQuery)
println(renderedMySQL)
Unsure if functionality like this exists in other Query Builder libraries for other languages.we’ve been through all of that at wobby.ai we ended up building a system where the data team defines guardrails and reusable query templates, so the agent doesn’t just make stuff up. it can still handle user prompts, but within a safe structure. if you want to save yourself from debugging this stuff endlessly, might be worth checking out wobby.ai.