diff --git a/application/src/main/data/upgrade/3.5.1/schema_update.sql b/application/src/main/data/upgrade/3.5.1/schema_update.sql index aaf855e4c6..42106fac56 100644 --- a/application/src/main/data/upgrade/3.5.1/schema_update.sql +++ b/application/src/main/data/upgrade/3.5.1/schema_update.sql @@ -130,15 +130,10 @@ ALTER TABLE notification_request ALTER COLUMN info SET DATA TYPE varchar(1000000 CREATE TABLE IF NOT EXISTS alarm_types ( tenant_id uuid NOT NULL, type varchar(255) NOT NULL, - CONSTRAINT tenant_id_type_unq_key UNIQUE (tenant_id, type) + CONSTRAINT tenant_id_type_unq_key UNIQUE (tenant_id, type), + CONSTRAINT fk_entity_tenant_id FOREIGN KEY (tenant_id) REFERENCES tenant(id) ON DELETE CASCADE ); --- Activate the pg_trgm module for trigram-based searches. -CREATE EXTENSION IF NOT EXISTS pg_trgm; - --- Create a GIN index on the `type` column. (for optimizing `ILIKE` in search query) -CREATE INDEX IF NOT EXISTS idx_gin_alarm_types_type ON alarm_types USING GIN(type gin_trgm_ops); - INSERT INTO alarm_types (tenant_id, type) SELECT DISTINCT tenant_id, type FROM alarm ON CONFLICT (tenant_id, type) DO NOTHING; ALTER TABLE widget_type diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java index c2c153267b..8855db23ae 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java @@ -77,7 +77,7 @@ public interface AlarmService extends EntityDaoService { AlarmApiCallResult delAlarm(TenantId tenantId, AlarmId alarmId); - AlarmApiCallResult delAlarm(TenantId tenantId, AlarmId alarmId, boolean deleteAlarmType); + AlarmApiCallResult delAlarm(TenantId tenantId, AlarmId alarmId, boolean checkAndDeleteAlarmType); void delAlarmTypes(TenantId tenantId, Set types); diff --git a/dao/src/main/java/org/thingsboard/server/dao/alarm/AlarmDao.java b/dao/src/main/java/org/thingsboard/server/dao/alarm/AlarmDao.java index 515866a810..57f07678b2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/alarm/AlarmDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/alarm/AlarmDao.java @@ -100,5 +100,5 @@ public interface AlarmDao extends Dao { PageData findTenantAlarmTypes(UUID tenantId, PageLink pageLink); - boolean removeAlarmTypes(UUID tenantId, Set types); + boolean removeAlarmTypesIfNoAlarmsPresent(UUID tenantId, Set types); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java index 148d79abe5..d31a4ebfa2 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java @@ -223,7 +223,7 @@ public class BaseAlarmService extends AbstractCachedEntityService types) { - if (!types.isEmpty() && alarmDao.removeAlarmTypes(tenantId.getId(), types)) { + if (!types.isEmpty() && alarmDao.removeAlarmTypesIfNoAlarmsPresent(tenantId.getId(), types)) { publishEvictEvent(new AlarmTypesCacheEvictEvent(tenantId)); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/AlarmRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/AlarmRepository.java index bf5b6d84e7..b81e04d5f6 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/AlarmRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/AlarmRepository.java @@ -354,6 +354,6 @@ public interface AlarmRepository extends JpaRepository { @Transactional @Modifying @Query(value = "DELETE FROM alarm_types AS at WHERE NOT EXISTS (SELECT 1 FROM alarm AS a WHERE a.tenant_id = at.tenant_id AND a.type = at.type) AND at.tenant_id = :tenantId AND at.type IN (:types)", nativeQuery = true) - int deleteTypeIfNoOneAlarmExists(@Param("tenantId") UUID tenantId, @Param("types") Set types); + int deleteTypeIfNoAlarmsExist(@Param("tenantId") UUID tenantId, @Param("types") Set types); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java index b0166a86a4..1158264614 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/alarm/JpaAlarmDao.java @@ -383,8 +383,8 @@ public class JpaAlarmDao extends JpaAbstractDao implements A } @Override - public boolean removeAlarmTypes(UUID tenantId, Set types) { - return alarmRepository.deleteTypeIfNoOneAlarmExists(tenantId, types) > 0; + public boolean removeAlarmTypesIfNoAlarmsPresent(UUID tenantId, Set types) { + return alarmRepository.deleteTypeIfNoAlarmsExist(tenantId, types) > 0; } private static String getPropagationTypes(AlarmPropagationInfo ap) { diff --git a/dao/src/main/resources/sql/schema-entities-idx.sql b/dao/src/main/resources/sql/schema-entities-idx.sql index 0f26974668..675fcd3ec0 100644 --- a/dao/src/main/resources/sql/schema-entities-idx.sql +++ b/dao/src/main/resources/sql/schema-entities-idx.sql @@ -115,9 +115,3 @@ CREATE INDEX IF NOT EXISTS idx_notification_id ON notification(id); CREATE INDEX IF NOT EXISTS idx_notification_recipient_id_created_time ON notification(recipient_id, created_time DESC); CREATE INDEX IF NOT EXISTS idx_notification_recipient_id_unread ON notification(recipient_id) WHERE status <> 'READ'; - --- Activate the pg_trgm module for trigram-based searches. -CREATE EXTENSION IF NOT EXISTS pg_trgm; - --- Create a GIN index on the `type` column. (for optimizing `ILIKE` in search query) -CREATE INDEX IF NOT EXISTS idx_gin_alarm_types_type ON alarm_types USING GIN(type gin_trgm_ops); diff --git a/dao/src/main/resources/sql/schema-entities.sql b/dao/src/main/resources/sql/schema-entities.sql index 2f73340ac1..b48437458b 100644 --- a/dao/src/main/resources/sql/schema-entities.sql +++ b/dao/src/main/resources/sql/schema-entities.sql @@ -64,12 +64,6 @@ CREATE TABLE IF NOT EXISTS alarm ( cleared boolean ); -CREATE TABLE IF NOT EXISTS alarm_types ( - tenant_id uuid NOT NULL, - type varchar(255) NOT NULL, - CONSTRAINT tenant_id_type_unq_key UNIQUE (tenant_id, type) -); - CREATE TABLE IF NOT EXISTS alarm_comment ( id uuid NOT NULL, created_time bigint NOT NULL, @@ -862,3 +856,10 @@ CREATE TABLE IF NOT EXISTS user_settings ( CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES tb_user(id) ON DELETE CASCADE, CONSTRAINT user_settings_pkey PRIMARY KEY (user_id, type) ); + +CREATE TABLE IF NOT EXISTS alarm_types ( + tenant_id uuid NOT NULL, + type varchar(255) NOT NULL, + CONSTRAINT tenant_id_type_unq_key UNIQUE (tenant_id, type), + CONSTRAINT fk_entity_tenant_id FOREIGN KEY (tenant_id) REFERENCES tenant(id) ON DELETE CASCADE +);