version 1.203, 2018/03/11 12:44:22
|
version 1.206, 2021/03/04 23:54:36
|
Line 1082 sub store_updatetime {
|
Line 1082 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) = @_; |
# |
# |
Line 1102 sub store_student_data {
|
Line 1105 sub store_student_data {
|
my $starttime = Time::HiRes::time; |
my $starttime = Time::HiRes::time; |
my $elapsed = 0; |
my $elapsed = 0; |
my $rows_stored; |
my $rows_stored; |
my $store_parameters_command = 'INSERT IGNORE INTO '.$parameters_table. |
my $store_parameters_prefix = 'INSERT IGNORE INTO '.$parameters_table. |
' VALUES '."\n"; |
' VALUES '."\n"; |
my $num_parameters = 0; |
my $num_parameters = 0; |
my $store_performance_command = 'INSERT IGNORE INTO '.$performance_table. |
my $store_performance_prefix = 'INSERT IGNORE INTO '.$performance_table. |
' VALUES '."\n"; |
' VALUES '."\n"; |
return ('error',undef) if (! defined($dbh)); |
return ('error',undef) if (! defined($dbh)); |
|
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_parameters_values = (); |
|
my $curr_params_values = ''; |
|
my $curr_params_length = 0; |
|
my @store_performance_values = (); |
|
my $curr_perf_values = ''; |
|
my $curr_perf_length = 0; |
|
my ($max_param,$max_perf); |
|
if ($max_allowed_packet) { |
|
$max_param = $max_allowed_packet - length($store_parameters_prefix); |
|
$max_perf = $max_allowed_packet - length($store_performance_prefix); |
|
} |
while (my ($current_symb,$param_hash) = each(%{$student_data})) { |
while (my ($current_symb,$param_hash) = each(%{$student_data})) { |
# |
# |
# make sure the symb is set up properly |
# make sure the symb is set up properly |
Line 1120 sub store_student_data {
|
Line 1144 sub store_student_data {
|
$symb_id,$student_id, |
$symb_id,$student_id, |
$parameter)."',". |
$parameter)."',". |
$dbh->quote($value)."),\n"; |
$dbh->quote($value)."),\n"; |
$num_parameters ++; |
|
if ($sql_parameter !~ /''/) { |
if ($sql_parameter !~ /''/) { |
$store_parameters_command .= $sql_parameter; |
if ($max_param) { |
|
my $length = length($sql_parameter); |
|
if ($length > $max_param) { |
|
&Apache::lonnet::logthis("SQL parameter insert for student: $sname for parameter: $parameter would exceed max_allowed_packet size"); |
|
&Apache::lonnet::logthis("symb_id: $symb_id"); |
|
&Apache::lonnet::logthis("You may want to increase the max_allowed_packet size from the current: $max_allowed_packet"); |
|
if ($parameter =~ /\.submission$/) { |
|
$sql_parameter = "('".join("','", |
|
$symb_id,$student_id, |
|
$parameter)."',". |
|
$dbh->quote('WARNING: Submission too large -- see grading interface for actual submission')."),\n"; |
|
$length = length($sql_parameter); |
|
&Apache::lonnet::logthis("Placeholder inserted instead of value of actual submission"); |
|
&Apache::lonnet::logthis("See grading interface for the actual submission"); |
|
} else { |
|
&Apache::lonnet::logthis("Skipping this item"); |
|
next; |
|
} |
|
} |
|
if ($length + $curr_params_length > $max_param) { |
|
push(@store_parameters_values,$curr_params_values); |
|
$curr_params_values = $sql_parameter; |
|
$curr_params_length = $length; |
|
} else { |
|
$curr_params_values .= $sql_parameter; |
|
$curr_params_length += $length; |
|
} |
|
} else { |
|
$curr_params_values .= $sql_parameter; |
|
} |
#$rows_stored++; |
#$rows_stored++; |
|
$num_parameters ++; |
} |
} |
} |
} |
} |
} |
Line 1165 sub store_student_data {
|
Line 1218 sub store_student_data {
|
"('".join("','",$symb_id,$student_id,$part_id,$part, |
"('".join("','",$symb_id,$student_id,$part_id,$part, |
$solved,$tries,$awarded,$award, |
$solved,$tries,$awarded,$award, |
$awarddetail,$timestamp)."'),\n"; |
$awarddetail,$timestamp)."'),\n"; |
$store_performance_command .= $sql_performance; |
if ($max_perf) { |
|
my $length = length($sql_performance); |
|
if ($length > $max_perf) { |
|
&Apache::lonnet::logthis("SQL performance insert for student: $sname would exceed max_allowed_packet size"); |
|
&Apache::lonnet::logthis("symb_id: $symb_id"); |
|
&Apache::lonnet::logthis("Skipping this item. You may want to increase the max_allowed_packet size from the current: $max_allowed_packet"); |
|
next; |
|
} else { |
|
if ($length + $curr_perf_length > $max_perf) { |
|
push(@store_performance_values,$curr_perf_values); |
|
$curr_perf_values = $sql_performance; |
|
$curr_perf_length = $length; |
|
} else { |
|
$curr_perf_values .= $sql_performance; |
|
$curr_perf_length += $length; |
|
} |
|
} |
|
} else { |
|
$curr_perf_values .= $sql_performance; |
|
} |
$rows_stored++; |
$rows_stored++; |
} |
} |
} |
} |
|
if ($curr_params_values ne '') { |
|
push(@store_parameters_values,$curr_params_values); |
|
} |
|
if ($curr_perf_values ne '') { |
|
push(@store_performance_values,$curr_perf_values); |
|
} |
if (! $rows_stored) { return ($returnstatus, undef); } |
if (! $rows_stored) { return ($returnstatus, undef); } |
$store_parameters_command =~ s|,\n$||; |
|
$store_performance_command =~ s|,\n$||; |
|
my $start = Time::HiRes::time; |
my $start = Time::HiRes::time; |
$dbh->do($store_performance_command); |
foreach my $item (@store_performance_values) { |
if ($dbh->err()) { |
$item =~ s|,\n$||; |
&Apache::lonnet::logthis('performance bigass insert error:'. |
if ($item ne '') { |
$dbh->errstr()); |
$dbh->do($store_performance_prefix.$item); |
&Apache::lonnet::logthis('command = '.$/.$store_performance_command); |
if ($dbh->err()) { |
$returnstatus = 'error: unable to insert performance into database'; |
&Apache::lonnet::logthis('performance insert error:'. |
return ($returnstatus,$student_data); |
$dbh->errstr()); |
} |
&Apache::lonnet::logthis('command = '.$/.$store_performance_prefix.$item); |
$dbh->do($store_parameters_command) if ($num_parameters>0); |
$returnstatus = 'error: unable to insert performance into database'; |
if ($dbh->err()) { |
return ($returnstatus,$student_data); |
&Apache::lonnet::logthis('parameters bigass insert error:'. |
} |
$dbh->errstr()); |
} |
&Apache::lonnet::logthis('command = '.$/.$store_parameters_command); |
} |
&Apache::lonnet::logthis('rows_stored = '.$rows_stored); |
if ($num_parameters > 0) { |
&Apache::lonnet::logthis('student_id = '.$student_id); |
foreach my $item (@store_parameters_values) { |
$returnstatus = 'error: unable to insert parameters into database'; |
$item =~ s|,\n$||; |
return ($returnstatus,$student_data); |
if ($item ne '') { |
|
$dbh->do($store_parameters_prefix.$item); |
|
if ($dbh->err()) { |
|
&Apache::lonnet::logthis('parameters insert error:'. |
|
$dbh->errstr()); |
|
&Apache::lonnet::logthis('command = '.$/.$store_parameters_prefix.$item); |
|
&Apache::lonnet::logthis('rows_stored = '.$rows_stored); |
|
&Apache::lonnet::logthis('student_id = '.$student_id); |
|
$returnstatus = 'error: unable to insert parameters into database'; |
|
return ($returnstatus,$student_data); |
|
} |
|
} |
|
} |
} |
} |
$elapsed += Time::HiRes::time - $start; |
$elapsed += Time::HiRes::time - $start; |
return ($returnstatus,$student_data); |
return ($returnstatus,$student_data); |
Line 1677 sub get_problem_statistics {
|
Line 1765 sub get_problem_statistics {
|
# |
# |
$request = 'SELECT MAX(tries),MIN(tries) FROM '.$stats_table. |
$request = 'SELECT MAX(tries),MIN(tries) FROM '.$stats_table. |
' WHERE awarded>0'; |
' WHERE awarded>0'; |
if (defined($time_requirements)) { |
|
$request .= ' AND '.$time_requirements; |
|
} |
|
my ($max,$min) = &execute_SQL_request($dbh,$request); |
my ($max,$min) = &execute_SQL_request($dbh,$request); |
# |
# |
$request = 'SELECT SUM(awarded) FROM '.$stats_table; |
$request = 'SELECT SUM(awarded) FROM '.$stats_table; |
if (defined($time_requirements)) { |
|
$request .= ' AND '.$time_requirements; |
|
} |
|
my ($Solved) = &execute_SQL_request($dbh,$request); |
my ($Solved) = &execute_SQL_request($dbh,$request); |
# |
# |
$request = 'SELECT SUM(awarded) FROM '.$stats_table. |
$request = 'SELECT SUM(awarded) FROM '.$stats_table. |
" WHERE solved='correct_by_override'"; |
" WHERE solved='correct_by_override'"; |
if (defined($time_requirements)) { |
|
$request .= ' AND '.$time_requirements; |
|
} |
|
my ($solved) = &execute_SQL_request($dbh,$request); |
my ($solved) = &execute_SQL_request($dbh,$request); |
# |
# |
$Solved -= $solved; |
$Solved -= $solved; |