Skip to content

Commit

Permalink
SONAR-8221 Fix issue on MySQL when indexing project measures without …
Browse files Browse the repository at this point in the history
…analysis
  • Loading branch information
julienlancelot committed Oct 20, 2016
1 parent 20aa37c commit e49f905
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 8 deletions.
Expand Up @@ -104,11 +104,12 @@ public ProjectMeasuresDoc setMeasuresFromMap(Map<String, Object> measures) {
return this;
}

@CheckForNull
public String getQualityGate() {
return getField(ProjectMeasuresIndexDefinition.FIELD_QUALITY_GATE);
}

public ProjectMeasuresDoc setQualityGate(String s) {
public ProjectMeasuresDoc setQualityGate(@Nullable String s) {
setField(ProjectMeasuresIndexDefinition.FIELD_QUALITY_GATE, s);
return this;
}
Expand Down
Expand Up @@ -28,6 +28,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import org.apache.commons.lang.StringUtils;
import org.sonar.api.resources.Qualifiers;
Expand Down Expand Up @@ -129,21 +130,24 @@ private static PreparedStatement createMetricsStatement(DbSession session) throw
@Override
protected ProjectMeasuresDoc read(ResultSet rs) throws SQLException {
String projectUuid = rs.getString(1);
Measures measures = selectMeasures(projectUuid, rs.getString(4));
Measures measures = selectMeasures(projectUuid, getString(rs, 4));
ProjectMeasuresDoc doc = new ProjectMeasuresDoc()
.setId(projectUuid)
.setKey(rs.getString(2))
.setName(rs.getString(3))
.setQualityGate(measures.qualityGateStatus)
.setMeasuresFromMap(measures.numericMeasures);
.setQualityGate(measures.getQualityGateStatus())
.setMeasuresFromMap(measures.getNumericMeasures());
long analysisDate = rs.getLong(5);
doc.setAnalysedAt(rs.wasNull() ? null : new Date(analysisDate));
return doc;
}

private Measures selectMeasures(String projectUuid, @Nullable String analysisUuid) {
private Measures selectMeasures(String projectUuid, Optional<String> analysisUuid) {
Measures measures = new Measures();
try (PreparedStatement stmt = createMeasuresStatement(projectUuid, analysisUuid);
if (!analysisUuid.isPresent()) {
return measures;
}
try (PreparedStatement stmt = createMeasuresStatement(projectUuid, analysisUuid.get());
ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
readMeasure(rs, measures);
Expand Down Expand Up @@ -195,6 +199,18 @@ private static Optional<Double> getDouble(ResultSet rs, int index) {
}
}

private static Optional<String> getString(ResultSet rs, int index) {
try {
String value = rs.getString(index);
if (!rs.wasNull()) {
return Optional.of(value);
}
return Optional.empty();
} catch (SQLException e) {
throw new IllegalStateException("Fail to get string value", e);
}
}

private static class Measures {
private Map<String, Object> numericMeasures = new HashMap<>();
private String qualityGateStatus;
Expand All @@ -204,10 +220,19 @@ Measures addNumericMeasure(String metricKey, double value) {
return this;
}

Measures setQualityGateStatus(String qualityGateStatus) {
public Map<String, Object> getNumericMeasures() {
return numericMeasures;
}

Measures setQualityGateStatus(@Nullable String qualityGateStatus) {
this.qualityGateStatus = qualityGateStatus;
return this;
}

@CheckForNull
public String getQualityGateStatus() {
return qualityGateStatus;
}
}

}
Expand Up @@ -238,7 +238,10 @@ private SearchProjectsWsResponse call(SearchProjectsRequest.Builder requestBuild

httpRequest.setParam(Param.PAGE, String.valueOf(wsRequest.getPage()));
httpRequest.setParam(Param.PAGE_SIZE, String.valueOf(wsRequest.getPageSize()));
httpRequest.setParam(PARAM_FILTER, wsRequest.getFilter());
String filter = wsRequest.getFilter();
if (filter != null) {
httpRequest.setParam(PARAM_FILTER, filter);
}

try {
return SearchProjectsWsResponse.parseFrom(httpRequest.execute().getInputStream());
Expand Down

0 comments on commit e49f905

Please sign in to comment.