Revision 3783f232
Added by Andreas Müller over 1 year ago
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/SimpleSchemaUpdaterStep.java | ||
---|---|---|
14 | 14 |
import java.util.Map; |
15 | 15 |
|
16 | 16 |
import org.apache.commons.lang.StringUtils; |
17 |
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger; |
|
17 |
import org.apache.logging.log4j.LogManager; |
|
18 |
import org.apache.logging.log4j.Logger; |
|
18 | 19 |
|
19 | 20 |
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor; |
20 | 21 |
import eu.etaxonomy.cdm.database.DatabaseTypeEnum; |
... | ... | |
33 | 34 |
private final Map<DatabaseTypeEnum, String> auditQueryMap = new HashMap<>(); |
34 | 35 |
|
35 | 36 |
private boolean includeAudit = false; |
36 |
// private String tableName; |
|
37 |
private boolean withErrorRecovery = false; |
|
38 |
private String errorRecoveryMessage; |
|
37 | 39 |
|
38 | 40 |
// *************************** FACTORY ********************************/ |
39 | 41 |
|
... | ... | |
79 | 81 |
return new SimpleSchemaUpdaterStep(stepList, stepName, defaultQuery, audit, null, defaultQueryForAuditedTables); |
80 | 82 |
} |
81 | 83 |
|
82 |
|
|
83 | 84 |
//************************ CONSTRUCTOR ***********************************/ |
84 | 85 |
|
85 | 86 |
private SimpleSchemaUpdaterStep(List<ISchemaUpdaterStep> stepList, String stepName, String defaultQuery, |
... | ... | |
140 | 141 |
private boolean executeQuery(ICdmDataSource datasource, String replacedQuery, SchemaUpdateResult result) { |
141 | 142 |
try { |
142 | 143 |
datasource.executeUpdate(replacedQuery); |
144 |
return true; |
|
143 | 145 |
} catch (SQLException e) { |
144 | 146 |
logger.error(e); |
145 |
result.addException(e, "Unexpected SQL Exception", getStepName()); |
|
146 |
return false; |
|
147 |
if (withErrorRecovery) { |
|
148 |
result.addException(e, "Unexpected SQL Exception", getStepName()); |
|
149 |
return false; |
|
150 |
}else { |
|
151 |
result.addError(errorRecoveryMessage, e, getStepName()); |
|
152 |
return true; |
|
153 |
} |
|
147 | 154 |
} |
148 |
return true; |
|
149 | 155 |
} |
150 | 156 |
|
151 | 157 |
private void makeAuditedQuery(DatabaseTypeEnum dbType, String tableName, boolean addTable){ |
... | ... | |
216 | 222 |
return this; |
217 | 223 |
} |
218 | 224 |
|
225 |
/** |
|
226 |
* Setting error recovery will not make the step fail if the query execution |
|
227 |
* throws an exception. Only an error will be reported with the given |
|
228 |
* <code>message</code>. |
|
229 |
*/ |
|
230 |
public SimpleSchemaUpdaterStep withErrorRecovery(String message) { |
|
231 |
this.withErrorRecovery = true; |
|
232 |
this.errorRecoveryMessage = message; |
|
233 |
return this; |
|
234 |
} |
|
235 |
|
|
219 | 236 |
} |
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v529_532/SchemaUpdater_5290_5320.java | ||
---|---|---|
19 | 19 |
import eu.etaxonomy.cdm.database.update.ISchemaUpdater; |
20 | 20 |
import eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep; |
21 | 21 |
import eu.etaxonomy.cdm.database.update.SchemaUpdaterBase; |
22 |
import eu.etaxonomy.cdm.database.update.SimpleSchemaUpdaterStep; |
|
22 | 23 |
import eu.etaxonomy.cdm.database.update.TermRepresentationUpdater; |
23 | 24 |
import eu.etaxonomy.cdm.database.update.UniqueIndexDropper; |
24 | 25 |
import eu.etaxonomy.cdm.database.update.v527_529.SchemaUpdater_5271_5290; |
... | ... | |
97 | 98 |
label = "México Distrito Federal"; |
98 | 99 |
TermRepresentationUpdater.NewInstanceWithTitleCache(stepList, stepName, uuidTerm, description, label, abbrev, uuidEnglish); |
99 | 100 |
|
101 |
//#9785 Add missing unit_ids |
|
102 |
stepName = "Add missing unit_ids"; |
|
103 |
String query = "UPDATE DescriptionElementBase deb LEFT OUTER JOIN DefinedTermBase fe ON fe.id = deb.feature_id" |
|
104 |
+ "SET deb.unit_id = (" |
|
105 |
+ " SELECT MN2.recommendedMeasurementUnits_id" |
|
106 |
+ " FROM DefinedTermBase fe2 INNER JOIN DefinedTermBase_MeasurementUnit MN2 ON MN2.Feature_id = fe2.id" |
|
107 |
+ " WHERE fe.id = fe2.id AND (fe2.DTYPE = 'Feature' OR fe2.DTYPE = 'Character')" |
|
108 |
+ " GROUP BY fe2.id" |
|
109 |
+ " HAVING COUNT(*) = 1" |
|
110 |
+ ")" |
|
111 |
+ "WHERE deb.DTYPE = 'QuantitativeData' AND deb.unit_id IS NULL" |
|
112 |
+ "AND fe.id IN (" |
|
113 |
+ " SELECT fe.id " |
|
114 |
+ " FROM DefinedTermBase fe INNER JOIN DefinedTermBase_MeasurementUnit MN ON MN.Feature_id = fe.id INNER JOIN DefinedTermBase mu ON MN.recommendedMeasurementUnits_id = mu.id" |
|
115 |
+ " WHERE fe.DTYPE = 'Feature' OR fe.DTYPE = 'Character'" |
|
116 |
+ " GROUP BY fe.id, mu.id" |
|
117 |
+ " HAVING COUNT(*) = 1" |
|
118 |
+ ")"; |
|
119 |
SimpleSchemaUpdaterStep.NewNonAuditedInstance(stepList, stepName, query, size) |
|
120 |
.withErrorRecovery("SQL statement for adding missing measurement unit_ids failed"); |
|
121 |
|
|
100 | 122 |
return stepList; |
101 | 123 |
} |
102 | 124 |
} |
Also available in: Unified diff
fix #9785 Update script for missing measurement unit_ids (matrix)