diff --git a/lib/dm-core/collection.rb b/lib/dm-core/collection.rb index ad3886221..50870d781 100644 --- a/lib/dm-core/collection.rb +++ b/lib/dm-core/collection.rb @@ -1116,7 +1116,11 @@ def lazy_load tail = self.tail query = self.query - resources = repository.read(query) + resources = begin + repository.read(query) + rescue Query::InvalidConditionsError + [] + end # remove already known results resources -= head if head.any? diff --git a/lib/dm-core/model.rb b/lib/dm-core/model.rb index f206873dc..01a06f8df 100644 --- a/lib/dm-core/model.rb +++ b/lib/dm-core/model.rb @@ -380,7 +380,11 @@ def first(*args) if limit_specified all(query) else - query.repository.read(query).first + begin + query.repository.read(query).first + rescue Query::InvalidConditionsError + nil + end end end @@ -416,7 +420,11 @@ def last(*args) if limit_specified all(query) else - query.repository.read(query).last + begin + query.repository.read(query).last + rescue Query::InvalidConditionsError + nil + end end end diff --git a/lib/dm-core/query.rb b/lib/dm-core/query.rb index b47fd3e7d..c41cfed87 100644 --- a/lib/dm-core/query.rb +++ b/lib/dm-core/query.rb @@ -29,6 +29,8 @@ class Query include DataMapper::Assertions extend Equalizer + InvalidConditionsError = Class.new(StandardError) + OPTIONS = [ :fields, :links, :conditions, :offset, :limit, :order, :unique, :add_reversed, :reload ].to_set.freeze equalize :repository, :model, :sorted_fields, :links, :conditions, :order, :offset, :limit, :reload?, :unique?, :add_reversed? diff --git a/lib/dm-core/repository.rb b/lib/dm-core/repository.rb index 66324ec4b..83b5446bb 100644 --- a/lib/dm-core/repository.rb +++ b/lib/dm-core/repository.rb @@ -158,7 +158,7 @@ def create(resources) # # @api semipublic def read(query) - return [] unless query.valid? + raise Query::InvalidConditionsError unless query.valid? query.model.load(adapter.read(query), query) end