On 03/04/2012 12:04 PM, Andrej Mitrovic wrote:
On 3/4/12, Vladimir Panteleev<vladi...@thecybershadow.net>  wrote:
I pushed out another large update today.

I can't believe I'm saying this, but I can't wait for my next ICE to
try it out. :p

Here's one for DMD 2.057.  Knock yourself out ;)

(As I mentioned in my other post, I can't build DustMite right now, or I'd do it myself. But if you want one...)

----------------------------------------------
chad@Hugin ~/dprojects/database $ dmd ice.d
entity.(fld)
Internal error: e2ir.c 683
----------------------------------------------

import std.stdio;

scope class Query(string queryText)
{
        static class Entity
        {
                private static size_t bufSize = 0;
                private static size_t[string] offsets;
                private static size_t registerField(T)(string varName)
                {
                        auto offset = bufSize;
                        offsets[varName] = offset;
                        bufSize += T.sizeof;
                        return offset;
                }
                
                private void[] buf;
                
                class fld(T,string varName)
                {
                        T opCall()
                        {
                                auto i1 = offsets[varName];
                                return cast(T)buf[i1 .. i1 + T.sizeof];
                        }
                        
                        static this()
                        {
                                registerField!T(varName);
                        }
                }
                
                this()
                {
                        buf = new void[bufSize];
                        writefln("offsets = %s\n", offsets);
                }
                
                ~this()
                {
                        delete buf;
                }
        }
        
        Entity e;
        
        this()
        {
                e = new Entity();
        }
}

void main()
{
        scope query = new Query!(
                "SELECT ONLY_NEEDED_COLUMNS"
                "FROM contacts c"
                "WHERE c.country = 'US'"
                "AND   c.sales > 10000;")();
        
        auto entity = query.e;
        //foreach(entity; query)
        //{
                auto email_addy = entity.fld!(char[],"email")();
                auto full_name = entity.fld!(char[],"name")();
//Email.spam(email_addy, full_name, "We have this great new offer for you!");
        //}
}

Reply via email to