send painful query to slave

Change-Id: I9d84220347cdc4f630250c26040ed5e4d2407f72
Reviewed-on: https://gerrit.instructure.com/15949
Reviewed-by: Brian Palmer <brianp@instructure.com>
QA-Review: Cody Cutrer <cody@instructure.com>
Tested-by: Cody Cutrer <cody@instructure.com>
This commit is contained in:
Cody Cutrer 2012-12-10 10:12:45 -07:00
parent 7b03752291
commit 698c127575
1 changed files with 34 additions and 32 deletions

View File

@ -1781,40 +1781,42 @@ class User < ActiveRecord::Base
opts[:start_at] ||= 2.weeks.ago
opts[:limit] ||= 20
submissions = []
submissions += self.submissions.after(opts[:start_at]).for_context_codes(context_codes).find(
:all,
:conditions => ["submissions.score IS NOT NULL AND assignments.workflow_state != ? AND assignments.muted = ?", 'deleted', false],
:include => [:assignment, :user, :submission_comments],
:order => 'submissions.created_at DESC',
:limit => opts[:limit]
)
ActiveRecord::Base::ConnectionSpecification.with_environment(:slave) do
submissions = []
submissions += self.submissions.after(opts[:start_at]).for_context_codes(context_codes).find(
:all,
:conditions => ["submissions.score IS NOT NULL AND assignments.workflow_state != ? AND assignments.muted = ?", 'deleted', false],
:include => [:assignment, :user, :submission_comments],
:order => 'submissions.created_at DESC',
:limit => opts[:limit]
)
# THIS IS SLOW, it takes ~230ms for mike
submissions += Submission.for_context_codes(context_codes).find(
:all,
:select => "submissions.*, last_updated_at_from_db",
:joins => self.class.send(:sanitize_sql_array, [<<-SQL, opts[:start_at], self.id, self.id]),
INNER JOIN (
SELECT MAX(submission_comments.created_at) AS last_updated_at_from_db, submission_id
FROM submission_comments, submission_comment_participants
WHERE submission_comments.id = submission_comment_id
AND (submission_comments.created_at > ?)
AND (submission_comment_participants.user_id = ?)
AND (submission_comments.author_id <> ?)
GROUP BY submission_id
) AS relevant_submission_comments ON submissions.id = submission_id
INNER JOIN assignments ON assignments.id = submissions.assignment_id AND assignments.workflow_state <> 'deleted'
SQL
:order => 'last_updated_at_from_db DESC',
:limit => opts[:limit],
:conditions => { "assignments.muted" => false }
)
# THIS IS SLOW, it takes ~230ms for mike
submissions += Submission.for_context_codes(context_codes).find(
:all,
:select => "submissions.*, last_updated_at_from_db",
:joins => self.class.send(:sanitize_sql_array, [<<-SQL, opts[:start_at], self.id, self.id]),
INNER JOIN (
SELECT MAX(submission_comments.created_at) AS last_updated_at_from_db, submission_id
FROM submission_comments, submission_comment_participants
WHERE submission_comments.id = submission_comment_id
AND (submission_comments.created_at > ?)
AND (submission_comment_participants.user_id = ?)
AND (submission_comments.author_id <> ?)
GROUP BY submission_id
) AS relevant_submission_comments ON submissions.id = submission_id
INNER JOIN assignments ON assignments.id = submissions.assignment_id AND assignments.workflow_state <> 'deleted'
SQL
:order => 'last_updated_at_from_db DESC',
:limit => opts[:limit],
:conditions => { "assignments.muted" => false }
)
submissions = submissions.sort_by{|t| (t.last_updated_at_from_db.to_datetime.in_time_zone rescue nil) || t.created_at}.reverse
submissions = submissions.uniq
submissions.first(opts[:limit])
submissions
submissions = submissions.sort_by{|t| (t.last_updated_at_from_db.to_datetime.in_time_zone rescue nil) || t.created_at}.reverse
submissions = submissions.uniq
submissions.first(opts[:limit])
submissions
end
end
memoize :submissions_for_context_codes