<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -30,14 +30,12 @@ module DataMapper
 
         def aggregate_read_statement(aggregate_function, property, query)
           statement = &quot;SELECT #{aggregate_field_statement(query.repository, aggregate_function, property, query.links.any?)}&quot;
+          statement &lt;&lt; &quot;, #{fields_statement(query)}&quot;                unless query.fields.empty?
           statement &lt;&lt; &quot; FROM #{quote_table_name(query.model.storage_name(query.repository.name))}&quot;
           statement &lt;&lt; links_statement(query)                        if query.links.any?
           statement &lt;&lt; &quot; WHERE #{conditions_statement(query)}&quot;       if query.conditions.any?
-
-          # TODO: when GROUP BY support added, uncomment this, and (by default) have
-          # it sort on the non-aggregate fields being SELECTed
-          #statement &lt;&lt; &quot; ORDER BY #{order_statement(query)}&quot;         if query.order.any?
-
+          statement &lt;&lt; &quot; GROUP BY #{fields_statement(query)}&quot;        if query.unique?
+          statement &lt;&lt; &quot; ORDER BY #{order_statement(query)}&quot;         if query.order.any?
           statement &lt;&lt; &quot; LIMIT #{quote_column_value(query.limit)}&quot;   if query.limit
           statement &lt;&lt; &quot; OFFSET #{quote_column_value(query.offset)}&quot; if query.offset &amp;&amp; query.offset &gt; 0
           statement</diff>
      <filename>dm-aggregates/lib/dm-aggregates/adapters/data_objects_adapter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,17 @@ module DataMapper
     private
 
     def with_repository_and_property(*args, &amp;block)
-      query         = args.last.respond_to?(:merge) ? args.pop : {}
+      query = args.last.respond_to?(:merge) ? args.pop : {}
+
+      if query.kind_of?(Hash)
+        if query.has_key?(:fields) &amp;&amp; query[:fields].any?
+          query[:unique] = true
+          query[:order] ||= query[:fields]
+        else
+          query[:fields] = []
+        end
+      end
+
       property_name = args.first
 
       query      = scoped_query(query)</diff>
      <filename>dm-aggregates/lib/dm-aggregates/collection.rb</filename>
    </modified>
    <modified>
      <diff>@@ -21,7 +21,7 @@ module DataMapper
     # @public
     def count(*args)
       with_repository_and_property(*args) do |repository,property,query|
-        repository.count(property, query.merge(:limit =&gt; 1))
+        repository.count(property, query)
       end
     end
 
@@ -42,7 +42,7 @@ module DataMapper
     def min(*args)
       with_repository_and_property(*args) do |repository,property,query|
         check_property_is_number(property)
-        repository.min(property, query.merge(:limit =&gt; 1))
+        repository.min(property, query)
       end
     end
 
@@ -63,7 +63,7 @@ module DataMapper
     def max(*args)
       with_repository_and_property(*args) do |repository,property,query|
         check_property_is_number(property)
-        repository.max(property, query.merge(:limit =&gt; 1))
+        repository.max(property, query)
       end
     end
 
@@ -84,7 +84,7 @@ module DataMapper
     def avg(*args)
       with_repository_and_property(*args) do |repository,property,query|
         check_property_is_number(property)
-        repository.avg(property, query.merge(:limit =&gt; 1))
+        repository.avg(property, query)
       end
     end
 
@@ -105,7 +105,7 @@ module DataMapper
     def sum(*args)
       with_repository_and_property(*args) do |repository,property,query|
         check_property_is_number(property)
-        repository.sum(property, query.merge(:limit =&gt; 1))
+        repository.sum(property, query)
       end
     end
 </diff>
      <filename>dm-aggregates/lib/dm-aggregates/functions.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,17 @@ module DataMapper
     private
 
     def with_repository_and_property(*args, &amp;block)
-      query         = args.last.respond_to?(:merge) ? args.pop : {}
+      query = args.last.respond_to?(:merge) ? args.pop : {}
+
+      if query.kind_of?(Hash)
+        if query.has_key?(:fields) &amp;&amp; query[:fields].any?
+          query[:unique] = true
+          query[:order] ||= query[:fields]
+        else
+          query[:fields] = []
+        end
+      end
+
       property_name = args.first
 
       query      = scoped_query(query)</diff>
      <filename>dm-aggregates/lib/dm-aggregates/model.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>c09b86be3b5329ea55edabb396b3806f07531da1</id>
    </parent>
  </parents>
  <author>
    <name>Dan Kubb</name>
    <email>dan.kubb@autopilotmarketing.com</email>
  </author>
  <url>http://github.com/sam/dm-more/commit/c366fee263c578c2363b2242d61b935d8b556094</url>
  <id>c366fee263c578c2363b2242d61b935d8b556094</id>
  <committed-date>2008-07-14T22:49:32-07:00</committed-date>
  <authored-date>2008-07-14T22:49:32-07:00</authored-date>
  <message>Initial addition of GROUP BY support</message>
  <tree>f4b9c5e1c042ee417fead86bf3bf735c654e2808</tree>
  <committer>
    <name>Dan Kubb</name>
    <email>dan.kubb@autopilotmarketing.com</email>
  </committer>
</commit>
