2GNJU4VFSYWUXS3JG3XZZFM3QSN3ILOIJVJFA75TKBIFS2WFNXBQC
6JYDU2DMPSG7OXOASKM5HKAQVVNM2KX37P737WSVS4NSNMZETEBAC
Y6AHH4THYQA43V77L43YM42DYRPCMDSWLUV4NKWAQYMPL4NTUIPQC
RFE6T5LGBFFNEPHZOPF4UNMFC2L4CGD5TPAMOXDLRPH3TZJ43UBAC
J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC
FTPCV25MOLQUNR5CAR453W7T7QTUZRLPLEOSDZ5HSDFAXQZVHOYQC
L2E6EVE2RVFVDCUNRJ4CZYSQNS2DZUA5DTBETHBDUQUV2KQQRAOQC
WQ3QMV3DU3PVQ3FEKB3YDYV2SFHRNWBRZSRHAOGZSKPUKEMZ33SQC
RYTQLATYOZ6ODIKYVJ63TC4OIQBXHSCV3NA2YD4NFP7443GQVSRQC
N22GPKYTOLZLBGTGDATQDVZ4R5APZEAOIA7L32X4UXBH4XNI7MWAC
OZ2XXTT4IQBKWZ6THVTKKQK7CKLWY2FEFYOJBWI2SLFIXU4NKK5AC
4S5JF5JPKWTDYHFJMTXOFTDAMYHD5ON2UBTLMGVYPJCP6QYIM2EAC
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2021-08-26 12:02:36
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:WHdSVHhQykmUz0tR/TExVg
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2021-11-17 12:42:34
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ylttv/NTMDcSZumBXRCOCw
use utf8;
package Hydra::Schema::Result::RunCommandLogs;
# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE
=head1 NAME
Hydra::Schema::Result::RunCommandLogs
=cut
use strict;
use warnings;
use base 'DBIx::Class::Core';
=head1 COMPONENTS LOADED
=over 4
=item * L<Hydra::Component::ToJSON>
=back
=cut
__PACKAGE__->load_components("+Hydra::Component::ToJSON");
=head1 TABLE: C<runcommandlogs>
=cut
__PACKAGE__->table("runcommandlogs");
=head1 ACCESSORS
=head2 id
data_type: 'integer'
is_auto_increment: 1
is_nullable: 0
sequence: 'runcommandlogs_id_seq'
=head2 job_matcher
data_type: 'text'
is_nullable: 0
=head2 build_id
data_type: 'integer'
is_foreign_key: 1
is_nullable: 0
=head2 command
data_type: 'text'
is_nullable: 0
=head2 start_time
data_type: 'integer'
is_nullable: 1
=head2 end_time
data_type: 'integer'
is_nullable: 1
=head2 error_number
data_type: 'integer'
is_nullable: 1
=head2 exit_code
data_type: 'integer'
is_nullable: 1
=head2 signal
data_type: 'integer'
is_nullable: 1
=head2 core_dumped
data_type: 'boolean'
is_nullable: 1
=cut
__PACKAGE__->add_columns(
"id",
{
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
sequence => "runcommandlogs_id_seq",
},
"job_matcher",
{ data_type => "text", is_nullable => 0 },
"build_id",
{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
"command",
{ data_type => "text", is_nullable => 0 },
"start_time",
{ data_type => "integer", is_nullable => 1 },
"end_time",
{ data_type => "integer", is_nullable => 1 },
"error_number",
{ data_type => "integer", is_nullable => 1 },
"exit_code",
{ data_type => "integer", is_nullable => 1 },
"signal",
{ data_type => "integer", is_nullable => 1 },
"core_dumped",
{ data_type => "boolean", is_nullable => 1 },
);
=head1 PRIMARY KEY
=over 4
=item * L</id>
=back
=cut
__PACKAGE__->set_primary_key("id");
=head1 RELATIONS
=head2 build
Type: belongs_to
Related object: L<Hydra::Schema::Result::Builds>
=cut
__PACKAGE__->belongs_to(
"build",
"Hydra::Schema::Result::Builds",
{ id => "build_id" },
{ is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" },
);
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2021-11-18 12:35:52
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:N0G71diB8DNDgkYgaSQrFA
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;
-- Records of RunCommand executions
--
-- The intended flow is:
--
-- 1. Create a RunCommandLogs entry when the task is "queued" to run
-- 2. Update the start_time when it begins
-- 3. Update the end_time and exit_code when it completes
create table RunCommandLogs (
id serial primary key not null,
job_matcher text not null,
build_id integer not null,
-- TODO: evaluation_id integer not null,
-- can we do this in a principled way? a build can be part of many evaluations
-- but a "bug" of RunCommand, imho, is that it should probably run per evaluation?
command text not null,
start_time integer,
end_time integer,
error_number integer,
exit_code integer,
signal integer,
core_dumped boolean,
foreign key (build_id) references Builds(id) on delete cascade,
-- foreign key (evaluation_id) references Builds(id) on delete cascade,
constraint RunCommandLogs_not_started_no_exit_time_no_code check (
-- If start time is null, then end_time, exit_code, signal, and core_dumped should be null.
-- A logical implication operator would be nice :).
(start_time is not null) or (
end_time is null
and error_number is null
and exit_code is null
and signal is null
and core_dumped is null
)
),
constraint RunCommandLogs_end_time_has_start_time check (
-- If end time is not null, then end_time, exit_code, and core_dumped should not be null
(end_time is null) or (start_time is not null)
)
-- Note: if exit_code is not null then signal and core_dumped must be null.
-- Similarly, if signal is not null then exit_code must be null and
-- core_dumped must not be null. However, these semantics are tricky
-- to encode as constraints and probably provide limited actual value.
);