Abstract Database Interface

BLM768 blm768 at gmail.com
Mon Oct 29 00:57:45 PDT 2012


>
> Looking at the API used in this example it would say that it's 
> not very interesting and not very ActiveRecrod like. I think 
> this looks more interesting and more like ActiveRecrod:
>
> class Person : Model
> {
> }
>
> void main ()
> {
>     auto p = new Person;
>     p.name = "John Doe";
>     p.save();
>
>     p = Person.where!(x => x.name == "John Doe");
> }
>
> But when you start to use associative it won't be as nice 
> looking as ActiveRecord due to the not so nice mixin syntax. 
> What we need is AST macros and user defined 
> attributes/annotations. With that, associations could 
> potentially look like this:
>
> class Foo : Model {}
>
> class Person : Model
> {
>     @hasMany Foo;
> }

It's definitely not ActiveRecord, but my goal is just to take 
some inspiration from it, not to duplicate it. I'm very concerned 
about efficiency, which is why I'm using structs, and I like 
hard-coding the fields into the structure so there's some 
documentation of what the record is supposed to hold and so the 
compiler can optimize it more heavily. It will probably be a 
little less pretty, but it'll work, and that's what really 
matters. At some point, I might implement an interface to 
generate SQL queries with function calls, but for now, just 
manually writing the queries really isn't hard, and it provides a 
significant speed boost for systems like Sqlite that compile 
queries down to bytecode because it's easier to reuse the query 
object.



More information about the Digitalmars-d-announce mailing list