Operator overloading or alternatives to expression templates
Martin Nowak via Digitalmars-d
digitalmars-d at puremagic.com
Sat Sep 12 13:08:54 PDT 2015
On Friday, 11 September 2015 at 23:47:42 UTC, Andrei Alexandrescu
wrote:
> 1. Use lambdas, which seem to already do what you want:
>
> db.get!Person.filter!(p => p.age > 21 && p.name == "Peter")
>
> The way this'd go, the db.get!Person() call returns an input
> range of Person. Presumably introspection is being used to bind
> fields in the query such as "age" and "name" to static field
> names in struct Person. Then good old std.algorithm.filter
> takes care of the rest.
I'm instantiating the lambda with a fake p to capture the
expression so I can translate it to whatever SQL, MongoDB,
columnar db is used.
> 2. If you want to embed real SQL into D, use string-based DSLs.
Strings don't capture context, aren't typechecked, and require a
complex CTFE parser.
db.get!Person.where!"age > 21 & name = ?"(name);
More information about the Digitalmars-d
mailing list