From 88083193a6b4e854ea59e630162da0d1b5c66526 Mon Sep 17 00:00:00 2001
Message-Id: <88083193a6b4e854ea59e630162da0d1b5c66526.1343209486.git.dmitriy.trt@gmail.com>
From: "Dmitriy.trt" <dmitriy.trt@gmail.com>
Date: Wed, 25 Jul 2012 16:44:41 +0700
Subject: [PATCH] Issue #1699728: Fix slowdown on question edit page, add
 missing indexes

---
 question_types/quiz_question/quiz_question.core.inc |    4 ++--
 quiz.install                                        |   11 +++++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/question_types/quiz_question/quiz_question.core.inc b/question_types/quiz_question/quiz_question.core.inc
index defda54..4c2efdc 100644
--- a/question_types/quiz_question/quiz_question.core.inc
+++ b/question_types/quiz_question/quiz_question.core.inc
@@ -590,9 +590,9 @@ abstract class QuizQuestion {
     if (!isset($this->node->vid)) {
       return FALSE;
     }
-    $answered = db_query('SELECT * FROM {quiz_node_results} qnres
+    $answered = db_query_range('SELECT 1 FROM {quiz_node_results} qnres
             JOIN {quiz_node_relationship} qnrel ON (qnres.vid = qnrel.parent_vid)
-            WHERE qnrel.child_vid = :child_vid', array(':child_vid' => $this->node->vid))->fetch();
+            WHERE qnrel.child_vid = :child_vid', 0, 1, array(':child_vid' => $this->node->vid))->fetch();
     return $answered ? TRUE : FALSE;
   }
 
diff --git a/quiz.install b/quiz.install
index 63dc334..65dc118 100644
--- a/quiz.install
+++ b/quiz.install
@@ -276,6 +276,7 @@ function quiz_schema() {
     'primary key' => array('parent_nid', 'parent_vid', 'child_nid', 'child_vid'),
     'indexes' => array(
       'parent_id' => array('parent_vid'),
+      'child_id' => array('child_vid'),
     ),
   );
 
@@ -351,6 +352,7 @@ function quiz_schema() {
     'primary key' => array('result_id'),
     'indexes' => array(
       'user_results' => array('uid', 'vid', 'nid'),
+      'vid' => array('vid'),
     ),
   );
 
@@ -697,6 +699,15 @@ function quiz_update_7402(&$sandbox) {
 }
 
 /**
+ * Adds index on vid column to the quiz_node_results table and on child_vid to
+ * the quiz_node_relationship table.
+ */
+function quiz_update_7403() {
+  db_add_index('quiz_node_results', 'vid', array('vid'));
+  db_add_index('quiz_node_relationship', 'child_id', array('child_vid'));
+}
+
+/**
  * Implements hook_uninstall().
  */
 function quiz_uninstall() {
-- 
1.7.10.4

