Use :joins instead of :include to pull in the changesets - this does an
authorTom Hughes <tom@compton.nu>
Wed, 29 Apr 2009 23:45:54 +0000 (23:45 +0000)
committerTom Hughes <tom@compton.nu>
Wed, 29 Apr 2009 23:45:54 +0000 (23:45 +0000)
inner join instead of a left outer join (which is fine as all objects should
have a changeset) and more importantly stops rails generating a subquery
that doesn't work.

script/statistics

index 5a17e8be40da68fd10a4d74be0536418e8614e7d..b076bef30e6be5f04bad237d146372e0e205121f 100755 (executable)
@@ -53,14 +53,11 @@ begin
 
   puts "<tr><th>GPX Files</th><td>#{day_count}</td><td>#{week_count}</td><td>#{month_count}</td></tr>"
 
-  day_count = OldNode.count(:user_id, :distinct => true,
-                            :include => :changeset,
+  day_count = OldNode.count(:user_id, :distinct => true, :joins => :changeset,
                             :conditions => "timestamp > NOW() - '1 DAY'::INTERVAL")
-  week_count = OldNode.count(:user_id, :distinct => true, 
-                             :include => :changeset,
+  week_count = OldNode.count(:user_id, :distinct => true,  :joins => :changeset,
                              :conditions => "timestamp > NOW() - '7 DAYS'::INTERVAL")
-  month_count = OldNode.count(:user_id, :distinct => true, 
-                              :include => :changeset,
+  month_count = OldNode.count(:user_id, :distinct => true, :joins => :changeset,
                               :conditions => "timestamp > NOW() - '28 DAYS'::INTERVAL")
 
   puts "<tr><th>Nodes</th><td>#{day_count}</td><td>#{week_count}</td><td>#{month_count}</td></tr>"
@@ -72,13 +69,13 @@ begin
   puts "<tr><th>Day</th><th>Week</th><th>Month</th></tr>"
 
   day_users = OldNode.count(:conditions => "timestamp > NOW() - '1 DAY'::INTERVAL",
-                            :include => :changeset, :group => :user_id,
+                            :joins => :changeset, :group => :user_id,
                             :order => "count_all DESC")
   week_users = OldNode.count(:conditions => "timestamp > NOW() - '7 DAYS'::INTERVAL",
-                             :include => :changeset, :group => :user_id,
+                             :joins => :changeset, :group => :user_id,
                              :order => "count_all DESC", :limit => 60)
   month_users = OldNode.count(:conditions => "timestamp > NOW() - '28 DAYS'::INTERVAL",
-                              :include => :changeset, :group => :user_id,
+                              :joins => :changeset, :group => :user_id,
                               :order => "count_all DESC", :limit => 60)
 
   SyncEnumerator.new(day_users, week_users, month_users).each do |row|