2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.database
.update
.v40_41
;
12 import java
.util
.ArrayList
;
13 import java
.util
.List
;
15 import org
.apache
.log4j
.Logger
;
17 import eu
.etaxonomy
.cdm
.common
.UTF8
;
18 import eu
.etaxonomy
.cdm
.database
.DatabaseTypeEnum
;
19 import eu
.etaxonomy
.cdm
.database
.update
.ColumnAdder
;
20 import eu
.etaxonomy
.cdm
.database
.update
.ColumnRemover
;
21 import eu
.etaxonomy
.cdm
.database
.update
.ISchemaUpdater
;
22 import eu
.etaxonomy
.cdm
.database
.update
.ISchemaUpdaterStep
;
23 import eu
.etaxonomy
.cdm
.database
.update
.IndexAdder
;
24 import eu
.etaxonomy
.cdm
.database
.update
.LanguageStringTableCreator
;
25 import eu
.etaxonomy
.cdm
.database
.update
.SchemaUpdaterBase
;
26 import eu
.etaxonomy
.cdm
.database
.update
.SimpleSchemaUpdaterStep
;
27 import eu
.etaxonomy
.cdm
.database
.update
.SortIndexUpdater
;
28 import eu
.etaxonomy
.cdm
.database
.update
.TableDroper
;
29 import eu
.etaxonomy
.cdm
.database
.update
.v36_40
.SchemaUpdater_36_40
;
30 import eu
.etaxonomy
.cdm
.database
.update
.v41_47
.SchemaUpdater_41_47
;
36 public class SchemaUpdater_40_41
extends SchemaUpdaterBase
{
38 @SuppressWarnings("unused")
39 private static final Logger logger
= Logger
.getLogger(SchemaUpdater_40_41
.class);
40 private static final String endSchemaVersion
= "4.1.0.0.201607300000";
41 private static final String startSchemaVersion
= "4.0.0.0.201604200000";
43 // ********************** FACTORY METHOD *************************************
45 public static SchemaUpdater_40_41
NewInstance() {
46 return new SchemaUpdater_40_41();
50 * @param startSchemaVersion
51 * @param endSchemaVersion
53 protected SchemaUpdater_40_41() {
54 super(startSchemaVersion
, endSchemaVersion
);
58 protected List
<ISchemaUpdaterStep
> getUpdaterList() {
62 ISchemaUpdaterStep step
;
67 List
<ISchemaUpdaterStep
> stepList
= new ArrayList
<ISchemaUpdaterStep
>();
70 //#3658 update nomenclatural code
71 NomenclaturalCodeUpdater
.NewInstance(stepList
);
74 //Implement allowOverride in CdmPreference
75 stepName
= "Add allowOverride in CdmPreference";
76 tableName
= "CdmPreference";
77 newColumnName
= "allowOverride";
78 step
= ColumnAdder
.NewBooleanInstance(stepName
, tableName
, newColumnName
, ! INCLUDE_AUDIT
, false);
82 //Implement isDefault to DescriptionBase
83 stepName
= "Add isDefault in DescriptionBase";
84 tableName
= "DescriptionBase";
85 newColumnName
= "isDefault";
86 step
= ColumnAdder
.NewBooleanInstance(stepName
, tableName
, newColumnName
, INCLUDE_AUDIT
, false);
90 //Cleanup empty name descriptions
91 stepName
= "Cleanup empty name descriptions";
92 // query = " DELETE FROM @@DescriptionBase@@ db " +
93 // " WHERE db.DTYPE = 'TaxonNameDescription' " +
94 // " AND NOT EXISTS (SELECT * FROM @@DescriptionElementBase@@ deb WHERE deb.indescription_id = db.id )";
95 query
= "DELETE FROM @@DescriptionBase@@ "
96 + " WHERE DTYPE = 'TaxonNameDescription' AND id IN (SELECT id FROM " +
97 " (SELECT id FROM DescriptionBase db "
98 + " WHERE NOT EXISTS (SELECT * FROM DescriptionElementBase deb WHERE deb.indescription_id = db.id )"
99 + " AND NOT EXISTS (SELECT * FROM DescriptionBase_Annotation MN WHERE MN.descriptionbase_id = db.id) "
100 + " AND NOT EXISTS (SELECT * FROM DescriptionBase_Credit MN WHERE MN.descriptionbase_id = db.id) "
101 + " AND NOT EXISTS (SELECT * FROM DescriptionBase_Extension MN WHERE MN.descriptionbase_id = db.id) "
102 + " AND NOT EXISTS (SELECT * FROM DescriptionBase_Identifier MN WHERE MN.descriptionbase_id = db.id) "
103 + " AND NOT EXISTS (SELECT * FROM DescriptionBase_Marker MN WHERE MN.descriptionbase_id = db.id) "
104 + " AND NOT EXISTS (SELECT * FROM DescriptionBase_OriginalSourceBase MN WHERE MN.descriptionbase_id = db.id) "
105 + " AND NOT EXISTS (SELECT * FROM DescriptionBase_Reference MN WHERE MN.descriptionbase_id = db.id) "
106 + " AND NOT EXISTS (SELECT * FROM DescriptionBase_RightsInfo MN WHERE MN.descriptionbase_id = db.id) "
107 + " AND NOT EXISTS (SELECT * FROM WorkingSet_DescriptionBase MN WHERE MN.descriptions_id = db.id) "
109 SimpleSchemaUpdaterStep simpleStep
= SimpleSchemaUpdaterStep
.NewNonAuditedInstance(stepName
, query
, -99);
110 stepList
.add(simpleStep
);
113 //UPDATE congruent symbol in DefinedTermBase
114 stepName
= "UPDATE congruent symbol in DefinedTermBase";
115 query
= " UPDATE @@DefinedTermBase@@ "
116 + " SET idInVocabulary = Replace(idInVocabulary, '\u2245', '\u225c'), symbol = Replace(symbol, '\u2245', '\u225c'), inverseSymbol = Replace(inverseSymbol, '\u2245', '\u225c')"
117 + " WHERE DTYPE like 'TaxonRel%' "
118 + " AND (idInVocabulary like '%\u2245%' OR symbol like '%\u2245%' OR inverseSymbol like '%\u2245%' )";
119 simpleStep
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, query
, "DefinedTermBase", -99);
120 stepList
.add(simpleStep
);
123 //UPDATE congruent symbol in Representations
124 stepName
= "UPDATE congruent symbol in Representations";
125 query
= " UPDATE @@Representation@@ "
126 + " SET abbreviatedLabel = Replace(abbreviatedLabel, '\u2245', '\u225c') "
127 + " WHERE (abbreviatedLabel like '%\u2245%' )";
128 simpleStep
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, query
, "Representation", -99);
129 stepList
.add(simpleStep
);
133 //update sortindex on FeatureNode children
134 stepName
= "Update sort index on FeatureNode children";
135 tableName
= "FeatureNode";
136 String parentIdColumn
= "parent_id";
137 String sortIndexColumn
= "sortIndex";
138 SortIndexUpdater updateSortIndex
= SortIndexUpdater
.NewUpdateExistingSortindexInstance(stepName
, tableName
, parentIdColumn
, sortIndexColumn
, INCLUDE_AUDIT
);
139 stepList
.add(updateSortIndex
);
142 // update sortindex for TaxonNodes
143 stepName
= "Update sort index on TaxonNode children";
144 tableName
= "TaxonNode";
145 parentIdColumn
= "parent_id";
146 sortIndexColumn
= "sortIndex";
147 updateSortIndex
= SortIndexUpdater
.NewUpdateExistingSortindexInstance(
148 stepName
, tableName
, parentIdColumn
, sortIndexColumn
,
150 stepList
.add(updateSortIndex
);
153 stepName
= "Update sort index on PolytomousKeyNode children";
154 tableName
= "PolytomousKeyNode";
155 parentIdColumn
= "parent_id";
156 sortIndexColumn
= "sortIndex";
157 updateSortIndex
= SortIndexUpdater
.NewUpdateExistingSortindexInstance(
158 stepName
, tableName
, parentIdColumn
, sortIndexColumn
,
160 stepList
.add(updateSortIndex
);
163 //excluded to TaxonNode
164 stepName
= "Add excluded to TaxonNode";
165 tableName
= "TaxonNode";
166 newColumnName
= "excluded";
167 step
= ColumnAdder
.NewBooleanInstance(stepName
, tableName
, newColumnName
, INCLUDE_AUDIT
, false);
171 //Move excluded from Taxon to TaxonNode
172 stepName
= "Move excluded from Taxon to TaxonNode";
173 query
= "UPDATE @@TaxonNode@@ tn " +
174 " SET excluded = (SELECT DISTINCT excluded FROM @@TaxonBase@@ tb WHERE tb.id = tn.taxon_id)";
175 simpleStep
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, query
, "TaxonNode", -99)
176 //.addDefaultAuditing("TaxonBase") removed due to non unique results in subquery, solving this problem is too much work to be implemented here, so audited values will not be correct partly but always representing the current state
178 stepList
.add(simpleStep
);
180 stepName
= "Move excluded from Taxon to TaxonNode/set null to false";
181 query
= "UPDATE @@TaxonNode@@ SET excluded = 0 WHERE excluded IS NULL";
182 simpleStep
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, query
, "TaxonNode", -99);
183 simpleStep
.put(DatabaseTypeEnum
.PostgreSQL
, query
.replace("0", "false"));
184 simpleStep
.putAudited(DatabaseTypeEnum
.PostgreSQL
, query
.replace("TaxonNode","TaxonNode_AUD").replace("0", "false"));
185 stepList
.add(simpleStep
);
188 //remove excluded from TaxonNode
189 stepName
= "Remove excluded from TaxonBase";
190 tableName
= "TaxonBase";
191 oldColumnName
= "excluded";
192 step
= ColumnRemover
.NewInstance(stepName
, tableName
, oldColumnName
, INCLUDE_AUDIT
);
196 //unplaced to TaxonNode
197 stepName
= "Add unplaced to TaxonNode";
198 tableName
= "TaxonNode";
199 newColumnName
= "unplaced";
200 step
= ColumnAdder
.NewBooleanInstance(stepName
, tableName
, newColumnName
, INCLUDE_AUDIT
, false);
205 //Move unplaced from Taxon to TaxonNode
207 stepName
= "Move unplaced from Taxon to TaxonNode";
208 query
= "UPDATE @@TaxonNode@@ tn " +
209 " SET unplaced = (SELECT DISTINCT unplaced FROM @@TaxonBase@@ tb WHERE tb.id = tn.taxon_id)";
210 simpleStep
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, query
, "TaxonNode", -99)
211 //.addDefaultAuditing("TaxonBase") removed due to non unique results in subquery, solving this problem is too much work to be implemented here, so audited values will not be correct partly but always representing the current state
213 stepList
.add(simpleStep
);
215 stepName
= "Move unplaced from Taxon to TaxonNode/set null to false";
216 query
= "UPDATE @@TaxonNode@@ SET unplaced = 0 WHERE unplaced IS NULL";
217 simpleStep
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, query
, "TaxonNode", -99);
218 simpleStep
.put(DatabaseTypeEnum
.PostgreSQL
, query
.replace("0", "false"));
219 simpleStep
.putAudited(DatabaseTypeEnum
.PostgreSQL
, query
.replace("TaxonNode","TaxonNode_AUD").replace("0", "false"));
220 stepList
.add(simpleStep
);
223 //remove unplaced from TaxonNode
224 stepName
= "Remove unplaced from TaxonBase";
225 tableName
= "TaxonBase";
226 oldColumnName
= "unplaced";
227 step
= ColumnRemover
.NewInstance(stepName
, tableName
, oldColumnName
, INCLUDE_AUDIT
);
231 //update PresenceAbsenceTerm symbols
232 updatePresenceAbsenceTermSymbols(stepList
);
235 //Remove taxonomicParentCache from Taxon
236 stepName
= "Remove taxonomicParentCache from Taxon";
237 tableName
= "TaxonBase";
238 oldColumnName
= "taxonomicParentCache_id";
239 step
= ColumnRemover
.NewInstance(stepName
, tableName
, oldColumnName
, INCLUDE_AUDIT
);
243 //Remove taxonomicChildrenCount from Taxon
244 stepName
= "Remove taxonomicChildrenCount from Taxon";
245 tableName
= "TaxonBase";
246 oldColumnName
= "taxonomicChildrenCount";
247 step
= ColumnRemover
.NewInstance(stepName
, tableName
, oldColumnName
, INCLUDE_AUDIT
);
250 //#5974 Remove synonym relationships
251 removeSynonymRelationships_5974(stepList
);
254 //#5981 Add abbreviation to Rank "Cultivar"
255 stepName
= "Add abbreviation to Rank 'Cultivar'";
256 String updateSql
= "UPDATE Representation SET abbreviatedLabel='cv.' WHERE label='Cultivar'";
257 String nonAuditedTableName
= "Representation";
258 step
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, updateSql
, nonAuditedTableName
, -99);
261 //#5981 Add abbreviation to idInVoc for 'Cultivar'
262 stepName
= "#5981 Add abbreviation to idInVoc for 'Cultivar'";
263 updateSql
= "UPDATE DefinedTermBase SET idInVocabulary='cv.' WHERE uuid='5e98415b-dc6e-440b-95d6-ea33dbb39ad0'";
264 nonAuditedTableName
= "DefinedTermBase";
265 step
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, updateSql
, nonAuditedTableName
, -99);
268 //#5952 Add identityCache
269 stepName
= "Add identityCache";
270 tableName
= "SpecimenOrObservationBase";
271 newColumnName
= "identityCache";
272 step
= ColumnAdder
.NewStringInstance (stepName
, tableName
, newColumnName
, INCLUDE_AUDIT
);
276 stepName
= "Add identityCache index";
277 tableName
= "SpecimenOrObservationBase";
278 newColumnName
= "identityCache";
279 step
= IndexAdder
.NewInstance(stepName
, tableName
, newColumnName
, null);
282 stepName
= "Add protectedIdentityCache";
283 tableName
= "SpecimenOrObservationBase";
284 newColumnName
= "protectedIdentityCache";
285 step
= ColumnAdder
.NewBooleanInstance(stepName
, tableName
, newColumnName
, INCLUDE_AUDIT
, false);
288 //#5634 Add excluded note
289 stepName
= "Add excluded note";
290 tableName
= "TaxonNode";
291 String attributeName
= "excludedNote";
292 step
= LanguageStringTableCreator
.NewLanguageStringInstance(stepName
, tableName
, attributeName
, INCLUDE_AUDIT
);
298 private void removeSynonymRelationships_5974(List
<ISchemaUpdaterStep
> stepList
) {
299 //add partial column to Synonym
300 String stepName
= "Add partial column to Synonym";
301 String tableName
= "TaxonBase";
302 String newColumnName
= "partial";
303 ISchemaUpdaterStep step
= ColumnAdder
.NewBooleanInstance(stepName
, tableName
, newColumnName
, INCLUDE_AUDIT
, false);
306 //add proParte column to Synonym
307 stepName
= "Add proParte column to Synonym";
308 tableName
= "TaxonBase";
309 newColumnName
= "proParte";
310 step
= ColumnAdder
.NewBooleanInstance(stepName
, tableName
, newColumnName
, INCLUDE_AUDIT
, false);
313 //add type column to Synonym
314 stepName
= "Add type column to Synonym";
315 tableName
= "TaxonBase";
316 newColumnName
= "type_id";
317 String referencedTable
= "DefinedTermBase";
318 step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, newColumnName
, INCLUDE_AUDIT
, !NOT_NULL
, referencedTable
);
321 //add acceptedTaxon_id to Synonym
322 stepName
= "Add acceptedTaxon to Synonym";
323 tableName
= "TaxonBase";
324 newColumnName
= "acceptedTaxon_id";
325 referencedTable
= "TaxonBase";
326 step
= ColumnAdder
.NewIntegerInstance(stepName
, tableName
, newColumnName
, INCLUDE_AUDIT
, !NOT_NULL
, referencedTable
);
330 //move duplicates first
331 step
= SynonymDeduplicator
.NewInstance();
335 stepName
= "Update proParte";
336 String updateSql
= "UPDATE @@TaxonBase@@ syn " +
337 " SET proParte = (SELECT DISTINCT proParte FROM @@SynonymRelationship@@ sr WHERE sr.relatedFrom_id = syn.id) " +
338 " WHERE acceptedTaxon_id IS NULL ";
339 step
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, updateSql
, "TaxonBase", -99)
340 //.addDefaultAuditing("SynonymRelationship") //difficult to implement due to non-uniqueness in subquery
344 updateSql
= "UPDATE @@TaxonBase@@ " +
345 " SET proParte = @FALSE@ " +
346 " WHERE DTYPE='Synonym' AND proParte IS NULL ";
347 step
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, updateSql
, "TaxonBase", -99);
352 stepName
= "Update partial";
353 updateSql
= "UPDATE @@TaxonBase@@ syn " +
354 " SET partial=(SELECT DISTINCT partial FROM @@SynonymRelationship@@ sr WHERE sr.relatedFrom_id = syn.id) " +
355 " WHERE acceptedTaxon_id IS NULL ";
356 step
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, updateSql
, "TaxonBase", -99)
357 //.addDefaultAuditing("SynonymRelationship") //difficult to implement due to non-uniqueness in subquery
361 updateSql
= "UPDATE @@TaxonBase@@ " +
362 " SET partial = @FALSE@ " +
363 " WHERE DTYPE='Synonym' AND partial IS NULL ";
364 step
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, updateSql
, "TaxonBase", -99);
367 //update synonym type
368 stepName
= "Update Synonym type";
369 updateSql
= "UPDATE @@TaxonBase@@ syn " +
370 " SET type_id=(SELECT DISTINCT type_id FROM @@SynonymRelationship@@ sr WHERE sr.relatedFrom_id = syn.id)" +
371 " WHERE acceptedTaxon_id IS NULL ";
372 // String updateSqlAud = updateSql.replace("TaxonBase", "TaxonBase_AUD").replace("SynonymRelationship", "SynonymRelationship_AUD");
373 step
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, updateSql
, "TaxonBase", -99);
376 //update acceptedTaxon_id
377 stepName
= "Update acceptedTaxon_id";
378 updateSql
= "UPDATE @@TaxonBase@@ syn " +
379 " SET acceptedTaxon_id=(SELECT DISTINCT relatedTo_id FROM @@SynonymRelationship@@ sr WHERE sr.relatedFrom_id = syn.id)" +
380 " WHERE acceptedTaxon_id IS NULL ";
381 // updateSqlAud = updateSql.replace("TaxonBase", "TaxonBase_AUD").replace("SynonymRelationship", "SynonymRelationship_AUD");
382 step
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, updateSql
, "TaxonBase", -99);
387 //rename SynonymRelationshipType to SynonymType in DefinedTermBase.DTYPE
388 stepName
= "Rename SynonymRelationshipType to SynonymType in DefinedTermBase.DTYPE";
389 updateSql
= "UPDATE DefinedTermBase SET DTYPE='SynonymType' WHERE DTYPE='SynonymRelationshipType'";
390 String nonAuditedTableName
= "DefinedTermBase";
391 step
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, updateSql
, nonAuditedTableName
, -99);
394 //rename SynonymRelationshipType to SynonymType in DefinedTermBase.titleCache
395 stepName
= "Rename SynonymRelationshipType to SynonymType in DefinedTermBase.titleCache";
396 updateSql
= "UPDATE DefinedTermBase SET titleCache='SynonymType' WHERE titleCache='SynonymRelationshipType'";
397 nonAuditedTableName
= "DefinedTermBase";
398 step
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, updateSql
, nonAuditedTableName
, -99);
401 //rename SynonymRelationshipType to SynonymType in Representation labels
402 stepName
= "Rename SynonymRelationshipType to SynonymType in Representation labels";
403 updateSql
= "UPDATE Representation SET label='Synonym Type' WHERE label='Synonym Relationship Type'";
404 nonAuditedTableName
= "Representation";
405 step
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, updateSql
, nonAuditedTableName
, -99);
408 //rename SynonymRelationshipType to SynonymType in Representation text
409 stepName
= "Rename SynonymRelationshipType to SynonymType in Representation text";
410 updateSql
= "UPDATE Representation SET text='Synonym Type' WHERE text='Synonym Relationship Type'";
411 nonAuditedTableName
= "Representation";
412 step
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, updateSql
, nonAuditedTableName
, -99);
415 //remove SynonymRelationship_Annotation
416 stepName
= "Remove SynonymRelationship_Annotation table";
417 tableName
= "SynonymRelationship_Annotation";
418 step
= TableDroper
.NewInstance(stepName
, tableName
, INCLUDE_AUDIT
);
421 //remove SynonymRelationship_Marker
422 stepName
= "Remove SynonymRelationship_Marker table";
423 tableName
= "SynonymRelationship_Marker";
424 step
= TableDroper
.NewInstance(stepName
, tableName
, INCLUDE_AUDIT
);
427 //remove SynonymRelationship table
428 stepName
= "Remove synonym relationship table";
429 tableName
= "SynonymRelationship";
430 step
= TableDroper
.NewInstance(stepName
, tableName
, INCLUDE_AUDIT
);
437 private void updatePresenceAbsenceTermSymbols(List
<ISchemaUpdaterStep
> stepList
) {
438 String enDash
= UTF8
.EN_DASH
.toString();
441 updateSinglePATsymbol(stepList
, "c3ee7048-15b7-4be1-b687-9ce9c1a669d6", "e", "" + UTF8
.BLACK_CIRCLE
);
443 updateSinglePATsymbol(stepList
, "cef81d25-501c-48d8-bbea-542ec50de2c2", "p", "");
445 updateSinglePATsymbol(stepList
, "75a60279-a4c2-4f53-bc57-466028a4b3db", "pd", "?");
447 updateSinglePATsymbol(stepList
, "ddeac4f2-d8fa-43b8-ad7e-ca13abdd32c7", "n", "");
448 //native: doubtfully native
449 updateSinglePATsymbol(stepList
, "310373bf-7df4-4d02-8cb3-bcc7448805fc", "nd", "d");
450 //introduced: naturalized
451 updateSinglePATsymbol(stepList
, "e191e89a-a751-4b0c-b883-7f1de70915c9", "in", "n");
452 //introduced: adventitious (casual)
453 updateSinglePATsymbol(stepList
, "42946bd6-9c22-45ad-a910-7427e8f60bfd", "ia", "a");
455 updateSinglePATsymbol(stepList
, "4e04990a-66fe-4fdf-856c-f40772fbcf0a", "na", "n");
456 //native: presence questionable
457 updateSinglePATsymbol(stepList
, "925662c1-bb10-459a-8c53-da5a738ac770", "nq", "?");
458 //introduced: presence questionable
459 updateSinglePATsymbol(stepList
, "83eb0aa0-1a45-495a-a3ca-bf6958b74366", "iq", "?");
460 //introduced: cultivated
461 updateSinglePATsymbol(stepList
, "fac8c347-8262-44a1-b0a4-db4de451c021", "ic", "c");
462 //cultivated, presence questionable
463 updateSinglePATsymbol(stepList
, "4f31bfc8-3058-4d83-aea5-3a1fe9773f9f", "cq", "?c");
465 updateSinglePATsymbol(stepList
, "59709861-f7d9-41f9-bb21-92559cedd598", "a", enDash
);
467 updateSinglePATsymbol(stepList
, "38604788-cf05-4607-b155-86db456f7680", "f", enDash
);
468 //native: reported in error
469 updateSinglePATsymbol(stepList
, "aeec2947-2700-4623-8e32-9e3a430569d1", "if", enDash
);
470 //cultivated: reported in error
471 updateSinglePATsymbol(stepList
, "9d4d3431-177a-4abe-8e4b-1558573169d6", "cf", enDash
);
476 * @param uuid the uuid
480 private void updateSinglePATsymbol(List
<ISchemaUpdaterStep
> stepList
,
481 String uuid
, String oldSymbol
, String newSymbol
) {
482 String stepName
= "Update single symbol for PresenceAbsenceTerm " + uuid
;
483 String query
= "UPDATE @@DefinedTermBase@@ dtb "
484 + " SET symbol = '" + newSymbol
+ "'"
485 + " WHERE uuid = '" + uuid
+ "' AND symbol = '" + oldSymbol
+ "'" ;
486 SimpleSchemaUpdaterStep simpleStep
= SimpleSchemaUpdaterStep
.NewAuditedInstance(stepName
, query
, "DefinedTermBase", -99);
487 stepList
.add(simpleStep
);
491 public ISchemaUpdater
getNextUpdater() {
492 return SchemaUpdater_41_47
.NewInstance();
496 public ISchemaUpdater
getPreviousUpdater() {
497 return SchemaUpdater_36_40
.NewInstance();