]> source.dussan.org Git - sonarqube.git/commitdiff
Add getters that never return null in Select
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 18 Feb 2015 10:43:51 +0000 (11:43 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Wed, 18 Feb 2015 10:44:02 +0000 (11:44 +0100)
37 files changed:
server/sonar-server/src/main/java/org/sonar/server/db/migrations/Select.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v42/CompleteIssueMessageMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v42/PackageKeysMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v43/ConvertIssueDebtToMinutesMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v43/DevelopmentCostMeasuresMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v43/IssueChangelogMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v43/NotResolvedIssuesOnRemovedComponentsMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v43/RequirementMeasuresMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v43/TechnicalDebtMeasuresMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v44/FeedQProfileKeysMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v44/IssueActionPlanKeyMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v44/MeasureDataMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v45/AddMissingRuleParameterDefaultValuesMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v451/DeleteUnescapedActivities.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v50/FeedFileSources.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v50/FeedIssueLongDates.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v50/FeedSnapshotSourcesUpdatedAt.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v50/InsertProjectsAuthorizationUpdatedAtMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v50/RemoveSortFieldFromIssueFiltersMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v50/ReplaceIssueFiltersProjectKeyByUuid.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/AddCharacteristicUsabilityAndSubCharacteristicsComplianceMigration.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/CopyScmAccountsFromAuthorsToUsers.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/FeedAnalysisReportsLongDates.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/FeedEventsLongDates.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/FeedFileSourcesBinaryData.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/FeedIssueChangesLongDates.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/FeedIssueComponentUuids.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/FeedIssueTags.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/FeedIssuesLongDates.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/FeedManualMeasuresLongDates.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/FeedProjectMeasuresLongDates.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/FeedSemaphoresLongDates.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/FeedSnapshotsLongDates.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/FeedUsersLongDates.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/RenameComponentRelatedParamsInIssueFilters.java
server/sonar-server/src/main/java/org/sonar/server/db/migrations/v51/UpdateProjectsModuleUuidPath.java
server/sonar-server/src/test/java/org/sonar/server/db/migrations/BaseDataChangeTest.java

index d9e4cbffa35449eebc535b4b4851ffa6e2794e4b..4c5b35143dff58da3bd97ff91f79a311ee296347 100644 (file)
@@ -37,46 +37,74 @@ public interface Select extends SqlStatement<Select> {
     }
 
     @CheckForNull
-    public Long getLong(int columnIndex) throws SQLException {
+    public Long getNullableLong(int columnIndex) throws SQLException {
       long l = rs.getLong(columnIndex);
       return rs.wasNull() ? null : l;
     }
 
+    public long getLong(int columnIndex) throws SQLException {
+      return rs.getLong(columnIndex);
+    }
+
     @CheckForNull
-    public Double getDouble(int columnIndex) throws SQLException {
+    public Double getNullableDouble(int columnIndex) throws SQLException {
       double d = rs.getDouble(columnIndex);
       return rs.wasNull() ? null : d;
     }
 
+    public double getDouble(int columnIndex) throws SQLException {
+      return rs.getDouble(columnIndex);
+    }
+
     @CheckForNull
-    public Integer getInt(int columnIndex) throws SQLException {
+    public Integer getNullableInt(int columnIndex) throws SQLException {
       int i = rs.getInt(columnIndex);
       return rs.wasNull() ? null : i;
     }
 
+    public int getInt(int columnIndex) throws SQLException {
+      return rs.getInt(columnIndex);
+    }
+
     @CheckForNull
-    public Boolean getBoolean(int columnIndex) throws SQLException {
+    public Boolean getNullableBoolean(int columnIndex) throws SQLException {
       boolean b = rs.getBoolean(columnIndex);
       return rs.wasNull() ? null : b;
     }
 
+    public boolean getBoolean(int columnIndex) throws SQLException {
+      return rs.getBoolean(columnIndex);
+    }
+
     @CheckForNull
-    public String getString(int columnIndex) throws SQLException {
+    public String getNullableString(int columnIndex) throws SQLException {
       String s = rs.getString(columnIndex);
       return rs.wasNull() ? null : s;
     }
 
+    public String getString(int columnIndex) throws SQLException {
+      return rs.getString(columnIndex);
+    }
+
     @CheckForNull
-    public Date getDate(int columnIndex) throws SQLException {
+    public Date getNullableDate(int columnIndex) throws SQLException {
       Timestamp t = rs.getTimestamp(columnIndex);
       return rs.wasNull() ? null : t;
     }
 
+    public Date getDate(int columnIndex) throws SQLException {
+      return rs.getTimestamp(columnIndex);
+    }
+
     @CheckForNull
-    public byte[] getBytes(int columnIndex) throws SQLException {
+    public byte[] getNullableBytes(int columnIndex) throws SQLException {
       byte[] b = rs.getBytes(columnIndex);
       return rs.wasNull() ? null : b;
     }
+
+    public byte[] getBytes(int columnIndex) throws SQLException {
+      return rs.getBytes(columnIndex);
+    }
   }
 
   static interface RowReader<T> {
@@ -89,7 +117,7 @@ public interface Select extends SqlStatement<Select> {
 
     @Override
     public Long read(Row row) throws SQLException {
-      return row.getLong(1);
+      return row.getNullableLong(1);
     }
   }
 
@@ -101,7 +129,7 @@ public interface Select extends SqlStatement<Select> {
 
     @Override
     public String read(Row row) throws SQLException {
-      return row.getString(1);
+      return row.getNullableString(1);
     }
   }
 
index 4cec3c611dca91bd293e085a8d7ad740add0ca1f..14259d6b617841246ee49bd02a31dfe9a73084e0 100644 (file)
@@ -46,8 +46,8 @@ public class CompleteIssueMessageMigration extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long issueId = row.getLong(1);
-        String ruleName = row.getString(2);
+        Long issueId = row.getNullableLong(1);
+        String ruleName = row.getNullableString(2);
 
         update.setString(1, ruleName);
         update.setLong(2, issueId);
index 284b1893cdf6af8837b63404a4f42189b898bc1d..1a2e22bc8150dc04aa395e562168a975e41041f3 100644 (file)
@@ -50,8 +50,8 @@ public class PackageKeysMigration extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long id = row.getLong(1);
-        String key = row.getString(2);
+        Long id = row.getNullableLong(1);
+        String key = row.getNullableString(2);
         update.setString(1, convertKey(key));
         update.setLong(2, id);
         return true;
index 9d867cf497866e235e39a484a1e68ecdcc090701..091eb2a7e0d69d3bb3cf5646f82d26e976bc3d35 100644 (file)
@@ -63,9 +63,9 @@ public class ConvertIssueDebtToMinutesMigration extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long debt = row.getLong(2);
+        Long debt = row.getNullableLong(2);
         if (debt != null) {
-          Long id = row.getLong(1);
+          Long id = row.getNullableLong(1);
           update.setLong(1, workDurationConvertor.createFromLong(debt));
           update.setDate(2, now);
           update.setLong(3, id);
index 08746ac32c11f5f92b5dd1dde54f2b897e8566c3..6345bc53b03a15b3fe739781dfc30b008fa2b440 100644 (file)
@@ -28,6 +28,7 @@ import org.sonar.server.db.migrations.Select;
 import org.sonar.server.db.migrations.SqlStatement;
 
 import javax.annotation.CheckForNull;
+
 import java.sql.SQLException;
 
 /**
@@ -56,8 +57,8 @@ public class DevelopmentCostMeasuresMigration extends BaseDataChange {
       massUpdate.execute(new MassUpdate.Handler() {
         @Override
         public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-          Long id = row.getLong(1);
-          Double value = row.getDouble(2);
+          Long id = row.getNullableLong(1);
+          Double value = row.getNullableDouble(2);
 
           update.setString(1, convertDebtForDays(value));
           update.setLong(2, id);
index e0a4397e268911ae7704d9f768b2687488a69417..de3c557dc93e8cf90fb0baea76ebb7f9784de0c7 100644 (file)
@@ -71,8 +71,8 @@ public class IssueChangelogMigration extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long id = row.getLong(1);
-        String changeData = row.getString(2);
+        Long id = row.getNullableLong(1);
+        String changeData = row.getNullableString(2);
 
         update.setString(1, convertChangelog(changeData));
         update.setDate(2, now);
index 6c5c518c8939089db5c5615a29d1b3ff6cd972e4..6c740c6d35b4a3299ca3b8e86eace255c0d0a6bc 100644 (file)
@@ -56,7 +56,7 @@ public class NotResolvedIssuesOnRemovedComponentsMigration extends BaseDataChang
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long id = row.getLong(1);
+        Long id = row.getNullableLong(1);
         update.setString(1, Issue.STATUS_CLOSED);
         update.setString(2, Issue.RESOLUTION_REMOVED);
         update.setDate(3, now);
index 02a97f6a8f8480544a34fcc2f2d902240313fd91..ba68b29e87b91b3a10e2d40f22d00293dbfc044a 100644 (file)
@@ -49,8 +49,8 @@ public class RequirementMeasuresMigration extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long id = row.getLong(1);
-        Long ruleId = row.getLong(2);
+        Long id = row.getNullableLong(1);
+        Long ruleId = row.getNullableLong(2);
 
         update.setLong(1, ruleId);
         update.setLong(2, id);
index e5bf642069d923c67e0108d73bbce14e2f88d720..2ce40849d726877181108d65c36ab49027d6a22a 100644 (file)
@@ -30,6 +30,7 @@ import org.sonar.server.db.migrations.SqlStatement;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
+
 import java.sql.SQLException;
 import java.util.List;
 
@@ -78,13 +79,13 @@ public class TechnicalDebtMeasuresMigration extends BaseDataChange {
   private class Converter implements MassUpdate.Handler {
     @Override
     public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-      Long id = row.getLong(1);
-      Double value = row.getDouble(2);
-      Double var1 = row.getDouble(3);
-      Double var2 = row.getDouble(4);
-      Double var3 = row.getDouble(5);
-      Double var4 = row.getDouble(6);
-      Double var5 = row.getDouble(7);
+      Long id = row.getNullableLong(1);
+      Double value = row.getNullableDouble(2);
+      Double var1 = row.getNullableDouble(3);
+      Double var2 = row.getNullableDouble(4);
+      Double var3 = row.getNullableDouble(5);
+      Double var4 = row.getNullableDouble(6);
+      Double var5 = row.getNullableDouble(7);
 
       update.setLong(1, convertDebtForDays(value));
       update.setLong(2, convertDebtForDays(var1));
index e6aaf804c742b5f9291df93ea9054c6ab523d939..90c9ed80ffa6cd9af78b79903468420713e57345 100644 (file)
@@ -55,9 +55,9 @@ public class FeedQProfileKeysMigration extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long id = row.getLong(1);
-        String lang = row.getString(2);
-        String name = row.getString(3);
+        Long id = row.getNullableLong(1);
+        String lang = row.getNullableString(2);
+        String name = row.getNullableString(3);
 
         update.setString(1, Slug.slugify(String.format("%s %s %s", lang, name, RandomStringUtils.randomNumeric(5))));
         update.setLong(2, id);
@@ -74,8 +74,8 @@ public class FeedQProfileKeysMigration extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long id = row.getLong(1);
-        String parentKey = row.getString(2);
+        Long id = row.getNullableLong(1);
+        String parentKey = row.getNullableString(2);
 
         update.setString(1, parentKey);
         update.setLong(2, id);
index f15a77b1ff136a441fdc5d235e1e1980ca2118fb..9adad2dab5fa6ed10ff04591669ff002387cd928 100644 (file)
@@ -59,7 +59,7 @@ public class IssueActionPlanKeyMigration extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long id = row.getLong(1);
+        Long id = row.getNullableLong(1);
 
         update.setDate(1, now);
         update.setLong(2, id);
index 8e8a0dc84210b648f9075a0a2341c90369d239aa..23ecb4c450bebef4703e173e9a7fc4b3d8df2c62 100644 (file)
@@ -51,8 +51,8 @@ public class MeasureDataMigration extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long id = row.getLong(1);
-        Long measureId = row.getLong(2);
+        Long id = row.getNullableLong(1);
+        Long measureId = row.getNullableLong(2);
 
         update.setLong(1, id);
         update.setLong(2, measureId);
index dbe211195262c730b01e812c0a2dee449341d90b..02b02f8d7275ca0592e04c1e760e13d4136b35b0 100644 (file)
@@ -50,7 +50,7 @@ public class AddMissingRuleParameterDefaultValuesMigration extends BaseDataChang
       .list(new Select.RowReader<RuleParam>() {
         @Override
         public RuleParam read(Select.Row row) throws SQLException {
-          return new RuleParam(row.getLong(1), row.getLong(2), row.getString(3), row.getString(4));
+          return new RuleParam(row.getNullableLong(1), row.getNullableLong(2), row.getNullableString(3), row.getNullableString(4));
         }
       });
 
@@ -63,7 +63,7 @@ public class AddMissingRuleParameterDefaultValuesMigration extends BaseDataChang
         .list(new Select.RowReader<ActiveRule>() {
           @Override
           public ActiveRule read(Select.Row row) throws SQLException {
-            return new ActiveRule(row.getLong(1), row.getLong(2));
+            return new ActiveRule(row.getNullableLong(1), row.getNullableLong(2));
           }
         });
 
index 87e0566b5937862c7d64cd5678c285d82fa3fdd6..49c50bc09809b134eb7e2bf9201f045c9f46c2ea 100644 (file)
@@ -49,9 +49,9 @@ public class DeleteUnescapedActivities extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        String csv = row.getString(2);
+        String csv = row.getNullableString(2);
         if (isUnescaped(csv)) {
-          update.setLong(1, row.getLong(1));
+          update.setLong(1, row.getNullableLong(1));
           return true;
         }
         return false;
index 12bf122af393f2949c843764f3ecd0c464c39a33..fc6aa2d0f2ced66eaec444aab69827a58ce10d77 100644 (file)
@@ -150,36 +150,36 @@ public class FeedFileSources extends BaseDataChange {
 
     @Override
     public boolean handle(Row row, SqlStatement update) throws SQLException {
-      String projectUuid = row.getString(1);
-      String fileUuid = row.getString(2);
-      String source = StringUtils.defaultIfBlank(row.getString(3), "");
-      Date updatedAt = row.getDate(4);
-      byte[] shortRevisions = row.getBytes(5);
-      byte[] longRevisions = row.getBytes(6);
-      byte[] shortAuthors = row.getBytes(7);
-      byte[] longAuthors = row.getBytes(8);
-      byte[] shortDates = row.getBytes(9);
-      byte[] longDates = row.getBytes(10);
-      byte[] shortUtHits = row.getBytes(11);
-      byte[] longUtHits = row.getBytes(12);
-      byte[] shortUtCond = row.getBytes(13);
-      byte[] longUtCond = row.getBytes(14);
-      byte[] shortUtCovCond = row.getBytes(15);
-      byte[] longUtCovCond = row.getBytes(16);
-      byte[] shortItHits = row.getBytes(17);
-      byte[] longItHits = row.getBytes(18);
-      byte[] shortItCond = row.getBytes(19);
-      byte[] longItCond = row.getBytes(20);
-      byte[] shortItCovCond = row.getBytes(21);
-      byte[] longItCovCond = row.getBytes(22);
-      byte[] shortOverallHits = row.getBytes(23);
-      byte[] longOverallHits = row.getBytes(24);
-      byte[] shortOverallCond = row.getBytes(25);
-      byte[] longOverallCond = row.getBytes(26);
-      byte[] shortOverallCovCond = row.getBytes(27);
-      byte[] longOverallCovCond = row.getBytes(28);
-      byte[] shortDuplicationData = row.getBytes(29);
-      byte[] longDuplicationData = row.getBytes(30);
+      String projectUuid = row.getNullableString(1);
+      String fileUuid = row.getNullableString(2);
+      String source = StringUtils.defaultIfBlank(row.getNullableString(3), "");
+      Date updatedAt = row.getNullableDate(4);
+      byte[] shortRevisions = row.getNullableBytes(5);
+      byte[] longRevisions = row.getNullableBytes(6);
+      byte[] shortAuthors = row.getNullableBytes(7);
+      byte[] longAuthors = row.getNullableBytes(8);
+      byte[] shortDates = row.getNullableBytes(9);
+      byte[] longDates = row.getNullableBytes(10);
+      byte[] shortUtHits = row.getNullableBytes(11);
+      byte[] longUtHits = row.getNullableBytes(12);
+      byte[] shortUtCond = row.getNullableBytes(13);
+      byte[] longUtCond = row.getNullableBytes(14);
+      byte[] shortUtCovCond = row.getNullableBytes(15);
+      byte[] longUtCovCond = row.getNullableBytes(16);
+      byte[] shortItHits = row.getNullableBytes(17);
+      byte[] longItHits = row.getNullableBytes(18);
+      byte[] shortItCond = row.getNullableBytes(19);
+      byte[] longItCond = row.getNullableBytes(20);
+      byte[] shortItCovCond = row.getNullableBytes(21);
+      byte[] longItCovCond = row.getNullableBytes(22);
+      byte[] shortOverallHits = row.getNullableBytes(23);
+      byte[] longOverallHits = row.getNullableBytes(24);
+      byte[] shortOverallCond = row.getNullableBytes(25);
+      byte[] longOverallCond = row.getNullableBytes(26);
+      byte[] shortOverallCovCond = row.getNullableBytes(27);
+      byte[] longOverallCovCond = row.getNullableBytes(28);
+      byte[] shortDuplicationData = row.getNullableBytes(29);
+      byte[] longDuplicationData = row.getNullableBytes(30);
 
       String[] sourceData = new FileSourceDto(source,
         ofNullableBytes(shortRevisions, longRevisions),
@@ -235,7 +235,7 @@ public class FeedFileSources extends BaseDataChange {
     RowReader<Long> simpleLongReader = new RowReader<Long>() {
       @Override
       public Long read(Row row) throws SQLException {
-        Long longValue = row.getLong(1);
+        Long longValue = row.getNullableLong(1);
         return longValue == null ? Long.valueOf(0L) : longValue;
       }
     };
index c97938f721d2bc7f1e0070dd9b5a7c5760d14f96..9b4dfca0e313a3e62e2eec03bca2d9786fd6c4c7 100644 (file)
@@ -49,9 +49,9 @@ public class FeedIssueLongDates extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long id = row.getLong(1);
-        Date createdAt = row.getDate(2);
-        Date updatedAt = row.getDate(3);
+        Long id = row.getNullableLong(1);
+        Date createdAt = row.getNullableDate(2);
+        Date updatedAt = row.getNullableDate(3);
 
         if (createdAt == null) {
           update.setLong(1, now);
index 3c6df32cfd19301e408e2297e849a54506559424..589c080501ef15dc5c4f8af427bf4e0999faebc9 100644 (file)
@@ -52,8 +52,8 @@ public class FeedSnapshotSourcesUpdatedAt extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        update.setDate(1, row.getDate(2));
-        update.setLong(2, row.getLong(1));
+        update.setDate(1, row.getNullableDate(2));
+        update.setLong(2, row.getNullableLong(1));
         return true;
       }
     });
index 026f52a1bdaad6b80e2fcaf5750a3849fbf081cb..c4688c28cb6ad29d508f10b23c22898df6535578 100644 (file)
@@ -54,7 +54,7 @@ public class InsertProjectsAuthorizationUpdatedAtMigration extends BaseDataChang
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long id = row.getLong(1);
+        Long id = row.getNullableLong(1);
         update.setLong(1, now);
         update.setLong(2, id);
         return true;
index 64d6dc0f4e9f594f78c83c31811a944f4472a33e..0f8c7f5ab607d9cb2b03a2f42d00ef9cf3030f23 100644 (file)
@@ -65,7 +65,7 @@ public class RemoveSortFieldFromIssueFiltersMigration extends BaseDataChange {
 
     @Override
     public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-      String data = row.getString(2);
+      String data = row.getNullableString(2);
       String[] fields = StringUtils.split(data, FIELD_SEPARATOR);
 
       boolean found = false;
@@ -81,7 +81,7 @@ public class RemoveSortFieldFromIssueFiltersMigration extends BaseDataChange {
         // data without 'sort' field
         update.setString(1, StringUtils.join(fieldsToKeep, FIELD_SEPARATOR));
         update.setDate(2, now);
-        update.setLong(3, row.getLong(1));
+        update.setLong(3, row.getNullableLong(1));
       }
       return found;
     }
index fecf0be4e83af6ec6db18d349f087df4120e5f14..2632f3b27c757217e2eb0f459e49313dad9b8e0e 100644 (file)
@@ -64,8 +64,8 @@ public class ReplaceIssueFiltersProjectKeyByUuid extends BaseDataChange {
       massUpdate.execute(new MassUpdate.Handler() {
         @Override
         public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-          Long id = row.getLong(1);
-          String data = row.getString(2);
+          Long id = row.getNullableLong(1);
+          String data = row.getNullableString(2);
           if (data == null) {
             return false;
           }
index 1987acdec009395095a2662f92ff7a2abe258e77..2da8d0a0529d06312ca26b90558b5633d97ae8ff 100644 (file)
@@ -183,7 +183,7 @@ public class AddCharacteristicUsabilityAndSubCharacteristicsComplianceMigration
      * On a characteristic, the order can never be null
      */
     public Integer getOrder() {
-      return parentId == null ? order : null;
+      return parentId == null && order != null ? order : null;
     }
 
     public Characteristic setOrder(@Nullable Integer order) {
@@ -310,8 +310,8 @@ public class AddCharacteristicUsabilityAndSubCharacteristicsComplianceMigration
           .setId(row.getInt(1))
           .setKey(row.getString(2))
           .setName(row.getString(3))
-          .setOrder(row.getInt(4))
-          .setParentId(row.getInt(5));
+          .setOrder(row.getNullableInt(4))
+          .setParentId(row.getNullableInt(5));
       }
     }
   }
index e6ebec997f6dfdb7127f829416c4a3fd58365426..86a1ce33a1fc640563d4891869845e2627b689a6 100644 (file)
@@ -66,7 +66,7 @@ public class CopyScmAccountsFromAuthorsToUsers extends BaseDataChange {
         ).scroll(new Select.RowHandler() {
           @Override
           public void handle(Select.Row row) throws SQLException {
-            authorsByPersonId.put(row.getLong(1), row.getString(2));
+            authorsByPersonId.put(row.getNullableLong(1), row.getNullableString(2));
           }
         });
 
@@ -126,7 +126,7 @@ public class CopyScmAccountsFromAuthorsToUsers extends BaseDataChange {
     select.scroll(new Select.RowHandler() {
       @Override
       public void handle(Select.Row row) throws SQLException {
-        users.add(new User(row.getLong(1), row.getString(2), row.getString(3), row.getString(4)));
+        users.add(new User(row.getNullableLong(1), row.getNullableString(2), row.getNullableString(3), row.getNullableString(4)));
       }
     });
     return users;
index 42c5a6564a1be84a9feba2874531f636b0a02d65..a0c981df11043319e4a5dbd69e87b615f566566e 100644 (file)
@@ -50,11 +50,11 @@ public class FeedAnalysisReportsLongDates extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Date createdAt = row.getDate(1);
-        Date updatedAt = row.getDate(2);
-        Date startedAt = row.getDate(3);
-        Date finishedAt = row.getDate(4);
-        Long id = row.getLong(5);
+        Date createdAt = row.getNullableDate(1);
+        Date updatedAt = row.getNullableDate(2);
+        Date startedAt = row.getNullableDate(3);
+        Date finishedAt = row.getNullableDate(4);
+        Long id = row.getNullableLong(5);
 
         update.setLong(1, createdAt == null ? now : Math.min(now, createdAt.getTime()));
         update.setLong(2, updatedAt == null ? now : Math.min(now, updatedAt.getTime()));
index 239b16fe213b90dd14b07048443e74869ca9c90e..f7a5ef9332ac8d5b7bdf38928903e5e21ec5a7c8 100644 (file)
@@ -60,13 +60,13 @@ public class FeedEventsLongDates extends BaseDataChange {
 
     @Override
     public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-      Date eventDate = row.getDate(1);
+      Date eventDate = row.getNullableDate(1);
       long eventTime = eventDate == null ? now : Math.min(now, eventDate.getTime());
       update.setLong(1, eventTime);
-      Date createdAt = row.getDate(2);
+      Date createdAt = row.getNullableDate(2);
       update.setLong(2, createdAt == null ? eventTime : Math.min(now, createdAt.getTime()));
 
-      Long id = row.getLong(3);
+      Long id = row.getNullableLong(3);
       update.setLong(3, id);
 
       return true;
index ec57d33681214e2fcb00166b173e3ee514f467b2..00d1d8afd6ce30d2b8026441003c799bc101d3a5 100644 (file)
@@ -38,6 +38,7 @@ import org.sonar.server.source.db.FileSourceDb;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
+
 import java.sql.SQLException;
 import java.util.Iterator;
 
@@ -55,8 +56,8 @@ public class FeedFileSourcesBinaryData extends BaseDataChange {
     update.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Long fileSourceId = row.getLong(1);
-        update.setBytes(1, toBinary(fileSourceId, row.getString(2)));
+        Long fileSourceId = row.getNullableLong(1);
+        update.setBytes(1, toBinary(fileSourceId, row.getNullableString(2)));
         update.setLong(2, fileSourceId);
         return true;
       }
index 259e82b00602e8f8063527f1b78d21bf9d0dcd2a..d522dae4ade12b10350a850e0fd2df36cf522496 100644 (file)
@@ -50,10 +50,10 @@ public class FeedIssueChangesLongDates extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Date createdAt = row.getDate(1);
-        Date updatedAt = row.getDate(2);
-        Date functionalCreatedAt = row.getDate(3);
-        Long id = row.getLong(4);
+        Date createdAt = row.getNullableDate(1);
+        Date updatedAt = row.getNullableDate(2);
+        Date functionalCreatedAt = row.getNullableDate(3);
+        Long id = row.getNullableLong(4);
 
         update.setLong(1, createdAt == null ? now : Math.min(now, createdAt.getTime()));
         update.setLong(2, updatedAt == null ? now : Math.min(now, updatedAt.getTime()));
index 8e07193b67c29d96ece7f0b70b0233606cb02296..7c26de3a13a05b05e31347e9781b2eb99b42b16a 100644 (file)
@@ -47,9 +47,9 @@ public class FeedIssueComponentUuids extends BaseDataChange {
     update.execute(new Handler() {
       @Override
       public boolean handle(Row row, SqlStatement update) throws SQLException {
-        update.setString(1, row.getString(1));
-        update.setString(2, row.getString(2));
-        update.setLong(3, row.getLong(3));
+        update.setString(1, row.getNullableString(1));
+        update.setString(2, row.getNullableString(2));
+        update.setLong(3, row.getNullableLong(3));
 
         return true;
       }
index cd38aa0741e43a77ed27d150afc65ddc8f8b1cdf..5eaf90f8f487a45cfd8cfb933e91740cd35f0d23 100644 (file)
@@ -56,10 +56,10 @@ public class FeedIssueTags extends BaseDataChange {
     context.prepareSelect("SELECT id, system_tags, tags FROM rules").scroll(new RowHandler() {
       @Override
       public void handle(Row row) throws SQLException {
-        Integer id = row.getInt(1);
+        Integer id = row.getNullableInt(1);
         tagsByRuleId.put(id, StringUtils.trimToNull(TAG_JOINER.join(
-          StringUtils.trimToNull(row.getString(2)),
-          StringUtils.trimToNull(row.getString(3)))));
+          StringUtils.trimToNull(row.getNullableString(2)),
+          StringUtils.trimToNull(row.getNullableString(3)))));
       }
     });
 
@@ -69,8 +69,8 @@ public class FeedIssueTags extends BaseDataChange {
     update.execute(new Handler() {
       @Override
       public boolean handle(Row row, SqlStatement update) throws SQLException {
-        Long id = row.getLong(1);
-        Integer ruleId = row.getInt(2);
+        Long id = row.getNullableLong(1);
+        Integer ruleId = row.getNullableInt(2);
         boolean updated = false;
         if (tagsByRuleId.get(ruleId) != null) {
           updated = true;
index 5734005ed6f134df59b2ed423294451929208177..81a690a38e96cd768481740616a7bbcb585d16dc 100644 (file)
@@ -51,10 +51,10 @@ public class FeedIssuesLongDates extends BaseDataChange {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
         for (int i = 1; i <= 3; i++) {
-          update.setLong(i, row.getDate(i) == null ? null : Math.min(now, row.getDate(i).getTime()));
+          update.setLong(i, row.getNullableDate(i) == null ? null : Math.min(now, row.getNullableDate(i).getTime()));
         }
 
-        Long id = row.getLong(4);
+        Long id = row.getNullableLong(4);
         update.setLong(4, id);
 
         return true;
index 2244c603065cf9d7b88c9d4f8bbdedf11203405a..d127b7f8f71f5b9369a243df109c69067388e804 100644 (file)
@@ -52,11 +52,11 @@ public class FeedManualMeasuresLongDates extends BaseDataChange {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
         for (int i = 1; i <= 2; i++) {
-          Date date = row.getDate(i);
+          Date date = row.getNullableDate(i);
           update.setLong(i, date == null ? null : Math.min(now, date.getTime()));
         }
 
-        Long id = row.getLong(3);
+        Long id = row.getNullableLong(3);
         update.setLong(3, id);
 
         return true;
index 00e00feccbfeddb930f10302bbaf1a580d01d8b5..dce97a78d7d8c77fe6739ecdd2d4152baf5ff501 100644 (file)
@@ -51,10 +51,10 @@ public class FeedProjectMeasuresLongDates extends BaseDataChange {
     massUpdate.execute(new MassUpdate.Handler() {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-        Date date = row.getDate(1);
+        Date date = row.getNullableDate(1);
         update.setLong(1, date == null ? null : Math.min(now, date.getTime()));
 
-        Long id = row.getLong(2);
+        Long id = row.getNullableLong(2);
         update.setLong(2, id);
 
         return true;
index 1ddc3a03c711e5bcd9b4c36a7deea930af1bb1f1..bf4ddd0841910772ea90684a5283e4e0198fc142 100644 (file)
@@ -52,11 +52,11 @@ public class FeedSemaphoresLongDates extends BaseDataChange {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
         for (int i = 1; i <= 3; i++) {
-          Date date = row.getDate(i);
+          Date date = row.getNullableDate(i);
           update.setLong(i, date == null ? null : Math.min(now, date.getTime()));
         }
 
-        Long id = row.getLong(4);
+        Long id = row.getNullableLong(4);
         update.setLong(4, id);
 
         return true;
index 09998ea93ebcc1f59c70719b1c8353a7f9ed0fd3..2897eb7dd1d30c83004b32d4736662a56b50975b 100644 (file)
@@ -51,10 +51,10 @@ public class FeedSnapshotsLongDates extends BaseDataChange {
       @Override
       public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
         for (int i = 1; i <= 7; i++) {
-          update.setLong(i, row.getDate(i) == null ? null : Math.min(now, row.getDate(i).getTime()));
+          update.setLong(i, row.getNullableDate(i) == null ? null : Math.min(now, row.getNullableDate(i).getTime()));
         }
 
-        Long id = row.getLong(8);
+        Long id = row.getNullableLong(8);
         update.setLong(8, id);
 
         return true;
index 5324120c6e3b49c66423c5e96cbd83ddee720d78..3907ddf94b1d5263c75f11fed8f269a4a0117ddc 100644 (file)
@@ -57,9 +57,9 @@ public class FeedUsersLongDates extends BaseDataChange {
 
     @Override
     public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-      Long id = row.getLong(1);
-      Date createdAt = row.getDate(2);
-      Date updatedAt = row.getDate(3);
+      Long id = row.getNullableLong(1);
+      Date createdAt = row.getNullableDate(2);
+      Date updatedAt = row.getNullableDate(3);
 
       if (createdAt == null) {
         update.setLong(1, now);
index b74b5ac3d979521a85957f9187c857d8d752d223..e7862b474c61b208c4c72b2f185022e08ae98f74 100644 (file)
@@ -68,7 +68,7 @@ public class RenameComponentRelatedParamsInIssueFilters extends BaseDataChange {
 
     @Override
     public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-      String data = row.getString(2);
+      String data = row.getNullableString(2);
       String[] fields = StringUtils.split(data, FIELD_SEPARATOR);
 
       List<String> fieldsToKeep = Lists.newArrayList();
@@ -83,7 +83,7 @@ public class RenameComponentRelatedParamsInIssueFilters extends BaseDataChange {
       }
       update.setString(1, StringUtils.join(fieldsToKeep, FIELD_SEPARATOR));
       update.setDate(2, now);
-      update.setLong(3, row.getLong(1));
+      update.setLong(3, row.getNullableLong(1));
       return true;
     }
   }
index 28fe41810ff78ab4ebb4854c3360a598d31d94f6..751926fb06b59d29b8fb1bdb38b46d8b871fe24b 100644 (file)
@@ -22,9 +22,11 @@ package org.sonar.server.db.migrations.v51;
 
 import org.apache.commons.lang.StringUtils;
 import org.sonar.core.persistence.Database;
-import org.sonar.server.db.migrations.*;
+import org.sonar.server.db.migrations.BaseDataChange;
+import org.sonar.server.db.migrations.MassUpdate;
 import org.sonar.server.db.migrations.MassUpdate.Handler;
 import org.sonar.server.db.migrations.Select.Row;
+import org.sonar.server.db.migrations.SqlStatement;
 
 import javax.annotation.Nullable;
 
@@ -53,11 +55,11 @@ public class UpdateProjectsModuleUuidPath extends BaseDataChange {
   private static final class ModuleUuidPathUpdateHandler implements Handler {
     @Override
     public boolean handle(Row row, SqlStatement update) throws SQLException {
-      Long id = row.getLong(1);
-      String moduleUuidPath = row.getString(2);
-      String uuid = row.getString(3);
-      String scope = row.getString(4);
-      String qualifier = row.getString(5);
+      Long id = row.getNullableLong(1);
+      String moduleUuidPath = row.getNullableString(2);
+      String uuid = row.getNullableString(3);
+      String scope = row.getNullableString(4);
+      String qualifier = row.getNullableString(5);
 
       boolean needUpdate = false;
       String newModuleUuidPath = moduleUuidPath;
index 09a5c0a11c44127c2bafb2d798ab0b35e282e70c..cb156004ef643b37110de5c512bf71912cf45e7e 100644 (file)
@@ -134,7 +134,7 @@ public class BaseDataChangeTest extends AbstractDaoTestCase {
         context.prepareSelect("select id from persons order by id desc").scroll(new Select.RowHandler() {
           @Override
           public void handle(Select.Row row) throws SQLException {
-            ids.add(row.getLong(1));
+            ids.add(row.getNullableLong(1));
           }
         });
       }
@@ -252,7 +252,7 @@ public class BaseDataChangeTest extends AbstractDaoTestCase {
         context.prepareSelect("select id from persons").scroll(new Select.RowHandler() {
           @Override
           public void handle(Select.Row row) throws SQLException {
-            long id = row.getLong(1);
+            long id = row.getNullableLong(1);
             upsert.setString(1, "login" + id).setInt(2, 10 + (int) id).setLong(3, id);
             upsert.execute();
           }
@@ -277,7 +277,7 @@ public class BaseDataChangeTest extends AbstractDaoTestCase {
         massUpdate.execute(new MassUpdate.Handler() {
           @Override
           public boolean handle(Select.Row row, SqlStatement update) throws SQLException {
-            long id = row.getLong(1);
+            long id = row.getNullableLong(1);
             update
               .setString(1, "login" + id)
               .setInt(2, 10 + (int) id)
@@ -339,17 +339,52 @@ public class BaseDataChangeTest extends AbstractDaoTestCase {
     }
   }
 
+  @Test
+  public void read_not_null_fields() throws Exception {
+    db.prepareDbUnit(getClass(), "persons.xml");
+
+    final List<Object[]> persons = new ArrayList<Object[]>();
+    new BaseDataChange(db.database()) {
+      @Override
+      public void execute(Context context) throws SQLException {
+        persons.addAll(context
+          .prepareSelect("select id,login,age,enabled,updated_at,coeff from persons where id=2")
+          .list(new Select.RowReader<Object[]>() {
+            @Override
+            public Object[] read(Select.Row row) throws SQLException {
+              return new Object[] {
+                // id, login, age, enabled
+                row.getLong(1),
+                row.getString(2),
+                row.getInt(3),
+                row.getBoolean(4),
+                row.getDate(5),
+                row.getDouble(6),
+              };
+            }
+          }));
+      }
+    }.execute();
+    assertThat(persons).hasSize(1);
+    assertThat(persons.get(0)[0]).isEqualTo(2L);
+    assertThat(persons.get(0)[1]).isEqualTo("emmerik");
+    assertThat(persons.get(0)[2]).isEqualTo(14);
+    assertThat(persons.get(0)[3]).isEqualTo(true);
+    assertThat(persons.get(0)[4]).isNotNull();
+    assertThat(persons.get(0)[5]).isEqualTo(5.2);
+  }
+
   static class UserReader implements Select.RowReader<Object[]> {
     @Override
     public Object[] read(Select.Row row) throws SQLException {
-      return new Object[]{
+      return new Object[] {
         // id, login, age, enabled
-        row.getLong(1),
-        row.getString(2),
-        row.getInt(3),
-        row.getBoolean(4),
-        row.getDate(5),
-        row.getDouble(6),
+        row.getNullableLong(1),
+        row.getNullableString(2),
+        row.getNullableInt(3),
+        row.getNullableBoolean(4),
+        row.getNullableDate(5),
+        row.getNullableDouble(6),
       };
     }
   }