]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3352 Fix issue linked to nullable boolean columns
authorFabrice Bellingard <bellingard@gmail.com>
Mon, 26 Mar 2012 15:47:26 +0000 (17:47 +0200)
committerFabrice Bellingard <bellingard@gmail.com>
Mon, 26 Mar 2012 15:49:24 +0000 (17:49 +0200)
sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java
sonar-core/src/main/java/org/sonar/core/review/ReviewDto.java
sonar-core/src/main/resources/org/sonar/core/persistence/rows-derby.sql
sonar-core/src/test/java/org/sonar/core/review/ReviewDaoTest.java
sonar-core/src/test/resources/org/sonar/core/review/ReviewDaoTest/update_null_manual_severity_and_violation-result.xml [new file with mode: 0644]
sonar-core/src/test/resources/org/sonar/core/review/ReviewDaoTest/update_null_manual_severity_and_violation.xml [new file with mode: 0644]
sonar-server/src/main/webapp/WEB-INF/db/migrate/281_clean_reviews_with_null_booleans.rb [new file with mode: 0644]

index 260d2e15f57037ab53a9b6b03e6312c1de5be34c..af71db19c517820b94ffd82dc69e9d2c3efc9c36 100644 (file)
@@ -32,7 +32,7 @@ import java.util.List;
  */
 public class DatabaseVersion implements BatchComponent, ServerComponent {
 
-  public static final int LAST_VERSION = 280;
+  public static final int LAST_VERSION = 281;
 
   public static enum Status {
     UP_TO_DATE, REQUIRES_UPGRADE, REQUIRES_DOWNGRADE, FRESH_INSTALL
index b8bd91de2d7d96005c42799e8343865f049574c8..9cebf37201e79ef7d748b572a21b171890a76b3a 100644 (file)
@@ -52,8 +52,8 @@ public final class ReviewDto {
   private Date updatedAt;
   private String severity;
   private Integer ruleId;
-  private Boolean manualViolation;
-  private Boolean manualSeverity;
+  private boolean manualViolation;
+  private boolean manualSeverity;
   private Integer actionPlanId;
 
   public Long getId() {
@@ -182,30 +182,30 @@ public final class ReviewDto {
     return this;
   }
 
-  public Boolean getManualViolation() {
+  public boolean getManualViolation() {
     return manualViolation;
   }
 
   public boolean isManualViolation() {
-    return manualViolation == Boolean.TRUE;
+    return manualViolation == true;
   }
 
-  public ReviewDto setManualViolation(@Nullable Boolean b) {
+  public ReviewDto setManualViolation(boolean b) {
     this.manualViolation = b;
     return this;
   }
 
-  public Boolean getManualSeverity() {
+  public boolean getManualSeverity() {
     return manualSeverity;
   }
 
-  public ReviewDto setManualSeverity(@Nullable Boolean b) {
+  public ReviewDto setManualSeverity(boolean b) {
     this.manualSeverity = b;
     return this;
   }
 
   public boolean isManualSeverity() {
-    return manualSeverity == Boolean.TRUE;
+    return manualSeverity == true;
   }
 
   public Integer getActionPlanId() {
index f84b7198f8e2cc821e97bf2485ca3cc3a61397c3..01697d00a17bdf4008de7a779c4c31ce1cdb0f9f 100644 (file)
@@ -180,6 +180,7 @@ INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('261');
 INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('262');
 INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('263');
 INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('280');
+INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('281');
 
 INSERT INTO USERS(ID, LOGIN, NAME, EMAIL, CRYPTED_PASSWORD, SALT, CREATED_AT, UPDATED_AT, REMEMBER_TOKEN, REMEMBER_TOKEN_EXPIRES_AT) VALUES (1, 'admin', 'Administrator', '', 'a373a0e667abb2604c1fd571eb4ad47fe8cc0878', '48bc4b0d93179b5103fd3885ea9119498e9d161b', '2011-09-26 22:27:48.0', '2011-09-26 22:27:48.0', null, null);
 ALTER TABLE USERS ALTER COLUMN ID RESTART WITH 2;
index 155ba0f3d7661e2622a4548c21fe4e9f098642ee..1c5f62fd852f5ee0c07110e4bd408e60310ae262 100644 (file)
@@ -98,4 +98,16 @@ public class ReviewDaoTest extends DaoTestCase {
 
     checkTables("update", "reviews");
   }
+
+  @Test
+  public void updateWithNullManualSeverityAndViolation() {
+    setupData("update_null_manual_severity_and_violation");
+    Collection<ReviewDto> reviews = dao.selectOpenByResourceId(400L);
+    ReviewDto review = reviews.iterator().next();
+    review.setLine(12345);
+
+    dao.update(reviews);
+
+    checkTables("update_null_manual_severity_and_violation", "reviews");
+  }
 }
diff --git a/sonar-core/src/test/resources/org/sonar/core/review/ReviewDaoTest/update_null_manual_severity_and_violation-result.xml b/sonar-core/src/test/resources/org/sonar/core/review/ReviewDaoTest/update_null_manual_severity_and_violation-result.xml
new file mode 100644 (file)
index 0000000..f923170
--- /dev/null
@@ -0,0 +1,21 @@
+<dataset>
+
+  <reviews
+    id="100"
+    status="OPEN"
+    rule_failure_permanent_id="100"
+    resolution="RESOLVE"
+    created_at="[null]"
+    updated_at="[null]"
+    project_id="20"
+    resource_line="12345"
+    severity="BLOCKER"
+    user_id="300"
+    assignee_id="[null]"
+    title="[null]"
+    resource_id="400"
+    rule_id="500"
+    manual_violation="[false]"
+    manual_severity="[false]"/>
+
+</dataset>
diff --git a/sonar-core/src/test/resources/org/sonar/core/review/ReviewDaoTest/update_null_manual_severity_and_violation.xml b/sonar-core/src/test/resources/org/sonar/core/review/ReviewDaoTest/update_null_manual_severity_and_violation.xml
new file mode 100644 (file)
index 0000000..f9445f7
--- /dev/null
@@ -0,0 +1,21 @@
+<dataset>
+
+  <reviews
+    id="100"
+    status="OPEN"
+    rule_failure_permanent_id="100"
+    resolution="RESOLVE"
+    created_at="[null]"
+    updated_at="[null]"
+    project_id="20"
+    resource_line="200"
+    severity="BLOCKER"
+    user_id="300"
+    assignee_id="[null]"
+    title="[null]"
+    resource_id="400"
+    rule_id="500"
+    manual_violation="[null]"
+    manual_severity="[null]"/>
+
+</dataset>
diff --git a/sonar-server/src/main/webapp/WEB-INF/db/migrate/281_clean_reviews_with_null_booleans.rb b/sonar-server/src/main/webapp/WEB-INF/db/migrate/281_clean_reviews_with_null_booleans.rb
new file mode 100644 (file)
index 0000000..1f7dac4
--- /dev/null
@@ -0,0 +1,35 @@
+#
+# Sonar, entreprise quality control tool.
+# Copyright (C) 2008-2012 SonarSource
+# mailto:contact AT sonarsource DOT com
+#
+# Sonar is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 3 of the License, or (at your option) any later version.
+#
+# Sonar is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with Sonar; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+#
+
+#
+# Sonar 2.15
+#
+class CleanReviewsWithNullBooleans < ActiveRecord::Migration
+
+  class Review < ActiveRecord::Base
+  end
+  
+  def self.up
+    Review.reset_column_information
+    Review.update_all(Review.sanitize_sql_for_assignment({:manual_violation => false}), "manual_violation IS null")
+    Review.update_all(Review.sanitize_sql_for_assignment({:manual_severity => false}), "manual_severity IS null")
+  end
+
+end