瀏覽代碼

Revert "SONAR-7704 Change type of components.created_at to bigint"

This reverts commit 020582bd
tags/10.2.0.77647
Eric Giffon 10 月之前
父節點
當前提交
b7cbd373bb
共有 29 個文件被更改,包括 48 次插入617 次删除
  1. 4
    4
      server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ReportPersistComponentsStepIT.java
  2. 4
    3
      server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepIT.java
  3. 1
    1
      server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/branches/ExportBranchesStepIT.java
  4. 3
    2
      server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/component/ExportComponentsStepIT.java
  5. 1
    1
      server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/rule/ExportAdHocRulesStepIT.java
  6. 2
    2
      server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportNewCodePeriodsStepIT.java
  7. 2
    1
      server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStep.java
  8. 9
    8
      server/sonar-db-dao/src/it/java/org/sonar/db/component/ComponentDaoIT.java
  9. 5
    4
      server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentDto.java
  10. 5
    4
      server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentQuery.java
  11. 2
    2
      server/sonar-db-dao/src/main/resources/org/sonar/db/component/ComponentMapper.xml
  12. 1
    1
      server/sonar-db-dao/src/schema/schema-sq.ddl
  13. 2
    2
      server/sonar-db-dao/src/test/java/org/sonar/db/component/ComponentQueryTest.java
  14. 2
    2
      server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentTesting.java
  15. 0
    52
      server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/AddCreatedAtTempInComponents.java
  16. 2
    4
      server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/DbVersion102.java
  17. 0
    33
      server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/DropCreatedAtInComponents.java
  18. 0
    79
      server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/PopulateCreatedAtTempInComponents.java
  19. 0
    34
      server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/RenameCreatedAtTempInComponents.java
  20. 0
    52
      server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/AddCreatedAtTempInComponentsTest.java
  21. 0
    52
      server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/DropCreatedAtInComponentsTest.java
  22. 0
    81
      server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/PopulateCreatedAtTempInComponentsTest.java
  23. 0
    57
      server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/RenameCreatedAtTempInComponentsTest.java
  24. 0
    33
      server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/AddCreatedAtTempInComponentsTest/schema.sql
  25. 0
    34
      server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/DropCreatedAtInComponentsTest/schema.sql
  26. 0
    34
      server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/PopulateCreatedAtTempInComponentsTest/schema.sql
  27. 0
    33
      server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/RenameCreatedAtTempInComponentsTest/schema.sql
  28. 1
    1
      server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/TreeActionIT.java
  29. 2
    1
      server/sonar-webserver-webapi/src/main/java/org/sonar/server/component/ComponentUpdater.java

+ 4
- 4
server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ReportPersistComponentsStepIT.java 查看文件

