Project

General

Profile

« Previous | Next » 

Revision f616b1c5

Added by Andreas Müller almost 6 years ago

workaround for very strange max(id) behavior in remote-webapp H2 test database

View differences:

cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/SingleTermUpdater.java
125 125
            return;
126 126
		}
127 127

  
128
		Integer termId;
129
		String sqlMaxId = " SELECT max(id)+1 as maxId FROM " + caseType.transformTo("DefinedTermBase");
130
		rs = datasource.executeQuery(sqlMaxId);
131
		if (rs.next()){
132
			termId = rs.getInt("maxId");
133
		}else{
134
			String message = "No defined terms do exist yet. Can't update terms!";
135
			monitor.warning(message);
136
			result.addError(message, getStepName() + ", SingleTermUpdater.invoke");
128
		String sqlMaxId;
129
        Integer termId = getMaxId(datasource, monitor, caseType, result);
130
        if (termId == null){
137 131
            return;
138
		}
132
        }
139 133

  
140 134
		String id = Integer.toString(termId);
141 135
		String created = getNowString();
......
210 204
		return;
211 205
	}
212 206

  
207
    /**
208
     * @param datasource
209
     * @param monitor
210
     * @param caseType
211
     * @param result
212
     * @return
213
     * @throws SQLException
214
     */
215
    protected Integer getMaxId(ICdmDataSource datasource, IProgressMonitor monitor, CaseType caseType,
216
            SchemaUpdateResult result) throws SQLException {
217

  
218
//       For some very strange reason max(id) gave back a wrong result when
219
//        executed here while updateing remote-webapp H2 test database, therefore
220
//        we took this workaround which worked. Can be removed when it does not
221
//        appear anymore
222

  
223
//        String sqlMaxId = " SELECT max(id)+1 as maxId"
224
//                + " FROM " + caseType.transformTo("DefinedTermBase");
225
        String sqlMaxId = " SELECT id  as maxId"
226
                + " FROM " + caseType.transformTo("DefinedTermBase") +
227
                 " ORDER BY id DESC ";
228
		ResultSet rs = datasource.executeQuery(sqlMaxId);
229
		while (rs.next()){
230
		    Integer termId = rs.getInt("maxId");
231
		    System.out.println(termId);
232
		    return termId +1;
233
		}
234
		String message = "No defined terms do exist yet. Can't update terms!";
235
		monitor.warning(message);
236
		result.addError(message, getStepName() + ", SingleTermUpdater.invoke");
237
        return null;
238
    }
239

  
213 240
	private String nullSafeStr(String str) {
214 241
		if (str == null){
215 242
			return " NULL ";

Also available in: Unified diff