Add alternative resultsdata query that reconstructs fspgroup table instead of depending on it

This commit is contained in:
2026-09-15 15:51:48 +02:00
parent 92cc12d542
commit 9a720d7160
2 changed files with 188 additions and 130 deletions
+55
View File
@@ -0,0 +1,55 @@
package ResultsDataWriteGroups;
use strict;
use warnings;
use diagnostics;
use FindBin;
use lib "$FindBin::Bin/../Modules";
use Filters;
use feature 'say';
sub query {
my ( $experiment, $experiment_dir, @filter_config_names ) = @_;
my $extra =
Filters::build_filter_clause( $experiment_dir, @filter_config_names );
# This query asks the same question as ResultsData.pm: How much faultspace
# area ended up in each possible outcome?
#
# The difference is how the write equivalence classes are treated.
# BasicPruner's write-group INSERT maps every 'W' trace entry to the single
# known_outcome=1 write pilot, but fspgroup has PRIMARY KEY (pilot_id), so
# only the first row lands in the table.
# This query fixes that.
my $querystring = "SELECT
benchmark, resulttype, SUM(t.time2 - t.time1 + 1) AS faults
FROM variant v
JOIN trace t ON v.id = t.variant_id
JOIN fsppilot p ON p.variant_id = t.variant_id
AND ( (p.known_outcome = 1 AND t.accesstype = 'W')
OR (p.known_outcome = 0 AND p.instr2 = t.instr2 AND p.data_physical_address = t.data_physical_address) )
JOIN result_GenericExperimentMessage r ON r.pilot_id = p.id
WHERE v.variant = '$experiment'$extra
GROUP BY v.id, resulttype
ORDER BY variant, benchmark, resulttype;";
say $querystring;
return $querystring;
}
sub args { return "--batch --raw"; }
sub filename {
my @filter_config_names = grep { defined && length } @_;
my $suffix =
@filter_config_names ? "_" . join( "+", sort @filter_config_names ) : "";
return "resultsdata_writegroups${suffix}.csv";
}
sub postprocess { $_[0] =~ s/\t/,/g; }
1;