From: Simon Brandhof Date: Mon, 10 Dec 2012 22:06:29 +0000 (+0100) Subject: SONAR-3825 display null values at the end of results, whatever the asc/desc sorting X-Git-Tag: 3.4~66 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=aa4a3dc35721fd6fdaaa819c17fb0ec2a506a6fe;p=sonarqube.git SONAR-3825 display null values at the end of results, whatever the asc/desc sorting --- diff --git a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSql.java b/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSql.java index e1ec30a4291..54b0d00a007 100644 --- a/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSql.java +++ b/sonar-core/src/main/java/org/sonar/core/measure/MeasureFilterSql.java @@ -99,8 +99,11 @@ class MeasureFilterSql { } } if (filter.sort().isSortedByDatabase()) { - sql.append(" ORDER BY sortval"); - sql.append(filter.sort().isAsc() ? " ASC " : " DESC "); + if (filter.sort().isAsc()) { + sql.append(" ORDER BY sortval"); + } else { + sql.append(" ORDER BY CASE WHEN max(sortval) IS NULL THEN 1 ELSE 0 END, sortval DESC"); + } } } diff --git a/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java b/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java index 3bc247897a2..3416b62fa8e 100644 --- a/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java +++ b/sonar-core/src/test/java/org/sonar/core/measure/MeasureFilterExecutorTest.java @@ -218,6 +218,30 @@ public class MeasureFilterExecutorTest extends AbstractDaoTestCase { verifyJavaTinyFile(rows.get(1)); } + @Test + public void null_measures_are_ordered_after_descending_numeric_measures() throws SQLException { + MeasureFilter filter = new MeasureFilter().setResourceQualifiers(Arrays.asList("TRK")) + .setSortOnMetric(METRIC_COVERAGE).setSortAsc(false); + List rows = executor.execute(filter, new MeasureFilterContext()); + + // Java has coverage but not PHP + assertThat(rows).hasSize(2); + verifyJavaProject(rows.get(0)); + verifyPhpProject(rows.get(1)); + } + + @Test + public void null_measures_are_ordered_after_ascending_numeric_measures() throws SQLException { + MeasureFilter filter = new MeasureFilter().setResourceQualifiers(Arrays.asList("TRK")) + .setSortOnMetric(METRIC_COVERAGE).setSortAsc(true); + List rows = executor.execute(filter, new MeasureFilterContext()); + + // Java has coverage but not PHP + assertThat(rows).hasSize(2); + verifyJavaProject(rows.get(0)); + verifyPhpProject(rows.get(1)); + } + @Test public void sort_by_missing_numeric_measure() throws SQLException { // coverage measures are not computed