original_string: public function load_attempts_at_question($questionid, qubaid_condition $qubaids) {
          $sql = "
  SELECT
      quba.contextid,
      quba.preferredbehaviour,
      qa.id AS questionattemptid,
      qa.questionusageid,
      qa.slot,
      qa.behaviour,
      qa.questionid,
      qa.variant,
      qa.maxmark,
      qa.minfraction,
      qa.maxfraction,
      qa.flagged,
      qa.questionsummary,
      qa.rightanswer,
      qa.responsesummary,
      qa.timemodified,
      qas.id AS attemptstepid,
      qas.sequencenumber,
      qas.state,
      qas.fraction,
      qas.timecreated,
      qas.userid,
      qasd.name,
      qasd.value
  
  FROM {$qubaids->from_question_attempts('qa')}
  JOIN {question_usages} quba ON quba.id = qa.questionusageid
  LEFT JOIN {question_attempt_steps} qas ON qas.questionattemptid = qa.id
  LEFT JOIN {question_attempt_step_data} qasd ON qasd.attemptstepid = qas.id
  
  WHERE
      {$qubaids->where()} AND
      qa.questionid = :questionid
  
  ORDER BY
      quba.id,
      qa.id,
      qas.sequencenumber";
  
          // For qubaid_list must call this after calling methods that generate sql.
          $params = $qubaids->from_where_params();
          $params['questionid'] = $questionid;
  
          $records = $this->db->get_recordset_sql($sql, $params);
  
          $questionattempts = array();
          while ($records->valid()) {
              $record = $records->current();
              $questionattempts[$record->questionattemptid] =
                      question_attempt::load_from_records($records,
                      $record->questionattemptid, new question_usage_null_observer(),
                      $record->preferredbehaviour);
          }
          $records->close();
  
          return $questionattempts;
      }
code: public function load_attempts_at_question($questionid, qubaid_condition $qubaids) {
          $sql = "
  SELECT
      quba.contextid,
      quba.preferredbehaviour,
      qa.id AS questionattemptid,
      qa.questionusageid,
      qa.slot,
      qa.behaviour,
      qa.questionid,
      qa.variant,
      qa.maxmark,
      qa.minfraction,
      qa.maxfraction,
      qa.flagged,
      qa.questionsummary,
      qa.rightanswer,
      qa.responsesummary,
      qa.timemodified,
      qas.id AS attemptstepid,
      qas.sequencenumber,
      qas.state,
      qas.fraction,
      qas.timecreated,
      qas.userid,
      qasd.name,
      qasd.value
  
  FROM {$qubaids->from_question_attempts('qa')}
  JOIN {question_usages} quba ON quba.id = qa.questionusageid
  LEFT JOIN {question_attempt_steps} qas ON qas.questionattemptid = qa.id
  LEFT JOIN {question_attempt_step_data} qasd ON qasd.attemptstepid = qas.id
  
  WHERE
      {$qubaids->where()} AND
      qa.questionid = :questionid
  
  ORDER BY
      quba.id,
      qa.id,
      qas.sequencenumber";
  
          // For qubaid_list must call this after calling methods that generate sql.
          $params = $qubaids->from_where_params();
          $params['questionid'] = $questionid;
  
          $records = $this->db->get_recordset_sql($sql, $params);
  
          $questionattempts = array();
          while ($records->valid()) {
              $record = $records->current();
              $questionattempts[$record->questionattemptid] =
                      question_attempt::load_from_records($records,
                      $record->questionattemptid, new question_usage_null_observer(),
                      $record->preferredbehaviour);
          }
          $records->close();
  
          return $questionattempts;
      }
code_tokens: public function load_attempts_at_question ( $ questionid , qubaid_condition $ qubaids ) { $ sql = "
  SELECT
      quba.contextid,
      quba.preferredbehaviour,
      qa.id AS questionattemptid,
      qa.questionusageid,
      qa.slot,
      qa.behaviour,
      qa.questionid,
      qa.variant,
      qa.maxmark,
      qa.minfraction,
      qa.maxfraction,
      qa.flagged,
      qa.questionsummary,
      qa.rightanswer,
      qa.responsesummary,
      qa.timemodified,
      qas.id AS attemptstepid,
      qas.sequencenumber,
      qas.state,
      qas.fraction,
      qas.timecreated,
      qas.userid,
      qasd.name,
      qasd.value
  
  FROM {$qubaids->from_question_attempts('qa')}
  JOIN {question_usages} quba ON quba.id = qa.questionusageid
  LEFT JOIN {question_attempt_steps} qas ON qas.questionattemptid = qa.id
  LEFT JOIN {question_attempt_step_data} qasd ON qasd.attemptstepid = qas.id
  
  WHERE
      {$qubaids->where()} AND
      qa.questionid = :questionid
  
  ORDER BY
      quba.id,
      qa.id,
      qas.sequencenumber" ; // For qubaid_list must call this after calling methods that generate sql. $ params = $ qubaids -> from_where_params ( ) ; $ params [ 'questionid' ] = $ questionid ; $ records = $ this -> db -> get_recordset_sql ( $ sql , $ params ) ; $ questionattempts = array ( ) ; while ( $ records -> valid ( ) ) { $ record = $ records -> current ( ) ; $ questionattempts [ $ record -> questionattemptid ] = question_attempt :: load_from_records ( $ records , $ record -> questionattemptid , new question_usage_null_observer ( ) , $ record -> preferredbehaviour ) ; } $ records -> close ( ) ; return $ questionattempts ; }
docstring: Load all the attempts at a given queston from a set of question_usages.
  steps.
  
  This method may be called publicly.
  
  @param int $questionid the question to load all the attempts fors.
  @param qubaid_condition $qubaids used to restrict which usages are included
  in the query. See {@link qubaid_condition}.
  @return question_attempt[] array of question_attempts that were loaded.
docstring_tokens: Load all the attempts at a given queston from a set of question_usages . steps .