5 UpgradeGenotypeStorage.pm
9 mx-run UpgradeGenotypeStorage [options] -H hostname -D dbname -u username [-F]
11 this is a subclass of L<CXGN::Metadata::Dbpatch>
12 see the perldoc of parent class for more details.
16 This patch converts genotypeprop values to jsonb, and fixes genotype related materialized views
20 Bryan Ellerbrock<bje24@cornell.edu>
22 =head1 COPYRIGHT & LICENSE
24 Copyright 2010 Boyce Thompson Institute for Plant Research
26 This program is free software; you can redistribute it and/or modify
27 it under the same terms as Perl itself.
32 package UpgradeGenotypeStorage
;
35 use CXGN
::BreederSearch
;
37 extends
'CXGN::Metadata::Dbpatch';
40 has
'+description' => ( default => <<'' );
41 This patch converts genotypeprop
values to jsonb
, and fixes genotype related materialized views
.
46 print STDOUT
"Executing the patch:\n " . $self->name . ".\n\nDescription:\n ". $self->description . ".\n\nExecuted by:\n " . $self->username . " .";
48 print STDOUT
"\nChecking if this db_patch was executed before or if previous db_patches have been executed.\n";
50 print STDOUT
"\nExecuting the SQL commands.\n";
52 $self->dbh->do(<<EOSQL);
56 DROP MATERIALIZED VIEW IF EXISTS public.materialized_genoview CASCADE;
58 UPDATE genotypeprop SET value = '{"igd number":"' || value || '"}' WHERE type_id = (SELECT cvterm_id FROM cvterm WHERE name = 'igd number');
59 ALTER TABLE genotypeprop ALTER COLUMN value TYPE JSONB USING value::JSON;
61 CREATE MATERIALIZED VIEW public.materialized_genoview AS
62 SELECT stock.stock_id AS accession_id,
63 nd_experiment_protocol.nd_protocol_id AS genotyping_protocol_id,
64 nd_experiment_genotype.genotype_id AS genotype_id
66 LEFT JOIN nd_experiment_stock ON stock.stock_id = nd_experiment_stock.stock_id
67 LEFT JOIN nd_experiment_protocol ON nd_experiment_stock.nd_experiment_id = nd_experiment_protocol.nd_experiment_id
68 LEFT JOIN nd_protocol ON nd_experiment_protocol.nd_protocol_id = nd_protocol.nd_protocol_id
69 LEFT JOIN nd_experiment_genotype ON nd_experiment_stock.nd_experiment_id = nd_experiment_genotype.nd_experiment_id
70 WHERE stock.type_id = (SELECT cvterm_id from cvterm where cvterm.name = 'accession')
74 CREATE UNIQUE INDEX unq_geno_idx ON public.materialized_genoview(accession_id,genotype_id) WITH (fillfactor=100);
75 CREATE INDEX accession_id_geno_idx ON public.materialized_genoview(accession_id) WITH (fillfactor=100);
76 CREATE INDEX genotyping_protocol_id_idx ON public.materialized_genoview(genotyping_protocol_id) WITH (fillfactor=100);
77 CREATE INDEX genotype_id_idx ON public.materialized_genoview(genotype_id) WITH (fillfactor=100);
78 ALTER MATERIALIZED VIEW materialized_genoview OWNER TO web_usr;
80 CREATE MATERIALIZED VIEW public.genotyping_protocolsXseedlots AS
81 SELECT public.materialized_genoview.genotyping_protocol_id,
82 public.stock.stock_id AS seedlot_id
83 FROM public.materialized_genoview
84 LEFT JOIN stock_relationship seedlot_relationship ON materialized_genoview.accession_id = seedlot_relationship.subject_id AND seedlot_relationship.type_id IN (SELECT cvterm_id from cvterm where cvterm.name = 'collection_of')
85 LEFT JOIN stock ON seedlot_relationship.object_id = stock.stock_id AND stock.type_id IN (SELECT cvterm_id from cvterm where cvterm.name = 'seedlot')
88 CREATE UNIQUE INDEX genotyping_protocolsXseedlots_idx ON public.genotyping_protocolsXseedlots(genotyping_protocol_id, seedlot_id) WITH (fillfactor=100);
89 ALTER MATERIALIZED VIEW genotyping_protocolsXseedlots OWNER TO web_usr;
91 CREATE MATERIALIZED VIEW public.genotyping_protocolsXtraits AS
92 SELECT public.materialized_genoview.genotyping_protocol_id,
93 public.materialized_phenoview.trait_id
94 FROM public.materialized_genoview
95 JOIN public.materialized_phenoview USING(accession_id)
96 GROUP BY public.materialized_genoview.genotyping_protocol_id, public.materialized_phenoview.trait_id
98 CREATE UNIQUE INDEX genotyping_protocolsXtraits_idx ON public.genotyping_protocolsXtraits(genotyping_protocol_id, trait_id) WITH (fillfactor=100);
99 ALTER MATERIALIZED VIEW genotyping_protocolsXtraits OWNER TO web_usr;
101 CREATE MATERIALIZED VIEW public.genotyping_protocolsXtrait_components AS
102 SELECT public.materialized_genoview.genotyping_protocol_id,
103 trait_component.cvterm_id AS trait_component_id
104 FROM public.materialized_genoview
105 JOIN public.materialized_phenoview USING(accession_id)
106 JOIN cvterm trait ON(materialized_phenoview.trait_id = trait.cvterm_id)
107 JOIN cvterm_relationship ON(trait.cvterm_id = cvterm_relationship.object_id AND cvterm_relationship.type_id = (SELECT cvterm_id from cvterm where name = 'contains'))
108 JOIN cvterm trait_component ON(cvterm_relationship.subject_id = trait_component.cvterm_id)
111 CREATE UNIQUE INDEX genotyping_protocolsXtrait_components_idx ON public.genotyping_protocolsXtrait_components(genotyping_protocol_id, trait_component_id) WITH (fillfactor=100);
112 ALTER MATERIALIZED VIEW genotyping_protocolsXtrait_components OWNER TO web_usr;
113 INSERT INTO matviews (mv_name, currently_refreshing, last_refresh) VALUES ('genotyping_protocolsXtrait_components', FALSE, CURRENT_TIMESTAMP);
115 CREATE MATERIALIZED VIEW public.accessionsXgenotyping_protocols AS
116 SELECT public.materialized_genoview.accession_id,
117 public.materialized_genoview.genotyping_protocol_id
118 FROM public.materialized_genoview
119 GROUP BY public.materialized_genoview.accession_id, public.materialized_genoview.genotyping_protocol_id
121 CREATE UNIQUE INDEX accessionsXgenotyping_protocols_idx ON public.accessionsXgenotyping_protocols(accession_id, genotyping_protocol_id) WITH (fillfactor=100);
122 ALTER MATERIALIZED VIEW accessionsXgenotyping_protocols OWNER TO web_usr;
124 CREATE MATERIALIZED VIEW public.breeding_programsXgenotyping_protocols AS
125 SELECT public.materialized_phenoview.breeding_program_id,
126 public.materialized_genoview.genotyping_protocol_id
127 FROM public.materialized_phenoview
128 JOIN public.materialized_genoview USING(accession_id)
129 GROUP BY public.materialized_phenoview.breeding_program_id, public.materialized_genoview.genotyping_protocol_id
131 CREATE UNIQUE INDEX breeding_programsXgenotyping_protocols_idx ON public.breeding_programsXgenotyping_protocols(breeding_program_id, genotyping_protocol_id) WITH (fillfactor=100);
132 ALTER MATERIALIZED VIEW breeding_programsXgenotyping_protocols OWNER TO web_usr;
134 CREATE MATERIALIZED VIEW public.genotyping_protocolsXlocations AS
135 SELECT public.materialized_genoview.genotyping_protocol_id,
136 public.materialized_phenoview.location_id
137 FROM public.materialized_genoview
138 JOIN public.materialized_phenoview USING(accession_id)
139 GROUP BY public.materialized_genoview.genotyping_protocol_id, public.materialized_phenoview.location_id
141 CREATE UNIQUE INDEX genotyping_protocolsXlocations_idx ON public.genotyping_protocolsXlocations(genotyping_protocol_id, location_id) WITH (fillfactor=100);
142 ALTER MATERIALIZED VIEW genotyping_protocolsXlocations OWNER TO web_usr;
144 CREATE MATERIALIZED VIEW public.genotyping_protocolsXplants AS
145 SELECT public.materialized_genoview.genotyping_protocol_id,
146 public.stock.stock_id AS plant_id
147 FROM public.materialized_genoview
148 JOIN public.materialized_phenoview USING(accession_id)
149 JOIN public.stock ON(public.materialized_phenoview.stock_id = public.stock.stock_id AND public.stock.type_id = (SELECT cvterm_id from cvterm where cvterm.name = 'plant'))
150 GROUP BY public.materialized_genoview.genotyping_protocol_id, public.stock.stock_id
152 CREATE UNIQUE INDEX genotyping_protocolsXplants_idx ON public.genotyping_protocolsXplants(genotyping_protocol_id, plant_id) WITH (fillfactor=100);
153 ALTER MATERIALIZED VIEW genotyping_protocolsXplants OWNER TO web_usr;
155 CREATE MATERIALIZED VIEW public.genotyping_protocolsXplots AS
156 SELECT public.materialized_genoview.genotyping_protocol_id,
157 public.stock.stock_id AS plot_id
158 FROM public.materialized_genoview
159 JOIN public.materialized_phenoview USING(accession_id)
160 JOIN public.stock ON(public.materialized_phenoview.stock_id = public.stock.stock_id AND public.stock.type_id = (SELECT cvterm_id from cvterm where cvterm.name = 'plot'))
161 GROUP BY public.materialized_genoview.genotyping_protocol_id, public.stock.stock_id
163 CREATE UNIQUE INDEX genotyping_protocolsXplots_idx ON public.genotyping_protocolsXplots(genotyping_protocol_id, plot_id) WITH (fillfactor=100);
164 ALTER MATERIALIZED VIEW genotyping_protocolsXplots OWNER TO web_usr;
166 CREATE MATERIALIZED VIEW public.genotyping_protocolsXtrial_designs AS
167 SELECT public.materialized_genoview.genotyping_protocol_id,
168 trialdesign.value AS trial_design_id
169 FROM public.materialized_genoview
170 JOIN public.materialized_phenoview USING(accession_id)
171 JOIN public.projectprop trialdesign ON materialized_phenoview.trial_id = trialdesign.project_id AND trialdesign.type_id = (SELECT cvterm_id from cvterm where cvterm.name = 'design' )
172 GROUP BY public.materialized_genoview.genotyping_protocol_id, trialdesign.value
174 CREATE UNIQUE INDEX genotyping_protocolsXtrial_designs_idx ON public.genotyping_protocolsXtrial_designs(genotyping_protocol_id, trial_design_id) WITH (fillfactor=100);
175 ALTER MATERIALIZED VIEW genotyping_protocolsXtrial_designs OWNER TO web_usr;
177 CREATE MATERIALIZED VIEW public.genotyping_protocolsXtrial_types AS
178 SELECT public.materialized_genoview.genotyping_protocol_id,
179 trialterm.cvterm_id AS trial_type_id
180 FROM public.materialized_genoview
181 JOIN public.materialized_phenoview USING(accession_id)
182 JOIN projectprop trialprop ON materialized_phenoview.trial_id = trialprop.project_id AND trialprop.type_id IN (SELECT cvterm_id from cvterm JOIN cv USING(cv_id) WHERE cv.name = 'project_type' )
183 JOIN cvterm trialterm ON trialprop.type_id = trialterm.cvterm_id
184 GROUP BY public.materialized_genoview.genotyping_protocol_id, trialterm.cvterm_id
186 CREATE UNIQUE INDEX genotyping_protocolsXtrial_types_idx ON public.genotyping_protocolsXtrial_types(genotyping_protocol_id, trial_type_id) WITH (fillfactor=100);
187 ALTER MATERIALIZED VIEW genotyping_protocolsXtrial_types OWNER TO web_usr;
189 CREATE MATERIALIZED VIEW public.genotyping_protocolsXtrials AS
190 SELECT public.materialized_genoview.genotyping_protocol_id,
191 public.materialized_phenoview.trial_id
192 FROM public.materialized_genoview
193 JOIN public.materialized_phenoview USING(accession_id)
194 GROUP BY public.materialized_genoview.genotyping_protocol_id, public.materialized_phenoview.trial_id
196 CREATE UNIQUE INDEX genotyping_protocolsXtrials_idx ON public.genotyping_protocolsXtrials(genotyping_protocol_id, trial_id) WITH (fillfactor=100);
197 ALTER MATERIALIZED VIEW genotyping_protocolsXtrials OWNER TO web_usr;
199 CREATE MATERIALIZED VIEW public.genotyping_protocolsXyears AS
200 SELECT public.materialized_genoview.genotyping_protocol_id,
201 public.materialized_phenoview.year_id
202 FROM public.materialized_genoview
203 JOIN public.materialized_phenoview USING(accession_id)
204 GROUP BY public.materialized_genoview.genotyping_protocol_id, public.materialized_phenoview.year_id
206 CREATE UNIQUE INDEX genotyping_protocolsXyears_idx ON public.genotyping_protocolsXyears(genotyping_protocol_id, year_id) WITH (fillfactor=100);
207 ALTER MATERIALIZED VIEW genotyping_protocolsXyears OWNER TO web_usr;
213 print "You're done!\n";