If I recall correctly, Squeryl use Scala AST macros to support
a query syntax, that in D would look, as below:
class Person : Model { }
void main ()
{
auto p = new Person;
p.name = "John Doe";
p.save();
p = Person.where!(x => x.name == "John Doe");
}
If you make x some fancy wrapper type containing more fancy
wrapper types with overloaded equality operators that return some
sort of Expression class instead of a boolean, you might actually
be able to get this to work with only D's current features.
However, that would kind of destroy the hope of efficiency. :)
What might be nice is a database written in D that completely
eschews SQL in favor of a native API. I might have to play with
that eventually, but I'll probably give it a while because it
would be a huge project, and, like most people, I'm under time
constraints. :)