package ResultsDataPruned; 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 basically asks: How many equivalence classes # ended up in each possible outcome? # In contrast to ResultsData.pm it doesn't do any "de-pruning", e.g. # no expansion of the "data liveness interval length" # SUM(t.time2 - t.time1 + 1). # # We run with --inject-single-bit, so the bits of one class can # end up in different outcomes. # This would be counted multiple times, # so we'll have more results than pilots. # # The column is named "faults" so the charts still work with this. my $querystring = "SELECT benchmark, resulttype, COUNT(DISTINCT g.pilot_id) AS faults FROM variant v JOIN trace t ON v.id = t.variant_id JOIN fspgroup g ON g.variant_id = t.variant_id AND g.instr2 = t.instr2 AND g.data_physical_address = t.data_physical_address JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id JOIN fsppilot p 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_pruned${suffix}.csv"; } sub postprocess { $_[0] =~ s/\t/,/g; } 1;