diff --git a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java index 9f8087066..7679ac4cc 100644 --- a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java +++ b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcBaseDAO.java @@ -362,7 +362,7 @@ public class JdbcBaseDAO { .collect(Collectors. toList()); } - public void doDeleteItemValues(Item item, FilterCriteria filter, String table, ZoneId timeZone) { + public void doDeleteItemValues(FilterCriteria filter, String table, ZoneId timeZone) { String sql = histItemFilterDeleteProvider(filter, table, timeZone); logger.debug("JDBC::doDeleteItemValues sql={}", sql); Yank.execute(sql, null); @@ -400,10 +400,8 @@ public class JdbcBaseDAO { logger.debug("JDBC::histItemFilterDeleteProvider filter = {}, table = {}", filter, table); String filterString = resolveTimeFilter(filter, timeZone); - String deleteString = "DELETE FROM " + table; - if (!filterString.isEmpty()) { - deleteString += filterString; - } + String deleteString = filterString.isEmpty() ? "TRUNCATE TABLE " + table + : "DELETE FROM " + table + filterString; logger.debug("JDBC::delete deleteString = {}", deleteString); return deleteString; } diff --git a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/JdbcMapper.java b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/JdbcMapper.java index 9476ba542..3a39efb32 100644 --- a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/JdbcMapper.java +++ b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/JdbcMapper.java @@ -184,12 +184,13 @@ public class JdbcMapper { return null; } - public boolean deleteItemValues(FilterCriteria filter, String table, Item item) { - logger.debug("JDBC::deleteItemValues filter='{}' table='{}' item='{}' itemName='{}'", (filter != null), table, - item, item.getName()); + @SuppressWarnings("null") + public boolean deleteItemValues(FilterCriteria filter, String table) { + logger.debug("JDBC::deleteItemValues filter='{}' table='{}' itemName='{}'", (filter != null), table, + filter.getItemName()); if (table != null) { long timerStart = System.currentTimeMillis(); - conf.getDBDAO().doDeleteItemValues(item, filter, table, timeZoneProvider.getTimeZone()); + conf.getDBDAO().doDeleteItemValues(filter, table, timeZoneProvider.getTimeZone()); logTime("deleteItemValues", timerStart, System.currentTimeMillis()); errCnt = 0; return true; diff --git a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/JdbcPersistenceService.java b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/JdbcPersistenceService.java index c00e178a8..20a0fff89 100644 --- a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/JdbcPersistenceService.java +++ b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/JdbcPersistenceService.java @@ -253,18 +253,11 @@ public class JdbcPersistenceService extends JdbcMapper implements ModifiablePers // Get the item name from the filter // Also get the Item object so we can determine the type - Item item = null; String itemName = filter.getItemName(); logger.debug("JDBC::remove: item is {}", itemName); if (itemName == null) { throw new IllegalArgumentException("Item name must not be null"); } - try { - item = itemRegistry.getItem(itemName); - } catch (ItemNotFoundException e) { - logger.error("JDBC::remove: unable to get item for itemName: '{}'. Ignore and give up!", itemName); - return false; - } String table = sqlTables.get(itemName); if (table == null) { @@ -273,10 +266,10 @@ public class JdbcPersistenceService extends JdbcMapper implements ModifiablePers } long timerStart = System.currentTimeMillis(); - boolean result = deleteItemValues(filter, table, item); + boolean result = deleteItemValues(filter, table); if (logger.isDebugEnabled()) { - logger.debug("JDBC: Deleted values for item '{}' in SQL database at {} in {} ms.", item.getName(), - new Date(), System.currentTimeMillis() - timerStart); + logger.debug("JDBC: Deleted values for item '{}' in SQL database at {} in {} ms.", itemName, new Date(), + System.currentTimeMillis() - timerStart); } return result; diff --git a/bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java b/bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java index 1b58e6243..cc0fe9c4c 100644 --- a/bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java +++ b/bundles/org.openhab.persistence.jdbc/src/test/java/org/openhab/persistence/jdbc/db/JdbcBaseDAOTest.java @@ -83,7 +83,7 @@ public class JdbcBaseDAOTest { @Test public void testHistItemFilterDeleteProviderReturnsDeleteQueryWithoutWhereClause() { String sql = jdbcBaseDAO.histItemFilterDeleteProvider(filter, DB_TABLE_NAME, UTC_ZONE_ID); - assertThat(sql, is("DELETE FROM " + DB_TABLE_NAME)); + assertThat(sql, is("TRUNCATE TABLE " + DB_TABLE_NAME)); } @Test