Diff for /loncom/interface/loncoursedata.pm between versions 1.201.2.4 and 1.201.2.5

version 1.201.2.4, 2021/03/04 23:55:05 version 1.201.2.5, 2021/03/05 17:18:40
Line 777  sub symb_is_for_task { Line 777  sub symb_is_for_task {
     return ($symb =~ /\.task$/);      return ($symb =~ /\.task$/);
 }  }
   
   my $requested_max_packet = 0;
   my $max_allowed_packet;
   
 sub update_full_student_data {  sub update_full_student_data {
     my ($sname,$sdom,$courseid) = @_;      my ($sname,$sdom,$courseid) = @_;
Line 964  sub update_full_student_data { Line 966  sub update_full_student_data {
     }      }
     ##      ##
     ## Store the response data      ## Store the response data
     $store_command = 'INSERT IGNORE INTO '.$fulldump_response_table.      my $store_prefix = 'INSERT IGNORE INTO '.$fulldump_response_table.
         ' VALUES '."\n";          ' VALUES '."\n";
     $store_rows = 0;      $store_rows = 0;
       unless ($requested_max_packet) {
           (undef,$max_allowed_packet) = $dbh->selectrow_array(
                                                qq{show variables LIKE ? },
                                                undef,
                                                "max_allowed_packet");
           if ($max_allowed_packet !~ /^\d+$/) {
               $max_allowed_packet = '';
           }
           $requested_max_packet = 1;
       }
       my @store_values = ();
       my $curr_values = '';
       my $curr_length = 0;
       my ($max_values);
       if ($max_allowed_packet) {
           $max_values = $max_allowed_packet - length($store_prefix);
       }
     while (my ($symb_id,$hash1) = each (%$respdata)) {      while (my ($symb_id,$hash1) = each (%$respdata)) {
         while (my ($part_id,$hash2) = each (%$hash1)) {          while (my ($part_id,$hash2) = each (%$hash1)) {
             while (my ($resp_id,$hash3) = each (%$hash2)) {              while (my ($resp_id,$hash3) = each (%$hash2)) {
Line 978  sub update_full_student_data { Line 997  sub update_full_student_data {
                     # and odd number of '\' cause insert errors to occur.                        # and odd number of '\' cause insert errors to occur.  
                     # Best trap this somehow...                      # Best trap this somehow...
                     $submission = $dbh->quote($submission);                      $submission = $dbh->quote($submission);
                     $store_command .= "('".                      my $sql_values = "('".
                         join("','",$symb_id,$part_id,                          join("','",$symb_id,$part_id,
                              $resp_id,$student_id,                               $resp_id,$student_id,
                              $transaction,                               $transaction,
Line 986  sub update_full_student_data { Line 1005  sub update_full_student_data {
                              $data->{'response_specific'},                               $data->{'response_specific'},
                              $data->{'response_specific_value'},                               $data->{'response_specific_value'},
                              $data->{'response_specific_2'},                               $data->{'response_specific_2'},
                              $data->{'response_specific_value_2'}).                               $data->{'response_specific_value_2'})."',";
                              "',".$submission."),";                      if ($max_values) {
                           my $length = length($sql_values) + length($submission."),");
                           if ($length > $max_values) {
                               &Apache::lonnet::logthis("SQL responsedata insert for student: $sname would exceed max_allowed_packet size");
                               &Apache::lonnet::logthis("symb_id: $symb_id, part_id: $part_id, resp_id: $resp_id");
                               &Apache::lonnet::logthis("You may want to increase the max_allowed_packet size from the current: $max_allowed_packet");
                               $sql_values .= $dbh->quote('WARNING: Submission too large -- see grading interface for actual submission')."),";
                               $length = length($sql_values);
                               &Apache::lonnet::logthis("Placeholder inserted instead of value of actual submission");
                               &Apache::lonnet::logthis("See grading interface for the actual submission");
                           } else {
                               $sql_values .= $submission."),";
                           }
                           if ($length + $curr_length > $max_values) {
                               push(@store_values,$curr_values);
                               $curr_values = $sql_values;
                               $curr_length = $length;
                           } else {
                               $curr_values .= $sql_values;
                               $curr_length += $length;
                           }
                       } else {
                           $curr_values .= $sql_values.$submission."),";
                       }
                     $store_rows++;                      $store_rows++;
                 }                  }
             }              }
         }          }
     }      }
     if ($store_rows) {      if ($store_rows) {
         chop($store_command);          if ($curr_values ne '') {
         $dbh->do($store_command);              push(@store_values,$curr_values);
         if ($dbh->err) {          }
             $returnstatus = 'error saving response data';          foreach my $item (@store_values) {
             &Apache::lonnet::logthis('insert error '.$dbh->errstr());              chop($item);
             &Apache::lonnet::logthis("While attempting\n".$store_command);              if ($item ne '') {
                   $dbh->do($store_prefix.$item);
                   if ($dbh->err) {
                       $returnstatus = 'error saving response data';
                       &Apache::lonnet::logthis('insert error '.$dbh->errstr());
                       &Apache::lonnet::logthis("While attempting\n".$store_prefix.$item);
                       last;
                   }
               }
         }          }
     }      }
     ##      ##
Line 1012  sub update_full_student_data { Line 1062  sub update_full_student_data {
         $returnstatus = 'error saving current data:'.$status;          $returnstatus = 'error saving current data:'.$status;
     } elsif ($status ne 'okay') {      } elsif ($status ne 'okay') {
         $returnstatus .= ' error saving current data:'.$status;          $returnstatus .= ' error saving current data:'.$status;
     }              }
     ##      ##
     ## Update the students time......      ## Update the students time......
     if ($returnstatus eq 'okay') {      if ($returnstatus eq 'okay') {
Line 1082  sub store_updatetime { Line 1132  sub store_updatetime {
     $dbh->do($request);      $dbh->do($request);
 }  }
   
 my $requested_max_packet = 0;  
 my $max_allowed_packet;  
   
 sub store_student_data {  sub store_student_data {
     my ($sname,$sdom,$courseid,$student_data) = @_;      my ($sname,$sdom,$courseid,$student_data) = @_;
     #      #

Removed from v.1.201.2.4  
changed lines
  Added in v.1.201.2.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>