Project

General

Profile

« Previous | Next » 

Revision 3783f232

Added by Andreas Müller over 1 year ago

fix #9785 Update script for missing measurement unit_ids (matrix)

View differences:

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