use multi-column plucks for preload_conversation_context_codes
faster than using hashes Change-Id: I1f6006a650ae69d1f83293548d2571562212351f Reviewed-on: https://gerrit.instructure.com/87883 Tested-by: Jenkins Reviewed-by: Jeremy Stanley <jeremy@instructure.com> Product-Review: James Williams <jamesw@instructure.com> QA-Review: James Williams <jamesw@instructure.com>
This commit is contained in:
parent
a18227c2cb
commit
26263b2d82
|
@ -2142,15 +2142,12 @@ class User < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
# don't instantiate a buttload of objects if we can help it
|
||||
def self.pluck_global_id_rows(relation)
|
||||
rows = ActiveRecord::Base.connection.select_all(relation.to_sql)
|
||||
rows.each do |row|
|
||||
row.each do |k, id|
|
||||
row[k] = Shard.relative_id_for(id, Shard.current, Shard.birth)
|
||||
def self.convert_global_id_rows(rows)
|
||||
rows.map do |row|
|
||||
row.map do |id|
|
||||
Shard.relative_id_for(id, Shard.current, Shard.birth)
|
||||
end
|
||||
end
|
||||
rows
|
||||
end
|
||||
|
||||
def self.preload_conversation_context_codes(users)
|
||||
|
@ -2166,37 +2163,34 @@ class User < ActiveRecord::Base
|
|||
concluded_contexts = {}
|
||||
|
||||
Shard.with_each_shard(shards.to_a) do
|
||||
course_rows = pluck_global_id_rows(
|
||||
course_rows = convert_global_id_rows(
|
||||
Enrollment.joins(:course).
|
||||
where(User.enrollment_conditions(:active)).
|
||||
where(user_id: users).
|
||||
select([:user_id, :course_id]).
|
||||
uniq)
|
||||
course_rows.each do |r|
|
||||
active_contexts[r['user_id']] ||= []
|
||||
active_contexts[r['user_id']] << "course_#{r['course_id']}"
|
||||
distinct.pluck(:user_id, :course_id))
|
||||
course_rows.each do |user_id, course_id|
|
||||
active_contexts[user_id] ||= []
|
||||
active_contexts[user_id] << "course_#{course_id}"
|
||||
end
|
||||
|
||||
cc_rows = pluck_global_id_rows(
|
||||
cc_rows = convert_global_id_rows(
|
||||
Enrollment.joins(:course).
|
||||
where(User.enrollment_conditions(:completed)).
|
||||
where(user_id: users).
|
||||
select([:user_id, :course_id]).
|
||||
uniq)
|
||||
cc_rows.each do |r|
|
||||
concluded_contexts[r['user_id']] ||= []
|
||||
concluded_contexts[r['user_id']] << "course_#{r['course_id']}"
|
||||
distinct.pluck(:user_id, :course_id))
|
||||
cc_rows.each do |user_id, course_id|
|
||||
concluded_contexts[user_id] ||= []
|
||||
concluded_contexts[user_id] << "course_#{course_id}"
|
||||
end
|
||||
|
||||
group_rows = pluck_global_id_rows(
|
||||
group_rows = convert_global_id_rows(
|
||||
GroupMembership.joins(:group).
|
||||
merge(User.instance_exec(&User.reflections[CANVAS_RAILS4_0 ? :current_group_memberships : 'current_group_memberships'].scope).only(:where)).
|
||||
where(user_id: users).
|
||||
select([:user_id, :group_id]).
|
||||
uniq)
|
||||
group_rows.each do |r|
|
||||
active_contexts[r['user_id']] ||= []
|
||||
active_contexts[r['user_id']] << "group_#{r['group_id']}"
|
||||
distinct.pluck(:user_id, :group_id))
|
||||
group_rows.each do |user_id, group_id|
|
||||
active_contexts[user_id] ||= []
|
||||
active_contexts[user_id] << "group_#{group_id}"
|
||||
end
|
||||
end
|
||||
Shard.birth.activate do
|
||||
|
|
Loading…
Reference in New Issue