From e93d3eb4d95d89051eb9ea6f6ab6b8f2f6751487 Mon Sep 17 00:00:00 2001 From: Fabrice Bellingard Date: Mon, 26 Mar 2012 17:47:26 +0200 Subject: [PATCH] SONAR-3352 Fix issue linked to nullable boolean columns --- .../core/persistence/DatabaseVersion.java | 2 +- .../java/org/sonar/core/review/ReviewDto.java | 16 ++++----- .../org/sonar/core/persistence/rows-derby.sql | 1 + .../org/sonar/core/review/ReviewDaoTest.java | 12 +++++++ ...l_manual_severity_and_violation-result.xml | 21 +++++++++++ ...ate_null_manual_severity_and_violation.xml | 21 +++++++++++ .../281_clean_reviews_with_null_booleans.rb | 35 +++++++++++++++++++ 7 files changed, 99 insertions(+), 9 deletions(-) create mode 100644 sonar-core/src/test/resources/org/sonar/core/review/ReviewDaoTest/update_null_manual_severity_and_violation-result.xml create mode 100644 sonar-core/src/test/resources/org/sonar/core/review/ReviewDaoTest/update_null_manual_severity_and_violation.xml create mode 100644 sonar-server/src/main/webapp/WEB-INF/db/migrate/281_clean_reviews_with_null_booleans.rb diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java index 260d2e15f57..af71db19c51 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/DatabaseVersion.java @@ -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 diff --git a/sonar-core/src/main/java/org/sonar/core/review/ReviewDto.java b/sonar-core/src/main/java/org/sonar/core/review/ReviewDto.java index b8bd91de2d7..9cebf37201e 100644 --- a/sonar-core/src/main/java/org/sonar/core/review/ReviewDto.java +++ b/sonar-core/src/main/java/org/sonar/core/review/ReviewDto.java @@ -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() { diff --git a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-derby.sql b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-derby.sql index f84b7198f8e..01697d00a17 100644 --- a/sonar-core/src/main/resources/org/sonar/core/persistence/rows-derby.sql +++ b/sonar-core/src/main/resources/org/sonar/core/persistence/rows-derby.sql @@ -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; diff --git a/sonar-core/src/test/java/org/sonar/core/review/ReviewDaoTest.java b/sonar-core/src/test/java/org/sonar/core/review/ReviewDaoTest.java index 155ba0f3d76..1c5f62fd852 100644 --- a/sonar-core/src/test/java/org/sonar/core/review/ReviewDaoTest.java +++ b/sonar-core/src/test/java/org/sonar/core/review/ReviewDaoTest.java @@ -98,4 +98,16 @@ public class ReviewDaoTest extends DaoTestCase { checkTables("update", "reviews"); } + + @Test + public void updateWithNullManualSeverityAndViolation() { + setupData("update_null_manual_severity_and_violation"); + Collection 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 index 00000000000..f9231700484 --- /dev/null +++ b/sonar-core/src/test/resources/org/sonar/core/review/ReviewDaoTest/update_null_manual_severity_and_violation-result.xml @@ -0,0 +1,21 @@ + + + + + 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 index 00000000000..f9445f75b91 --- /dev/null +++ b/sonar-core/src/test/resources/org/sonar/core/review/ReviewDaoTest/update_null_manual_severity_and_violation.xml @@ -0,0 +1,21 @@ + + + + + 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 index 00000000000..1f7dac497e0 --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/db/migrate/281_clean_reviews_with_null_booleans.rb @@ -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 -- 2.39.5