annotate variant_effect_predictor/Bio/EnsEMBL/Funcgen/Utils/HealthChecker.pm @ 2:a5976b2dce6f

changing defualt values for ensembl database
author mahtabm
date Thu, 11 Apr 2013 17:15:42 +1000
parents 1f6dce3d34e0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14 developers list at <ensembl-dev@ebi.ac.uk>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 Bio::EnsEMBL::Funcgen::Utils::HealthChecker
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 =head1 SYNOPSIS
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 B<This program> provides several methods to health check and update tables prior to
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 release. Using the updte_DB_for_release method runs the following:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 validate_new_seq_regions - _pre_stores seq_region & coord_system info from new core DB
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 check_regbuild_strings - Validates or inserts regbuild_string entries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32 check_meta_species_version - Validates meta species and version wrt dbname
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 set_current_coord_system - Updates coord_system.is_current to 1 for current schema_build (required for mart)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34 update_meta_coord - Regenerates meta_coord.max_length values (required for Slice range queries)
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 clean_xrefs - Removes old unused xref and external_db records
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36 validate_DataSets - Performs various checks on Data/Feature/ResultSets links and states
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 check_stable_ids - Check for any NULL stable IDs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38 log_data_sets - Logs all DISPLAYABLE DataSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 analyse_and_optimise_tables - Does what is says
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46 package Bio::EnsEMBL::Funcgen::Utils::HealthChecker;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 use Bio::EnsEMBL::Funcgen::Utils::Helper;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50 use Bio::EnsEMBL::Funcgen::ProbeFeature;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 use Bio::EnsEMBL::Utils::Argument qw( rearrange );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 use Bio::EnsEMBL::Utils::Exception qw( throw );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 use Bio::EnsEMBL::Analysis;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54 use vars qw(@ISA);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 @ISA = qw(Bio::EnsEMBL::Funcgen::Utils::Helper);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 #TO DO
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 # 1 DONE Print all fails and warnings in summary at end of script.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 # 2 validate_RegulatoryFeature_Sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 # 3 Some of these can be migrated or mirrored in java HCs for safety
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 ################################################################################
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 sub new {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 my $caller = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 my $class = ref($caller) || $caller;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 my $self = $class->SUPER::new(@_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72 #validate and set type, analysis and feature_set here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 my ($db, $builds, $skip_mc, $check_displayable, $skip_analyse, $meta_coord_tables, $skip_xrefs, $fix) =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 rearrange(['DB', 'BUILDS', 'SKIP_META_COORD', 'CHECK_DISPLAYABLE', 'SKIP_ANALYSE', 'META_COORD_TABLES', 'SKIP_XREF_CLEANUP', 'FIX'], @_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 if (! ($db && ref($db) &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 $db->isa('Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor'))){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 throw('You must provide a valid Bio::EnsEMBL::Funcgen::DBSQL::DBAdaptor');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 #test connection
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 $db->dbc->db_handle;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 $self->{'db'} = $db;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 $self->{'mysql_connect_string'} = 'mysql -h'.$db->dbc->host.' -u'.$db->dbc->username.' -p'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 .$db->dbc->password.' '.$db->dbc->dbname.' -P'.$db->dbc->port;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88 $self->{'dbname'} = $db->dbc->dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 $self->{'builds'} = (scalar(@$builds)>0) ? $builds : [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 $self->{'skip_meta_coord'} = $skip_mc;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 $self->{'skip_xrefs'} = $skip_xrefs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92 $self->{'skip_analyse'} = $skip_analyse;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 $self->{'check_displayable'} = $check_displayable;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 $self->{fix} = $fix;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 if(defined $meta_coord_tables){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 throw('-skip_meta_coord is set, Cannot build meta_coord entries for tables '.join(', ', @$meta_coord_tables));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 if(! ref($meta_coord_tables) eq 'ARRAY'){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 throw('-meta_coord_tables parameter must be an array ref');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 @{$self->{'meta_coord_tables'}} = @$meta_coord_tables;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107 return $self;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 sub db{ return $_[0]->{db}; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 sub fix{ return $_[0]->{fix}; }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 =head2 update_db_for_release
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 Arg[0] :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 Example :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 Description: Wrapper method to perform all common update functions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 Returntype :
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 Exceptions : None
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121 Caller : General
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 Status : at risk
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 sub update_db_for_release{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 my ($self, @args) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 if(@args){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 #do seq_region_update to validate dnadb first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 #hence avoiding redoing longer methods
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 $self->validate_new_seq_regions;#($force_srs);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 #$self->update_meta_schema_version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 $self->check_regbuild_strings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 $self->check_meta_species_version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 $self->set_current_coord_system;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 $self->update_meta_coord;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 $self->clean_xrefs;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 $self->validate_DataSets;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 $self->check_stable_ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 $self->log_data_sets();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 $self->analyse_and_optimise_tables;#ALWAYS LAST!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 $self->log_header('??? Have you dumped/copied GFF dumps ???');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148 #Log footer? Pass optional counts hash?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 $self->log('Finished updating '.$self->{'dbname'}." for release\n\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 sub validate_new_seq_regions{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 my ($self, $force) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 #We need to add some functionality to handle non-standard schema_build progression here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 #This should be used before any data is loaded
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 #It should also warn if there any duplicates if it is not run before coord_systems are duplicated
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 #Should this just be handled in the BaseFeatureAdaptor/CoordSystemAdaptor?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 #do we need to add the none default levels here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165 #or are we only bothered about those which constitute the toplevel?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
167 #To make sure we have all the correct levels in eFG we need to get all the names.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
168 #then get all by name from the core db and set them as the dnadb.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
169 # we also need to get all the toplevel seq_regions and store them in the seq_region table
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
170 #use BaseFeatureAdaptor::_pre_store with and array of pseudo feature on each top level slice
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
171
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
172 #Validate the efgdb and dnadb schema version are the same first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
173 #This is because we expect the schem_build to be the same for a release
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
174 #However, this will autoset the dnadb if no defined, so will always match!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
175
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
176 if(! $force){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
177 my $efgdb_sm = join('_', @{$self->get_schema_and_build($self->{'dbname'})});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
178 my $dnadb_sm = join('_', @{$self->get_schema_and_build($self->db->dnadb->dbc->dbname)});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
179
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
180 if($efgdb_sm ne $dnadb_sm){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
181 $self->report("WARNING Skipped validate_new_seq_regions as schema_versions are mismatched:\t".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
182 "efgdb $efgdb_sm\tdnadb $dnadb_sm");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
183 return 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
184 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
185 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
186
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
187 my $pf_adaptor = $self->db->get_ProbeFeatureAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
188 my $slice_adaptor = $self->db->dnadb->get_SliceAdaptor();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
189 my $dnadb_csa = $self->db->dnadb->get_CoordSystemAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
190
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
191 $self->log_header('Validating new coord_systems/seq_regions');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
192
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
193 my @slices;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
194 my %versioned_levels;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
195 my $default_version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
196
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
197 #Grab unversioned top level slices and versioned levels
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
198 #May miss some old versioned level if the new assembly no longer has them
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
199 foreach my $slice(@{$slice_adaptor->fetch_all('toplevel', undef, 1)}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
200
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
201 if (! $slice->coord_system->version){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
202 push @slices, $slice;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
203 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
204 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
205
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
206 if($default_version &&
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
207 ($default_version ne $slice->coord_system->version)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
208 throw("Found more than one default CoordSystem version:\t${default_version}\t".$slice->coord_system->version);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
209 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
210 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
211 $default_version = $slice->coord_system->version;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
212 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
213 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
214 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
215
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
216
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
217 #Get all versioned levels for all builds
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
218 foreach my $cs(@{$dnadb_csa->fetch_all}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
219
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
220 if($cs->version){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
221 $versioned_levels{$cs->version} ||= [];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
222 push @{$versioned_levels{$cs->version}}, $cs->name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
223 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
224 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
225
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
226 push @{$self->{'builds'}}, $default_version if scalar(@{$self->{'builds'}}) == 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
227
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
228
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
229
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
230 #Grab slices for each versioned level
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
231 foreach my $build(@{$self->{'builds'}}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
232
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
233 if(! exists $versioned_levels{$build}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
234 throw("CoordSystem version $build does not exist in the dnadb ".$self->db->dnadb->dbc->dbname);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
235 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
236
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
237 foreach my $level(@{$versioned_levels{$build}}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
238 $self->log("Getting slices for $level $build");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
239 push @slices, @{$slice_adaptor->fetch_all($level, $build)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
240 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
241 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
242
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
243 $self->log("Importing seq_region/coord_system info for builds:\t".join(',', @{$self->{'builds'}}));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
244
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
245 foreach my $slice(@slices){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
246
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
247 if($slice->start() != 1){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
248 $self->log("Reslicing slice:\t".$slice->name());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
249 #we must have some sort of PAR linked region i.e. Y
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
250 $slice = $slice_adaptor->fetch_by_region($slice->coord_system_name(), $slice->seq_region_name());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
251 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
252
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
253
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
254 #we need test if it needs doing first?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
255 #we would need to test for the coord_systems outside of this loop
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
256 #and then for each seq_region inside the loop if the coord_system is present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
257
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
258 $self->log("_pre_storing seq_region info for slice:\t".$slice->name());
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
259
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
260 my $pseudo_feature = Bio::EnsEMBL::Funcgen::ProbeFeature->new
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
261 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
262 -slice => $slice,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
263 -start => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
264 -end => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
265 -strand => 0,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
266 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
267
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
268 $pf_adaptor->_pre_store($pseudo_feature);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
269 #This will create a meta_coord entry of max_length 1 for features which have an absent meta_coord entry
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
270
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
271 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
272
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
273
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
274 $self->log("Finished validating seq_regions\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
275
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
276 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
277 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
278
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
279
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
280
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
281
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
282 sub update_meta_coord{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
283 my ($self, @table_names) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
284
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
285 my $species_id = $self->db->species_id;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
286
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
287 if($self->{'skip_meta_coord'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
288 $self->log("Skipping meta_coord update\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
289 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
290 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
291
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
292
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
293 $self->log_header('Updating meta_coord table');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
294
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
295
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
296 #set default table_name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
297 if(! @table_names || scalar(@table_names) == 0){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
298
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
299 #Can we do this via DBAdaptor and get all available adaptors which are BaseFeatureAdaptors then grab the first table name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
300
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
301 if(defined $self->{'meta_coord_tables'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
302 @table_names = @{$self->{'meta_coord_tables'}};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
303 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
304 else{#default
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
305
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
306 @table_names = qw(
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
307 regulatory_feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
308 probe_feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
309 external_feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
310 annotated_feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
311 result_feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
312 segmentation_feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
313 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
314 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
315 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
316
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
317 #backup meta coord
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
318 if(system($self->{'mysql_connect_string'}." -e 'SELECT * FROM meta_coord'"
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
319 . '> '.$self->{'dbname'}.'meta_coord.backup'
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
320 ) != 0 ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
321
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
322 throw("Can't dump the original meta_coord for back up");#will this get copied to log?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
323 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
324 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
325 $self->log('Original meta_coord table backed up in '. $self->{'dbname'}.'.meta_coord.backup');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
326 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
327
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
328
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
329 #Update each max_length for table_name and coord_system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
330
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
331 my $sql;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
332
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
333 foreach my $table_name(@table_names){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
334
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
335 $sql = "select distinct(cs.name), mc.coord_system_id, cs.version, mc.max_length from coord_system cs, meta_coord mc where mc.table_name='$table_name' and mc.coord_system_id=cs.coord_system_id and cs.species_id = $species_id";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
336
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
337 $self->log('');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
338 $self->log("Updating meta_coord max_length for $table_name:");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
339 $self->log("name\tcoord_system_id\tversion\tmax_length");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
340
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
341 #can we test for emtpy array here? Then skip delete.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
342
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
343 my @info = @{$self->db->dbc->db_handle->selectall_arrayref($sql)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
344
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
345 #log this
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
346 map {$self->log(join("\t", @{$_}))} @info;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
347
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
348 # Clean old entries
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
349 $self->log("Deleting old meta_coord entries");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
350 $sql = "DELETE mc FROM meta_coord mc, coord_system cs WHERE mc.table_name ='$table_name' and mc.coord_system_id = cs.coord_system_id and cs.species_id = $species_id";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
351 $self->db->dbc->db_handle->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
352
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
353 # Generate new max_lengths
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
354 $self->log("Generating new max_lengths");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
355
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
356 #Is this query running for each redundant cs_id?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
357 #would it be more efficient to retrieve the NR cs_ids first and loop the query for each cs_id?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
358
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
359 #Can we get the dbID of the largest feature for ease of checking?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
360 #This won't work as we're grouping by coord_system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
361 #would need to select distinct coord_system_id for table first
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
362 #This may well slow down quite a bit doing it this way
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
363
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
364 $sql = "select distinct s.coord_system_id from coord_system cs, seq_region s, $table_name t WHERE t.seq_region_id = s.seq_region_id and s.coord_system_id = cs.coord_system_id and cs.species_id = $species_id";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
365 my @cs_ids = @{$self->db->dbc->db_handle->selectall_arrayref($sql)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
366 #Convert single element arrayrefs to scalars
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
367 map $_ = ${$_}[0], @cs_ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
368
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
369 $self->log("New max_lengths for $table_name are:");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
370
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
371 $self->log(join("\t", ('coord_system_id', 'max_length', 'longest record dbID')));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
372
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
373 foreach my $cs_id(@cs_ids){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
374 #This will always give a length of 1 even if there are no features present
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
375
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
376 my @cs_lengths;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
377
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
378 #The probe_feature table is now too big to do this in one go
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
379 #We need to break this down into sr_ids
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
380
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
381 $sql = "SELECT distinct t.seq_region_id from $table_name t, seq_region sr where t.seq_region_id=sr.seq_region_id and sr.coord_system_id=$cs_id";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
382
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
383 my @sr_ids = @{$self->db->dbc->db_handle->selectcol_arrayref($sql)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
384
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
385
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
386 #Get longest feature for all seq_regions
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
387 foreach my $sr_id(@sr_ids){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
388 $sql = "SELECT (t.seq_region_end - t.seq_region_start + 1 ) as max, t.${table_name}_id "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
389 . "FROM $table_name t "
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
390 . "WHERE t.seq_region_id = $sr_id ";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
391 $sql .= ' and t.window_size=0' if $table_name eq 'result_feature';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
392 $sql .= " order by max desc limit 1";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
393
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
394
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
395 #Problem here is that DBs without 0 wsize result_feture entries will not get a meta_coord entry
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
396 #We need to implement this in the _pre_store method too?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
397
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
398
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
399 my ($cs_length, $table_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
400 ($cs_length, $table_id) = $self->db->dbc->db_handle->selectrow_array($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
401 push @cs_lengths, [$cs_length, $table_id] if $cs_length;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
402 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
403
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
404
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
405 if(@cs_lengths){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
406 #This will now contain a list of arrays refs contain the max length and feature id for
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
407 #each seq_region in this coord_system
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
408 #Now sort to get the longest
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
409 #Can't sort on 2 day array in the normal way
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
410 #One list list lists, the comparatee is no longer a list but a reference
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
411 @cs_lengths = sort { $b->[0] <=> $a->[0] } @cs_lengths;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
412 $self->log(join("\t\t", ($cs_id, @{$cs_lengths[0]})));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
413 $sql = "INSERT INTO meta_coord values('${table_name}', $cs_id, ".$cs_lengths[0][0].')';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
414 $self->db->dbc->db_handle->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
415 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
416 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
417 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
418
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
419 $self->log("Finished updating meta_coord max_lengths\n");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
420
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
421 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
422 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
423
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
424
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
425 #change this to check_meta_species_version
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
426
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
427 sub check_meta_species_version{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
428 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
429
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
430 $self->log_header('Checking meta species.production_name and schema_version against dbname');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
431
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
432 my $dbname = $self->db->dbc->dbname;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
433 (my $dbname_species = $dbname) =~ s/_funcgen_.*//;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
434 my $mc = $self->db->get_MetaContainer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
435 my $schema_version = $mc->list_value_by_key('schema_version')->[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
436
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
437 if(! defined $schema_version){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
438 $self->report("FAIL:\tNo meta schema_version defined");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
439 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
440 elsif($dbname !~ /funcgen_${schema_version}_/){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
441 $self->report("FAIL:\tMeta schema_version ($schema_version) does not match the dbname ($dbname).");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
442 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
443
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
444
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
445 my @latin_names = @{$mc->list_value_by_key('species.production_name')};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
446
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
447 if(scalar(@latin_names) > 1){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
448 $self->report("FAIL:\tFound more than one species.production_name in meta:\t".join(", ", @latin_names));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
449 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
450 elsif(scalar(@latin_names) == 1 && ($latin_names[0] ne $dbname_species)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
451 $self->report("FAIL:\tFound mismatch between meta species.production_name and dbname:\t".$latin_names[0]." vs $dbname_species");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
452 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
453 elsif(scalar(@latin_names) == 0){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
454 $self->report("WARNING:\tFound no meta species.production_name setting as:\t$dbname_species");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
455 $self->db->dbc->db_handle->do("INSERT into meta(species_id, meta_key, meta_value) values(1, 'species.production_name', '$dbname_species')");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
456 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
457 #else is okay
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
458
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
459 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
460 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
461
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
462
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
463
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
464 #Move to Java HC? Or update if update flag specified
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
465 #Using same code used by build_reg_feats!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
466
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
467 sub check_regbuild_strings{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
468 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
469
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
470 #Removed $update arg as we would always want to do this manually
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
471
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
472 $self->log_header('Checking regbuild strings');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
473 my $species_id = $self->db()->species_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
474
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
475
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
476 my @regf_fsets;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
477 my $passed = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
478 my $fset_a = $self->db->get_FeatureSetAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
479 #my $mc = $self->db->get_MetaContainer;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
480 my $regf_a = $self->db->get_RegulatoryFeatureAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
481 #We now want to chek all build
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
482 @regf_fsets = @{$fset_a->fetch_all_by_type('regulatory')};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
483
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
484
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
485 if(scalar(@regf_fsets) == 0){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
486 $self->report('WARNING:check_regbuild_strings found no regulatory FeatureSets (fine if '.$self->db->species.' your species does not have a regulatory build');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
487 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
488 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
489
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
490 warn "Need to check/update regbuild.version and regbuild.initial_release_date regbuild.last_annotation_update";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
491
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
492
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
493 #How do we validate this?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
494 #Check all feature_sets exist
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
495 #Pull back some features from a test slice and check the number of bits match.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
496 #Check the feature_type string exists and matches else create.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
497
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
498
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
499 foreach my $fset(@regf_fsets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
500 $self->log_header("Validating regbuild_string entries for FeatureSets:\t".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
501
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
502 #Fail for old versions as we want to remove these
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
503 if( $fset->name =~ /_v[0-9]+$/){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
504 $self->report("FAIL:\t".$fset->name." is an old RegulatoryFeature set, please remove!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
505 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
506 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
507
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
508 my $cell_type = (defined $fset->cell_type) ? $fset->cell_type->name : 'core';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
509
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
510 #This has been lifted from build_regulatory_features.pl store_regbuild_strings
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
511 #Need to move this to a RegulatoryBuilder module
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
512 my $dset = $self->db->get_DataSetAdaptor->fetch_by_product_FeatureSet($fset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
513
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
514 my @ssets = @{$dset->get_supporting_sets};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
515
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
516 if(! @ssets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
517 throw('You must provide a DataSet with associated supporting sets');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
518 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
519
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
520
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
521
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
522 my %reg_strings =
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
523 (
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
524 "regbuild.${cell_type}.feature_set_ids" => join(',', map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
525 $_->dbID} sort {$a->name cmp $b->name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
526 } @ssets),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
527
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
528 "regbuild.${cell_type}.feature_type_ids" => join(',', map {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
529 $_->feature_type->dbID} sort {$a->name cmp $b->name
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
530 } @ssets),
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
531 );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
532
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
533 my @ffset_ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
534
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
535 #Skip this now as we use the ftype classes for defining the focus sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
536 #foreach my $fset(@ssets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
537
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
538
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
539 # #This might fail if soem TFs haven't been included as focus i.e. are part of PolII/III
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
540 # #e.g. TFIIIC-110
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
541 ##
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
542 # if( ($fset->feature_type->class eq 'Transcription Factor') ||
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
543 # ($fset->feature_type->class eq 'Open Chromatin') ){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
544 # push @ffset_ids, $fset->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
545 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
546 # }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
547
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
548
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
549 my ($sql, %db_reg_string);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
550
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
551 foreach my $string_key(keys %reg_strings){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
552 my ($string)= $self->db->dbc->db_handle->selectrow_array("select string from regbuild_string where name='${string_key}' and species_id=$species_id");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
553
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
554 if (! defined $string) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
555 $sql = "insert into regbuild_string (species_id, name, string) values ($species_id, '${string_key}', '$reg_strings{${string_key}}');";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
556
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
557 $self->report("WARNING:\tInserting absent $string_key into regbuild_string table");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
558 eval { $self->db->dbc->do($sql) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
559 die("Couldn't store $string_key in regbuild_string table\n$sql\n$@") if $@;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
560 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
561 elsif ($string ne $reg_strings{$string_key}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
562 $sql = "update regbuild_string set string='".$reg_strings{$string_key}."' where name='${string_key}';";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
563
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
564 if($self->fix){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
565 $self->report("WARNING:\tUpdating mismatched $string_key found in regbuild_string table:\t${string}");#\tUpdate using:\t$sql");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
566 eval { $self->db->dbc->do($sql) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
567 die("Couldn't update $string_key in regbuild_string table\n$sql\n$@") if $@;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
568
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
569 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
570 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
571 $self->report("FAIL:\tMismatched $string_key found in regbuild_string table:\t${string}\n\tUpdate using:\t$sql");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
572 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
573 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
574
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
575 $db_reg_string{$string_key} = $string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
576 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
577
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
578
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
579 #Now need to tidy this block wrt new code added above
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
580 my $fset_string_key = "regbuild.${cell_type}.feature_set_ids";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
581 my $ftype_string_key = "regbuild.${cell_type}.feature_type_ids";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
582 my $fset_string = $db_reg_string{$fset_string_key};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
583 my $ftype_string = $db_reg_string{$ftype_string_key};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
584
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
585 if(! ($fset_string && $ftype_string)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
586 $self->report("FAIL:\tSkipping fset vs ftype string test for $cell_type")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
587 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
588 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
589
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
590 #This is now effectively handled by the loop above
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
591
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
592 $self->log("Validating :\t$fset_string_key vs $ftype_string_key");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
593
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
594 my @fset_ids = split/,/, $fset_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
595 my @ftype_ids = split/,/, $ftype_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
596 my @new_ftype_ids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
597 my $ftype_fail = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
598
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
599 #Now need to work backwards through ftypes to remove pseudo ftypes before validating
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
600 #New string should be A,A,A;S,S,S,S,S,S;P,P,P
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
601 #Where A is and Anchor/Seed set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
602 #S is a supporting set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
603 #P is a pseudo feature type e.g. TSS proximal
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
604
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
605
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
606 if(scalar(@fset_ids) != scalar(@ftype_ids)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
607 $self->report("FAIL:\tLength mismatch between:\n\t$fset_string_key(".scalar(@fset_ids).")\t$fset_string\n\tAND\n\t$ftype_string_key(".scalar(@ftype_ids).")\t$ftype_string");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
608 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
609
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
610 foreach my $i(0..$#fset_ids){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
611 my $supporting_set_id = $fset_ids[$i];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
612 my $sset = $fset_a->fetch_by_dbID($supporting_set_id);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
613
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
614 if(! defined $sset){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
615 $self->report("FAIL:\t$fset_string_key $supporting_set_id does not exist in the DB");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
616 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
617 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
618 #test/build ftype string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
619
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
620 if(defined $ftype_string){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
621
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
622 if($sset->feature_type->dbID != $ftype_ids[$i]){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
623 $ftype_fail = 1;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
624 $self->report("FAIL:\t$fset_string_key $supporting_set_id(".$sset->name.") FeatureType(".$sset->feature_type->name.") does not match $ftype_string_key $ftype_ids[$i]");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
625 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
626 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
627
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
628 push @new_ftype_ids, $sset->feature_type->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
629
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
630 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
631 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
632
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
633
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
634 #Set ftype_string
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
635 #This will not account for pseudo ftypes? Remove!!!?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
636 my $new_ftype_string = join(',', @new_ftype_ids);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
637
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
638 if(! defined $ftype_string){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
639 $self->log("Updating $ftype_string_key to:\t$new_ftype_string");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
640 $self->db->dbc->db_handle->do("INSERT into regbuild_string(species_id, name, string) values($species_id, '$ftype_string_key', '$new_ftype_string')");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
641 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
642 elsif($ftype_fail){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
643 $self->report("FAIL:\t$ftype_string_key($ftype_string) does not match $fset_string_key types($new_ftype_string)");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
644 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
645
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
646
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
647 #Finally validate versus a reg feat
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
648 #Need to change this to ftype string rather than fset string?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
649 my $id_row_ref = $self->db->dbc->db_handle->selectrow_arrayref('select regulatory_feature_id from regulatory_feature where feature_set_id='.$fset->dbID.' limit 1');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
650
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
651 if(! defined $id_row_ref){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
652 $self->report("FAIL:\tNo RegulatoryFeatures found for FeatureSet ".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
653 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
654 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
655 my ($regf_dbID) = @$id_row_ref;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
656 my $rf_string = $regf_a->fetch_by_dbID($regf_dbID)->binary_string;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
657
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
658 if(length($rf_string) != scalar(@fset_ids)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
659 $self->report("FAIL:\tRegulatory string length mismatch between RegulatoryFeature($regf_dbID) and $fset_string_key:\n$rf_string(".length($rf_string).")\n$fset_string(".scalar(@fset_ids).")");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
660 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
661 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
662 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
663 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
664 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
665
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
666 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
667 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
668
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
669
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
670 #Change this to log sets and incorporate RegFeat FeatureSet as standard
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
671 #Grab all reg fsets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
672 #grab all displayable data sets which aren't reg sets?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
673
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
674 sub log_data_sets{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
675 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
676
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
677 my $dset_adaptor = $self->db->get_DataSetAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
678 my ($status);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
679 my $txt = 'Checking ';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
680 $status = 'DISPLAYABLE' if($self->{'check_displayable'});
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
681 $txt.= $status.' ' if $status;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
682 $txt .= 'DataSets';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
683 $self->log_header($txt);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
684
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
685 #Check for status first to avoid warning from BaseAdaptor.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
686 eval { $dset_adaptor->_get_status_name_id($status) };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
687
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
688 if($@){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
689 $self->report("FAIL: You have specified check_displayable, but the DISPLAYABLE status_name is not present in the DB");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
690 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
691 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
692
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
693
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
694 my @dsets;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
695 my $dsets = $dset_adaptor->fetch_all($status);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
696 @dsets = @$dsets if defined $dsets;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
697
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
698
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
699 $self->log('Found '.scalar(@dsets).' DataSets');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
700
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
701
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
702 foreach my $dset(@dsets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
703 $self->log_set("DataSet:\t\t", $dset) ;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
704
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
705 my $fset = $dset->product_FeatureSet;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
706 $self->log_set("Product FeatureSet:\t", $fset) if $fset;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
707
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
708 my @supporting_sets = @{$dset->get_supporting_sets};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
709
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
710 $self->log('Found '.scalar(@supporting_sets).' supporting sets:');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
711
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
712 if(my @supporting_sets = @{$dset->get_supporting_sets}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
713 #type here could be result, experimental or feature
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
714 #and feature could be annotated or experimental
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
715 #Move this to log set?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
716
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
717 map { my $type = ref($_);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
718 $type =~ s/.*://;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
719 $type .= '('.$_->feature_class.')' if($type eq 'FeatureSet');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
720 #Need to sprintf $type here to fixed width
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
721 $self->log_set($type.":\t", $_)} @supporting_sets;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
722 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
723 $self->log();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
724 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
725
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
726 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
727 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
728
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
729 sub log_set{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
730 my ($self, $text, $set) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
731
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
732 $text .= $set->display_label.'('.$set->name.')';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
733 $text .= "\tDISPLAYABLE" if($set->is_displayable);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
734 $self->log($text);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
735
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
736 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
737 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
738
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
739
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
740 sub check_stable_ids{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
741 my ($self, @slices) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
742
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
743 my $species_id = $self->db()->species_id();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
744
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
745 $self->log_header('Checking stable IDs');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
746
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
747 my $fset_a = $self->db->get_FeatureSetAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
748
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
749 my @regf_fsets = @{$fset_a->fetch_all_by_type('regulatory')};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
750
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
751 if(!@regf_fsets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
752 $self->report('WARNING: No regulatory FeatureSets found (fine if '.$self->db->species.' does not have a regulatory build)');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
753 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
754 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
755
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
756 foreach my $fset(@regf_fsets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
757
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
758 if($fset->name =~ /_v[0-9]$/){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
759 $self->log("Skipping stable_id test on archived set:\t".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
760 next;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
761 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
762
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
763 #Can't count NULL field, so have to count regulatory_feature_id!!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
764
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
765 #getting SR product here!!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
766 my $sql = "select count(rf.regulatory_feature_id) from regulatory_feature rf, seq_region sr, coord_system cs where rf.stable_id is NULL and rf.seq_region_id = sr.seq_region_id and sr.coord_system_id = cs.coord_system_id and cs.species_id = $species_id and rf.feature_set_id=".$fset->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
767
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
768
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
769
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
770 my ($null_sids) = @{$self->db->dbc->db_handle->selectrow_arrayref($sql)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
771
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
772 if($null_sids){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
773 $self->report("FAIL: Found a total of $null_sids NULL stable IDs for ".$fset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
774
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
775 my $slice_a = $self->db->get_SliceAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
776
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
777 if(! @slices){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
778 @slices = @{$slice_a->fetch_all('toplevel', 1)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
779 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
780
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
781 foreach my $slice(@slices){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
782 my $sr_name=$slice->seq_region_name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
783 $sql = 'select count(rf.stable_id) from regulatory_feature rf, seq_region sr, coord_system cs where rf.seq_region_id=sr.seq_region_id and sr.name="'.$sr_name.'" and sr.coord_system_id = cs.coord_system_id and cs.species_id = '.$species_id.' and rf.stable_id is NULL and rf.feature_set_id='.$fset->dbID;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
784 ($null_sids) = @{$self->db->dbc->db_handle->selectrow_arrayref($sql)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
785
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
786 #This is not reporting properly.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
787
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
788 $self->log($fset->name.":\t$null_sids NULL stable IDs on ".$slice->name) if $null_sids;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
789 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
790 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
791 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
792 $self->log($fset->name.":\tNo NULL stable IDs found");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
793 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
794 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
795 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
796
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
797 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
798
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
799 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
800
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
801
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
802 #This is for mart to enable them to join to the seq_region table without
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
803 #creating a product from all the reundant seq_region entries for each schema_build
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
804
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
805 sub set_current_coord_system{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
806 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
807
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
808
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
809
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
810 my $schema_build = $self->db->_get_schema_build($self->db->dnadb);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
811 $self->log_header("Setting current coord_system on $schema_build");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
812
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
813 my $sql = "update coord_system set is_current=False where schema_build !='$schema_build'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
814 $self->db->dbc->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
815 $sql = 'update coord_system set is_current=True where schema_build ="'.$schema_build.'" and attrib like "%default_version%"';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
816 $self->db->dbc->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
817
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
818 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
819 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
820
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
821 sub validate_DataSets{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
822 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
823
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
824 $self->log_header('Validating DataSets');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
825
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
826
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
827 #checks regualtory feature data and supporting sets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
828 #links between DataSet and FeatureSet, i.e. correct naming, not linking to old set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
829 #Displayable, DAS_DISPLAYABLE, IMPORTED_ASSM, MART_DISPLAYABLE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
830 #Naming of result_set should match data/feature_set
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
831 #warn non-attr feature/result sets which are DISPLAYABL
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
832 #warn about DISPLAYABLE sets which do not have displayable set in analysis_description.web_data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
833
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
834
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
835 my $fset_a = $self->db->get_FeatureSetAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
836 my $dset_a = $self->db->get_DataSetAdaptor;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
837 my ($dset_states, $rset_states, $fset_states) = $self->get_regbuild_set_states($self->db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
838
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
839 my %rf_fsets;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
840 my %set_states;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
841 my $sql;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
842
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
843 RF_FSET: foreach my $rf_fset(@{$fset_a->fetch_all_by_type('regulatory')}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
844 my $rf_fset_name = $rf_fset->name;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
845
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
846
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
847 $self->log("Validating $rf_fset_name");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
848
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
849
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
850 $rf_fsets{$rf_fset_name} = $rf_fset;#Do we only need the name for checking the dsets independantly?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
851
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
852 if($rf_fset_name =~ /_v[0-9]+$/){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
853 $self->report("FAIL:\tFound archived regulatory FeatureSet:\t$rf_fset_name");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
854 next RF_FSET;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
855 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
856
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
857 foreach my $state(@$fset_states){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
858
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
859 if(! $rf_fset->has_status($state)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
860 $self->report("WARNING:\tUpdating FeatureSet $rf_fset_name with status $state");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
861
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
862 $sql = 'INSERT into status select '. $rf_fset->dbID.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
863 ", 'feature_set', status_name_id from status_name where name='$state'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
864
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
865 $self->db->dbc->db_handle->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
866 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
867 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
868
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
869 #Do we need to warn about other states?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
870
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
871
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
872
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
873 my $rf_dset = $dset_a->fetch_by_product_FeatureSet($rf_fset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
874
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
875 if(! $rf_dset){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
876 $self->report("FAIL:\tNo DataSet for FeatureSet:\t$rf_fset_name");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
877 next RF_FSET;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
878 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
879
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
880
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
881
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
882 if($rf_fset_name ne $rf_dset->name){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
883 $self->report("FAIL:\tFound Feature/DataSet name mismatch:\t$rf_fset_name vs ".$rf_dset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
884 next RF_FSET;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
885 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
886
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
887
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
888 foreach my $state(@$dset_states){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
889
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
890 if(! $rf_dset->has_status($state)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
891 #Can we just update and warn here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
892 #Or do this separately in case we want some control over this?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
893 $self->report("WARNING:\tUpdating DataSet $rf_fset_name with status $state");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
894
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
895 $sql = 'INSERT into status select '.$rf_dset->dbID.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
896 ", 'data_set', status_name_id from status_name where name='$state'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
897 $self->db->dbc->db_handle->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
898 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
899 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
900
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
901
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
902
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
903 #We should check fset ctype matches all attr_set ctypes?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
904 #May have problems if we want to merge two lines into the same ctype build
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
905
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
906
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
907
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
908 foreach my $ra_fset(@{$rf_dset->get_supporting_sets}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
909
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
910 foreach my $state(@$fset_states){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
911
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
912 if(! $ra_fset->has_status($state)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
913 #Can we just update and warn here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
914 #Or do this separately in case we want some control over this?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
915 $self->report("WARNING:\tUpdating FeatureSet ".$ra_fset->name." with status $state");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
916
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
917 $sql = 'INSERT into status select '.$ra_fset->dbID.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
918 ", 'feature_set', status_name_id from status_name where name='$state'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
919 $self->db->dbc->db_handle->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
920 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
921 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
922
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
923
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
924
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
925 my $ra_dset = $dset_a->fetch_by_product_FeatureSet($ra_fset);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
926 my @ssets = @{$ra_dset->get_supporting_sets(undef, 'result')};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
927 my @displayable_sets;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
928
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
929 foreach my $sset(@ssets){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
930
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
931 if($sset->has_status('DISPLAYABLE')){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
932 push @displayable_sets, $sset;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
933 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
934 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
935 #Change this to get all then check status
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
936 #else print update sql
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
937
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
938 if(scalar(@displayable_sets) > 1){#There should only be one
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
939 $self->report("FAIL:\tThere should only be one DISPLAYABLE supporting ResultSet for DataSet:\t".$ra_dset->name);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
940 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
941 elsif(scalar(@displayable_sets) == 0){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
942
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
943 my $msg;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
944
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
945 if(scalar(@ssets) == 1){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
946
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
947 #fix here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
948
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
949 $msg = "Found unique non-DISPLAYABLE ResultSet:\t".$ssets[0]->name.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
950 "\n\tinsert into status select ".$ssets[0]->dbID.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
951 ", 'result_set', status_name_id from status_name where name='DISPLAYABLE';";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
952 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
953 else{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
954 $msg = "Found ".scalar(@ssets)." ResultSets ".join("\t", map($_->name, @ssets));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
955 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
956
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
957 $self->report("FAIL:\tThere are no DISPLAYABLE supporting ResultSets for DataSet:\t".
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
958 $ra_dset->name."\n$msg");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
959
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
960
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
961
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
962 next; #$ra_fset
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
963 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
964
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
965 my $ra_rset = $ssets[0];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
966
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
967 foreach my $state(@$rset_states){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
968
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
969 if(! $ra_rset->has_status($state)){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
970 #Can we just update and warn here?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
971 #Or do this separately in case we want some control over this?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
972 $self->report("WARNING:\tUpdating ResultSet ".$ra_rset->name." with status $state");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
973
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
974 $sql = 'INSERT into status select '.$ra_rset->dbID.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
975 ", 'result_set', status_name_id from status_name where name='$state'";
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
976 $self->db->dbc->db_handle->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
977 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
978 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
979 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
980 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
981
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
982 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
983 } # End of validate_DataSets
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
984
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
985
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
986
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
987
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
988
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
989
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
990 sub analyse_and_optimise_tables{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
991 my $self = shift;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
992
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
993 #myisamchk --analyze. or analyze statement
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
994
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
995 if($self->{'skip_analyse'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
996 $self->log_header('Skipping analyse/optimise tables');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
997 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
998 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
999
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1000 $self->log_header("Analysing and optimising tables");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1001
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1002
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1003 my $sql = 'show tables;';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1004 my @tables = @{$self->db->dbc->db_handle->selectall_arrayref($sql)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1005 map $_ = "@{$_}", @tables;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1006 my $analyse_sql = 'analyze table ';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1007 my $optimise_sql = 'optimize table ';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1008
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1009
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1010
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1011 foreach my $table(@tables){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1012 $self->log("Analysing and optimising $table");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1013
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1014
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1015
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1016 #Remove analyse as optimise does everything this does
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1017 my @anal_info = @{$self->db->dbc->db_handle->selectall_arrayref($analyse_sql.$table)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1018
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1019 foreach my $line_ref(@anal_info){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1020 my $status = $line_ref->[3];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1021 $self->report("FAIL: analyse $table status $status") if (!($status eq 'OK' || $status eq 'Table is already up to date'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1022 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1023
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1024 my @opt_info = @{$self->db->dbc->db_handle->selectall_arrayref($optimise_sql.$table)};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1025
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1026 foreach my $line_ref(@opt_info){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1027
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1028 my $status = $line_ref->[3];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1029 $self->report("FAIL: optimise $table status $status") if (!( $status eq 'OK' || $status eq 'Table is already up to date'));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1030 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1031
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1032 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1033
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1034 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1035 }# end of analyse_and_optimise_tables
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1036
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1037
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1038 sub clean_xrefs{
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1039 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1040
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1041 if($self->{'skip_xrefs'}){
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1042 $self->log_header('Skipping clean_xrefs');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1043 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1044 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1045
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1046 $self->log_header("Cleaning unlinked xref records");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1047
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1048 my $sql = 'DELETE x FROM xref x LEFT JOIN object_xref ox ON ox.xref_id = x.xref_id WHERE ox.xref_id IS NULL';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1049 #Should this also take accoumt of unmapped_objects?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1050 #No, as unmapped_object doesn't use xref, but probably should
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1051
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1052 my $row_cnt = $self->db->dbc->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1053
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1054 $self->reset_table_autoinc('xref', 'xref_id', $self->db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1055 $row_cnt = 0 if $row_cnt eq '0E0';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1056 $self->log("Deleted $row_cnt unlinked xref records");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1057
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1058
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1059 #Now remove old edbs
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1060 $self->log_header("Cleaning unlinked external_db records");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1061
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1062 #Need to account for xref and unmapped_object here
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1063 $sql = 'DELETE edb FROM external_db edb '.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1064 'LEFT JOIN xref x ON x.external_db_id = edb.external_db_id '.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1065 'LEFT JOIN unmapped_object uo ON uo.external_db_id=edb.external_db_id '.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1066 'WHERE x.external_db_id IS NULL and uo.external_db_id is NULL';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1067 $row_cnt = $self->db->dbc->do($sql);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1068
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1069 $self->reset_table_autoinc('external_db', 'external_db_id', $self->db);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1070 $row_cnt = 0 if $row_cnt eq '0E0';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1071 $self->log("Deleted $row_cnt unlinked external_db records");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1072
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1073
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1074 #Shouldn't clean orphaned oxs here as this means a rollback been done underneath the ox data
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1075 #or we have xref_id=0!
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1076 #Leave this to HC?
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1077
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1078
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1079
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1080
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1081
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1082 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1083 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1084
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1085
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1086 1;