Doh!
PHJF4FUTRWDFKS4RTYGT2PKASDZAPPA3JY3VF2YANHFI5AUTIZAQC use utf8;package Hydra::Schema::BuildOutputs;# Created by DBIx::Class::Schema::Loader# DO NOT MODIFY THE FIRST PART OF THIS FILE=head1 NAMEHydra::Schema::BuildOutputs=cutuse strict;use warnings;use base 'DBIx::Class::Core';=head1 TABLE: C<BuildOutputs>=cut__PACKAGE__->table("BuildOutputs");=head1 ACCESSORS=head2 builddata_type: 'integer'is_foreign_key: 1is_nullable: 0=head2 namedata_type: 'text'is_nullable: 0=head2 pathdata_type: 'text'is_nullable: 0=cut__PACKAGE__->add_columns("build",{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },"name",{ data_type => "text", is_nullable => 0 },"path",{ data_type => "text", is_nullable => 0 },);=head1 PRIMARY KEY=over 4=item * L</build>=item * L</name>=back=cut__PACKAGE__->set_primary_key("build", "name");=head1 RELATIONS=head2 buildType: belongs_toRelated object: L<Hydra::Schema::Builds>=cut__PACKAGE__->belongs_to("build","Hydra::Schema::Builds",{ id => "build" },{ is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" },);# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-30 16:22:11# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:UpVoKdd3OwMvlvyMjcYNVA# You can replace this text with custom code or comments, and it will be preserved on regeneration1;
use utf8;package Hydra::Schema::BuildStepOutputs;# Created by DBIx::Class::Schema::Loader# DO NOT MODIFY THE FIRST PART OF THIS FILE=head1 NAMEHydra::Schema::BuildStepOutputs=cutuse strict;use warnings;use base 'DBIx::Class::Core';=head1 TABLE: C<BuildStepOutputs>=cut__PACKAGE__->table("BuildStepOutputs");=head1 ACCESSORS=head2 builddata_type: 'integer'is_foreign_key: 1is_nullable: 0=head2 stepnrdata_type: 'integer'is_foreign_key: 1is_nullable: 0=head2 namedata_type: 'text'is_nullable: 0=head2 pathdata_type: 'text'is_nullable: 0=cut__PACKAGE__->add_columns("build",{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },"stepnr",{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },"name",{ data_type => "text", is_nullable => 0 },"path",{ data_type => "text", is_nullable => 0 },);=head1 PRIMARY KEY=over 4=item * L</build>=item * L</stepnr>=item * L</name>=back=cut__PACKAGE__->set_primary_key("build", "stepnr", "name");=head1 RELATIONS=head2 buildType: belongs_toRelated object: L<Hydra::Schema::Builds>=cut__PACKAGE__->belongs_to("build","Hydra::Schema::Builds",{ id => "build" },{ is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" },);=head2 buildstepType: belongs_toRelated object: L<Hydra::Schema::BuildSteps>=cut__PACKAGE__->belongs_to("buildstep","Hydra::Schema::BuildSteps",{ build => "build", stepnr => "stepnr" },{ is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" },);# Created by DBIx::Class::Schema::Loader v0.07033 @ 2013-01-30 16:22:11# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:dC1yX7arRVu9K3wG9dAjCg# You can replace this text with custom code or comments, and it will be preserved on regeneration1;
create table BuildOutputs (build integer not null,name text not null,path text not null,primary key (build, name),foreign key (build) references Builds(id) on delete cascade);insert into BuildOutputs (build, name, path)select id, 'out', outPath from Builds;alter table Builds drop column outPath;create table BuildStepOutputs (build integer not null,stepnr integer not null,name text not null,path text not null,primary key (build, stepnr, name),foreign key (build) references Builds(id) on delete cascade,foreign key (build, stepnr) references BuildSteps(build, stepnr) on delete cascade);insert into BuildStepOutputs (build, stepnr, name, path)select build, stepnr, 'out', outPath from BuildSteps where outPath is not null;drop index IndexBuildStepsOnBuild;drop index IndexBuildStepsOnOutpath;drop index IndexBuildStepsOnOutpathBuild;alter table BuildSteps drop column outPath;create index IndexBuildStepOutputsOnPath on BuildStepOutputs(path);