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 -~----------~----~----~----~------~----~------~--~---
