diff --git a/application/src/main/data/upgrade/1.3.1/schema_update.sql b/application/src/main/data/upgrade/1.3.1/schema_update.sql new file mode 100644 index 0000000000..47cdd5d6af --- /dev/null +++ b/application/src/main/data/upgrade/1.3.1/schema_update.sql @@ -0,0 +1,17 @@ +-- +-- Copyright © 2016-2017 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. +-- + +ALTER TABLE ts_kv_latest ALTER COLUMN str_v varchar(10000000); diff --git a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java index 577c0c5c00..0b737decd7 100644 --- a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java +++ b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java @@ -71,7 +71,7 @@ public class ThingsboardInstallService { case "1.2.3": //NOSONAR, Need to execute gradual upgrade starting from upgradeFromVersion log.info("Upgrading ThingsBoard from version 1.2.3 to 1.3.0 ..."); - databaseUpgradeService.upgradeDatabase(upgradeFromVersion); + databaseUpgradeService.upgradeDatabase("1.2.3"); log.info("Updating system data..."); @@ -86,6 +86,8 @@ public class ThingsboardInstallService { case "1.3.0": log.info("Upgrading ThingsBoard from version 1.3.0 to 1.3.1 ..."); + databaseUpgradeService.upgradeDatabase("1.3.0"); + log.info("Updating system data..."); systemDataLoaderService.deleteSystemWidgetBundle("charts"); diff --git a/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseUpgradeService.java b/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseUpgradeService.java index 5abc789446..7f009f4382 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseUpgradeService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseUpgradeService.java @@ -154,6 +154,8 @@ public class CassandraDatabaseUpgradeService implements DatabaseUpgradeService { } log.info("Relations restored."); + break; + case "1.3.0": break; default: throw new RuntimeException("Unable to upgrade Cassandra database, unsupported fromVersion: " + fromVersion); diff --git a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java index fed838814e..a8ffa99a46 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseUpgradeService.java @@ -17,19 +17,50 @@ package org.thingsboard.server.service.install; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Service; import org.thingsboard.server.dao.util.SqlDao; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.sql.Connection; +import java.sql.DriverManager; + @Service @Profile("install") @Slf4j @SqlDao public class SqlDatabaseUpgradeService implements DatabaseUpgradeService { + private static final String SCHEMA_UPDATE_SQL = "schema_update.sql"; + + @Value("${install.data_dir}") + private String dataDir; + + @Value("${spring.datasource.url}") + private String dbUrl; + + @Value("${spring.datasource.username}") + private String dbUserName; + + @Value("${spring.datasource.password}") + private String dbPassword; + @Override public void upgradeDatabase(String fromVersion) throws Exception { switch (fromVersion) { + case "1.3.0": + log.info("Updating schema ..."); + Path schemaUpdateFile = Paths.get(this.dataDir, "upgrade", "1.3.1", SCHEMA_UPDATE_SQL); + try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword)) { + String sql = new String(Files.readAllBytes(schemaUpdateFile), Charset.forName("UTF-8")); + conn.createStatement().execute(sql); //NOSONAR, ignoring because method used to execute thingsboard database upgrade script + } + log.info("Schema updated."); + break; default: throw new RuntimeException("Unable to upgrade SQL database, unsupported fromVersion: " + fromVersion); } diff --git a/dao/src/main/resources/sql/schema.sql b/dao/src/main/resources/sql/schema.sql index 93e906c7ca..26b314c05d 100644 --- a/dao/src/main/resources/sql/schema.sql +++ b/dao/src/main/resources/sql/schema.sql @@ -209,7 +209,7 @@ CREATE TABLE IF NOT EXISTS ts_kv_latest ( key varchar(255) NOT NULL, ts bigint NOT NULL, bool_v boolean, - str_v varchar, + str_v varchar(10000000), long_v bigint, dbl_v double precision, CONSTRAINT ts_kv_latest_unq_key UNIQUE (entity_type, entity_id, key)