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