questionlib: MDL-21828 Fix database query that does not work in Oracle.
authorTim Hunt <T.J.Hunt@open.ac.uk>
Wed, 7 Apr 2010 09:47:19 +0000 (09:47 +0000)
committerTim Hunt <T.J.Hunt@open.ac.uk>
Wed, 7 Apr 2010 09:47:19 +0000 (09:47 +0000)
Bug report and fix thanks to David Binney.

lib/questionlib.php

index efb0224..453ac6f 100644 (file)
@@ -1033,7 +1033,9 @@ function question_preload_states($attemptid) {
 
     // The questionid field must be listed first so that it is used as the
     // array index in the array returned by $DB->get_records_sql
-    $statefields = 'n.questionid as question, s.*, n.sumpenalty, n.manualcomment, n.flagged, n.id as questionsessionid';
+    $statefields = 'n.questionid as question, s.id, s.attempt, ' .
+            's.seq_number, s.answer, s.timestamp, s.event, s.grade, s.raw_grade, ' .
+            's.penalty, n.sumpenalty, n.manualcomment, n.flagged, n.id as questionsessionid';
 
     // Load the newest states for the questions
     $sql = "SELECT $statefields
@@ -1101,8 +1103,11 @@ function question_load_states(&$questions, &$states, $cmoptions, $attempt, $last
                 // If the new attempt is to be based on this previous attempt.
                 // Find the responses from the previous attempt and save them to the new session
 
-                // Load the last graded state for the question
-                $statefields = 'n.questionid as question, s.*, n.sumpenalty';
+                // Load the last graded state for the question. Note, $statefields is
+                // the same as above, except that we don't want n.manualcomment.
+                $statefields = 'n.questionid as question, s.id, s.attempt, ' .
+                        's.seq_number, s.answer, s.timestamp, s.event, s.grade, s.raw_grade, ' .
+                        's.penalty, n.sumpenalty';
                 $sql = "SELECT $statefields
                           FROM {question_states} s, {question_sessions} n
                          WHERE s.id = n.newest