Thanks, appreciate your help. On Mar 4, 9:01 pm, RipTheJacker <kab...@gmail.com> wrote: > Ok, I tested and committed a fix, you can see it > here:http://github.com/kabari/dm-core/commit/02939dabadf2e685cb03afb4fa7d1... > and it is also available in my 10.2 patch > repo:http://github.com/kabari/dm-core/tree/10_2_patch > > On Mar 4, 4:59 pm, RipTheJacker <kab...@gmail.com> wrote: > > > Yea you're right, it's a bug because doing the same thing with #all or > > #first does not update the query. I believe the issue is in #last > > because it calls Query#reverse! which permanently changes the query > > but I haven't written any tests. I'll work on it and submit a patch. > > > On Mar 4, 8:15 am, MarkMT <mark.thom...@ieee.org> wrote: > > > > Rip, I'm still not persuaded that this is not a bug. Regarding this - > > > > > "s.last.name" the query is updated with #last, so now the query is > > > > like this: User.all(:order => [:age.asc]).last => which is like > > > > User.all(:order => [:age.asc]).update(:limit => 1, :order => > > > > [:age.desc]) > > > > I agree with your description of what the query required to retrieve > > > the last element looks like, but there's nothing in the API > > > documentation to suggest that #last modifies its receiver in the > > > process. Rather it says that it *returns* the "last resource in the > > > entries of this collection, or a new collection whose query has been > > > merged". This is contrast to the documentation for #update which > > > states explicitly that it returns 'self'. > > > > I agree that #last does seem to be modifying the query associated with > > > the collection it is called on, but I don't see any reason that this > > > would be the intended behavior. > > > > On Mar 3, 7:56 pm, RipTheJacker <kab...@gmail.com> wrote: > > > > > It's calling an extra query and leaving it there: > > > > > "first query > > > > ~ (0.000097) SELECT "id", "age", "name" FROM "users" ORDER BY "age" > > > > ["Jill", "Mary", "Bob", "Jack"] > > > > "Jack" > > > > ["Jill", "Mary", "Bob", "Jack"] > > > > second query > > > > ~ (0.000081) SELECT "id", "age", "name" FROM "users" ORDER BY "age" > > > > DESC LIMIT 1 > > > > "Jack" > > > > ~ (0.000078) SELECT "id", "age", "name" FROM "users" ORDER BY "age" > > > > DESC > > > > ["Bob", "Mary", "Jill", "Jack"]" > > > > > I don't think it is a bug, here's how it works: > > > > > "s = User.all(:order => [:age.asc])" > > > > "s" is just a DataMapper::Query until you call something on it. > > > > "s.map{|r| r.name}" <- now you've called something so the query > > > > executes here. > > > > "s" is now a reference to a DataMapper::Collection, because you called > > > > the query > > > > "s.last.name" -> #last is calling DataMapper::Collection#last > > > > > In the second part: > > > > "s = User.all(:order => [:age.asc])" > > > > "s" again is just a query at this point > > > > "s.last.name" the query is updated with #last, so now the query is > > > > like this: User.all(:order => [:age.asc]).last => which is like > > > > User.all(:order => [:age.asc]).update(:limit => 1, :order => > > > > [:age.desc]) because DM will give you the "last result in users sorted > > > > by age asc" which is the same as saying the "first result in users > > > > sorted by age desc" > > > > > Here's how it -might- be a bug... (in the second example) > > > > "s" is a reference to an updated query as opposed to a single User > > > > instance, or it might be a collection, I don't know here... > > > > "s.map{|r| r.name}" #map is being called on the updated query > > > > > On Feb 28, 11:01 pm, MarkMT <mark.thom...@ieee.org> wrote: > > > > > > Sorry, I pasted the url for another gist I had been looking at from a > > > > > different thread. This is the one I meant to refer to - > > > > > >http://gist.github.com/318072 > > > > > > On Feb 28, 10:57 pm, MarkMT <mark.thom...@ieee.org> wrote: > > > > > > > I've run into a problem that seems like it might be a bug... > > > > > > > If I retrieve a set of records using the ':order' option and then > > > > > > call > > > > > > 'last' on the resulting collection, the collection seems to end up > > > > > > being mis-ordered. The problem only seems to manifest itself if I > > > > > > haven't made an attempt to do anything with the ordered collection > > > > > > prior to calling 'last'. > > > > > > > Here's a gist that illustrates -http://gist.github.com/305019. > > > > > > > This is with dm 0.10.2. Am I misunderstanding how this should work? > > > > > > > Mark.
-- You received this message because you are subscribed to the Google Groups "DataMapper" group. To post to this group, send email to datamap...@googlegroups.com. To unsubscribe from this group, send email to datamapper+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/datamapper?hl=en.