2008-11-25 11:01:42 +00:00
package Hydra::Schema::Builds ;
2008-10-28 10:19:31 +00:00
use strict ;
use warnings ;
use base 'DBIx::Class' ;
__PACKAGE__ - > load_components ( "Core" ) ;
2008-11-11 12:54:37 +00:00
__PACKAGE__ - > table ( "Builds" ) ;
2008-10-28 10:19:31 +00:00
__PACKAGE__ - > add_columns (
"id" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "integer" ,
default_value = > undef ,
is_nullable = > 0 ,
size = > undef ,
} ,
2008-11-11 12:54:37 +00:00
"finished" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "integer" ,
default_value = > undef ,
is_nullable = > 0 ,
size = > undef ,
} ,
2008-10-28 10:19:31 +00:00
"timestamp" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "integer" ,
default_value = > undef ,
is_nullable = > 0 ,
size = > undef ,
} ,
2008-11-04 18:23:28 +00:00
"project" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "text" ,
default_value = > undef ,
is_foreign_key = > 1 ,
is_nullable = > 0 ,
size = > undef ,
} ,
2008-11-04 18:23:28 +00:00
"jobset" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "text" ,
default_value = > undef ,
is_foreign_key = > 1 ,
is_nullable = > 0 ,
size = > undef ,
} ,
2009-03-12 14:18:30 +00:00
"job" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "text" ,
default_value = > undef ,
is_foreign_key = > 1 ,
is_nullable = > 0 ,
size = > undef ,
} ,
2008-11-12 16:42:07 +00:00
"nixname" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "text" ,
default_value = > undef ,
is_nullable = > 1 ,
size = > undef ,
} ,
2008-10-28 10:19:31 +00:00
"description" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "text" ,
default_value = > undef ,
is_nullable = > 1 ,
size = > undef ,
} ,
2008-10-28 10:19:31 +00:00
"drvpath" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "text" ,
default_value = > undef ,
is_nullable = > 0 ,
size = > undef ,
} ,
2008-10-28 10:19:31 +00:00
"outpath" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "text" ,
default_value = > undef ,
is_nullable = > 0 ,
size = > undef ,
} ,
2008-11-06 18:26:29 +00:00
"system" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "text" ,
default_value = > undef ,
is_nullable = > 0 ,
size = > undef ,
} ,
2008-12-16 15:09:39 +00:00
"longdescription" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "text" ,
default_value = > undef ,
is_nullable = > 1 ,
size = > undef ,
} ,
2008-12-16 15:09:39 +00:00
"license" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "text" ,
default_value = > undef ,
is_nullable = > 1 ,
size = > undef ,
} ,
2009-03-04 14:49:21 +00:00
"homepage" ,
2009-07-07 13:59:59 +00:00
{
data_type = > "text" ,
default_value = > undef ,
is_nullable = > 1 ,
size = > undef ,
} ,
"maintainers" ,
{
data_type = > "text" ,
default_value = > undef ,
is_nullable = > 1 ,
size = > undef ,
} ,
2009-10-02 16:06:28 +00:00
"iscurrent" ,
{ data_type = > "integer" , default_value = > 0 , is_nullable = > 1 , size = > undef } ,
2008-10-28 10:19:31 +00:00
) ;
__PACKAGE__ - > set_primary_key ( "id" ) ;
2008-11-25 11:01:42 +00:00
__PACKAGE__ - > belongs_to ( "project" , "Hydra::Schema::Projects" , { name = > "project" } ) ;
2008-11-10 10:18:50 +00:00
__PACKAGE__ - > belongs_to (
"jobset" ,
2008-11-25 11:01:42 +00:00
"Hydra::Schema::Jobsets" ,
2008-11-10 10:18:50 +00:00
{ name = > "jobset" , project = > "project" } ,
) ;
2009-03-13 14:49:25 +00:00
__PACKAGE__ - > belongs_to (
"job" ,
"Hydra::Schema::Jobs" ,
{ jobset = > "jobset" , name = > "job" , project = > "project" } ,
) ;
2009-07-07 13:59:59 +00:00
__PACKAGE__ - > might_have (
"buildschedulinginfo" ,
2008-12-16 16:26:33 +00:00
"Hydra::Schema::BuildSchedulingInfo" ,
2008-11-11 12:54:37 +00:00
{ "foreign.id" = > "self.id" } ,
) ;
2009-07-07 13:59:59 +00:00
__PACKAGE__ - > might_have (
"buildresultinfo" ,
2008-12-16 16:26:33 +00:00
"Hydra::Schema::BuildResultInfo" ,
2008-11-11 12:54:37 +00:00
{ "foreign.id" = > "self.id" } ,
) ;
2008-11-12 16:42:07 +00:00
__PACKAGE__ - > has_many (
"buildsteps" ,
2008-12-16 16:26:33 +00:00
"Hydra::Schema::BuildSteps" ,
2009-03-12 14:18:30 +00:00
{ "foreign.build" = > "self.id" } ,
2008-11-12 16:42:07 +00:00
) ;
2008-11-11 12:54:37 +00:00
__PACKAGE__ - > has_many (
"buildinputs_builds" ,
2008-12-16 16:26:33 +00:00
"Hydra::Schema::BuildInputs" ,
2008-11-09 00:48:36 +00:00
{ "foreign.build" = > "self.id" } ,
2008-11-08 22:40:12 +00:00
) ;
2008-11-11 12:54:37 +00:00
__PACKAGE__ - > has_many (
"buildinputs_dependencies" ,
2008-12-16 16:26:33 +00:00
"Hydra::Schema::BuildInputs" ,
2008-11-11 12:54:37 +00:00
{ "foreign.dependency" = > "self.id" } ,
) ;
2008-10-28 10:19:31 +00:00
__PACKAGE__ - > has_many (
2008-11-12 16:42:07 +00:00
"buildproducts" ,
2008-12-16 16:26:33 +00:00
"Hydra::Schema::BuildProducts" ,
2008-11-09 00:48:36 +00:00
{ "foreign.build" = > "self.id" } ,
2008-10-28 10:19:31 +00:00
) ;
2009-10-02 16:06:28 +00:00
# Created by DBIx::Class::Schema::Loader v0.04999_06 @ 2009-10-02 15:59:19
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:8r7Yv4O8WF2YU4sOjn0Q8w
2008-11-11 12:54:37 +00:00
2009-05-09 16:10:50 +00:00
use Hydra::Helper::Nix ;
2009-07-07 13:59:59 +00:00
__PACKAGE__ - > has_many (
"dependents" ,
"Hydra::Schema::BuildInputs" ,
{ "foreign.dependency" = > "self.id" } ,
) ;
2008-10-28 10:19:31 +00:00
2008-11-27 15:16:06 +00:00
__PACKAGE__ - > many_to_many ( dependentBuilds = > 'dependents' , 'build' ) ;
2009-07-07 13:59:59 +00:00
__PACKAGE__ - > has_many (
"inputs" ,
"Hydra::Schema::BuildInputs" ,
{ "foreign.build" = > "self.id" } ,
) ;
2008-11-11 12:54:37 +00:00
__PACKAGE__ - > belongs_to (
"schedulingInfo" ,
2008-12-16 16:26:33 +00:00
"Hydra::Schema::BuildSchedulingInfo" ,
2008-11-11 12:54:37 +00:00
{ id = > "id" } ,
) ;
__PACKAGE__ - > belongs_to (
"resultInfo" ,
2008-12-16 16:26:33 +00:00
"Hydra::Schema::BuildResultInfo" ,
2008-11-11 12:54:37 +00:00
{ id = > "id" } ,
) ;
2008-11-06 13:40:31 +00:00
2009-05-11 13:56:52 +00:00
sub addSequence {
2009-07-09 14:48:15 +00:00
my $ hydradbi = getHydraDBPath ;
if ( $ hydradbi =~ m/^dbi:Pg/ ) {
__PACKAGE__ - > sequence ( 'builds_id_seq' ) ;
}
2009-05-07 13:30:55 +00:00
}
2009-04-03 15:37:21 +00:00
sub makeSource {
my ( $ name , $ query ) = @ _ ;
my $ source = __PACKAGE__ - > result_source_instance ( ) ;
my $ new_source = $ source - > new ( $ source ) ;
$ new_source - > source_name ( $ name ) ;
$ new_source - > name ( \ "($query)" ) ;
Hydra::Schema - > register_extra_source ( $ name = > $ new_source ) ;
}
sub makeQueries {
my ( $ name , $ constraint ) = @ _ ;
2009-07-09 14:48:15 +00:00
my $ joinWithStatusChange =
"natural join BuildResultInfo r " .
"left join Builds b on b.id = " .
"(select max(id) from builds c natural join buildresultinfo r2 " .
" where x.project = c.project and x.jobset = c.jobset and x.job = c.job and x.system = c.system and " .
" x.id > c.id and r.buildstatus != r2.buildstatus)" ;
2009-07-09 15:08:39 +00:00
# Urgh, can't use "*" in the "select" here because of the status change join.
2009-10-02 16:06:28 +00:00
makeSource ( 'JobStatus' . $ name , "select x.id, x.finished, x.timestamp, x.project, x.jobset, x.job, x.nixname, x.description, x.drvpath, x.outpath, x.system, x.longdescription, x.license, x.homepage, x.maintainers, x.isCurrent, b.id as statusChangeId, b.timestamp as statusChangeTime from (select project, jobset, job, system, max(id) as id from Builds where finished = 1 $constraint group by project, jobset, job, system) as latest natural join Builds x $joinWithStatusChange" ) ;
2009-07-09 15:08:39 +00:00
makeSource ( 'LatestSucceeded' . $ name , "select * from (select project, jobset, job, system, max(id) as id from Builds natural join BuildResultInfo where finished = 1 and buildStatus = 0 $constraint group by project, jobset, job, system) as latest natural join Builds x" ) ;
2009-04-03 15:37:21 +00:00
}
2009-05-11 13:56:52 +00:00
addSequence ;
2009-04-03 15:37:21 +00:00
makeQueries ( '' , "" ) ;
makeQueries ( 'ForProject' , "and project = ?" ) ;
makeQueries ( 'ForJobset' , "and project = ? and jobset = ?" ) ;
makeQueries ( 'ForJob' , "and project = ? and jobset = ? and job = ?" ) ;
2008-10-28 10:19:31 +00:00
1 ;