Last active
August 29, 2015 14:18
-
-
Save rklancer/fc33fb89ef8dc8e8c804 to your computer and use it in GitHub Desktop.
Queries for Arg Block report
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Start with a list of endpoints; here we just use all of them | |
endpoints = Run.where("remote_endpoint IS NOT NULL").map &:remote_endpoint | |
select_params = [ | |
{ | |
:embeddable_type => "Embeddable::OpenResponse", | |
:embeddable_table => "embeddable_open_responses", | |
:answer_table => "embeddable_open_response_answers", | |
:question_foreign_key => "open_response_id", | |
:feedback_table => "c_rater_feedback_items", | |
:usefulness_score_column => "c_rater_feedback_submissions.usefulness_score", | |
:usefulness_score_join => "LEFT OUTER JOIN c_rater_feedback_submissions ON c_rater_feedback_submissions.id = c_rater_feedback_items.feedback_submission_id" | |
}, | |
{ | |
:embeddable_type => "Embeddable::MultipleChoice", | |
:embeddable_table => "embeddable_multiple_choices", | |
:answer_table => "embeddable_multiple_choice_answers", | |
:question_foreign_key => "multiple_choice_id", | |
:feedback_table => "embeddable_feedback_items", | |
:usefulness_score_column => "NULL", | |
:usefulness_score_join => "" | |
} | |
] | |
selects = select_params.map do |s| | |
select = <<SQL | |
SELECT DISTINCT | |
runs.remote_endpoint AS remote_endpoint, | |
lightweight_activities.id AS activity_id, | |
interactive_pages.id AS page_id, | |
interactive_pages.position AS page_index, | |
page_items.position AS question_index, | |
#{s[:embeddable_table]}.id AS question_id, | |
#{s[:embeddable_table]}.prompt AS prompt, | |
#{s[:feedback_table]}.answer_text AS answer, | |
#{s[:feedback_table]}.score AS score, | |
#{s[:feedback_table]}.created_at AS submit_time, | |
#{s[:feedback_table]}.feedback_text AS feedback, | |
#{s[:usefulness_score_column]} AS usefulness_score | |
FROM runs | |
INNER JOIN lightweight_activities | |
ON lightweight_activities.id = runs.activity_id | |
INNER JOIN interactive_pages | |
ON interactive_pages.lightweight_activity_id = lightweight_activities.id | |
INNER JOIN page_items | |
ON page_items.interactive_page_id = interactive_pages.id | |
INNER JOIN #{s[:embeddable_table]} | |
ON #{s[:embeddable_table]}.id = page_items.embeddable_id | |
LEFT OUTER JOIN #{s[:answer_table]} | |
ON #{s[:answer_table]}.run_id = runs.id AND #{s[:answer_table]}.#{s[:question_foreign_key]} = #{s[:embeddable_table]}.id | |
LEFT OUTER JOIN #{s[:feedback_table]} | |
ON #{s[:feedback_table]}.answer_id = #{s[:answer_table]}.id | |
#{s[:usefulness_score_join]} | |
WHERE | |
page_items.section = "arg_block" | |
AND | |
embeddable_type = "#{s[:embeddable_type]}" | |
AND | |
remote_endpoint in ("#{endpoints.join('","')}") | |
SQL | |
end | |
order_by = <<SQL | |
ORDER BY | |
activity_id, | |
page_index, | |
question_index | |
SQL | |
sql = selects.join("\n UNION\n") + order_by + ";" | |
results = ActiveRecord::Base.connection.execute(sql) | |
exp = ActiveRecord::Base.connection.explain(sql) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment