class MeasureFilterSort {
public static enum Field {
- KEY, NAME, VERSION, LANGUAGE, METRIC, SHORT_NAME, DESCRIPTION,
+ KEY, NAME, VERSION, METRIC, SHORT_NAME, DESCRIPTION,
// Sort by last analysis date
DATE,
// Sort by project creation date
case VERSION:
column = "s.version";
break;
- case LANGUAGE:
- column = "p.language";
- break;
case DATE:
column = "s.created_at";
break;
*/
public class DatabaseVersion implements BatchComponent, ServerComponent {
- public static final int LAST_VERSION = 533;
+ public static final int LAST_VERSION = 534;
public static enum Status {
UP_TO_DATE, REQUIRES_UPGRADE, REQUIRES_DOWNGRADE, FRESH_INSTALL
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('531');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('532');
INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('533');
+INSERT INTO SCHEMA_MIGRATIONS(VERSION) VALUES ('534');
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;
measure_filter.col.date=Last Analysis
measure_filter.col.description=Description
measure_filter.col.key=Key
-measure_filter.col.language=Language
measure_filter.col.links=Links
measure_filter.col.name=Name
measure_filter.col.short_name=Short Name
measure_filter.abbr.date=Last Analysis
measure_filter.abbr.description=Description
measure_filter.abbr.key=Key
-measure_filter.abbr.language=Lang.
measure_filter.abbr.links=Links
measure_filter.abbr.name=Name
measure_filter.abbr.short_name=Name
@Test
public void projects_without_measure_conditions() throws SQLException {
db.prepareDbUnit(getClass(), "shared.xml");
- MeasureFilter filter = new MeasureFilter().setResourceQualifiers(Arrays.asList("TRK")).setSortOn(MeasureFilterSort.Field.LANGUAGE);
+ MeasureFilter filter = new MeasureFilter().setResourceQualifiers(Arrays.asList("TRK")).setSortOn(MeasureFilterSort.Field.DATE);
List<MeasureFilterRow> rows = executor.execute(filter, new MeasureFilterContext());
assertThat(rows).hasSize(2);
<!-- java project -->
<projects kee="java_project:org.sonar.bar" long_name="org.sonar.bar" scope="FIL" qualifier="CLA" name="org.sonar.bar"
id="1" root_id="[null]"
- description="[null]" enabled="[true]" language="java" copy_resource_id="[null]" person_id="[null]"
+ description="[null]" enabled="[true]" language="[null]" copy_resource_id="[null]" person_id="[null]"
created_at="2008-12-19 00:00:00.00"/>
<projects kee="java_project:org.sonar.foo" scope="FIL" qualifier="CLA" long_name="org.sonar.foo" name="org.sonar.foo"
<projects kee="java_project" long_name="Java project" scope="PRJ" qualifier="TRK" name="Java project"
id="1" root_id="[null]"
- description="[null]" enabled="[true]" language="java" copy_resource_id="[null]" person_id="[null]"/>
+ description="[null]" enabled="[true]" language="[null]" copy_resource_id="[null]" person_id="[null]"/>
<snapshots id="101" project_id="1" root_project_id="1" root_snapshot_id="[null]" parent_snapshot_id="[null]"
scope="PRJ" qualifier="TRK" path="" depth="0"
RULE_ID="[null]" text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]"
alert_status="[null]" description="[null]" characteristic_id="[null]"/>
-</dataset>
\ No newline at end of file
+</dataset>
<projects kee="java_project" long_name="Java project" scope="PRJ" qualifier="TRK" name="Java project"
id="1" root_id="[null]"
- description="[null]" enabled="[true]" language="java" copy_resource_id="[null]" person_id="[null]"/>
+ description="[null]" enabled="[true]" language="[null]" copy_resource_id="[null]" person_id="[null]"/>
<snapshots id="101" project_id="1" root_project_id="1" root_snapshot_id="[null]" parent_snapshot_id="[null]"
scope="PRJ" qualifier="TRK" path="" depth="0"
RULE_ID="[null]" text_value="[null]" tendency="[null]" measure_date="[null]" project_id="[null]"
alert_status="[null]" description="[null]" person_id="[null]"/>
-</dataset>
\ No newline at end of file
+</dataset>
<!-- java project -->
<projects kee="java_project" long_name="Java project" scope="PRJ" qualifier="TRK" name="Java project"
id="1" root_id="[null]"
- description="[null]" enabled="[true]" language="java" copy_resource_id="[null]" person_id="[null]"
+ description="[null]" enabled="[true]" language="[null]" copy_resource_id="[null]" person_id="[null]"
created_at="2008-12-19 00:00:00.00"/>
<projects kee="java_project:org.sonar.foo" scope="DIR" qualifier="PAC" long_name="org.sonar.foo" name="org.sonar.foo"
id="2" root_id="1"
- description="[null]" enabled="[true]" language="java" copy_resource_id="[null]" person_id="[null]"
+ description="[null]" enabled="[true]" language="[null]" copy_resource_id="[null]" person_id="[null]"
created_at="2008-12-19 00:00:00.00"/>
<projects kee="java_project:org.sonar.foo.Big" scope="FIL" qualifier="CLA" long_name="org.sonar.foo.Big"
<!-- php project -->
<projects kee="php_project" long_name="PHP project" scope="PRJ" qualifier="TRK" name="PHP project"
id="10" root_id="[null]"
- description="[null]" enabled="[true]" language="php" copy_resource_id="[null]" person_id="[null]"
+ description="[null]" enabled="[true]" language="[null]" copy_resource_id="[null]" person_id="[null]"
created_at="2012-12-12 04:06:00.00"/>
<properties id="3" prop_key="favourite" resource_id="1" text_value="[null]" user_id="1234"/>
<properties id="4" prop_key="sonar.profile" resource_id="1" text_value="Sonar way" user_id="[null]"/>
-</dataset>
\ No newline at end of file
+</dataset>
<!-- java project -->
<projects kee="java_project" long_name="Java project" scope="PRJ" qualifier="TRK" name="Java project"
id="1" root_id="[null]"
- description="[null]" enabled="[true]" language="java" copy_resource_id="[null]" person_id="[null]"
+ description="[null]" enabled="[true]" language="[null]" copy_resource_id="[null]" person_id="[null]"
created_at="2008-12-19 00:00:00.00"/>
<snapshots id="101" project_id="1" root_project_id="1" root_snapshot_id="[null]" parent_snapshot_id="[null]"
<!-- php project -->
<projects kee="php_project" long_name="PHP project" scope="PRJ" qualifier="TRK" name="PHP project"
id="10" root_id="[null]"
- description="[null]" enabled="[true]" language="php" copy_resource_id="[null]" person_id="[null]"
+ description="[null]" enabled="[true]" language="[null]" copy_resource_id="[null]" person_id="[null]"
created_at="2012-12-12 04:06:00.00"/>
<!-- js project -->
<projects kee="js_project" long_name="JS project" scope="PRJ" qualifier="TRK" name="JS project"
id="20" root_id="[null]"
- description="[null]" enabled="[true]" language="js" copy_resource_id="[null]" person_id="[null]"
+ description="[null]" enabled="[true]" language="[null]" copy_resource_id="[null]" person_id="[null]"
created_at="2012-12-12 04:06:00.00"/>
alert_status="[null]" description="[null]" characteristic_id="[null]"/>
-</dataset>
\ No newline at end of file
+</dataset>
@criteria = self.data.split(CRITERIA_SEPARATOR).inject(HashWithIndifferentAccess.new) do |h, s|
k, v=s.split('=')
if k && v
- v=v.split(CRITERIA_KEY_VALUE_SEPARATOR) if v.include?(CRITERIA_KEY_VALUE_SEPARATOR)
+ # Empty values are removed
+ v=v.split(CRITERIA_KEY_VALUE_SEPARATOR).select{|v| !v.empty?} if v.include?(CRITERIA_KEY_VALUE_SEPARATOR)
h[k]=v
end
h
[message('measure_filter.col.name'), 'name'],
[message('measure_filter.col.short_name'), 'short_name'],
[message('measure_filter.col.description'), 'description'],
- [message('measure_filter.col.language'), 'language'],
[message('measure_filter.col.version'), 'version'],
[message('measure_filter.col.date'), 'date'],
[message('measure_filter.col.project_creation_date'), 'project_creation_date'],
--- /dev/null
+#
+# SonarQube, open source software quality management tool.
+# Copyright (C) 2008-2014 SonarSource
+# mailto:contact AT sonarsource DOT com
+#
+# SonarQube 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.
+#
+# SonarQube 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 this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+#
+# SonarQube 4.4
+# SONAR-5221
+#
+class UpdateMeasureFiltersOnLanguage < ActiveRecord::Migration
+
+ class MeasureFilter < ActiveRecord::Base
+ end
+
+ def self.up
+ MeasureFilter.all(:conditions => "data LIKE '%language%'").each do |filter|
+ # Remove sort on language
+ filter.data = filter.data.sub('sort=language', '')
+
+ filter.data.scan(/cols=((.+?)(\||\z))?/) do |find|
+ cols_data = find[0]
+ # Remove display of language column
+ filter.data = filter.data.sub(cols_data, cols_data.gsub(/language/, ''))
+ end
+ filter.save!
+ end
+ end
+
+end