Sweetness!

On Tue, Nov 3, 2009 at 3:29 PM, Thanatos <[email protected]> wrote:

>
> Looks great! I look forward to using this, or seeing how dm-sugar-
> glider makes use of it!
>
> Thanks Dan
>
> - Tony
>
> On Nov 3, 5:23 pm, "Dan Kubb (dkubb)" <[email protected]> wrote:
> > Hi Everyone,
> >
> > I just wanted to give everyone a follow-up on the new query
> > improvements I hinted at last week.  For those of you who missed it,
> > here was the original post:
> >
> >  http://bit.ly/10gIJb
> >
> > As of a few minutes ago, I just committed changes that would permit
> > Set operations to be performed on a Collection, eg:
> >
> > Union
> > --------
> >
> >   Person.all(:name => 'Dan Kubb') | Person.all(:name => 'Alex Kubb')
> >   Person.all(:name => 'Dan Kubb') + Person.all(:name => 'Alex Kubb')
> >
> >   # => SELECT "id", "name" FROM "people" WHERE ("name" = 'Dan Kubb' OR
> > "name" = 'Alex Kubb') ORDER BY "id"
> >
> > Intersection
> > ----------------
> >
> >   Person.all(:name => 'Dan Kubb') & Person.all(:name => 'Alex Kubb')
> >
> >   # => SELECT "id", "name" FROM "people" WHERE ("name" = 'Dan Kubb'
> > AND "name" = 'Alex Kubb') ORDER BY "id"
> >
> > Difference
> > --------------
> >
> >   Person.all(:name => 'Dan Kubb') - Person.all(:name => 'Alex Kubb')
> >
> >   # => SELECT "id", "name" FROM "people" WHERE ("name" <> 'Alex Kubb'
> > AND "name" = 'Dan Kubb') ORDER BY "id"
> >
> > This should work fine with any kind of Collection that you return from
> > "all", including 1:m and m:m associations.  There's nothing special
> > about these Collections, so you can still chain them, lazy load and do
> > all the other things you've come to expect from DataMapper.
> >
> > I have not yet updated "all" chaining to use intersection, as I hinted
> > in the original email.  I wanted to get this out and tested before
> > swapping DM's collection chaining algo with Collection#intersection.
> > That probably won't happen until after the gem release this week.
> >
> > In case you're curious to see how this was implemented, check out
> > these commits:
> >
> > Operation:http://bit.ly/2jTYs
> > Query:http://bit.ly/IjyIR
> > Collection:http://bit.ly/2AJ7Jy
> >
> > As you can see the implementation is fairly clean and simple.  I'm
> > guessing it took about 40-50 lines of actual code, although once I
> > refactor collection chaining to use intersection there will probably
> > be a reduction of about 200-300 loc overall.  Actually there's more
> > docs than code, and 5-10x more specs than that even!  The new code is
> > fully covered by the specs with rcov, and pass with heckle.
> >
> > If you haven't already done so, please checkout edge dm-core and play
> > around with this to construct queries.  Let me know of any issues you
> > run into either on the mailing list, on IRC in #datamapper @
> > freenode.net, or in the ticket tracker:http://bit.ly/x8ZLU
> >
> > --
> >
> > Dan
> > (dkubb)
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to