3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.cdm
.database
.update
.v31_33
;
13 import java
.util
.ArrayList
;
14 import java
.util
.List
;
16 import org
.apache
.log4j
.Logger
;
18 import com
.sun
.tools
.xjc
.reader
.gbind
.Sequence
;
20 import eu
.etaxonomy
.cdm
.database
.update
.ColumnAdder
;
21 import eu
.etaxonomy
.cdm
.database
.update
.ColumnNameChanger
;
22 import eu
.etaxonomy
.cdm
.database
.update
.ColumnRemover
;
23 import eu
.etaxonomy
.cdm
.database
.update
.ColumnTypeChanger
;
24 import eu
.etaxonomy
.cdm
.database
.update
.ISchemaUpdater
;
25 import eu
.etaxonomy
.cdm
.database
.update
.ISchemaUpdaterStep
;
26 import eu
.etaxonomy
.cdm
.database
.update
.MnTableCreator
;
27 import eu
.etaxonomy
.cdm
.database
.update
.SchemaUpdaterBase
;
28 import eu
.etaxonomy
.cdm
.database
.update
.SimpleSchemaUpdaterStep
;
29 import eu
.etaxonomy
.cdm
.database
.update
.SortIndexUpdater
;
30 import eu
.etaxonomy
.cdm
.database
.update
.TableCreator
;
31 import eu
.etaxonomy
.cdm
.database
.update
.TableDroper
;
32 import eu
.etaxonomy
.cdm
.database
.update
.TableNameChanger
;
33 import eu
.etaxonomy
.cdm
.database
.update
.TreeIndexUpdater
;
34 import eu
.etaxonomy
.cdm
.database
.update
.v30_31
.SchemaUpdater_30_301
;
35 import eu
.etaxonomy
.cdm
.model
.common
.AnnotationType
;
36 import eu
.etaxonomy
.cdm
.model
.common
.ExtensionType
;
37 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
38 import eu
.etaxonomy
.cdm
.model
.common
.MarkerType
;
39 import eu
.etaxonomy
.cdm
.model
.common
.MaterialAndMethod
;
40 import eu
.etaxonomy
.cdm
.model
.common
.OriginalSourceType
;
41 import eu
.etaxonomy
.cdm
.model
.common
.TermType
;
42 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
43 import eu
.etaxonomy
.cdm
.model
.description
.MeasurementUnit
;
44 import eu
.etaxonomy
.cdm
.model
.description
.NaturalLanguageTerm
;
45 import eu
.etaxonomy
.cdm
.model
.description
.State
;
46 import eu
.etaxonomy
.cdm
.model
.description
.StatisticalMeasure
;
47 import eu
.etaxonomy
.cdm
.model
.description
.TextFormat
;
48 import eu
.etaxonomy
.cdm
.model
.location
.NamedArea
;
49 import eu
.etaxonomy
.cdm
.model
.location
.NamedAreaLevel
;
50 import eu
.etaxonomy
.cdm
.model
.location
.NamedAreaType
;
51 import eu
.etaxonomy
.cdm
.model
.location
.ReferenceSystem
;
52 import eu
.etaxonomy
.cdm
.model
.location
.WaterbodyOrCountry
;
53 import eu
.etaxonomy
.cdm
.model
.name
.HybridRelationshipType
;
54 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationshipType
;
55 import eu
.etaxonomy
.cdm
.model
.name
.NameTypeDesignationStatus
;
56 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalStatusType
;
57 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
58 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignationStatus
;
59 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEventType
;
60 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
61 import eu
.etaxonomy
.cdm
.model
.occurrence
.PreservationMethod
;
62 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
63 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
64 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceType
;
65 import eu
.etaxonomy
.cdm
.model
.taxon
.SynonymRelationshipType
;
66 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonRelationshipType
;
71 * @created Jun 06, 2013
73 public class SchemaUpdater_31_33
extends SchemaUpdaterBase
{
75 private static final Logger logger
= Logger
.getLogger(SchemaUpdater_31_33
.class);
76 private static final String startSchemaVersion
= "3.0.1.0.201104190000";
77 private static final String endSchemaVersion
= "3.3.0.0.201308010000";
79 // ********************** FACTORY METHOD *******************************************
81 public static SchemaUpdater_31_33
NewInstance(){
82 return new SchemaUpdater_31_33();
86 * @param startSchemaVersion
87 * @param endSchemaVersion
89 protected SchemaUpdater_31_33() {
90 super(startSchemaVersion
, endSchemaVersion
);
94 * @see eu.etaxonomy.cdm.database.update.SchemaUpdaterBase#getUpdaterList()
97 protected List
<ISchemaUpdaterStep
> getUpdaterList() {
101 ISchemaUpdaterStep step
;
106 //remove SpecimenOrObservationBase_Media #3597
107 //TODO check if SpecimenOrObservationBase_Media has data => move to first position, don't run update if data exists
108 //TODO check if Description -Specimen Relation has M:M data
110 throw new RuntimeException("Required check for SpecimenOrObservationBase_Media");
112 logger
.warn("CHECKS for inconsistent data not running !!!!");
116 List
<ISchemaUpdaterStep
> stepList
= new ArrayList
<ISchemaUpdaterStep
>();
118 //TODO Does it throw exception if table does not exist?
119 //Was in Schemaupdater_301_31 which was never used and later deleted (r18331).
120 //drop TypeDesignationBase_TaxonNameBase //from schemaUpdater 301_31
121 stepName
= "Drop duplicate TypeDesignation-TaxonName table";
122 tableName
= "TypeDesignationBase_TaxonNameBase";
123 step
= TableDroper
.NewInstance(stepName
, tableName
, INCLUDE_AUDIT
);
126 //create original source type column
127 stepName
= "Create original source type column";
128 tableName
= "OriginalSourceBase";
129 columnName
= "sourceType";
130 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, 4, INCLUDE_AUDIT
);
131 ((ColumnAdder
)step
).setNotNull(true);
134 //update original source type
135 updateOriginalSourceType(stepList
);
137 //create and update elevenation max, remove error column
138 updateElevationMax(stepList
);
140 //create TaxonNode tree index
141 stepName
= "Create taxon node tree index";
142 tableName
= "TaxonNode";
143 columnName
= "treeIndex";
144 //TODO NOT NULL unclear //see also columnTypeChanger
145 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, 255, INCLUDE_AUDIT
);
148 //update treeindex for taxon nodes
149 stepName
= "Update TaxonNode treeindex";
150 tableName
= "TaxonNode";
151 String treeIdColumnName
= "classification_id";
152 step
= TreeIndexUpdater
.NewInstance(stepName
, tableName
, treeIdColumnName
, columnName
, INCLUDE_AUDIT
);
155 //create TaxonNode sort index column
156 stepName
= "Create taxon node sort index column";
157 tableName
= "TaxonNode";
158 columnName
= "sortIndex";
159 step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, false, null);
162 //TODO implement sorted behaviour in model first !!
164 stepName
= "Update sort index on TaxonNode children";
165 tableName
= "TaxonNode";
166 String parentIdColumn
= "parent_id";
167 String sortIndexColumn
= "sortIndex";
168 SortIndexUpdater updateSortIndex
= SortIndexUpdater
.NewInstance(stepName
, tableName
, parentIdColumn
, sortIndexColumn
, INCLUDE_AUDIT
);
169 stepList
.add(updateSortIndex
);
172 //create feature node tree index
173 stepName
= "Create feature node tree index";
174 tableName
= "FeatureNode";
175 columnName
= "treeIndex";
176 //TODO NOT NULL unclear
177 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, 255, INCLUDE_AUDIT
);
180 //update tree index for feature node
181 stepName
= "Update FeatureNode treeindex";
182 tableName
= "FeatureNode";
183 treeIdColumnName
= "featuretree_id";
184 step
= TreeIndexUpdater
.NewInstance(stepName
, tableName
, treeIdColumnName
, columnName
, INCLUDE_AUDIT
);
187 //update introduced: adventitious (casual) label
189 stepName
= "Update introduced: adventitious (casual) label";
190 String query
= " UPDATE Representation r " +
191 " SET r.abbreviatedlabel = 'ia' " +
192 " WHERE r.abbreviatedlabel = 'id' AND r.label = 'introduced: adventitious (casual)' ";
193 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing("Representation");
196 //termType for DefinedTerms and TermVocabulary, no type must be null
197 stepName
= "Create termType column in DefinedTermBase";
198 tableName
= "DefinedTermBase";
199 columnName
= "termType";
200 //TODO NOT NULL unclear
201 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, 255, INCLUDE_AUDIT
);
204 stepName
= "Create termType column in TermVocabulary";
205 tableName
= "TermVocabulary";
206 columnName
= "termType";
207 //TODO NOT NULL unclear
208 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, 4, INCLUDE_AUDIT
);
212 //update termType for DefinedTerms, no type must be null
213 updateTermTypesForTerms(stepList
);
215 //update termType for TermVocabulary, no type must be null
216 updateTermTypesForVocabularies(stepList
);
218 //update DTYPE of DefinedTerms
219 updateDtypeOfDefinedTerms(stepList
);
221 //idInVocabulary for DefinedTerms
222 stepName
= "Create idInVocabulary column in DefinedTermBase";
223 tableName
= "DefinedTermBase";
224 columnName
= "idInVocabulary";
225 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, 255, INCLUDE_AUDIT
);
228 //update idInVocabulary
229 updateIdInVocabulary(stepList
);
232 stepName
= "Create rankClass column in DefinedTermBase";
233 tableName
= "DefinedTermBase";
234 columnName
= "rankClass";
235 //TODO NOT NULL unclear
236 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, 255, INCLUDE_AUDIT
);
239 //update rankClass (#3521)
240 step
= RankClassUpdater
.NewInstance();
243 //update datatype->CLOB for URIs. (DefinedTerms, TermVocabulary, Reference, Rights, MediaRepresentationPart )
244 //#3345, TODO adapt type to <65k
245 //TODO sequence.sequence has been changed #3360
246 changeUriType(stepList
);
248 //Annotation.linkbackUri change name #3374
249 stepName
= "Update url to uri (->clob) for Annotation.linkbackUri";
250 columnName
= "linkbackUrl";
251 String newColumnName
= "linkbackUri";
252 tableName
= "Annotation";
253 //TODO check non MySQL and with existing data (probably does not exist)
254 step
= ColumnNameChanger
.NewClobInstance(stepName
, tableName
, columnName
, newColumnName
, INCLUDE_AUDIT
);
257 //update Sicilia -> Sicily
259 stepName
= "Update Sicilia -> Sicily";
260 query
= " UPDATE Representation r " +
261 " SET r.label = 'Sicily', r.text = 'Sicily' " +
262 " WHERE (r.abbreviatedlabel = 'SIC-SI' OR r.abbreviatedlabel = 'SIC') AND r.label = 'Sicilia' ";
263 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing("Representation");
266 //remove homotypical group form type designation base
267 stepName
= "Remove column homotypical group in type designation base";
268 tableName
= "TypeDesignationBase";
269 String oldColumnName
= "homotypicalgroup_id";
270 step
= ColumnRemover
.NewInstance(stepName
, tableName
, oldColumnName
, INCLUDE_AUDIT
);
273 //add publish flag to taxon
274 stepName
= "Add publish flag column to taxon base";
275 tableName
= "TaxonBase";
276 columnName
= "publish";
277 step
= ColumnAdder
.NewBooleanInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, true);
280 //add publish flag to specimen
281 stepName
= "Add publish flag column to SpecimenOrObservationBase";
282 tableName
= "SpecimenOrObservationBase";
283 columnName
= "publish";
284 step
= ColumnAdder
.NewBooleanInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, true);
287 //add columns abbrevTitle, abbrevTitleCache and protectedAbbrevTitleCache to Reference
288 stepName
= "Add abbrevTitle to Reference";
289 tableName
= "Reference";
290 columnName
= "abbrevTitle";
292 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, length
, INCLUDE_AUDIT
);
295 stepName
= "Add abbrevTitleCache to Reference";
296 tableName
= "Reference";
297 columnName
= "abbrevTitleCache";
299 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, length
, INCLUDE_AUDIT
);
302 stepName
= "Add protectedAbbrevTitleCache to Reference";
303 tableName
= "Reference";
304 columnName
= "protectedAbbrevTitleCache";
305 step
= ColumnAdder
.NewBooleanInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, false);
308 //update abbrevTitle, protectedAbbrevTitle and abbrevTitleCache in Reference
309 updateAbbrevTitle(stepList
);
311 //add doi to reference
312 stepName
= "Add doi to Reference";
313 tableName
= "Reference";
316 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, length
, INCLUDE_AUDIT
);
320 //add start number to PolytomousKey
321 stepName
= "Add start number column to PolytomousKey";
322 tableName
= "PolytomousKey";
323 columnName
= "startNumber";
324 Integer defaultValue
= 1;
325 step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, defaultValue
, true);
328 //add recordBasis to specimenOrObservationBase
329 stepName
= "Add recordBasis to SpecimenOrObservationBase";
330 tableName
= "SpecimenOrObservationBase";
331 columnName
= "recordBasis";
332 length
= 4; //TODO needed?
334 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, length
, INCLUDE_AUDIT
);
338 updateRecordBasis(stepList
);
340 //update specimenOrObservationBase DTYPE with DerivedUnit where necessary
341 stepName
= "Update Specimen -> DerivedUnit";
342 query
= " UPDATE SpecimenOrObservationBase sob " +
343 " SET sob.DTYPE = 'DerivedUnit' " +
344 " WHERE sob.DTYPE = 'Specimen' OR sob.DTYPE = 'Fossil' OR sob.DTYPE = 'LivingBeing' OR sob.DTYPE = 'Observation' ";
345 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing("SpecimenOrObservationBase");
348 //update DTYPE FieldObservation -> FieldUnit #3351
349 stepName
= "Update FieldObservation -> FieldUnit";
350 query
= " UPDATE SpecimenOrObservationBase sob " +
351 " SET sob.DTYPE = 'FieldUnit' " +
352 " WHERE sob.DTYPE = 'FieldObservation' ";
353 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing("SpecimenOrObservationBase");
356 //add kindOfUnit to SpecimenOrObservationBase
357 stepName
= "Add kindOfUnit column to SpecimenOrObservationBase";
358 tableName
= "SpecimenOrObservationBase";
359 columnName
= "kindOfUnit_id";
360 String relatedTable
= "DefinedTermBase";
361 step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, false, relatedTable
);
364 //remove citation_id and citation micro-reference columns from Media table #2541
365 //FIXME first check if columns are always empty
366 stepName
= "Remove citation column from Media";
368 columnName
= "citation_id";
369 step
= ColumnRemover
.NewInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
372 stepName
= "Remove citation microreference column from Media";
374 columnName
= "citationMicroReference";
375 step
= ColumnRemover
.NewInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
378 //update length of all title caches and full title cache in names #1592
379 updateTitleCacheLength(stepList
);
381 //rename FK column states_id -> stateData_id in DescriptionElementBase_StateData(+AUD) #2923
382 stepName
= "Update states_id to stateData_id in DescriptionElementBase_StateData";
383 tableName
= "DescriptionElementBase_StateData";
384 oldColumnName
= "states_id";
385 newColumnName
= "stateData_id";
386 step
= ColumnNameChanger
.NewIntegerInstance(stepName
, tableName
, oldColumnName
, newColumnName
, INCLUDE_AUDIT
);
389 //specimen descriptions #3571
390 //add column DescriptionBase.Specimen_ID #3571
391 stepName
= "Add specimen_id column to DescriptionBase";
392 tableName
= "DescriptionBase";
393 columnName
= "specimen_id";
394 boolean notNull
= false;
395 String referencedTable
= "SpecimenOrObservationBase";
396 step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, notNull
, referencedTable
);
399 //update DescriptionBase.Specimen_ID data #3571
400 updateDescriptionSpecimenRelation(stepList
);
402 //remove tables DescriptionBase_SpecimenOrObservationBase(_AUD) #3571
403 stepName
= "Remove table DescriptionBase_SpecimenOrObservationBase";
404 tableName
= "DescriptionBase_SpecimenOrObservationBase";
405 step
= TableDroper
.NewInstance(stepName
, tableName
, INCLUDE_AUDIT
);
408 //change column type for reference type
409 //TODO test with non-Mysql
410 stepName
= "Change column type for Reference.type";
411 tableName
= "Reference";
412 columnName
= "refType";
413 Integer defaultValueStr
= -1;
416 step
= ColumnTypeChanger
.NewInt2StringInstance(stepName
, tableName
, columnName
, size
, true, defaultValueStr
, notNull
);
419 //update reference type
420 updateReferenceType(stepList
);
422 //create table CdmPreferences #3555
423 stepName
= "Create table 'CdmPreferences'";
424 tableName
= "CdmPreferences";
425 TableCreator stepPref
= TableCreator
.NewInstance(stepName
, tableName
,
426 new String
[]{"key_subject", "key_predicate","value"}, //colNames
427 new String
[]{"string_100", "string_200","string_1023",}, // columnTypes
428 new String
[]{null, "DefinedTermBase",null}, //referencedTables
429 ! INCLUDE_AUDIT
, false);
430 stepPref
.setPrimaryKeyParams("key_subject, key_predicate", null);
431 stepList
.add(stepPref
);
432 //FIXME length of key >= 1000
434 //TODO fill CdmPreferences with default values
436 //update RightsTerm to RightsType #1306
437 stepName
= "Update RightsTerm -> RightsType";
438 String updateSql
= "UPDATE DefinedTermBase SET DTYPE = 'RightsType' WHERE DTYPE = 'RightsTerm'";
439 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, updateSql
).setDefaultAuditing("DefinedTermBase");
442 //update Rights table to RightsInfo
443 updateRights2RightsInfo(stepList
);
445 //Remove column isDescriptionSeparated from FeatureTree #3678
446 stepName
= "Remove column isDescriptionSeparated from FeatureTree";
447 tableName
= "FeatureTree";
448 columnName
= "descriptionSeparated";
449 step
= ColumnRemover
.NewInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
452 //remove table Sequence_GenBankAccession #3552
453 stepName
= "Remove table Sequence_GenBankAccession";
454 tableName
= "Sequence_GenBankAccession";
455 step
= TableDroper
.NewInstance(stepName
, tableName
, INCLUDE_AUDIT
);
458 //remove table GenBankAccession #3552
459 stepName
= "Remove table GenBankAccession";
460 tableName
= "GenBankAccession";
461 step
= TableDroper
.NewInstance(stepName
, tableName
, INCLUDE_AUDIT
);
464 //remove old sequence columns
465 removeOldSequenceColumns(stepList
);
467 //add MediaSpecimen column #3614
468 stepName
= "Add mediaSpecimen column to SpecimenOrObservationBase";
469 tableName
= "SpecimenOrObservationBase";
470 columnName
= "mediaSpecimen_id";
472 referencedTable
= "Media";
473 step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, notNull
, referencedTable
);
476 //remove DescriptionBase_Feature #2202
477 stepName
= "Remove table DescriptionBase_Feature";
478 tableName
= "DescriptionBase_Feature";
479 step
= TableDroper
.NewInstance(stepName
, tableName
, INCLUDE_AUDIT
);
482 //add timeperiod to columns to description element base #3312
483 addTimeperiodToDescriptionElement(stepList
);
486 //TODO add DnaMarker vocabulary and terms #3591 => TermUpdater
488 //SpecimenOrObservationBase_Media #3597
489 stepName
= "Remove table SpecimenOrObservationBase_Media";
490 tableName
= "SpecimenOrObservationBase_Media";
491 step
= TableDroper
.NewInstance(stepName
, tableName
, INCLUDE_AUDIT
);
495 //Amplification #3360
496 stepName
= "Create table 'Primer'";
497 tableName
= "Primer";
498 step
= TableCreator
.NewAnnotatableInstance(stepName
, tableName
,
499 new String
[]{"label","sequence_id","publishedIn_id"}, //colNames
500 new String
[]{"string_255","int","int"}, // columnTypes
501 new String
[]{null,Sequence
.class.getSimpleName(),Reference
.class.getSimpleName()}, //referencedTables
505 //MaterialAndMethod #3360
506 stepName
= "Create table 'MaterialAndMethod'";
507 tableName
= MaterialAndMethod
.class.getSimpleName();
508 step
= TableCreator
.NewAnnotatableInstance(stepName
, tableName
,
509 new String
[]{"DTYPE", "materialMethodTerm_id","materialMethodText"}, //colNames
510 new String
[]{"string_255", "int","string_1000",}, // columnTypes
511 new String
[]{null, "DefinedTermBase",null}, //referencedTables
516 stepName
= "Create table 'Cloning'";
517 tableName
= "Cloning";
518 String matMetName
= MaterialAndMethod
.class.getSimpleName();
519 step
= TableCreator
.NewEventInstance(stepName
, tableName
,
520 new String
[]{"strain","method_id","forwardPrimer_id","reversePrimer_id"}, //colNames
521 new String
[]{"string_255", "int","int","int"}, // columnTypes
522 new String
[]{null, matMetName
,"Primer","Primer"}, //referencedTables
527 //Amplification #3360
528 stepName
= "Create table 'Amplification'";
529 tableName
= "Amplification";
530 step
= TableCreator
.NewEventInstance(stepName
, tableName
,
531 new String
[]{"dnaSample_id","dnaMarker_id","forwardPrimer_id","reversePrimer_id","purification_id","cloning_id", "gelPhoto_id", "successful","successText","ladderUsed","electrophoresisVoltage","gelRunningTime","gelConcentration"}, //colNames
532 new String
[]{"int","int","int","int","int","int","int", "bit","string_255","string_255","double","double","double"}, // columnTypes
533 new String
[]{"SpecimenOrObservationBase","DefinedTermBase","Primer","Primer",matMetName
, matMetName
, "Media", null, null, null, null, null, null}, //referencedTables
538 stepName
= "Create table 'SingleRead'";
539 tableName
= "SingleRead";
540 step
= TableCreator
.NewEventInstance(stepName
, tableName
,
541 new String
[]{"amplification_id","materialAndMethod_id","primer_id","pherogram_id","direction","sequence_length"}, //colNames
542 new String
[]{"int","int","int","int","int","int"}, // columnTypes
543 new String
[]{"Amplification",matMetName
, "Primer","Media", null, null}, //referencedTables
545 //TODO length sequence_string
548 //sequence - consensussequence_string #3360
549 stepName
= "Add sequence_string to single read";
550 columnName
= "sequence_string";
551 step
= ColumnAdder
.NewClobInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
554 //amplification - single reads #3360
555 stepName
= "Add single reads to amplification";
556 String firstTable
= "Amplification";
557 String secondTable
= "SingleRead";
558 step
= MnTableCreator
.NewMnInstance(stepName
, firstTable
, null, secondTable
, null, SchemaUpdaterBase
.INCLUDE_AUDIT
, false, true);
561 //sequence - single reads #3360
562 stepName
= "Add single reads to sequence";
563 firstTable
= "Sequence";
564 secondTable
= "SingleRead";
565 step
= MnTableCreator
.NewMnInstance(stepName
, firstTable
, null, secondTable
, null, SchemaUpdaterBase
.INCLUDE_AUDIT
, false, true);
568 //sequence - barcode #3360
569 stepName
= "Add barcodesequencepart_length to sequence";
570 tableName
= "Sequence";
571 columnName
= "barcodeSequencePart_length";
573 step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, defaultValue
, false);
576 //sequence - barcode #3360
577 stepName
= "Add barcodesequencepart_string to sequence";
578 tableName
= "Sequence";
579 columnName
= "barcodeSequencePart_string";
580 step
= ColumnAdder
.NewClobInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
583 //sequence - consensussequence_length #3360
584 stepName
= "Add consensusSequence_length to sequence";
585 tableName
= "Sequence";
586 columnName
= "consensusSequence_length";
588 step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, defaultValue
, false);
591 //sequence - consensussequence_string #3360
592 stepName
= "Add consensusSequence_string to sequence";
593 tableName
= "Sequence";
594 columnName
= "consensusSequence_string";
595 step
= ColumnAdder
.NewClobInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
598 //sequence - contigFile #3360
599 stepName
= "Add contigFile to sequence";
600 tableName
= "Sequence";
601 columnName
= "contigFile_id";
602 referencedTable
= "Media";
603 step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, false, referencedTable
);
606 //sequence - boldprocessid #3360
607 stepName
= "Add boldprocessId to sequence";
608 tableName
= "Sequence";
609 columnName
= "boldProcessId";
611 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, length
, INCLUDE_AUDIT
);
614 //sequence - boldprocessid #3360
615 stepName
= "Add geneticAccessionNumber to sequence";
616 tableName
= "Sequence";
617 columnName
= "geneticAccessionNumber";
619 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, length
, INCLUDE_AUDIT
);
622 //sequence - haplotype #3360
623 stepName
= "Add haplotype to sequence";
624 tableName
= "Sequence";
625 columnName
= "haplotype";
627 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, length
, INCLUDE_AUDIT
);
630 //sequence - isBarcode #3360
631 stepName
= "Add isBarcode to sequence";
632 tableName
= "Sequence";
633 columnName
= "isBarcode";
634 step
= ColumnAdder
.NewBooleanInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, false);
637 //sequence - dnaMarker #3360
638 stepName
= "Add dnaMarker to sequence";
639 tableName
= "Sequence";
640 columnName
= "dnaMarker_id";
641 referencedTable
= "DefinedTermBase";
642 step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, false, referencedTable
);
645 //sequence - dnaSample #3360
646 stepName
= "Add dnaSample to sequence";
647 tableName
= "Sequence";
648 columnName
= "dnaSample_id";
649 referencedTable
= "SpecimenOrObservationBase";
650 step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, false, referencedTable
);
656 private void updateRights2RightsInfo(List
<ISchemaUpdaterStep
> stepList
) {
658 String stepName
= "Update Rights to RightsInfo";
659 String tableName
= "Rights";
660 String newTableName
= "RightsInfo";
661 ISchemaUpdaterStep step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
664 stepName
= "Update AgentBase_Rights to RightsInfo";
665 tableName
= "AgentBase_Rights";
666 newTableName
= "AgentBase_RightsInfo";
667 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
670 stepName
= "Update Rights_Annotation to RightsInfo";
671 tableName
= "Rights_Annotation";
672 newTableName
= "RightsInfo_Annotation";
673 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
676 stepName
= "Update Rights_id column in RightsInfo_Annotation";
677 tableName
= "RightsInfo_Annotation";
678 String columnName
= "Rights_Id";
679 String newColumnName
= "RightsInfo_id";
680 step
= ColumnNameChanger
.NewIntegerInstance(stepName
, tableName
, columnName
, newColumnName
, INCLUDE_AUDIT
);
683 stepName
= "Update Rights_Marker to RightsInfo";
684 tableName
= "Rights_Marker";
685 newTableName
= "RightsInfo_Marker";
686 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
689 stepName
= "Update Rights_id column in RightsInfo_Marker";
690 tableName
= "RightsInfo_Marker";
691 columnName
= "Rights_Id";
692 newColumnName
= "RightsInfo_id";
693 step
= ColumnNameChanger
.NewIntegerInstance(stepName
, tableName
, columnName
, newColumnName
, INCLUDE_AUDIT
);
696 stepName
= "Update Classification_Rights to RightsInfo";
697 tableName
= "Classification_Rights";
698 newTableName
= "Classification_RightsInfo";
699 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
702 stepName
= "Update Collection_Rights to RightsInfo";
703 tableName
= "Collection_Rights";
704 newTableName
= "Collection_RightsInfo";
705 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
708 stepName
= "Update DefinedTermBase_Rights to RightsInfo";
709 tableName
= "DefinedTermBase_Rights";
710 newTableName
= "DefinedTermBase_RightsInfo";
711 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
714 stepName
= "Update DescriptionBase_Rights to RightsInfo";
715 tableName
= "DescriptionBase_Rights";
716 newTableName
= "DescriptionBase_RightsInfo";
717 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
720 stepName
= "Update FeatureTree_Rights to RightsInfo";
721 tableName
= "FeatureTree_Rights";
722 newTableName
= "FeatureTree_RightsInfo";
723 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
726 stepName
= "Update Media_Rights to RightsInfo";
727 tableName
= "Media_Rights";
728 newTableName
= "Media_RightsInfo";
729 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
732 stepName
= "Update PolytomousKey_Rights to RightsInfo";
733 tableName
= "PolytomousKey_Rights";
734 newTableName
= "PolytomousKey_RightsInfo";
735 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
738 stepName
= "Update Reference_Rights to RightsInfo";
739 tableName
= "Reference_Rights";
740 newTableName
= "Reference_RightsInfo";
741 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
744 stepName
= "Update SpecimenOrObservationBase_Rights to RightsInfo";
745 tableName
= "SpecimenOrObservationBase_Rights";
746 newTableName
= "SpecimenOrObservationBase_RightsInfo";
747 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
750 stepName
= "Update TaxonBase_Rights to RightsInfo";
751 tableName
= "TaxonBase_Rights";
752 newTableName
= "TaxonBase_RightsInfo";
753 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
756 stepName
= "Update TaxonNameBase_Rights to RightsInfo";
757 tableName
= "TaxonNameBase_Rights";
758 newTableName
= "TaxonNameBase_RightsInfo";
759 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
762 stepName
= "Update TermVocabulary_Rights to RightsInfo";
763 tableName
= "TermVocabulary_Rights";
764 newTableName
= "TermVocabulary_RightsInfo";
765 step
= TableNameChanger
.NewInstance(stepName
, tableName
, newTableName
, INCLUDE_AUDIT
);
769 private void updateReferenceType(List
<ISchemaUpdaterStep
> stepList
) {
771 String stepName
= "Update reference refType for Reference";
772 String baseQuery
= " UPDATE Reference " +
773 " SET refType = '%s' " +
774 " WHERE refType = '%s' ";
776 String tableName
= "Reference";
779 String query
= String
.format(baseQuery
, ReferenceType
.Article
.getKey(), String
.valueOf(index
++));
780 ISchemaUpdaterStep step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
784 query
= String
.format(baseQuery
, ReferenceType
.Book
.getKey(), String
.valueOf(index
++));
785 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
789 query
= String
.format(baseQuery
, ReferenceType
.BookSection
.getKey(), String
.valueOf(index
++));
790 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
794 query
= String
.format(baseQuery
, ReferenceType
.CdDvd
.getKey(), String
.valueOf(index
++));
795 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
799 query
= String
.format(baseQuery
, ReferenceType
.Database
.getKey(), String
.valueOf(index
++));
800 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
804 query
= String
.format(baseQuery
, ReferenceType
.Generic
.getKey(), String
.valueOf(index
++));
805 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
809 query
= String
.format(baseQuery
, ReferenceType
.InProceedings
.getKey(), String
.valueOf(index
++));
810 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
814 query
= String
.format(baseQuery
, ReferenceType
.Journal
.getKey(), String
.valueOf(index
++));
815 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
819 query
= String
.format(baseQuery
, ReferenceType
.Map
.getKey(), String
.valueOf(index
++));
820 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
824 query
= String
.format(baseQuery
, ReferenceType
.Patent
.getKey(), String
.valueOf(index
++));
825 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
828 //10-Personal Communication
829 query
= String
.format(baseQuery
, ReferenceType
.PersonalCommunication
.getKey(), String
.valueOf(index
++));
830 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
834 query
= String
.format(baseQuery
, ReferenceType
.PrintSeries
.getKey(), String
.valueOf(index
++));
835 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
839 query
= String
.format(baseQuery
, ReferenceType
.Proceedings
.getKey(), String
.valueOf(index
++));
840 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);;
844 query
= String
.format(baseQuery
, ReferenceType
.Report
.getKey(), String
.valueOf(index
++));
845 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);;
849 query
= String
.format(baseQuery
, ReferenceType
.Thesis
.getKey(), String
.valueOf(index
++));
850 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);;
854 query
= String
.format(baseQuery
, ReferenceType
.WebPage
.getKey(), String
.valueOf(index
++));
855 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);;
859 private void updateRecordBasis(List
<ISchemaUpdaterStep
> stepList
) {
860 String stepName
= "Update recordBasis for SpecimenOrObservationBase";
861 String tableName
= "SpecimenOrObservationBase";
864 String query
= " UPDATE " + tableName
+
865 " SET recordBasis = '" + SpecimenOrObservationType
.FieldUnit
.getKey() + "' " +
866 " WHERE DTYPE = 'FieldUnit' OR DTYPE = 'FieldObservation'";
867 ISchemaUpdaterStep step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
871 query
= " UPDATE " + tableName
+
872 " SET recordBasis = '" + SpecimenOrObservationType
.DerivedUnit
.getKey() + "' " +
873 " WHERE DTYPE = '" + DerivedUnit
.class.getSimpleName() + "'";
874 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
878 query
= " UPDATE " + tableName
+
879 " SET recordBasis = '" + SpecimenOrObservationType
.LivingSpecimen
.getKey() + "' " +
880 " WHERE DTYPE = 'LivingBeing'";
881 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
885 query
= " UPDATE " + tableName
+
886 " SET recordBasis = '" + SpecimenOrObservationType
.Observation
.getKey() + "' " +
887 " WHERE DTYPE = 'Observation'";
888 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
892 query
= " UPDATE " + tableName
+
893 " SET recordBasis = '" + SpecimenOrObservationType
.PreservedSpecimen
.getKey() + "' " +
894 " WHERE DTYPE = 'Specimen'";
895 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
899 query
= " UPDATE " + tableName
+
900 " SET recordBasis = '" + SpecimenOrObservationType
.Fossil
.getKey() + "' " +
901 " WHERE DTYPE = 'Fossil'";
902 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
906 query
= " UPDATE " + tableName
+
907 " SET recordBasis = '" + SpecimenOrObservationType
.DnaSample
.getKey() + "' " +
908 " WHERE DTYPE = 'DnaSample'";
909 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
912 //Unknown as default (if not yet handled before)
913 query
= " UPDATE " + tableName
+
914 " SET recordBasis = '" + SpecimenOrObservationType
.Unknown
.getKey() + "' " +
915 " WHERE recordBasis IS NULL ";
916 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
920 //update length of all title caches and full title cache in names
921 //TODO test for H2, Postgres, SqlServer
922 //https://dev.e-taxonomy.eu/trac/ticket/1592
923 private void updateTitleCacheLength(List
<ISchemaUpdaterStep
> stepList
) {
926 ISchemaUpdaterStep step
;
930 stepName
= "Change length of TaxonNameBase fullTitleCache";
931 tableName
= "TaxonNameBase";
932 columnName
= "fullTitleCache";
933 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
936 stepName
= "Change length of TaxonNameBase title cache";
937 tableName
= "TaxonNameBase";
938 columnName
= "titleCache";
939 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
942 stepName
= "Change length of TaxonBase title cache";
943 tableName
= "TaxonNameBase";
944 columnName
= "titleCache";
945 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
948 stepName
= "Change length of Classification title cache";
949 tableName
= "Classification";
950 columnName
= "titleCache";
951 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
954 stepName
= "Change length of DescriptionBase title cache";
955 tableName
= "DescriptionBase";
956 columnName
= "titleCache";
957 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
960 stepName
= "Change length of FeatureTree title cache";
961 tableName
= "FeatureTree";
962 columnName
= "titleCache";
963 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
966 stepName
= "Change length of Collection title cache";
967 tableName
= "Collection";
968 columnName
= "titleCache";
969 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
972 stepName
= "Change length of Reference title cache";
973 tableName
= "Reference";
974 columnName
= "titleCache";
975 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
978 stepName
= "Change length of Media title cache";
980 columnName
= "titleCache";
981 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
984 stepName
= "Change length of PolytomousKey title cache";
985 tableName
= "PolytomousKey";
986 columnName
= "titleCache";
987 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
990 stepName
= "Change length of SpecimenOrObservationBase title cache";
991 tableName
= "SpecimenOrObservationBase";
992 columnName
= "titleCache";
993 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
996 stepName
= "Change length of DefinedTermBase title cache";
997 tableName
= "DefinedTermBase";
998 columnName
= "titleCache";
999 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
1002 stepName
= "Change length of TermVocabulary title cache";
1003 tableName
= "TermVocabulary";
1004 columnName
= "titleCache";
1005 step
= ColumnTypeChanger
.NewStringSizeInstance(stepName
, tableName
, columnName
, size
, INCLUDE_AUDIT
);
1011 private void updateDescriptionSpecimenRelation(List
<ISchemaUpdaterStep
> stepList
) {
1012 //TODO warn if multiple entries for 1 description exists
1013 String sqlCount
= " SELECT count(*) as n " +
1014 " FROM DescriptionBase_SpecimenOrObservationBase MN " +
1015 " GROUP BY MN.descriptions_id " +
1016 " HAVING count(*) > 1 " +
1017 " ORDER BY MN.descriptions_id, MN.describedspecimenorobservations_id ";
1019 //TODO ... and log the concrete records
1020 // FROM DescriptionBase_SpecimenOrObservationBase ds
1021 // WHERE ds.descriptions_id IN (
1022 // SELECT MN.descriptions_id
1023 // FROM DescriptionBase_SpecimenOrObservationBase MN
1024 // GROUP BY MN.descriptions_id
1025 // HAVING count(*) > 1
1027 // ORDER BY descriptions_id, describedspecimenorobservations_id
1029 //TODO test for H2, Postgresql AND SQLServer (later will need TOP 1)
1030 String stepName
= "update Description - Specimen relation data ";
1031 String sql
= " UPDATE DescriptionBase db " +
1032 " SET db.specimen_id = " +
1033 " (SELECT MN.describedspecimenorobservations_id " +
1034 " FROM DescriptionBase_SpecimenOrObservationBase MN " +
1035 " WHERE MN.descriptions_id = db.id " +
1039 ISchemaUpdaterStep step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, sql
);
1044 private void updateAbbrevTitle(List
<ISchemaUpdaterStep
> stepList
) {
1045 String tableName
= "Reference";
1047 String stepName
= "Update abbrevTitleCache for protected title caches with title";
1048 String query
= " UPDATE Reference r " +
1049 " SET r.abbrevTitle = r.title, r.abbrevTitleCache = r.titleCache, r.protectedAbbrevTitleCache = r.protectedTitleCache";
1050 // + " WHERE r.title IS NOT NULL AND r.protectedTitleCache = 1 ";
1051 ISchemaUpdaterStep step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1054 // stepName = "Update abbrevTitleCache for protected title caches with no title";
1055 // query = " UPDATE Reference r " +
1056 // " SET r.abbrevTitleCache = r.titleCache, r.protectedAbbrevTitleCache = r.protectedTitleCache" +
1057 // " WHERE r.title IS NULL AND r.protectedTitleCache = 1 ";
1058 // step = SimpleSchemaUpdaterStep.NewNonAuditedInstance(stepName, query).setAuditing("Reference");
1059 // stepList.add(step);
1061 // stepName = "Update abbrevTitleCache for protected title caches with title";
1062 // query = " UPDATE Reference r " +
1063 // " SET r.abbrevTitle = r.title, r.abbrevTitleCache = r.titleCache, r.protectedAbbrevTitleCache = r.protectedTitleCache" +
1064 // " WHERE r.title IS NOT NULL AND r.protectedTitleCache = 0 ";
1065 // step = SimpleSchemaUpdaterStep.NewNonAuditedInstance(stepName, query).setAuditing("Reference");
1066 // stepList.add(step);
1068 stepName
= "Update reference title, set null where abbrev title very likely";
1069 query
= " UPDATE Reference r " +
1070 " SET r.title = NULL " +
1071 " WHERE r.title IS NOT NULL AND r.protectedTitleCache = 0 AND " +
1072 " ( LENGTH(r.title) <= 15 AND title like '%.%.%' OR LENGTH(r.title) < 30 AND title like '%.%.%.%' OR LENGTH(r.title) < 45 AND title like '%.%.%.%.%' OR LENGTH(r.title) < 60 AND title like '%.%.%.%.%.%' " +
1074 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1078 stepName
= "Update reference abbrevTitle, set null where abbrev title very unlikely";
1079 query
= " UPDATE Reference r " +
1080 " SET r.abbrevTitle = NULL " +
1081 " WHERE r.title IS NOT NULL AND r.protectedTitleCache = 0 AND " +
1082 " ( title NOT like '%.%' OR LENGTH(r.title) > 30 AND title NOT like '%.%.%' " +
1084 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1089 private void removeOldSequenceColumns(List
<ISchemaUpdaterStep
> stepList
) {
1090 //TODO also remove Identifiable attributes ??
1092 //remove citationmicroreference
1093 String stepName
= "Remove citationmicroreference column";
1094 String tableName
= "Sequence";
1095 String columnName
= "citationMicroReference";
1096 ISchemaUpdaterStep step
= ColumnRemover
.NewInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1099 //remove datesequenced
1100 stepName
= "Remove datesequenced column";
1101 columnName
= "datesequenced";
1102 step
= ColumnRemover
.NewInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1106 stepName
= "Remove length column";
1107 columnName
= "length";
1108 step
= ColumnRemover
.NewInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1112 stepName
= "Remove sequence column";
1113 columnName
= "sequence";
1114 step
= ColumnRemover
.NewInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1118 stepName
= "Remove locus_id column";
1119 columnName
= "locus_id";
1120 step
= ColumnRemover
.NewInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1123 //remove publishedin_id
1124 stepName
= "Remove publishedin_id column";
1125 columnName
= "publishedin_id";
1126 step
= ColumnRemover
.NewInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1130 stepName
= "Remove barcode column";
1131 columnName
= "barcode";
1132 step
= ColumnRemover
.NewInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1136 private void updateIdInVocabulary(List
<ISchemaUpdaterStep
> stepList
) {
1137 String tableName
= "DefinedTermBase";
1139 String queryVocUuid
= " UPDATE DefinedTermBase dtb INNER JOIN TermVocabulary voc ON voc.id = dtb.vocabulary_id" +
1140 " SET dtb.idInVocabulary = (SELECT abbreviatedlabel " +
1141 " FROM DefinedTermBase_Representation MN " +
1142 " INNER JOIN Representation r ON r.id = MN.representations_id " +
1143 " WHERE MN.DefinedTermBase_id = dtb.id) " +
1144 " WHERE voc.uuid = '%s'";
1147 String stepName
= "Update idInVocabulary for Languages ";
1148 String query
= "UPDATE DefinedTermBase dtb INNER JOIN TermVocabulary voc ON voc.id = dtb.vocabulary_id " +
1149 " SET dtb.idInVocabulary = dtb.iso639_2 "+
1150 " WHERE voc.uuid = '45ac7043-7f5e-4f37-92f2-3874aaaef2de' ";
1151 ISchemaUpdaterStep step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
); //not fully correct as we should join with TermVoc_AUD but good enough for this usecase
1154 //Undefined Languages => all
1155 stepName
= "Update idInVocabulary for undefined languages";
1156 String uuid
= "7fd1e6d0-2e76-4dfa-bad9-2673dd042c28";
1157 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1160 //Waterbody & Country => all
1161 stepName
= "Update idInVocabulary for WaterbodyOrCountries";
1162 uuid
= "006b1870-7347-4624-990f-e5ed78484a1a";
1163 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1167 stepName
= "Update idInVocabulary for TDWG areas";
1168 uuid
= NamedArea
.uuidTdwgAreaVocabulary
.toString();
1169 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1173 stepName
= "Update idInVocabulary for ranks";
1174 uuid
= "ef0d1ce1-26e3-4e83-b47b-ca74eed40b1b";
1175 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1178 //SpecimenTypeDesignationStatus => all
1179 stepName
= "Update idInVocabulary for SpecimenTypeDesignationStatus";
1180 uuid
= "ab177bd7-d3c8-4e58-a388-226fff6ba3c2";
1181 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1184 //NameTypeDesignationStatus => all
1185 stepName
= "Update idInVocabulary for NameTypeDesignationStatus";
1186 uuid
= "ab60e738-4d09-4c24-a1b3-9466b01f9f55";
1187 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1190 //NomenclaturalStatusType => all, abbrevs.
1191 stepName
= "Update idInVocabulary for NomenclaturalStatusType";
1192 uuid
= "bb28cdca-2f8a-4f11-9c21-517e9ae87f1f";
1193 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1196 //TaxonRelationshipType, all but 2 (Invalid Designation for, Misapplied Name for)
1197 stepName
= "Update idInVocabulary for TaxonRelationshipType";
1198 uuid
= "15db0cf7-7afc-4a86-a7d4-221c73b0c9ac";
1199 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1202 //PresenceTerm => all
1203 stepName
= "Update idInVocabulary for PresenceTerm";
1204 uuid
= "adbbbe15-c4d3-47b7-80a8-c7d104e53a05";
1205 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1208 //AbsenceTerm => all
1209 stepName
= "Update idInVocabulary for AbsenceTerm";
1210 uuid
= "5cd438c8-a8a1-4958-842e-169e83e2ceee";
1211 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1215 stepName
= "Update idInVocabulary for Sex";
1216 uuid
= "9718b7dd-8bc0-4cad-be57-3c54d4d432fe";
1217 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1220 //ExtensionType => all
1221 stepName
= "Update idInVocabulary for ExtensionType";
1222 uuid
= "117cc307-5bd4-4b10-9b2f-2e14051b3b20";
1223 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1226 //ReferenceSystem => all
1227 stepName
= "Update idInVocabulary for ReferenceSystem";
1228 uuid
= "ec6376e5-0c9c-4f5c-848b-b288e6c17a86";
1229 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1232 //DeterminationModifier => all
1233 stepName
= "Update idInVocabulary for DeterminationModifier";
1234 uuid
= "fe87ea8d-6e0a-4e5d-b0da-0ab8ea67ca77";
1235 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(queryVocUuid
, uuid
)).setDefaultAuditing(tableName
);
1238 //InstitutionType, MeasurementUnit, Scope, Stage, State, TextFormat, Modifier, PreservationMethod => dummies
1239 stepName
= "Update idInVocabulary for dummy terms in several vocabularies";
1240 query
= " UPDATE DefinedTermBase dtb " +
1241 " SET dtb.idInVocabulary = (SELECT abbreviatedlabel " +
1242 " FROM DefinedTermBase_Representation MN " +
1243 " INNER JOIN Representation r ON r.id = MN.representations_id " +
1244 " WHERE MN.DefinedTermBase_id = dtb.id) " +
1245 " WHERE dtb.termType IN ('%s','%s','%s','%s','%s','%s','%s','%s')";
1246 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, String
.format(query
,
1247 TermType
.InstitutionType
.getKey(), TermType
.MeasurementUnit
.getKey(),
1248 TermType
.Scope
.getKey(), TermType
.Stage
.getKey(), TermType
.State
.getKey(),
1249 TermType
.TextFormat
.getKey(), TermType
.Modifier
.getKey(), TermType
.PreservationMethod
.getKey()))
1250 .setDefaultAuditing(tableName
);
1253 //NULL for empty strings
1254 stepName
= "Update idInVocabulary, replace empty strings by null";
1255 query
= "Update DefinedTermBase dtb SET idInVocabulary = NULL WHERE idInVocabulary = ''";
1256 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1259 //MarkerType, AnnotationType, NamedAreaType, NamedAreaLevel, Feature, Continent, DerivationEventType, StatisticalMeasure, RightsType,SynonymRelationshipType & HybridRelationshipType & NameRelationshipType
1262 //DnaMarker => yes but no entries
1264 //Clean up empty abbreviated labels in representations
1265 stepName
= "Update abbreviated label, replace empty strings by null";
1266 query
= "Update Representation r SET r.abbreviatedLabel = NULL WHERE r.abbreviatedLabel = ''";
1267 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing("Representation"); //AUD not needed
1272 private void updateTermTypesForVocabularies( List
<ISchemaUpdaterStep
> stepList
) {
1273 //vocabularies with terms
1274 for (TermType termType
: TermType
.values()){
1275 updateTermTypeForVocabularies(stepList
, termType
);
1278 String tableName
= "TermVocabulary";
1280 //Natural Language Terms
1281 String stepName
= "Updater termType for NaturalLanguageTerms";
1282 String query
= "UPDATE TermVocabulary voc " +
1283 " SET voc.termType = '" + TermType
.NaturalLanguageTerm
.getKey() + "' " +
1284 " WHERE voc.uuid = 'fdaba4b0-5c14-11df-a08a-0800200c9a66'";
1285 ISchemaUpdaterStep step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1288 //remaining vocabularies
1289 stepName
= "Updater termType for remaining vocabularies";
1290 query
= "UPDATE TermVocabulary voc " +
1291 " SET voc.termType = '"+ TermType
.Unknown
.getKey() +"' " +
1292 " WHERE voc.termType IS NULL";
1293 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1299 private void updateTermTypeForVocabularies(List
<ISchemaUpdaterStep
> stepList
, TermType termType
) {
1300 String stepName
= "Updater vocabulary termType for " + termType
.toString();
1301 String query
= "UPDATE TermVocabulary voc " +
1302 " SET voc.termType = '" + termType
.getKey() + "' " +
1303 " WHERE Exists (SELECT * FROM DefinedTermBase dtb WHERE dtb.termType = '" + termType
.getKey() + "' AND dtb.vocabulary_id = voc.id)";
1304 ISchemaUpdaterStep step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing("TermVocabulary"); //AUD not fully correct as subselect should also work on AUD, good enough for our purposes
1312 private void updateTermTypesForTerms(List
<ISchemaUpdaterStep
> stepList
) {
1313 String stepName
= "Update termType for NamedAreas";
1314 String tableName
= "DefinedTermBase";
1317 String query
= " UPDATE DefinedTermBase " +
1318 " SET termType = '" + TermType
.NamedArea
.getKey() + "' " +
1319 " WHERE DTYPE = '" + NamedArea
.class.getSimpleName() + "' OR DTYPE = 'TdwgArea' OR DTYPE = '"+ WaterbodyOrCountry
.class.getSimpleName() + "' OR DTYPE = 'Continent' ";
1320 ISchemaUpdaterStep step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1324 query
= " UPDATE DefinedTermBase " +
1325 " SET termType = '" + TermType
.Language
.getKey() + "' " +
1326 " WHERE DTYPE = '" + Language
.class.getSimpleName() + "' ";
1327 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1331 query
= " UPDATE DefinedTermBase " +
1332 " SET termType = '" + TermType
.Rank
.getKey() + "' " +
1333 " WHERE DTYPE = '" + Rank
.class.getSimpleName() + "' ";
1334 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1338 query
= " UPDATE DefinedTermBase " +
1339 " SET termType = '" + TermType
.Feature
.getKey() + "' " +
1340 " WHERE DTYPE = '" + Feature
.class.getSimpleName() + "' ";
1341 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1345 query
= " UPDATE DefinedTermBase " +
1346 " SET termType = '" + TermType
.AnnotationType
.getKey() + "' " +
1347 " WHERE DTYPE = '" + AnnotationType
.class.getSimpleName() + "' ";
1348 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1352 query
= " UPDATE DefinedTermBase " +
1353 " SET termType = '" + TermType
.MarkerType
.getKey() + "' " +
1354 " WHERE DTYPE = '" + MarkerType
.class.getSimpleName() + "' ";
1355 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1359 query
= " UPDATE DefinedTermBase " +
1360 " SET termType = '" + TermType
.ExtensionType
.getKey() + "' " +
1361 " WHERE DTYPE = '" + ExtensionType
.class.getSimpleName() + "' ";
1362 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1365 //DerivationEventType
1366 query
= " UPDATE DefinedTermBase " +
1367 " SET termType = '" + TermType
.DerivationEventType
.getKey() + "' " +
1368 " WHERE DTYPE = '" + DerivationEventType
.class.getSimpleName() + "' ";
1369 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1372 //PresenceAbsenceTerm
1373 query
= " UPDATE DefinedTermBase " +
1374 " SET termType = '" + TermType
.PresenceAbsenceTerm
.getKey() + "' " +
1375 " WHERE DTYPE = 'PresenceTerm' OR DTYPE = 'AbsenceTerm'";
1376 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1379 //NomenclaturalStatusType
1380 query
= " UPDATE DefinedTermBase " +
1381 " SET termType = '" + TermType
.NomenclaturalStatusType
.getKey() + "' " +
1382 " WHERE DTYPE = '" + NomenclaturalStatusType
.class.getSimpleName() + "' ";
1383 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1386 //NameRelationshipType
1387 query
= " UPDATE DefinedTermBase " +
1388 " SET termType = '" + TermType
.NameRelationshipType
.getKey() + "' " +
1389 " WHERE DTYPE = '" + NameRelationshipType
.class.getSimpleName() + "' ";
1390 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1393 //HybridRelationshipType
1394 query
= " UPDATE DefinedTermBase " +
1395 " SET termType = '" + TermType
.HybridRelationshipType
.getKey() + "' " +
1396 " WHERE DTYPE = '" + HybridRelationshipType
.class.getSimpleName() + "' ";
1397 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1400 //SynonymRelationshipType
1401 query
= " UPDATE DefinedTermBase " +
1402 " SET termType = '" + TermType
.SynonymRelationshipType
.getKey() + "' " +
1403 " WHERE DTYPE = '" + SynonymRelationshipType
.class.getSimpleName() + "' ";
1404 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1407 //TaxonRelationshipType
1408 query
= " UPDATE DefinedTermBase " +
1409 " SET termType = '" + TermType
.TaxonRelationshipType
.getKey() + "' " +
1410 " WHERE DTYPE = '" + TaxonRelationshipType
.class.getSimpleName() + "' ";
1411 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1414 //NameTypeDesignationStatus
1415 query
= " UPDATE DefinedTermBase " +
1416 " SET termType = '" + TermType
.NameTypeDesignationStatus
.getKey() + "' " +
1417 " WHERE DTYPE = '" + NameTypeDesignationStatus
.class.getSimpleName() + "' ";
1418 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1421 //SpecimenTypeDesignationStatus
1422 query
= " UPDATE DefinedTermBase " +
1423 " SET termType = '" + TermType
.SpecimenTypeDesignationStatus
.getKey() + "' " +
1424 " WHERE DTYPE = '" + SpecimenTypeDesignationStatus
.class.getSimpleName() + "' ";
1425 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1429 query
= " UPDATE DefinedTermBase " +
1430 " SET termType = '" + TermType
.InstitutionType
.getKey() + "' " +
1431 " WHERE DTYPE = 'InstitutionType' ";
1432 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1436 query
= " UPDATE DefinedTermBase " +
1437 " SET termType = '" + TermType
.NamedAreaType
.getKey() + "' " +
1438 " WHERE DTYPE = '" + NamedAreaType
.class.getSimpleName() + "' ";
1439 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1443 query
= " UPDATE DefinedTermBase " +
1444 " SET termType = '" + TermType
.NamedAreaLevel
.getKey() + "' " +
1445 " WHERE DTYPE = '" + NamedAreaLevel
.class.getSimpleName() + "' ";
1446 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1450 query
= " UPDATE DefinedTermBase " +
1451 " SET termType = '" + TermType
.RightsType
.getKey() + "' " +
1452 " WHERE DTYPE = 'RightsType' OR DTYPE = 'RightsTerm' ";
1453 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1457 query
= " UPDATE DefinedTermBase " +
1458 " SET termType = '" + TermType
.MeasurementUnit
.getKey() + "' " +
1459 " WHERE DTYPE = '" + MeasurementUnit
.class.getSimpleName() + "' ";
1460 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1463 //StatisticalMeasure
1464 query
= " UPDATE DefinedTermBase " +
1465 " SET termType = '" + TermType
.StatisticalMeasure
.getKey() + "' " +
1466 " WHERE DTYPE = '" + StatisticalMeasure
.class.getSimpleName() + "' ";
1467 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1470 //PreservationMethod
1471 query
= " UPDATE DefinedTermBase " +
1472 " SET termType = '" + TermType
.PreservationMethod
.getKey() + "' " +
1473 " WHERE DTYPE = '" + PreservationMethod
.class.getSimpleName() + "' ";
1474 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1478 query
= " UPDATE DefinedTermBase " +
1479 " SET termType = '" + TermType
.Modifier
.getKey() + "' " +
1480 " WHERE DTYPE = 'Modifier' ";
1481 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1485 query
= " UPDATE DefinedTermBase " +
1486 " SET termType = '" + TermType
.Scope
.getKey() + "' " +
1487 " WHERE DTYPE = 'Scope' ";
1488 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1492 query
= " UPDATE DefinedTermBase " +
1493 " SET termType = '" + TermType
.Stage
.getKey() + "' " +
1494 " WHERE DTYPE = 'Stage' ";
1495 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1499 query
= " UPDATE DefinedTermBase " +
1500 " SET termType = '" + TermType
.Sex
.getKey() + "' " +
1501 " WHERE DTYPE = 'Sex' ";
1502 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1506 query
= " UPDATE DefinedTermBase " +
1507 " SET termType = '" + TermType
.ReferenceSystem
.getKey() + "' " +
1508 " WHERE DTYPE = '" + ReferenceSystem
.class.getSimpleName() + "' ";
1509 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1513 query
= " UPDATE DefinedTermBase " +
1514 " SET termType = '" + TermType
.State
.getKey() + "' " +
1515 " WHERE DTYPE = '" + State
.class.getSimpleName() + "' ";
1516 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1519 //NaturalLanguageTerm
1520 query
= " UPDATE DefinedTermBase " +
1521 " SET termType = '" + TermType
.NaturalLanguageTerm
.getKey() + "' " +
1522 " WHERE DTYPE = '" + NaturalLanguageTerm
.class.getSimpleName() + "' ";
1523 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1527 query
= " UPDATE DefinedTermBase " +
1528 " SET termType = '" + TermType
.TextFormat
.getKey() + "' " +
1529 " WHERE DTYPE = '" + TextFormat
.class.getSimpleName() + "' ";
1530 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1533 //DeterminationModifier
1534 query
= " UPDATE DefinedTermBase " +
1535 " SET termType = '" + TermType
.DeterminationModifier
.getKey() + "' " +
1536 " WHERE DTYPE = 'DeterminationModifier' ";
1537 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1546 private void updateDtypeOfDefinedTerms(List
<ISchemaUpdaterStep
> stepList
) {
1547 String tableName
= "DefinedTermBase";
1549 //update DTYPE for institution type and modifiers (Stage, Scope, Sex, DeterminationModifier, Modifier) -> DefinedTerm
1550 String stepName
= "Update DTYPE for TDWG Areas";
1551 String query
= " UPDATE DefinedTermBase " +
1552 " SET DTYPE = 'DefinedTerm' " +
1553 " WHERE DTYPE = 'Stage' OR DTYPE = 'Scope' OR DTYPE = 'Sex' OR DTYPE = 'DeterminationModifier' " +
1554 " OR DTYPE = 'Modifier' OR DTYPE = 'InstitutionType' ";
1555 ISchemaUpdaterStep step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1559 //update DTYPE for TDWG Areas and Continents -> NamedArea
1560 stepName
= "Update DTYPE for TDWG Areas and Continents";
1561 query
= " UPDATE DefinedTermBase " +
1562 " SET DTYPE = 'NamedArea' " +
1563 " WHERE DTYPE = 'TdwgArea' OR DTYPE = 'Continent' ";
1564 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1572 private void changeUriType(List
<ISchemaUpdaterStep
> stepList
) {
1576 ISchemaUpdaterStep step
;
1579 stepName
= "Update uri to clob for DefinedTermBase";
1580 tableName
= "DefinedTermBase";
1582 step
= ColumnTypeChanger
.NewClobInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1585 stepName
= "Update uri to clob for TermVocabulary";
1586 tableName
= "TermVocabulary";
1588 step
= ColumnTypeChanger
.NewClobInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1591 //TODO are uri and termsourceuri needed ???
1592 stepName
= "Update termsourceuri to clob for TermVocabulary";
1593 tableName
= "TermVocabulary";
1594 columnName
= "termsourceuri";
1595 step
= ColumnTypeChanger
.NewClobInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1598 stepName
= "Update uri to clob for Reference";
1599 tableName
= "Reference";
1601 step
= ColumnTypeChanger
.NewClobInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1604 stepName
= "Update uri to clob for Rights";
1605 tableName
= "Rights";
1607 step
= ColumnTypeChanger
.NewClobInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1610 stepName
= "Update uri to clob for MediaRepresentationPart";
1611 tableName
= "MediaRepresentationPart";
1613 step
= ColumnTypeChanger
.NewClobInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1616 //TODO still needed??
1617 stepName
= "Update uri to clob for FeatureTree";
1618 tableName
= "FeatureTree";
1620 step
= ColumnTypeChanger
.NewClobInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1623 //Annotation.linkbackUri (change from URL to URI)
1624 stepName
= "Update url to uri (->clob) for Annotation.linkbackUri";
1625 tableName
= "Annotation";
1626 columnName
= "linkbackUrl";
1627 step
= ColumnTypeChanger
.NewClobInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1636 private void addTimeperiodToDescriptionElement(
1637 List
<ISchemaUpdaterStep
> stepList
) {
1640 ISchemaUpdaterStep step
;
1643 stepName
= "Create time period start column in description element base";
1644 tableName
= "DescriptionElementBase";
1645 columnName
= "timeperiod_start";
1646 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1650 stepName
= "Create time period end column in description element base";
1651 tableName
= "DescriptionElementBase";
1652 columnName
= "timeperiod_end";
1653 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1657 stepName
= "Create time period freetext column in description element base";
1658 tableName
= "DescriptionElementBase";
1659 columnName
= "timeperiod_freetext";
1660 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1666 private void updateElevationMax(List
<ISchemaUpdaterStep
> stepList
) {
1668 String stepName
= "Create absoluteElevationMax column";
1669 String tableName
= "GatheringEvent";
1670 String columnName
= "absoluteElevationMax";
1671 ISchemaUpdaterStep step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, false, null);
1674 String audTableName
= "GatheringEvent";
1676 stepName
= "Update gathering elevation max";
1677 //all audits to unknown type
1678 String query
= " UPDATE GatheringEvent ge " +
1679 " SET ge.absoluteElevationMax = ge.absoluteElevation + ge.absoluteElevationError, " +
1680 " ge.absoluteElevation = ge.absoluteElevation - ge.absoluteElevationError" +
1681 " WHERE ge.absoluteElevationError is not null ";
1682 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(audTableName
);
1686 //remove error column
1687 stepName
= "Remove elevationErrorRadius column";
1688 tableName
= "GatheringEvent";
1689 columnName
= "absoluteElevationError";
1690 step
= ColumnRemover
.NewInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
);
1693 //create column absoluteElevationText
1694 stepName
= "Create absoluteElevationText column";
1695 tableName
= "GatheringEvent";
1696 columnName
= "absoluteElevationText";
1698 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, 255, INCLUDE_AUDIT
);
1701 //retype distanceToGround
1702 stepName
= "Rname distanceToGround column";
1703 tableName
= "GatheringEvent";
1704 String strOldColumnName
= "distanceToGround";
1705 step
= ColumnTypeChanger
.NewInt2DoubleInstance(stepName
, tableName
, strOldColumnName
, INCLUDE_AUDIT
);
1708 //create column distanceToGroundMax
1709 stepName
= "Create distanceToGroundMax column";
1710 tableName
= "GatheringEvent";
1711 columnName
= "distanceToGroundMax";
1712 step
= ColumnAdder
.NewDoubleInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, false);
1716 //create column distanceToGroundText
1717 stepName
= "Create distanceToGroundText column";
1718 tableName
= "GatheringEvent";
1719 columnName
= "distanceToGroundText";
1721 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, 255, INCLUDE_AUDIT
);
1724 //retype distanceToGround
1725 stepName
= "Rname distanceToWaterSurface column";
1726 tableName
= "GatheringEvent";
1727 strOldColumnName
= "distanceToWaterSurface";
1728 step
= ColumnTypeChanger
.NewInt2DoubleInstance(stepName
, tableName
, strOldColumnName
, INCLUDE_AUDIT
);
1731 //create column distanceToWaterSurface
1732 stepName
= "Create distanceToWaterSurfaceMax column";
1733 tableName
= "GatheringEvent";
1734 columnName
= "distanceToWaterSurfaceMax";
1735 step
= ColumnAdder
.NewDoubleInstance(stepName
, tableName
, columnName
, INCLUDE_AUDIT
, false);
1739 //create column distanceToGroundText
1740 stepName
= "Create distanceToWaterSurfaceText column";
1741 tableName
= "GatheringEvent";
1742 columnName
= "distanceToWaterSurfaceText";
1744 step
= ColumnAdder
.NewStringInstance(stepName
, tableName
, columnName
, 255, INCLUDE_AUDIT
);
1752 private void updateOriginalSourceType(List
<ISchemaUpdaterStep
> stepList
) {
1754 String typeAttrName
= "sourceType";
1755 ISchemaUpdaterStep step
;
1756 String tableName
= "OriginalSourceBase";
1758 //all data to unknown
1759 stepName
= "Update original source type column: set all to unknown";
1760 String query
= String
.format("UPDATE OriginalSourceBase " +
1761 " SET %s = '%s' ", typeAttrName
, OriginalSourceType
.Unknown
.getKey());
1762 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1765 //all IMPORTS recognized by idInSOurce and by missing nameInSource
1766 stepName
= "Update original source type column: set to 'import' where possible";
1767 query
= String
.format("UPDATE OriginalSourceBase " +
1770 "((idInSource IS NOT NULL) OR (idNamespace IS NOT NULL)) AND " +
1771 "( nameUsedInSource_id IS NULL AND originalNameString IS NULL ) ", typeAttrName
, OriginalSourceType
.Import
.getKey());
1772 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1775 //all PRIMARY TAXONOMIC SOURCES recognized by missing idInSource and namespace and by existing citation
1776 stepName
= "Update original source type column: set to 'primary taxonomic source' where possible";
1777 query
= String
.format("UPDATE OriginalSourceBase SET %s = '%s' WHERE " +
1778 "(idInSource IS NULL AND idNamespace IS NULL) AND " +
1779 "( citation_id IS NOT NULL ) ", typeAttrName
, OriginalSourceType
.PrimaryTaxonomicSource
.getKey());
1780 step
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
).setDefaultAuditing(tableName
);
1785 * @see eu.etaxonomy.cdm.database.update.SchemaUpdaterBase#getNextUpdater()
1788 public ISchemaUpdater
getNextUpdater() {
1793 * @see eu.etaxonomy.cdm.database.update.SchemaUpdaterBase#getPreviousUpdater()
1796 public ISchemaUpdater
getPreviousUpdater() {
1797 return SchemaUpdater_30_301
.NewInstance();