package org.sonar.batch.index;
import com.google.common.annotations.VisibleForTesting;
-import org.apache.ibatis.session.SqlSession;
import org.sonar.api.database.model.MeasureMapper;
import org.sonar.api.database.model.MeasureModel;
import org.sonar.api.database.model.Snapshot;
import org.sonar.api.utils.SonarException;
import org.sonar.batch.index.Cache.Entry;
import org.sonar.batch.scan.measure.MeasureCache;
+import org.sonar.core.persistence.DbSession;
import org.sonar.core.persistence.MyBatis;
public final class MeasurePersister implements ScanPersister {
@Override
public void persist() {
- SqlSession session = mybatis.openSession();
+ DbSession session = mybatis.openSession(true);
try {
MeasureMapper mapper = session.getMapper(MeasureMapper.class);
if (shouldPersistMeasure(resource, measure)) {
Snapshot snapshot = snapshotCache.get(effectiveKey);
MeasureModel measureModel = model(measure).setSnapshotId(snapshot.getId());
- try {
- mapper.insert(measureModel);
- } catch (Exception e) {
- // SONAR-4066
- throw new SonarException(String.format("Unable to save measure for metric [%s] on component [%s]", measure.getMetricKey(), resource.getKey()), e);
- }
+ mapper.insert(measureModel);
}
}
session.commit();
+ } catch (Exception e) {
+ throw new SonarException("Unable to save some measures", e);
} finally {
MyBatis.closeQuietly(session);
}
}
@Test
- public void should_display_contextual_info_when_error_during_insert_measure() {
+ public void should_display_message_when_error_during_insert_measure() {
setupData("empty");
Measure measure = new Measure(ncloc()).setValue(1234.0).setAlertText(TOO_LONG);
when(measureCache.entries()).thenReturn(Arrays.asList(new Cache.Entry<Measure>(new String[] {"foo", "ncloc"}, measure)));
thrown.expect(SonarException.class);
- thrown.expectMessage("Unable to save measure for metric [ncloc] on component [foo]");
+ thrown.expectMessage("Unable to save some measures");
measurePersister.persist();
}
<mapper namespace="org.sonar.api.database.model.MeasureMapper">
- <insert id="insert" parameterType="MeasureModel" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
+ <insert id="insert" parameterType="MeasureModel" useGeneratedKeys="false">
INSERT INTO project_measures (
value, metric_id, snapshot_id, rule_id, text_value, tendency, measure_date,
project_id, alert_status, alert_text, url, description, rule_priority, characteristic_id, variation_value_1,