From f6bf7626390aac13f63e557e8b0b8e1cb6c064d6 Mon Sep 17 00:00:00 2001 From: Viacheslav Klimov Date: Fri, 19 Jun 2026 12:32:43 +0300 Subject: [PATCH] Add updateSchemaVersion overload to record an arbitrary version --- .../DefaultDatabaseSchemaSettingsService.java | 21 +++++--- ...aultDatabaseSchemaSettingsServiceTest.java | 50 +++++++++++++++++++ 2 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 application/src/test/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsServiceTest.java diff --git a/application/src/main/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsService.java b/application/src/main/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsService.java index 221f3418b9..6773790c1e 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsService.java @@ -74,7 +74,12 @@ public class DefaultDatabaseSchemaSettingsService implements DatabaseSchemaSetti @Override 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 @@ -123,13 +128,15 @@ public class DefaultDatabaseSchemaSettingsService implements DatabaseSchemaSetti } private long getPackageSchemaVersionForDb() { - String[] versionParts = getPackageSchemaVersion().split("\\."); - - long major = Integer.parseInt(versionParts[0]); - long minor = Integer.parseInt(versionParts[1]); - long maintenance = Integer.parseInt(versionParts[2]); - long patch = Integer.parseInt(versionParts[3]); + return toDbVersion(getPackageSchemaVersion()); + } + 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; } diff --git a/application/src/test/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsServiceTest.java b/application/src/test/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsServiceTest.java new file mode 100644 index 0000000000..91c455c292 --- /dev/null +++ b/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"); + } +}