Using dm-core 0.9.11, finder chaining can be broken by the unwary:

Zoo.all(:conditions => ["tigers is null or lions is null"])
 Above works fine

Zoo.all(:open => true)

this also works fine.

Assume we define some scopes....

def self.cats_missing
  all(:conditions => ["tigers is null or lions is null"])
end

def self.open
  all(:open => true)
end

Now let's say we try this:

zoos_open_but_missing_cats = Zoo.open.cats_missing

We'll get the expected results. However, try this:

zoos_open_but_missing_cats = Zoo.cats_missing.open

You'll get some unexpected results, because this query (approx) is
getting generated:

SELECT * FROM `zoos` WHERE tigers is null or lions is null and `open`
= TRUE

which gets parsed like this (maybe mysql specific, but this is an orm
after all):

SELECT * FROM `zoos` WHERE (tigers is null) or ((lions is null) and
(`open` = TRUE))

I might be expressing this badly, but I think any call to all or first
should be encapsulated prior to chaining so that order doesn't matter.

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