diff --git a/lib/data_mapper/adapters/data_objects_adapter.rb b/lib/data_mapper/adapters/data_objects_adapter.rb index e855139..416c952 100644 --- a/lib/data_mapper/adapters/data_objects_adapter.rb +++ b/lib/data_mapper/adapters/data_objects_adapter.rb @@ -536,8 +536,8 @@ module DataMapper unless query.order.empty? parts = [] query.order.each do |item| - parts << item.name if DataMapper::Property === item - parts << "#{item.property.name} #{item.direction}" if DataMapper::Query::Direction === item + parts << item.field if DataMapper::Property === item + parts << "#{item.property.field} #{item.direction}" if DataMapper::Query::Direction === item end sql << " ORDER BY #{parts.join(', ')}" end diff --git a/spec/unit/query_spec.rb b/spec/unit/query_spec.rb index 9f43f84..b473ab2 100644 --- a/spec/unit/query_spec.rb +++ b/spec/unit/query_spec.rb @@ -237,6 +237,21 @@ describe DataMapper::Query do other = DataMapper::Query.new(repository(:mock), Article, :order => order) @query.update(other).order.should == order end + + it "#order with a property that uses :field => something" do + class Article + property :plank, String, :field => 'real_plank' + end + + query = DataMapper::Query.new(repository(:mock), Article, :order => [:plank.desc]) + + query.order.first.property.should == Article.properties[:plank] + query.order.first.property.field.should == 'real_plank' + query.order.first.direction.should == :desc + + # this is the real test here, I can't find any other way to make it parse the order into sql than to run the whole query through + repository(:mock).adapter.query_read_statement(query).should == %Q{SELECT "id", "blog_id", "created_at", "author", "title" FROM "articles" ORDER BY real_plank desc} + end # dkubb: I am not sure i understand the intent here. link now needs to be # a DM::Assoc::Relationship or the name (Symbol or String) of an