@@ -75,14 +75,14 @@ public class ReportPersistComponentsStepIT extends BaseStepTest {

private final System2 system2 = mock(System2.class);
private final DbClient dbClient = db.getDbClient();
private Long now;
private Date now;
private final MutableDisabledComponentsHolder disabledComponentsHolder = mock(MutableDisabledComponentsHolder.class, RETURNS_DEEP_STUBS);
private PersistComponentsStep underTest;

@Before
public void setup() throws Exception {
now = DATE_FORMAT.parse("2015-06-02").getTime();
when(system2.now()).thenReturn(now);
now = DATE_FORMAT.parse("2015-06-02");
when(system2.now()).thenReturn(now.getTime());

BranchPersister branchPersister = mock(BranchPersister.class);
ProjectPersister projectPersister = mock(ProjectPersister.class);
@@ -365,7 +365,7 @@ public class ReportPersistComponentsStepIT extends BaseStepTest {
@Test
public void do_not_update_created_at_on_existing_component() {
Date oldDate = DateUtils.parseDate("2015-01-01");
ComponentDto project = prepareProject(p -> p.setCreatedAt(oldDate.getTime()));
ComponentDto project = prepareProject(p -> p.setCreatedAt(oldDate));
db.getSession().commit();

treeRootHolder.setRoot(

+ 4
- 3
server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepIT.java 查看文件

@@ -20,6 +20,7 @@
package org.sonar.ce.task.projectanalysis.step;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.stream.Stream;
import javax.annotation.Nullable;
@@ -87,14 +88,14 @@ public class ViewsPersistComponentsStepIT extends BaseStepTest {

private final System2 system2 = mock(System2.class);
private final DbClient dbClient = dbTester.getDbClient();
private Long now;
private Date now;
private final MutableDisabledComponentsHolder disabledComponentsHolder = mock(MutableDisabledComponentsHolder.class, RETURNS_DEEP_STUBS);
private PersistComponentsStep underTest;

@Before
public void setup() throws Exception {
now = DATE_FORMAT.parse("2015-06-02").getTime();
when(system2.now()).thenReturn(now);
now = DATE_FORMAT.parse("2015-06-02");
when(system2.now()).thenReturn(now.getTime());

analysisMetadataHolder.setBranch(new DefaultBranchImpl(DEFAULT_MAIN_BRANCH_NAME));
BranchPersister branchPersister = mock(BranchPersister.class);

+ 1
- 1
server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/branches/ExportBranchesStepIT.java 查看文件

@@ -98,7 +98,7 @@ public class ExportBranchesStepIT {
ProjectData projectData = dbTester.components().insertPublicProject(PROJECT_UUID);
for (BranchDto branch : branches) {
createdAt = DateUtils.addMinutes(createdAt, 10);
dbTester.components().insertProjectBranch(projectData.getProjectDto(), branch).setCreatedAt(createdAt.getTime());
dbTester.components().insertProjectBranch(projectData.getProjectDto(), branch).setCreatedAt(createdAt);
}
dbTester.commit();
when(projectHolder.projectDto()).thenReturn(projectData.getProjectDto());

+ 3
- 2
server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/component/ExportComponentsStepIT.java 查看文件

@@ -21,6 +21,7 @@ package org.sonar.ce.task.projectexport.component;

import com.google.common.collect.ImmutableSet;
import com.sonarsource.governance.projectdump.protobuf.ProjectDump;
import java.util.Date;
import java.util.List;
import org.junit.After;
import org.junit.Before;
@@ -59,7 +60,7 @@ public class ExportComponentsStepIT {
.setEnabled(true)
.setUuid(PROJECT_UUID)
.setUuidPath(UUID_PATH_OF_ROOT)
.setCreatedAt(1596749115856L)
.setCreatedAt(new Date(1596749115856L))
.setBranchUuid(PROJECT_UUID);

private static final String FILE_UUID = "FILE_UUID";
@@ -73,7 +74,7 @@ public class ExportComponentsStepIT {
.setUuid(FILE_UUID)
.setUuidPath(FILE_UUID_PATH)
.setEnabled(true)
.setCreatedAt(1596749148406L)
.setCreatedAt(new Date(1596749148406L))
.setBranchUuid(PROJECT_UUID);

@Rule

+ 1
- 1
server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/rule/ExportAdHocRulesStepIT.java 查看文件

@@ -185,7 +185,7 @@ public class ExportAdHocRulesStepIT {
Date createdAt = new Date();
ProjectData projectData = dbTester.components().insertPublicProject(PROJECT_UUID);
mainBranch = projectData.getMainBranchComponent();
BRANCHES.forEach(branch -> dbTester.components().insertProjectBranch(projectData.getProjectDto(), branch).setCreatedAt(createdAt.getTime()));
BRANCHES.forEach(branch -> dbTester.components().insertProjectBranch(projectData.getProjectDto(), branch).setCreatedAt(createdAt));
dbTester.commit();
return projectData.getProjectDto();
}

+ 2
- 2
server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectexport/steps/ExportNewCodePeriodsStepIT.java 查看文件

@@ -86,10 +86,10 @@ public class ExportNewCodePeriodsStepIT {
logTester.setLevel(Level.DEBUG);
Date createdAt = new Date();
project = dbTester.components().insertPrivateProject(PROJECT_UUID).getProjectDto();
PROJECT_BRANCHES.forEach(branch -> dbTester.components().insertProjectBranch(project, branch).setCreatedAt(createdAt.getTime()));
PROJECT_BRANCHES.forEach(branch -> dbTester.components().insertProjectBranch(project, branch).setCreatedAt(createdAt));

ComponentDto anotherProjectDto = dbTester.components().insertPublicProject(ANOTHER_PROJECT).getMainBranchComponent();
ANOTHER_PROJECT_BRANCHES.forEach(branch -> dbTester.components().insertProjectBranch(anotherProjectDto, branch).setCreatedAt(createdAt.getTime()));
ANOTHER_PROJECT_BRANCHES.forEach(branch -> dbTester.components().insertProjectBranch(anotherProjectDto, branch).setCreatedAt(createdAt));

dbTester.commit();
projectHolder.setProjectDto(project);

+ 2
- 1
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/step/PersistComponentsStep.java 查看文件

@@ -20,6 +20,7 @@
package org.sonar.ce.task.projectanalysis.step;

import java.util.Collection;
import java.util.Date;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
@@ -330,7 +331,7 @@ public class PersistComponentsStep implements ComputationStep {
componentDto.setUuid(componentUuid);
componentDto.setKey(componentKey);
componentDto.setEnabled(true);
componentDto.setCreatedAt(system2.now());
componentDto.setCreatedAt(new Date(system2.now()));

return componentDto;
}

+ 9
- 8
server/sonar-db-dao/src/it/java/org/sonar/db/component/ComponentDaoIT.java 查看文件

@@ -24,6 +24,7 @@ import com.tngtech.java.junit.dataprovider.DataProviderRunner;
import com.tngtech.java.junit.dataprovider.UseDataProvider;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -986,9 +987,9 @@ public class ComponentDaoIT {

@Test
public void selectByQuery_verify_order() {
Long firstDate = system2.now();
Long secondDate = system2.now();
Long thirdDate = system2.now();
Date firstDate = new Date(system2.now());
Date secondDate = new Date(system2.now());
Date thirdDate = new Date(system2.now());

ComponentDto project3 = db.components().insertPrivateProject(componentDto -> componentDto.setName("project3").setCreatedAt(thirdDate)).getMainBranchComponent();
ComponentDto project1 = db.components().insertPrivateProject(componentDto -> componentDto.setName("project1").setCreatedAt(firstDate)).getMainBranchComponent();
@@ -1363,15 +1364,15 @@ public class ComponentDaoIT {

@Test
public void selectByQuery_filter_created_at() {
ComponentDto project1 = db.components().insertPrivateProject(p -> p.setCreatedAt(parseDate("2018-02-01").getTime())).getMainBranchComponent();
ComponentDto project2 = db.components().insertPrivateProject(p -> p.setCreatedAt(parseDate("2018-06-01").getTime())).getMainBranchComponent();
ComponentDto project1 = db.components().insertPrivateProject(p -> p.setCreatedAt(parseDate("2018-02-01"))).getMainBranchComponent();
ComponentDto project2 = db.components().insertPrivateProject(p -> p.setCreatedAt(parseDate("2018-06-01"))).getMainBranchComponent();

assertThat(selectProjectUuidsByQuery(q -> q.setCreatedAfter(parseDate("2017-12-01").getTime())))
assertThat(selectProjectUuidsByQuery(q -> q.setCreatedAfter(parseDate("2017-12-01"))))
.containsExactlyInAnyOrder(project1.uuid(), project2.uuid());
assertThat(selectProjectUuidsByQuery(q -> q.setCreatedAfter(parseDate("2018-02-20").getTime())))
assertThat(selectProjectUuidsByQuery(q -> q.setCreatedAfter(parseDate("2018-02-20"))))
.containsExactlyInAnyOrder(project2.uuid());

assertThat(selectProjectUuidsByQuery(q -> q.setCreatedAfter(parseDate("2019-01-01").getTime())))
assertThat(selectProjectUuidsByQuery(q -> q.setCreatedAfter(parseDate("2019-01-01"))))
.isEmpty();
}


+ 5
- 4
server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentDto.java 查看文件

@@ -21,6 +21,7 @@ package org.sonar.db.component;

import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.annotation.CheckForNull;
@@ -97,7 +98,7 @@ public class ComponentDto {
private boolean enabled = true;
private boolean isPrivate = false;

private Long createdAt;
private Date createdAt;

public static String formatUuidPathFromParent(ComponentDto parent) {
checkArgument(!Strings.isNullOrEmpty(parent.getUuidPath()));
@@ -244,12 +245,12 @@ public class ComponentDto {
return this;
}

public Long getCreatedAt() {
public Date getCreatedAt() {
return createdAt;
}

public ComponentDto setCreatedAt(Long createdAt) {
this.createdAt = createdAt;
public ComponentDto setCreatedAt(Date datetime) {
this.createdAt = datetime;
return this;
}


+ 5
- 4
server/sonar-db-dao/src/main/java/org/sonar/db/component/ComponentQuery.java 查看文件

@@ -19,6 +19,7 @@
*/
package org.sonar.db.component;

import java.util.Date;
import java.util.Locale;
import java.util.Set;
import java.util.stream.Stream;
@@ -40,7 +41,7 @@ public class ComponentQuery {
private final Long anyBranchAnalyzedBefore;
private final Long anyBranchAnalyzedAfter;
private final Long allBranchesAnalyzedBefore;
private final Long createdAfter;
private final Date createdAfter;
private final boolean onProvisionedOnly;

private ComponentQuery(Builder builder) {
@@ -118,7 +119,7 @@ public class ComponentQuery {
}

@CheckForNull
public Long getCreatedAfter() {
public Date getCreatedAfter() {
return createdAfter;
}

@@ -146,7 +147,7 @@ public class ComponentQuery {
private Long anyBranchAnalyzedBefore;
private Long anyBranchAnalyzedAfter;
private Long allBranchesAnalyzedBefore;
private Long createdAfter;
private Date createdAfter;
private boolean onProvisionedOnly = false;

public Builder setNameOrKeyQuery(@Nullable String nameOrKeyQuery) {
@@ -207,7 +208,7 @@ public class ComponentQuery {
return this;
}

public Builder setCreatedAfter(@Nullable Long l) {
public Builder setCreatedAfter(@Nullable Date l) {
this.createdAfter = l;
return this;
}

+ 2
- 2
server/sonar-db-dao/src/main/resources/org/sonar/db/component/ComponentMapper.xml 查看文件

@@ -343,7 +343,7 @@
)
</if>
<if test="query.createdAfter != null">
and p.created_at &gt;= #{query.createdAfter,jdbcType=BIGINT}
and p.created_at &gt;= #{query.createdAfter,jdbcType=TIMESTAMP}
</if>
</sql>

@@ -539,7 +539,7 @@
#{path,jdbcType=VARCHAR},
#{copyComponentUuid,jdbcType=VARCHAR},
#{enabled,jdbcType=BOOLEAN},
#{createdAt,jdbcType=BIGINT},
#{createdAt,jdbcType=TIMESTAMP},
${_false},
null,
null,

+ 1
- 1
server/sonar-db-dao/src/schema/schema-sq.ddl 查看文件

@@ -241,7 +241,7 @@ CREATE TABLE "COMPONENTS"(
"B_COPY_COMPONENT_UUID" CHARACTER VARYING(50),
"B_PATH" CHARACTER VARYING(2000),
"B_UUID_PATH" CHARACTER VARYING(1500),
"CREATED_AT" BIGINT
"CREATED_AT" TIMESTAMP
);
CREATE INDEX "PROJECTS_QUALIFIER" ON "COMPONENTS"("QUALIFIER" NULLS FIRST);
CREATE UNIQUE INDEX "COMPONENTS_UUID" ON "COMPONENTS"("UUID" NULLS FIRST);

+ 2
- 2
server/sonar-db-dao/src/test/java/org/sonar/db/component/ComponentQueryTest.java 查看文件

@@ -38,7 +38,7 @@ public class ComponentQueryTest {
.setNameOrKeyQuery("key")
.setAnyBranchAnalyzedBefore(100L)
.setAnyBranchAnalyzedAfter(200L)
.setCreatedAfter(new Date(300L).getTime())
.setCreatedAfter(new Date(300L))
.setQualifiers(PROJECT)
.build();

@@ -46,7 +46,7 @@ public class ComponentQueryTest {
assertThat(underTest.getQualifiers()).containsOnly(PROJECT);
assertThat(underTest.getAnyBranchAnalyzedBefore()).isEqualTo(100L);
assertThat(underTest.getAnyBranchAnalyzedAfter()).isEqualTo(200L);
assertThat(underTest.getCreatedAfter()).isEqualTo(300L);
assertThat(underTest.getCreatedAfter().getTime()).isEqualTo(300L);
assertThat(underTest.isOnProvisionedOnly()).isFalse();
assertThat(underTest.isPartialMatchOnKey()).isFalse();
assertThat(underTest.hasEmptySetOfComponents()).isFalse();

+ 2
- 2
server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentTesting.java 查看文件

@@ -68,7 +68,7 @@ public class ComponentTesting {
.setBranchUuid(branch.branchUuid())
.setQualifier(Qualifiers.FILE)
.setPath(path)
.setCreatedAt(new Date().getTime())
.setCreatedAt(new Date())
.setLanguage("xoo");
}

@@ -214,7 +214,7 @@ public class ComponentTesting {
.setUuidPath(formatUuidPathFromParent(parent))
.setKey(uuid)
.setBranchUuid(branch.branchUuid())
.setCreatedAt(new Date().getTime())
.setCreatedAt(new Date())
.setEnabled(true)
.setPrivate(branch.isPrivate());
}

+ 0
- 52
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/AddCreatedAtTempInComponents.java 查看文件

@@ -1,52 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2023 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program 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.
*
* This program 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.
*/
package org.sonar.server.platform.db.migration.version.v102;

import java.sql.Connection;
import java.sql.SQLException;
import org.sonar.db.Database;
import org.sonar.db.DatabaseUtils;
import org.sonar.server.platform.db.migration.def.BigIntegerColumnDef;
import org.sonar.server.platform.db.migration.def.ColumnDef;
import org.sonar.server.platform.db.migration.sql.AddColumnsBuilder;
import org.sonar.server.platform.db.migration.step.DdlChange;

public class AddCreatedAtTempInComponents extends DdlChange {

private static final String TABLE_NAME = "components";
private static final String COLUMN_NAME = "created_at_temp";

public AddCreatedAtTempInComponents(Database db) {
super(db);
}

@Override
public void execute(Context context) throws SQLException {
try (Connection connection = getDatabase().getDataSource().getConnection()) {
if (!DatabaseUtils.tableColumnExists(connection, TABLE_NAME, COLUMN_NAME)) {
ColumnDef columnDef = BigIntegerColumnDef.newBigIntegerColumnDefBuilder()
.setColumnName(COLUMN_NAME)
.setIsNullable(true)
.build();
context.execute(new AddColumnsBuilder(getDialect(), TABLE_NAME).addColumn(columnDef).build());
}
}
}
}

+ 2
- 4
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/DbVersion102.java 查看文件

@@ -25,6 +25,7 @@ import org.sonar.server.platform.db.migration.version.DbVersion;
// ignoring bad number formatting, as it's indented that we align the migration numbers to SQ versions
@SuppressWarnings("java:S3937")
public class DbVersion102 implements DbVersion {

/**
* We use the start of the 10.X cycle as an opportunity to align migration numbers with the SQ version number.
* Please follow this pattern:
@@ -77,10 +78,7 @@ public class DbVersion102 implements DbVersion {

.add(10_2_025, "Rename 'build_date' in 'snapshots' table to 'analysis_date", RenameBuildDateInSnapshots.class)

.add(10_2_026, "Add column 'created_at_temp' in 'components' table", AddCreatedAtTempInComponents.class)
.add(10_2_027, "Populate column 'created_at_temp' in 'components' table", PopulateCreatedAtTempInComponents.class)
.add(10_2_028, "Drop column 'created_at' in 'components' table", DropCreatedAtInComponents.class)
.add(10_2_029, "Rename column 'created_at_temp' to 'created_at' in 'components' table", RenameCreatedAtTempInComponents.class)
// Versions 10_2_026 to 10_2_029 were used by a migration that has been rolled back. See SONAR-7704

.add(10_2_030, "Create table 'anticipated_transitions'", CreateAnticipatedTransitionsTable.class)


+ 0
- 33
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/DropCreatedAtInComponents.java 查看文件

@@ -1,33 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2023 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program 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.
*
* This program 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.
*/
package org.sonar.server.platform.db.migration.version.v102;

import org.sonar.db.Database;
import org.sonar.server.platform.db.migration.step.DropColumnChange;

class DropCreatedAtInComponents extends DropColumnChange {

static final String TABLE_NAME = "components";
static final String COLUMN_NAME = "created_at";

public DropCreatedAtInComponents(Database db) {
super(db, TABLE_NAME, COLUMN_NAME);
}
}

+ 0
- 79
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/PopulateCreatedAtTempInComponents.java 查看文件

@@ -1,79 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2023 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program 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.
*
* This program 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.
*/
package org.sonar.server.platform.db.migration.version.v102;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;
import org.sonar.db.ColumnMetadata;
import org.sonar.db.Database;
import org.sonar.db.DatabaseUtils;
import org.sonar.db.dialect.Oracle;
import org.sonar.server.platform.db.migration.step.DataChange;
import org.sonar.server.platform.db.migration.step.MassUpdate;

public class PopulateCreatedAtTempInComponents extends DataChange {

private static final String SELECT_QUERY = """
SELECT uuid, created_at
FROM components
WHERE created_at_temp is null
""";

private static final String UPDATE_QUERY = """
UPDATE components
SET created_at_temp=?
WHERE uuid=?
""";

public PopulateCreatedAtTempInComponents(Database db) {
super(db);
}

@Override
protected void execute(Context context) throws SQLException {
boolean columnAlreadyHasNewType = columnAlreadyHasNewType();

MassUpdate massUpdate = context.prepareMassUpdate();
massUpdate.select(SELECT_QUERY);
massUpdate.update(UPDATE_QUERY);

massUpdate.execute((row, update, index) -> {
String componentUuid = row.getString(1);
Long createdAt;
if (columnAlreadyHasNewType) {
createdAt = row.getNullableLong(2);
} else {
createdAt = row.getNullableDate(2) == null ? null : row.getNullableDate(2).getTime();
}
update.setLong(1, createdAt)
.setString(2, componentUuid);
return true;
});
}

private boolean columnAlreadyHasNewType() throws SQLException {
try (Connection connection = getDatabase().getDataSource().getConnection()) {
ColumnMetadata columnMetadata = DatabaseUtils.getColumnMetadata(connection, "components", "created_at");
int newType = getDialect().getId().equals(Oracle.ID) ? Types.NUMERIC : Types.BIGINT;
return columnMetadata != null && columnMetadata.sqlType() == newType;
}
}
}

+ 0
- 34
server/sonar-db-migration/src/main/java/org/sonar/server/platform/db/migration/version/v102/RenameCreatedAtTempInComponents.java 查看文件

@@ -1,34 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2023 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program 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.
*
* This program 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.
*/
package org.sonar.server.platform.db.migration.version.v102;

import org.sonar.db.Database;
import org.sonar.server.platform.db.migration.step.RenameVarcharColumnChange;

public class RenameCreatedAtTempInComponents extends RenameVarcharColumnChange {

private static final String TABLE_NAME = "components";
private static final String OLD_COLUMN_NAME = "created_at_temp";
private static final String NEW_COLUMN_NAME = "created_at";

public RenameCreatedAtTempInComponents(Database db) {
super(db, TABLE_NAME, OLD_COLUMN_NAME, NEW_COLUMN_NAME);
}
}

+ 0
- 52
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/AddCreatedAtTempInComponentsTest.java 查看文件

@@ -1,52 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2023 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program 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.
*
* This program 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.
*/
package org.sonar.server.platform.db.migration.version.v102;

import java.sql.SQLException;
import java.sql.Types;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.db.CoreDbTester;

public class AddCreatedAtTempInComponentsTest {

private static final String TABLE_NAME = "components";
private static final String COLUMN_NAME = "created_at_temp";

@Rule
public final CoreDbTester db = CoreDbTester.createForSchema(AddCreatedAtTempInComponentsTest.class, "schema.sql");

private final AddCreatedAtTempInComponents underTest = new AddCreatedAtTempInComponents(db.database());

@Test
public void execute_whenColumnDoesNotExist_shouldCreateColumn() throws SQLException {
db.assertColumnDoesNotExist(TABLE_NAME, COLUMN_NAME);
underTest.execute();
db.assertColumnDefinition(TABLE_NAME, COLUMN_NAME, Types.BIGINT, null, null);
}

@Test
public void execute_whenExecutedTwice_shouldNotFail() throws SQLException {
db.assertColumnDoesNotExist(TABLE_NAME, COLUMN_NAME);
underTest.execute();
underTest.execute();
db.assertColumnDefinition(TABLE_NAME, COLUMN_NAME, Types.BIGINT, null, null);
}
}

+ 0
- 52
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/DropCreatedAtInComponentsTest.java 查看文件

@@ -1,52 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2023 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program 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.
*
* This program 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.
*/
package org.sonar.server.platform.db.migration.version.v102;

import java.sql.SQLException;
import java.sql.Types;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.db.CoreDbTester;

public class DropCreatedAtInComponentsTest {

private static final String TABLE_NAME = "components";
private static final String COLUMN_NAME = "created_at";

@Rule
public final CoreDbTester db = CoreDbTester.createForSchema(DropCreatedAtInComponentsTest.class, "schema.sql");

private final DropCreatedAtInComponents underTest = new DropCreatedAtInComponents(db.database());

@Test
public void execute_whenColumnExists_shouldDropColumn() throws SQLException {
db.assertColumnDefinition(TABLE_NAME, COLUMN_NAME, Types.TIMESTAMP, null, null);
underTest.execute();
db.assertColumnDoesNotExist(TABLE_NAME, COLUMN_NAME);
}

@Test
public void execute_whenExecutedTwice_shouldNotFail() throws SQLException {
db.assertColumnDefinition(TABLE_NAME, COLUMN_NAME, Types.TIMESTAMP, null, null);
underTest.execute();
underTest.execute();
db.assertColumnDoesNotExist(TABLE_NAME, COLUMN_NAME);
}
}

+ 0
- 81
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/PopulateCreatedAtTempInComponentsTest.java 查看文件

@@ -1,81 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2023 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program 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.
*
* This program 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.
*/
package org.sonar.server.platform.db.migration.version.v102;

import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import javax.annotation.Nullable;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.db.CoreDbTester;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.tuple;

public class PopulateCreatedAtTempInComponentsTest {

private static final String TABLE_NAME = "components";

@Rule
public final CoreDbTester db = CoreDbTester.createForSchema(PopulateCreatedAtTempInComponentsTest.class, "schema.sql");

private final PopulateCreatedAtTempInComponents underTest = new PopulateCreatedAtTempInComponents(db.database());

@Test
public void execute_whenComponentsDoNotExist_shouldNotFail() {
assertThatCode(underTest::execute).doesNotThrowAnyException();
}

@Test
public void execute_whenComponentsExist_shouldPopulateColumn() throws SQLException, ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date1 = format.parse("2023-01-01 10:22:38.222");
Date date2 = format.parse("2023-07-20 02:00:01.800");

insertComponent("uuid-1", null);
insertComponent("uuid-2", date1);
insertComponent("uuid-3", date2);

underTest.execute();

assertThat(db.select("select UUID, CREATED_AT_TEMP from components"))
.extracting(stringObjectMap -> stringObjectMap.get("UUID"), stringObjectMap -> stringObjectMap.get("CREATED_AT_TEMP"))
.containsExactlyInAnyOrder(
tuple("uuid-1", null),
tuple("uuid-2", 1672568558222L),
tuple("uuid-3", 1689818401800L));
}

private void insertComponent(String uuid, @Nullable Date createdAt) {
db.executeInsert(TABLE_NAME,
"UUID", uuid,
"UUID_PATH", "P",
"BRANCH_UUID", "B",
"ENABLED", true,
"PRIVATE", true,
"CREATED_AT", createdAt,
"CREATED_AT_TEMP", null);
}
}

+ 0
- 57
server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/version/v102/RenameCreatedAtTempInComponentsTest.java 查看文件

@@ -1,57 +0,0 @@
/*
* SonarQube
* Copyright (C) 2009-2023 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program 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.
*
* This program 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.
*/
package org.sonar.server.platform.db.migration.version.v102;

import java.sql.SQLException;
import java.sql.Types;
import org.junit.Rule;
import org.junit.Test;
import org.sonar.db.CoreDbTester;

public class RenameCreatedAtTempInComponentsTest {

public static final String TABLE_NAME = "components";
public static final String OLD_COLUMN_NAME = "created_at_temp";
public static final String NEW_COLUMN_NAME = "created_at";

@Rule
public final CoreDbTester db = CoreDbTester.createForSchema(RenameCreatedAtTempInComponentsTest.class, "schema.sql");

private final RenameCreatedAtTempInComponents underTest = new RenameCreatedAtTempInComponents(db.database());

@Test
public void execute_shouldRenameColumn() throws SQLException {
db.assertColumnDefinition(TABLE_NAME, OLD_COLUMN_NAME, Types.BIGINT, null, null);
db.assertColumnDoesNotExist(TABLE_NAME, NEW_COLUMN_NAME);
underTest.execute();
db.assertColumnDefinition(TABLE_NAME, NEW_COLUMN_NAME, Types.BIGINT, null, null);
db.assertColumnDoesNotExist(TABLE_NAME, OLD_COLUMN_NAME);
}

@Test
public void execute_whenExecutedTwice_shouldNotFail() throws SQLException {
db.assertColumnDefinition(TABLE_NAME, OLD_COLUMN_NAME, Types.BIGINT, null, null);
db.assertColumnDoesNotExist(TABLE_NAME, NEW_COLUMN_NAME);
underTest.execute();
underTest.execute();
db.assertColumnDefinition(TABLE_NAME, NEW_COLUMN_NAME, Types.BIGINT, null, null);
db.assertColumnDoesNotExist(TABLE_NAME, OLD_COLUMN_NAME);
}
}

+ 0
- 33
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/AddCreatedAtTempInComponentsTest/schema.sql 查看文件

@@ -1,33 +0,0 @@
CREATE TABLE "COMPONENTS"(
"UUID" CHARACTER VARYING(50) NOT NULL,
"KEE" CHARACTER VARYING(1000),
"DEPRECATED_KEE" CHARACTER VARYING(400),
"NAME" CHARACTER VARYING(2000),
"LONG_NAME" CHARACTER VARYING(2000),
"DESCRIPTION" CHARACTER VARYING(2000),
"ENABLED" BOOLEAN DEFAULT TRUE NOT NULL,
"SCOPE" CHARACTER VARYING(3),
"QUALIFIER" CHARACTER VARYING(10),
"PRIVATE" BOOLEAN NOT NULL,
"LANGUAGE" CHARACTER VARYING(20),
"COPY_COMPONENT_UUID" CHARACTER VARYING(50),
"PATH" CHARACTER VARYING(2000),
"UUID_PATH" CHARACTER VARYING(1500) NOT NULL,
"BRANCH_UUID" CHARACTER VARYING(50) NOT NULL,
"MAIN_BRANCH_PROJECT_UUID" CHARACTER VARYING(50),
"B_CHANGED" BOOLEAN,
"B_NAME" CHARACTER VARYING(500),
"B_LONG_NAME" CHARACTER VARYING(500),
"B_DESCRIPTION" CHARACTER VARYING(2000),
"B_ENABLED" BOOLEAN,
"B_QUALIFIER" CHARACTER VARYING(10),
"B_LANGUAGE" CHARACTER VARYING(20),
"B_COPY_COMPONENT_UUID" CHARACTER VARYING(50),
"B_PATH" CHARACTER VARYING(2000),
"B_UUID_PATH" CHARACTER VARYING(1500),
"CREATED_AT" TIMESTAMP
);
CREATE INDEX "PROJECTS_QUALIFIER" ON "COMPONENTS"("QUALIFIER" NULLS FIRST);
CREATE UNIQUE INDEX "COMPONENTS_UUID" ON "COMPONENTS"("UUID" NULLS FIRST);
CREATE INDEX "COMPONENTS_BRANCH_UUID" ON "COMPONENTS"("BRANCH_UUID" NULLS FIRST);
CREATE UNIQUE INDEX "COMPONENTS_KEE_BRANCH_UUID" ON "COMPONENTS"("KEE" NULLS FIRST, "BRANCH_UUID" NULLS FIRST);

+ 0
- 34
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/DropCreatedAtInComponentsTest/schema.sql 查看文件

@@ -1,34 +0,0 @@
CREATE TABLE "COMPONENTS"(
"UUID" CHARACTER VARYING(50) NOT NULL,
"KEE" CHARACTER VARYING(1000),
"DEPRECATED_KEE" CHARACTER VARYING(400),
"NAME" CHARACTER VARYING(2000),
"LONG_NAME" CHARACTER VARYING(2000),
"DESCRIPTION" CHARACTER VARYING(2000),
"ENABLED" BOOLEAN DEFAULT TRUE NOT NULL,
"SCOPE" CHARACTER VARYING(3),
"QUALIFIER" CHARACTER VARYING(10),
"PRIVATE" BOOLEAN NOT NULL,
"LANGUAGE" CHARACTER VARYING(20),
"COPY_COMPONENT_UUID" CHARACTER VARYING(50),
"PATH" CHARACTER VARYING(2000),
"UUID_PATH" CHARACTER VARYING(1500) NOT NULL,
"BRANCH_UUID" CHARACTER VARYING(50) NOT NULL,
"MAIN_BRANCH_PROJECT_UUID" CHARACTER VARYING(50),
"B_CHANGED" BOOLEAN,
"B_NAME" CHARACTER VARYING(500),
"B_LONG_NAME" CHARACTER VARYING(500),
"B_DESCRIPTION" CHARACTER VARYING(2000),
"B_ENABLED" BOOLEAN,
"B_QUALIFIER" CHARACTER VARYING(10),
"B_LANGUAGE" CHARACTER VARYING(20),
"B_COPY_COMPONENT_UUID" CHARACTER VARYING(50),
"B_PATH" CHARACTER VARYING(2000),
"B_UUID_PATH" CHARACTER VARYING(1500),
"CREATED_AT" TIMESTAMP,
"CREATED_AT_TEMP" BIGINT
);
CREATE INDEX "PROJECTS_QUALIFIER" ON "COMPONENTS"("QUALIFIER" NULLS FIRST);
CREATE UNIQUE INDEX "COMPONENTS_UUID" ON "COMPONENTS"("UUID" NULLS FIRST);
CREATE INDEX "COMPONENTS_BRANCH_UUID" ON "COMPONENTS"("BRANCH_UUID" NULLS FIRST);
CREATE UNIQUE INDEX "COMPONENTS_KEE_BRANCH_UUID" ON "COMPONENTS"("KEE" NULLS FIRST, "BRANCH_UUID" NULLS FIRST);

+ 0
- 34
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/PopulateCreatedAtTempInComponentsTest/schema.sql 查看文件

@@ -1,34 +0,0 @@
CREATE TABLE "COMPONENTS"(
"UUID" CHARACTER VARYING(50) NOT NULL,
"KEE" CHARACTER VARYING(1000),
"DEPRECATED_KEE" CHARACTER VARYING(400),
"NAME" CHARACTER VARYING(2000),
"LONG_NAME" CHARACTER VARYING(2000),
"DESCRIPTION" CHARACTER VARYING(2000),
"ENABLED" BOOLEAN DEFAULT TRUE NOT NULL,
"SCOPE" CHARACTER VARYING(3),
"QUALIFIER" CHARACTER VARYING(10),
"PRIVATE" BOOLEAN NOT NULL,
"LANGUAGE" CHARACTER VARYING(20),
"COPY_COMPONENT_UUID" CHARACTER VARYING(50),
"PATH" CHARACTER VARYING(2000),
"UUID_PATH" CHARACTER VARYING(1500) NOT NULL,
"BRANCH_UUID" CHARACTER VARYING(50) NOT NULL,
"MAIN_BRANCH_PROJECT_UUID" CHARACTER VARYING(50),
"B_CHANGED" BOOLEAN,
"B_NAME" CHARACTER VARYING(500),
"B_LONG_NAME" CHARACTER VARYING(500),
"B_DESCRIPTION" CHARACTER VARYING(2000),
"B_ENABLED" BOOLEAN,
"B_QUALIFIER" CHARACTER VARYING(10),
"B_LANGUAGE" CHARACTER VARYING(20),
"B_COPY_COMPONENT_UUID" CHARACTER VARYING(50),
"B_PATH" CHARACTER VARYING(2000),
"B_UUID_PATH" CHARACTER VARYING(1500),
"CREATED_AT" TIMESTAMP,
"CREATED_AT_TEMP" BIGINT
);
CREATE INDEX "PROJECTS_QUALIFIER" ON "COMPONENTS"("QUALIFIER" NULLS FIRST);
CREATE UNIQUE INDEX "COMPONENTS_UUID" ON "COMPONENTS"("UUID" NULLS FIRST);
CREATE INDEX "COMPONENTS_BRANCH_UUID" ON "COMPONENTS"("BRANCH_UUID" NULLS FIRST);
CREATE UNIQUE INDEX "COMPONENTS_KEE_BRANCH_UUID" ON "COMPONENTS"("KEE" NULLS FIRST, "BRANCH_UUID" NULLS FIRST);

+ 0
- 33
server/sonar-db-migration/src/test/resources/org/sonar/server/platform/db/migration/version/v102/RenameCreatedAtTempInComponentsTest/schema.sql 查看文件

@@ -1,33 +0,0 @@
CREATE TABLE "COMPONENTS"(
"UUID" CHARACTER VARYING(50) NOT NULL,
"KEE" CHARACTER VARYING(1000),
"DEPRECATED_KEE" CHARACTER VARYING(400),
"NAME" CHARACTER VARYING(2000),
"LONG_NAME" CHARACTER VARYING(2000),
"DESCRIPTION" CHARACTER VARYING(2000),
"ENABLED" BOOLEAN DEFAULT TRUE NOT NULL,
"SCOPE" CHARACTER VARYING(3),
"QUALIFIER" CHARACTER VARYING(10),
"PRIVATE" BOOLEAN NOT NULL,
"LANGUAGE" CHARACTER VARYING(20),
"COPY_COMPONENT_UUID" CHARACTER VARYING(50),
"PATH" CHARACTER VARYING(2000),
"UUID_PATH" CHARACTER VARYING(1500) NOT NULL,
"BRANCH_UUID" CHARACTER VARYING(50) NOT NULL,
"MAIN_BRANCH_PROJECT_UUID" CHARACTER VARYING(50),
"B_CHANGED" BOOLEAN,
"B_NAME" CHARACTER VARYING(500),
"B_LONG_NAME" CHARACTER VARYING(500),
"B_DESCRIPTION" CHARACTER VARYING(2000),
"B_ENABLED" BOOLEAN,
"B_QUALIFIER" CHARACTER VARYING(10),
"B_LANGUAGE" CHARACTER VARYING(20),
"B_COPY_COMPONENT_UUID" CHARACTER VARYING(50),
"B_PATH" CHARACTER VARYING(2000),
"B_UUID_PATH" CHARACTER VARYING(1500),
"CREATED_AT_TEMP" BIGINT
);
CREATE INDEX "PROJECTS_QUALIFIER" ON "COMPONENTS"("QUALIFIER" NULLS FIRST);
CREATE UNIQUE INDEX "COMPONENTS_UUID" ON "COMPONENTS"("UUID" NULLS FIRST);
CREATE INDEX "COMPONENTS_BRANCH_UUID" ON "COMPONENTS"("BRANCH_UUID" NULLS FIRST);
CREATE UNIQUE INDEX "COMPONENTS_KEE_BRANCH_UUID" ON "COMPONENTS"("KEE" NULLS FIRST, "BRANCH_UUID" NULLS FIRST);

+ 1
- 1
server/sonar-webserver-webapi/src/it/java/org/sonar/server/component/ws/TreeActionIT.java 查看文件

@@ -579,7 +579,7 @@ public class TreeActionIT {
.setQualifier(getJsonField(componentAsJsonObject, "qualifier"))
.setDescription(getJsonField(componentAsJsonObject, "description"))
.setEnabled(true)
.setCreatedAt(now.getTime()));
.setCreatedAt(now));
}
db.commit();
return projectData;

+ 2
- 1
server/sonar-webserver-webapi/src/main/java/org/sonar/server/component/ComponentUpdater.java 查看文件

@@ -19,6 +19,7 @@
*/
package org.sonar.server.component;

import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
@@ -211,7 +212,7 @@ public class ComponentUpdater {
.setScope(Scopes.PROJECT)
.setQualifier(newComponent.qualifier())
.setPrivate(newComponent.isPrivate())
.setCreatedAt(now);
.setCreatedAt(new Date(now));

dbClient.componentDao().insert(session, component, true);
return component;

Loading…
取消
儲存