Browse Source

Add updateSchemaVersion overload to record an arbitrary version

pull/15808/head
Viacheslav Klimov 3 months ago
parent
commit
f6bf762639
Failed to extract signature
  1. 21
      application/src/main/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsService.java
  2. 50
      application/src/test/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsServiceTest.java

21
application/src/main/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsService.java

@ -74,7 +74,12 @@ public class DefaultDatabaseSchemaSettingsService implements DatabaseSchemaSetti
@Override @Override
public void updateSchemaVersion() { public void updateSchemaVersion() {
jdbcTemplate.execute("UPDATE tb_schema_settings SET schema_version = " + getPackageSchemaVersionForDb()); updateSchemaVersion(getPackageSchemaVersion());
}
@Override
public void updateSchemaVersion(String version) {
jdbcTemplate.execute("UPDATE tb_schema_settings SET schema_version = " + toDbVersion(version));
} }
@Override @Override
@ -123,13 +128,15 @@ public class DefaultDatabaseSchemaSettingsService implements DatabaseSchemaSetti
} }
private long getPackageSchemaVersionForDb() { private long getPackageSchemaVersionForDb() {
String[] versionParts = getPackageSchemaVersion().split("\\."); return toDbVersion(getPackageSchemaVersion());
}
long major = Integer.parseInt(versionParts[0]);
long minor = Integer.parseInt(versionParts[1]);
long maintenance = Integer.parseInt(versionParts[2]);
long patch = Integer.parseInt(versionParts[3]);
private long toDbVersion(String version) {
String[] versionParts = version.split("\\.");
long major = Long.parseLong(versionParts[0]);
long minor = versionParts.length > 1 ? Long.parseLong(versionParts[1]) : 0;
long maintenance = versionParts.length > 2 ? Long.parseLong(versionParts[2]) : 0;
long patch = versionParts.length > 3 ? Long.parseLong(versionParts[3]) : 0;
return major * 1_000_000_000L + minor * 1_000_000L + maintenance * 1000L + patch; return major * 1_000_000_000L + minor * 1_000_000L + maintenance * 1000L + patch;
} }

50
application/src/test/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsServiceTest.java

@ -0,0 +1,50 @@
/**
* Copyright © 2016-2026 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.service.install;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.jdbc.core.JdbcTemplate;
import static org.mockito.Mockito.verify;
@ExtendWith(MockitoExtension.class)
class DefaultDatabaseSchemaSettingsServiceTest {
@Mock
private ProjectInfo projectInfo;
@Mock
private JdbcTemplate jdbcTemplate;
@InjectMocks
private DefaultDatabaseSchemaSettingsService service;
@Test
void updateSchemaVersionWithExplicitVersionEncodesAsLong() {
service.updateSchemaVersion("4.2.2.3");
verify(jdbcTemplate).execute("UPDATE tb_schema_settings SET schema_version = 4002002003");
}
@Test
void updateSchemaVersionWithShortVersionPadsMissingComponents() {
service.updateSchemaVersion("4.3");
verify(jdbcTemplate).execute("UPDATE tb_schema_settings SET schema_version = 4003000000");
}
}
Loading…
Cancel
Save