...
Reads
Call Chain | Query | Maps To New Query |
---|
FieldDataCache.__init__() / FieldDataCache.add_descriptor_descendants()
FieldDataCache.add_descriptors_to_cache()
FieldDataCache._retrieve_fields()
| return self._chunked_query( StudentModule, 'module_state_key__in', self._all_usage_ids(descriptors), course_id=self.course_id, student=self.user.pk, ) Ultimately, a objects.filter() call. | |
Writes
Call Chain | Query | Maps To New Query |
---|
FieldDataCache.find_or_create() DjangoKeyValueStore.set_many() | field_object = StudentModule(
course_id=self.course_id,
student_id=key.user_id,
module_state_key=key.block_scope_id,
state=json.dumps({}),
module_type=key.block_scope_id.block_type,
)
| |
DjangoKeyValueStore.set_many() | StudentModule.save() | |
DjangoKeyValueStore.delete()
| StudentModule.save()
| |
lms/djangoapps/class_dashboard/dashboard_data.py
Reads
Call Chain | Query | Maps To New Query |
---|
get_problem_grade_distribution()
| db_query = models.StudentModule.objects.filter(
course_id__exact=course_id,
grade__isnull=False,
module_type__exact="problem",
).values(
'module_state_key', 'grade', 'max_grade'
).annotate(
count_grade=Count('grade')
)
| |
get_sequential_open_distrib()
| db_query = models.StudentModule.objects.filter(
course_id__exact=course_id,
module_type__exact="sequential",
).values(
'module_state_key'
).annotate(
count_sequential=Count('module_state_key')
)
| |
get_problem_set_grade_distrib()
| db_query = models.StudentModule.objects.filter(
course_id__exact=course_id,
grade__isnull=False,
module_type__exact="problem",
module_state_key__in=problem_set,
).values(
'module_state_key',
'grade',
'max_grade',
).annotate(
count_grade=Count('grade')
).order_by(
'module_state_key', 'grade'
)
| |
get_students_opened_subsection()
| students = models.StudentModule.objects.select_related('student').filter(
module_state_key__exact=module_state_key,
module_type__exact='sequential',
).values(
'student__username', 'student__profile__name'
).order_by(
'student__profile__name'
)
| |
get_students_problem_grades()
| students = models.StudentModule.objects.select_related('student').filter(
module_state_key=module_state_key,
module_type__exact='problem',
grade__isnull=False,
).values(
'student__username', 'student__profile__name', 'grade', 'max_grade'
).order_by(
'student__profile__name'
)
| |
lms/djangoapps/courseware/grades.py
Reads
Call Chain | Query | Maps to New Query |
---|
answer_distributions()
| for module in StudentModule.all_submitted_problems_read_only(course_key):
...which is: queryset = cls.objects.filter(
course_id=course_id,
module_type='problem',
grade__isnull=False
)
if "read_replica" in settings.DATABASES:
return queryset.using("read_replica")
else:
return queryset
| |
common/djangoapps/xmodule_modifiers.py
This access behaves poorly - it accesses the CSM table via direct SQL!
Call Chain | Query | Maps to New Query |
---|
grade_histogram() | SELECT courseware_studentmodule.grade,
COUNT(courseware_studentmodule.student_id)
FROM courseware_studentmodule
WHERE courseware_studentmodule.module_id=%s
GROUP BY courseware_studentmodule.grade
| |
lms/djangoapps/courseware/entrance_exams.py
Determines a user's entrance exam score via direct CSM access.
Call Chain | Query | Maps to New Query |
---|
_calculate_entrance_exam_score()
| student_modules = StudentModule.objects.filter(
student=user,
course_id=course_descriptor.id,
module_state_key__in=exam_module_ids,
)
| |