From a19364c6352b31beccf1206784d5e6f531174ab6 Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Fri, 21 Apr 2017 08:34:44 +0200 Subject: [PATCH] Remove UPPER from delete queries. (#494) * Remove UPPER from delete queries. Signed-off-by: kaizimmerm * Typos. Signed-off-by: kaizimmerm * Fix case issue in sp_tenant table. Signed-off-by: kaizimmerm --- .../jpa/DistributionSetRepository.java | 11 +++++--- .../jpa/DistributionSetTagRepository.java | 11 +++++--- .../jpa/DistributionSetTypeRepository.java | 11 +++++--- .../repository/jpa/JpaSystemManagement.java | 25 ++++++++++--------- .../repository/jpa/RolloutRepository.java | 11 +++++--- .../jpa/SoftwareModuleRepository.java | 11 +++++--- .../jpa/SoftwareModuleTypeRepository.java | 11 +++++--- .../jpa/TargetFilterQueryRepository.java | 11 +++++--- .../repository/jpa/TargetRepository.java | 11 +++++--- .../repository/jpa/TargetTagRepository.java | 11 +++++--- .../jpa/TenantConfigurationRepository.java | 11 +++++--- .../jpa/event/JpaEventEntityManager.java | 1 - .../remote/entity/RolloutGroupEventTest.java | 2 +- .../jpa/AbstractJpaIntegrationTest.java | 1 - 14 files changed, 94 insertions(+), 45 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java index be24f4e95..2a7abb694 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetRepository.java @@ -12,6 +12,8 @@ import java.util.Collection; import java.util.List; import java.util.Optional; +import javax.persistence.EntityManager; + import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.model.Action; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -144,13 +146,16 @@ public interface DistributionSetRepository List findAll(Iterable ids); /** - * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. For safety + * reasons (this is a "delete everything" query after all) we add the tenant manually to + * query even if this will by done by {@link EntityManager} anyhow. The DB + * should take care of optimizing this away. * * @param tenant * to delete data from */ @Modifying @Transactional - @Query("DELETE FROM JpaDistributionSet t WHERE UPPER(t.tenant) = UPPER(:tenant)") - void deleteByTenantIgnoreCase(@Param("tenant") String tenant); + @Query("DELETE FROM JpaDistributionSet t WHERE t.tenant = :tenant") + void deleteByTenant(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java index 74127bb36..3943dc679 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTagRepository.java @@ -11,6 +11,8 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; import java.util.Optional; +import javax.persistence.EntityManager; + import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetTag; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSetTag; @@ -58,13 +60,16 @@ public interface DistributionSetTagRepository List findAll(); /** - * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. For safety + * reasons (this is a "delete everything" query after all) we add the tenant manually to + * query even if this will by done by {@link EntityManager} anyhow. The DB + * should take care of optimizing this away. * * @param tenant * to delete data from */ @Modifying @Transactional - @Query("DELETE FROM JpaDistributionSetTag t WHERE UPPER(t.tenant) = UPPER(:tenant)") - void deleteByTenantIgnoreCase(@Param("tenant") String tenant); + @Query("DELETE FROM JpaDistributionSetTag t WHERE t.tenant = :tenant") + void deleteByTenant(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java index 5b330cc05..8b9a6e3b9 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/DistributionSetTypeRepository.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.repository.jpa; +import javax.persistence.EntityManager; + import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSetType; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.model.DistributionSetType; @@ -61,13 +63,16 @@ public interface DistributionSetTypeRepository Long countByElementsSmType(JpaSoftwareModuleType softwareModuleType); /** - * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. For safety + * reasons (this is a "delete everything" query after all) we add the tenant manually to + * query even if this will by done by {@link EntityManager} anyhow. The DB + * should take care of optimizing this away. * * @param tenant * to delete data from */ @Modifying @Transactional - @Query("DELETE FROM JpaDistributionSetType t WHERE UPPER(t.tenant) = UPPER(:tenant)") - void deleteByTenantIgnoreCase(@Param("tenant") String tenant); + @Query("DELETE FROM JpaDistributionSetType t WHERE t.tenant = :tenant") + void deleteByTenant(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java index ca7862715..95ab6415a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaSystemManagement.java @@ -198,21 +198,22 @@ public class JpaSystemManagement implements CurrentTenantCacheKeyGenerator, Syst @Override @Transactional - public void deleteTenant(final String tenant) { + public void deleteTenant(final String t) { + final String tenant = t.toUpperCase(); cacheManager.evictCaches(tenant); tenantAware.runAsTenant(tenant, () -> { - entityManager.setProperty(PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT, tenant.toUpperCase()); + entityManager.setProperty(PersistenceUnitProperties.MULTITENANT_PROPERTY_DEFAULT, tenant); tenantMetaDataRepository.deleteByTenantIgnoreCase(tenant); - tenantConfigurationRepository.deleteByTenantIgnoreCase(tenant); - targetRepository.deleteByTenantIgnoreCase(tenant); - targetFilterQueryRepository.deleteByTenantIgnoreCase(tenant); - rolloutRepository.deleteByTenantIgnoreCase(tenant); - targetTagRepository.deleteByTenantIgnoreCase(tenant); - distributionSetTagRepository.deleteByTenantIgnoreCase(tenant); - distributionSetRepository.deleteByTenantIgnoreCase(tenant); - distributionSetTypeRepository.deleteByTenantIgnoreCase(tenant); - softwareModuleRepository.deleteByTenantIgnoreCase(tenant); - softwareModuleTypeRepository.deleteByTenantIgnoreCase(tenant); + tenantConfigurationRepository.deleteByTenant(tenant); + targetRepository.deleteByTenant(tenant); + targetFilterQueryRepository.deleteByTenant(tenant); + rolloutRepository.deleteByTenant(tenant); + targetTagRepository.deleteByTenant(tenant); + distributionSetTagRepository.deleteByTenant(tenant); + distributionSetRepository.deleteByTenant(tenant); + distributionSetTypeRepository.deleteByTenant(tenant); + softwareModuleRepository.deleteByTenant(tenant); + softwareModuleTypeRepository.deleteByTenant(tenant); return null; }); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java index fa5e4d6d8..fcb028dc3 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/RolloutRepository.java @@ -12,6 +12,8 @@ import java.util.Collection; import java.util.List; import java.util.Optional; +import javax.persistence.EntityManager; + import org.eclipse.hawkbit.repository.jpa.model.JpaRollout; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; @@ -50,13 +52,16 @@ public interface RolloutRepository Optional findByName(String name); /** - * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. For safety + * reasons (this is a "delete everything" query after all) we add the tenant manually to + * query even if this will by done by {@link EntityManager} anyhow. The DB + * should take care of optimizing this away. * * @param tenant * to delete data from */ @Modifying @Transactional - @Query("DELETE FROM JpaRollout t WHERE UPPER(t.tenant) = UPPER(:tenant)") - void deleteByTenantIgnoreCase(@Param("tenant") String tenant); + @Query("DELETE FROM JpaRollout t WHERE t.tenant = :tenant") + void deleteByTenant(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java index 427c46d93..77ecf049e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleRepository.java @@ -11,6 +11,8 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; import java.util.Optional; +import javax.persistence.EntityManager; + import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModule; import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; @@ -110,13 +112,16 @@ public interface SoftwareModuleRepository List findByIdIn(Iterable ids); /** - * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. For safety + * reasons (this is a "delete everything" query after all) we add the tenant manually to + * query even if this will by done by {@link EntityManager} anyhow. The DB + * should take care of optimizing this away. * * @param tenant * to delete data from */ @Modifying @Transactional - @Query("DELETE FROM JpaSoftwareModule t WHERE UPPER(t.tenant) = UPPER(:tenant)") - void deleteByTenantIgnoreCase(@Param("tenant") String tenant); + @Query("DELETE FROM JpaSoftwareModule t WHERE t.tenant = :tenant") + void deleteByTenant(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java index 4fbe007e6..046d948c0 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/SoftwareModuleTypeRepository.java @@ -11,6 +11,8 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; import java.util.Optional; +import javax.persistence.EntityManager; + import org.eclipse.hawkbit.repository.jpa.model.JpaSoftwareModuleType; import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; @@ -79,13 +81,16 @@ public interface SoftwareModuleTypeRepository List findByIdIn(Iterable ids); /** - * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. For safety + * reasons (this is a "delete everything" query after all) we add the tenant manually to + * query even if this will by done by {@link EntityManager} anyhow. The DB + * should take care of optimizing this away. * * @param tenant * to delete data from */ @Modifying @Transactional - @Query("DELETE FROM JpaSoftwareModuleType t WHERE UPPER(t.tenant) = UPPER(:tenant)") - void deleteByTenantIgnoreCase(@Param("tenant") String tenant); + @Query("DELETE FROM JpaSoftwareModuleType t WHERE t.tenant = :tenant") + void deleteByTenant(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java index 3026e19a2..ddce2750c 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetFilterQueryRepository.java @@ -10,6 +10,8 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.Optional; +import javax.persistence.EntityManager; + import org.eclipse.hawkbit.repository.jpa.model.JpaTargetFilterQuery; import org.eclipse.hawkbit.repository.model.TargetFilterQuery; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; @@ -54,14 +56,17 @@ public interface TargetFilterQueryRepository void unsetAutoAssignDistributionSet(@Param("ids") Long... dsIds); /** - * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. For safety + * reasons (this is a "delete everything" query after all) we add the tenant manually to + * query even if this will by done by {@link EntityManager} anyhow. The DB + * should take care of optimizing this away. * * @param tenant * to delete data from */ @Modifying @Transactional - @Query("DELETE FROM JpaTargetFilterQuery t WHERE UPPER(t.tenant) = UPPER(:tenant)") - void deleteByTenantIgnoreCase(@Param("tenant") String tenant); + @Query("DELETE FROM JpaTargetFilterQuery t WHERE t.tenant = :tenant") + void deleteByTenant(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java index d36942a26..f25502117 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetRepository.java @@ -13,6 +13,8 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import javax.persistence.EntityManager; + import org.eclipse.hawkbit.repository.jpa.model.JpaDistributionSet; import org.eclipse.hawkbit.repository.jpa.model.JpaTarget; import org.eclipse.hawkbit.repository.model.DistributionSet; @@ -211,13 +213,16 @@ public interface TargetRepository extends BaseEntityRepository, Page findByActionsRolloutGroupId(Long rolloutGroupId, Pageable page); /** - * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. For safety + * reasons (this is a "delete everything" query after all) we add the tenant manually to + * query even if this will by done by {@link EntityManager} anyhow. The DB + * should take care of optimizing this away. * * @param tenant * to delete data from */ @Modifying @Transactional - @Query("DELETE FROM JpaTarget t WHERE UPPER(t.tenant) = UPPER(:tenant)") - void deleteByTenantIgnoreCase(@Param("tenant") String tenant); + @Query("DELETE FROM JpaTarget t WHERE t.tenant = :tenant") + void deleteByTenant(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java index ccffd70da..94a4e47c2 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TargetTagRepository.java @@ -11,6 +11,8 @@ package org.eclipse.hawkbit.repository.jpa; import java.util.List; import java.util.Optional; +import javax.persistence.EntityManager; + import org.eclipse.hawkbit.repository.jpa.model.JpaTargetTag; import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; @@ -57,13 +59,16 @@ public interface TargetTagRepository List findAll(); /** - * Deletes all {@link TenantAwareBaseEntity} of a given tenant. + * Deletes all {@link TenantAwareBaseEntity} of a given tenant. For safety + * reasons (this is a "delete everything" query after all) we add the tenant manually to + * query even if this will by done by {@link EntityManager} anyhow. The DB + * should take care of optimizing this away. * * @param tenant * to delete data from */ @Modifying @Transactional - @Query("DELETE FROM JpaTargetTag t WHERE UPPER(t.tenant) = UPPER(:tenant)") - void deleteByTenantIgnoreCase(@Param("tenant") String tenant); + @Query("DELETE FROM JpaTargetTag t WHERE t.tenant = :tenant") + void deleteByTenant(@Param("tenant") String tenant); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java index 4d4c58e18..c96c36b4e 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/TenantConfigurationRepository.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.repository.jpa; +import javax.persistence.EntityManager; + import org.eclipse.hawkbit.repository.jpa.model.JpaTenantConfiguration; import org.eclipse.hawkbit.repository.model.TenantAwareBaseEntity; import org.eclipse.hawkbit.repository.model.TenantConfiguration; @@ -43,14 +45,17 @@ public interface TenantConfigurationRepository extends BaseEntityRepository