On Friday, 11 September 2015 at 19:41:41 UTC, Martin Nowak wrote:
Does anyone have a different idea how to make a nice query
language? db.get!Person.where!(p => p.age > 21 && p.name ==
"Peter")
In our last project we took the following approach:
`auto q = query.builder!Person.age!">"(20).name("Peter");`
In the query-builders there was a lot of ugly concatenating sql
stuff. But there was just one guy writing that, everybody else
was using the high-level functions.
It allows for a lot of checking, not only on types but also on
logic (e.g. age!">"(20).age!"<"(10) was caught at runtime). Plus,
very unittestable.
It worked so well that once the query-builders were written, all
the constraints, sorting and ordering parameters could be passed
straight from the http api down to the query-builders.
Still, you would have to write the query-builders for each Object
you want query, although that is something you could do in a DSL.