From 9394dc4676012ff9d9999e9981f86c4d91e57459 Mon Sep 17 00:00:00 2001 From: Christoph Weitkamp Date: Sun, 3 Jan 2021 17:34:53 +0100 Subject: [PATCH] [jdbc] Return QuantityTypes for number items with dimension (#9426) Signed-off-by: Christoph Weitkamp --- .../persistence/jdbc/db/JdbcBaseDAO.java | 178 ++++++++++-------- .../persistence/jdbc/db/JdbcDerbyDAO.java | 26 +-- .../persistence/jdbc/db/JdbcMariadbDAO.java | 2 + .../persistence/jdbc/db/JdbcMysqlDAO.java | 2 + .../jdbc/db/JdbcPostgresqlDAO.java | 22 +-- .../persistence/jdbc/internal/JdbcMapper.java | 32 ++-- .../jdbc/internal/JdbcPersistenceService.java | 8 +- 7 files changed, 140 insertions(+), 130 deletions(-) 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 eb111101d4..208e87fbab 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 @@ -18,12 +18,16 @@ import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.stream.Collectors; +import javax.measure.Quantity; +import javax.measure.Unit; + +import org.eclipse.jdt.annotation.Nullable; import org.knowm.yank.Yank; import org.openhab.core.items.GroupItem; import org.openhab.core.items.Item; @@ -41,7 +45,9 @@ import org.openhab.core.library.types.HSBType; import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.OpenClosedType; import org.openhab.core.library.types.PercentType; +import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.types.StringType; +import org.openhab.core.library.unit.Units; import org.openhab.core.persistence.FilterCriteria; import org.openhab.core.persistence.FilterCriteria.Ordering; import org.openhab.core.persistence.HistoricItem; @@ -334,12 +340,11 @@ public class JdbcBaseDAO { String sql = histItemFilterQueryProvider(filter, numberDecimalcount, table, name, timeZone); logger.debug("JDBC::doGetHistItemFilterQuery sql={}", sql); List m = Yank.queryObjectArrays(sql, null); - - List items = new ArrayList<>(); - for (int i = 0; i < m.size(); i++) { - items.add(new JdbcHistoricItem(item.getName(), getState(item, m.get(i)[1]), objectAsDate(m.get(i)[0]))); - } - return items; + // we already retrieve the unit here once as it is a very costly operation + String itemName = item.getName(); + Unit> unit = item instanceof NumberItem ? ((NumberItem) item).getUnit() : null; + return m.stream().map(o -> new JdbcHistoricItem(itemName, getState(item, unit, o[1]), objectAsDate(o[0]))) + .collect(Collectors. toList()); } /************* @@ -347,11 +352,11 @@ public class JdbcBaseDAO { *************/ static final DateTimeFormatter JDBC_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - private String histItemFilterQueryProvider(FilterCriteria filter, int numberDecimalcount, String table, + protected String histItemFilterQueryProvider(FilterCriteria filter, int numberDecimalcount, String table, String simpleName, ZoneId timeZone) { logger.debug( "JDBC::getHistItemFilterQueryProvider filter = {}, numberDecimalcount = {}, table = {}, simpleName = {}", - filter.toString(), numberDecimalcount, table, simpleName); + filter, numberDecimalcount, table, simpleName); String filterString = ""; if (filter.getBeginDate() != null) { @@ -399,61 +404,82 @@ public class JdbcBaseDAO { // insertItemValue logger.debug("JDBC::storeItemValueProvider: getState: '{}'", item.getState()); - if ("COLORITEM".equals(itemType)) { - vo.setValueTypes(getSqlTypes().get(itemType), java.lang.String.class); - vo.setValue(item.getState().toString()); - } else if ("NUMBERITEM".equals(itemType)) { - String it = getSqlTypes().get(itemType); - if (it.toUpperCase().contains("DOUBLE")) { - vo.setValueTypes(it, java.lang.Double.class); - Number newVal = (Number) item.getState(); - logger.debug("JDBC::storeItemValueProvider: newVal.doubleValue: '{}'", newVal.doubleValue()); - vo.setValue(newVal.doubleValue()); - } else if (it.toUpperCase().contains("DECIMAL") || it.toUpperCase().contains("NUMERIC")) { - vo.setValueTypes(it, java.math.BigDecimal.class); - BigDecimal newVal = BigDecimal.valueOf(((Number) item.getState()).doubleValue()); - logger.debug("JDBC::storeItemValueProvider: newVal.toBigDecimal: '{}'", newVal); - vo.setValue(newVal); - } else if (it.toUpperCase().contains("INT")) { - vo.setValueTypes(it, java.lang.Integer.class); - Number newVal = (Number) item.getState(); - logger.debug("JDBC::storeItemValueProvider: newVal.intValue: '{}'", newVal.intValue()); - vo.setValue(newVal.intValue()); - } else {// fall back to String - vo.setValueTypes(it, java.lang.String.class); - logger.warn("JDBC::storeItemValueProvider: item.getState().toString(): '{}'", item.getState()); + /* + * !!ATTENTION!! + * + * 1. DimmerItem.getStateAs(PercentType.class).toString() always + * returns 0 + * RollershutterItem.getStateAs(PercentType.class).toString() works + * as expected + * + * 2. (item instanceof ColorItem) == (item instanceof DimmerItem) = + * true Therefore for instance tests ColorItem always has to be + * tested before DimmerItem + * + * !!ATTENTION!! + */ + switch (itemType) { + case "COLORITEM": + vo.setValueTypes(getSqlTypes().get(itemType), java.lang.String.class); vo.setValue(item.getState().toString()); - } - } else if ("ROLLERSHUTTERITEM".equals(itemType) || "DIMMERITEM".equals(itemType)) { - vo.setValueTypes(getSqlTypes().get(itemType), java.lang.Integer.class); - Number newVal = (DecimalType) item.getState(); - logger.debug("JDBC::storeItemValueProvider: newVal.intValue: '{}'", newVal.intValue()); - vo.setValue(newVal.intValue()); - } else if ("DATETIMEITEM".equals(itemType)) { - vo.setValueTypes(getSqlTypes().get(itemType), java.sql.Timestamp.class); - java.sql.Timestamp d = new java.sql.Timestamp( - ((DateTimeType) item.getState()).getZonedDateTime().toInstant().toEpochMilli()); - logger.debug("JDBC::storeItemValueProvider: DateTimeItem: '{}'", d); - vo.setValue(d); - } else { - /* - * !!ATTENTION!! - * - * 1. DimmerItem.getStateAs(PercentType.class).toString() always - * returns 0 - * RollershutterItem.getStateAs(PercentType.class).toString() works - * as expected - * - * 2. (item instanceof ColorItem) == (item instanceof DimmerItem) = - * true Therefore for instance tests ColorItem always has to be - * tested before DimmerItem - * - * !!ATTENTION!! - */ - // All other items should return the best format by default - vo.setValueTypes(getSqlTypes().get(itemType), java.lang.String.class); - logger.debug("JDBC::storeItemValueProvider: other: item.getState().toString(): '{}'", item.getState()); - vo.setValue(item.getState().toString()); + break; + case "NUMBERITEM": + State state = item.getState(); + State convertedState = state; + if (item instanceof NumberItem && state instanceof QuantityType) { + Unit> unit = ((NumberItem) item).getUnit(); + if (unit != null && !Units.ONE.equals(unit)) { + convertedState = ((QuantityType) state).toUnit(unit); + if (convertedState == null) { + logger.warn( + "JDBC::storeItemValueProvider: Failed to convert state '{}' to unit '{}'. Please check your item definition for correctness.", + state, unit); + convertedState = state; + } + } + } + String it = getSqlTypes().get(itemType); + if (it.toUpperCase().contains("DOUBLE")) { + vo.setValueTypes(it, java.lang.Double.class); + double value = ((Number) convertedState).doubleValue(); + logger.debug("JDBC::storeItemValueProvider: newVal.doubleValue: '{}'", value); + vo.setValue(value); + } else if (it.toUpperCase().contains("DECIMAL") || it.toUpperCase().contains("NUMERIC")) { + vo.setValueTypes(it, java.math.BigDecimal.class); + BigDecimal value = BigDecimal.valueOf(((Number) convertedState).doubleValue()); + logger.debug("JDBC::storeItemValueProvider: newVal.toBigDecimal: '{}'", value); + vo.setValue(value); + } else if (it.toUpperCase().contains("INT")) { + vo.setValueTypes(it, java.lang.Integer.class); + int value = ((Number) convertedState).intValue(); + logger.debug("JDBC::storeItemValueProvider: newVal.intValue: '{}'", value); + vo.setValue(value); + } else {// fall back to String + vo.setValueTypes(it, java.lang.String.class); + logger.warn("JDBC::storeItemValueProvider: item.getState().toString(): '{}'", convertedState); + vo.setValue(convertedState.toString()); + } + break; + case "ROLLERSHUTTERITEM": + case "DIMMERITEM": + vo.setValueTypes(getSqlTypes().get(itemType), java.lang.Integer.class); + int value = ((DecimalType) item.getState()).intValue(); + logger.debug("JDBC::storeItemValueProvider: newVal.intValue: '{}'", value); + vo.setValue(value); + break; + case "DATETIMEITEM": + vo.setValueTypes(getSqlTypes().get(itemType), java.sql.Timestamp.class); + java.sql.Timestamp d = new java.sql.Timestamp( + ((DateTimeType) item.getState()).getZonedDateTime().toInstant().toEpochMilli()); + logger.debug("JDBC::storeItemValueProvider: DateTimeItem: '{}'", d); + vo.setValue(d); + break; + default: + // All other items should return the best format by default + vo.setValueTypes(getSqlTypes().get(itemType), java.lang.String.class); + logger.debug("JDBC::storeItemValueProvider: other: item.getState().toString(): '{}'", item.getState()); + vo.setValue(item.getState().toString()); + break; } return vo; } @@ -461,20 +487,24 @@ public class JdbcBaseDAO { /***************** * H E L P E R S * *****************/ - protected State getState(Item item, Object v) { - String clazz = v.getClass().getSimpleName(); - logger.debug("JDBC::ItemResultHandler::handleResult getState value = '{}', getClass = '{}', clazz = '{}'", - v.toString(), v.getClass(), clazz); + protected State getState(Item item, @Nullable Unit> unit, Object v) { + logger.debug( + "JDBC::ItemResultHandler::handleResult getState value = '{}', unit = '{}', getClass = '{}', clazz = '{}'", + v, unit, v.getClass(), v.getClass().getSimpleName()); if (item instanceof NumberItem) { String it = getSqlTypes().get("NUMBERITEM"); if (it.toUpperCase().contains("DOUBLE")) { - return new DecimalType(((Number) v).doubleValue()); + return unit == null ? new DecimalType(((Number) v).doubleValue()) + : QuantityType.valueOf(((Number) v).doubleValue(), unit); } else if (it.toUpperCase().contains("DECIMAL") || it.toUpperCase().contains("NUMERIC")) { - return new DecimalType((BigDecimal) v); + return unit == null ? new DecimalType((BigDecimal) v) + : QuantityType.valueOf(((BigDecimal) v).doubleValue(), unit); } else if (it.toUpperCase().contains("INT")) { - return new DecimalType(((Integer) v).intValue()); + return unit == null ? new DecimalType(((Integer) v).intValue()) + : QuantityType.valueOf(((Integer) v).doubleValue(), unit); } - return DecimalType.valueOf(((String) v).toString()); + return unit == null ? DecimalType.valueOf(((String) v).toString()) + : QuantityType.valueOf(((String) v).toString()); } else if (item instanceof ColorItem) { return HSBType.valueOf(((String) v).toString()); } else if (item instanceof DimmerItem) { @@ -524,11 +554,7 @@ public class JdbcBaseDAO { if (i instanceof GroupItem) { item = ((GroupItem) i).getBaseItem(); if (item == null) { - // if GroupItem: is not defined in - // *.items using StringType - // logger.debug("JDBC: BaseItem GroupItem: is not - // defined in *.items searching for first Member and try to use - // as ItemType"); + // if GroupItem: is not defined in *.items using StringType logger.debug( "JDBC::getItemType: Cannot detect ItemType for {} because the GroupItems' base type isn't set in *.items File.", i.getName()); diff --git a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcDerbyDAO.java b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcDerbyDAO.java index 76b57e9cd6..973cdc125e 100644 --- a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcDerbyDAO.java +++ b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcDerbyDAO.java @@ -13,12 +13,15 @@ package org.openhab.persistence.jdbc.db; import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; + +import javax.measure.Quantity; +import javax.measure.Unit; import org.knowm.yank.Yank; import org.openhab.core.items.Item; +import org.openhab.core.library.items.NumberItem; import org.openhab.core.persistence.FilterCriteria; import org.openhab.core.persistence.FilterCriteria.Ordering; import org.openhab.core.persistence.HistoricItem; @@ -160,23 +163,22 @@ public class JdbcDerbyDAO extends JdbcBaseDAO { String table, String name, ZoneId timeZone) { String sql = histItemFilterQueryProvider(filter, numberDecimalcount, table, name, timeZone); List m = Yank.queryObjectArrays(sql, null); - logger.debug("JDBC::doGetHistItemFilterQuery got Array length={}", m.size()); - - List items = new ArrayList<>(); - for (int i = 0; i < m.size(); i++) { - logger.debug("JDBC::doGetHistItemFilterQuery 0='{}' 1='{}'", m.get(i)[0], m.get(i)[1]); - items.add(new JdbcHistoricItem(item.getName(), getState(item, m.get(i)[1]), objectAsDate(m.get(i)[0]))); - } - return items; + // we already retrieve the unit here once as it is a very costly operation + String itemName = item.getName(); + Unit> unit = item instanceof NumberItem ? ((NumberItem) item).getUnit() : null; + return m.stream().map(o -> { + logger.debug("JDBC::doGetHistItemFilterQuery 0='{}' 1='{}'", o[0], o[1]); + return new JdbcHistoricItem(itemName, getState(item, unit, o[1]), objectAsDate(o[0])); + }).collect(Collectors. toList()); } /**************************** * SQL generation Providers * ****************************/ - static final DateTimeFormatter JDBC_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - private String histItemFilterQueryProvider(FilterCriteria filter, int numberDecimalcount, String table, + @Override + protected String histItemFilterQueryProvider(FilterCriteria filter, int numberDecimalcount, String table, String simpleName, ZoneId timeZone) { logger.debug( "JDBC::getHistItemFilterQueryProvider filter = {}, numberDecimalcount = {}, table = {}, simpleName = {}", diff --git a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcMariadbDAO.java b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcMariadbDAO.java index 8e898615f3..f91811704b 100644 --- a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcMariadbDAO.java +++ b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcMariadbDAO.java @@ -12,6 +12,7 @@ */ package org.openhab.persistence.jdbc.db; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.knowm.yank.Yank; import org.openhab.persistence.jdbc.utils.DbMetaData; import org.slf4j.Logger; @@ -24,6 +25,7 @@ import org.slf4j.LoggerFactory; * * @author Helmut Lehmeyer - Initial contribution */ +@NonNullByDefault public class JdbcMariadbDAO extends JdbcBaseDAO { private final Logger logger = LoggerFactory.getLogger(JdbcMariadbDAO.class); diff --git a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcMysqlDAO.java b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcMysqlDAO.java index db2b3cabeb..af83ae0f60 100644 --- a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcMysqlDAO.java +++ b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcMysqlDAO.java @@ -12,6 +12,7 @@ */ package org.openhab.persistence.jdbc.db; +import org.eclipse.jdt.annotation.NonNullByDefault; import org.knowm.yank.Yank; import org.openhab.persistence.jdbc.utils.DbMetaData; import org.slf4j.Logger; @@ -28,6 +29,7 @@ import org.slf4j.LoggerFactory; * * @author Helmut Lehmeyer - Initial contribution */ +@NonNullByDefault public class JdbcMysqlDAO extends JdbcBaseDAO { private final Logger logger = LoggerFactory.getLogger(JdbcMysqlDAO.class); diff --git a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcPostgresqlDAO.java b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcPostgresqlDAO.java index 55bc207b83..8a7ef69cca 100644 --- a/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcPostgresqlDAO.java +++ b/bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/db/JdbcPostgresqlDAO.java @@ -13,18 +13,14 @@ package org.openhab.persistence.jdbc.db; import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; import java.util.List; import org.knowm.yank.Yank; import org.openhab.core.items.Item; import org.openhab.core.persistence.FilterCriteria; import org.openhab.core.persistence.FilterCriteria.Ordering; -import org.openhab.core.persistence.HistoricItem; import org.openhab.persistence.jdbc.model.ItemVO; import org.openhab.persistence.jdbc.model.ItemsVO; -import org.openhab.persistence.jdbc.model.JdbcHistoricItem; import org.openhab.persistence.jdbc.utils.StringUtilsExt; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -145,26 +141,12 @@ public class JdbcPostgresqlDAO extends JdbcBaseDAO { Yank.execute(sql, params); } - @Override - public List doGetHistItemFilterQuery(Item item, FilterCriteria filter, int numberDecimalcount, - String table, String name, ZoneId timeZone) { - String sql = histItemFilterQueryProvider(filter, numberDecimalcount, table, name, timeZone); - logger.debug("JDBC::doGetHistItemFilterQuery sql={}", sql); - List m = Yank.queryObjectArrays(sql, null); - - List items = new ArrayList<>(); - for (int i = 0; i < m.size(); i++) { - items.add(new JdbcHistoricItem(item.getName(), getState(item, m.get(i)[1]), objectAsDate(m.get(i)[0]))); - } - return items; - } - /**************************** * SQL generation Providers * ****************************/ - static final DateTimeFormatter JDBC_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); - private String histItemFilterQueryProvider(FilterCriteria filter, int numberDecimalcount, String table, + @Override + protected String histItemFilterQueryProvider(FilterCriteria filter, int numberDecimalcount, String table, String simpleName, ZoneId timeZone) { logger.debug( "JDBC::getHistItemFilterQueryProvider filter = {}, numberDecimalcount = {}, table = {}, simpleName = {}", 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 93814adfb9..c89389ce61 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 @@ -146,7 +146,7 @@ public class JdbcMapper { } public Item storeItemValue(Item item) { - logger.debug("JDBC::storeItemValue: item={}", item.toString()); + logger.debug("JDBC::storeItemValue: item={}", item); String tableName = getTable(item); if (tableName == null) { logger.error("JDBC::store: Unable to store item '{}'.", item.getName()); @@ -166,10 +166,11 @@ public class JdbcMapper { (filter != null), numberDecimalcount, table, item, item.getName()); if (table != null) { long timerStart = System.currentTimeMillis(); - List r = conf.getDBDAO().doGetHistItemFilterQuery(item, filter, numberDecimalcount, table, - item.getName(), timeZoneProvider.getTimeZone()); - logTime("insertItemValue", timerStart, System.currentTimeMillis()); - return r; + List result = conf.getDBDAO().doGetHistItemFilterQuery(item, filter, numberDecimalcount, + table, item.getName(), timeZoneProvider.getTimeZone()); + logTime("getHistItemFilterQuery", timerStart, System.currentTimeMillis()); + errCnt = 0; + return result; } else { logger.error("JDBC::getHistItemFilterQuery: TABLE is NULL; cannot get data from non-existent table."); } @@ -230,13 +231,10 @@ public class JdbcMapper { logger.info( "JDBC::checkDBSchema: Rebuild complete, configure the 'rebuildTableNames' setting to 'false' to stop rebuilds on startup"); } else { - List al; // Reset the error counter errCnt = 0; - al = getItemIDTableNames(); - for (int i = 0; i < al.size(); i++) { - String t = getTableName(al.get(i).getItemid(), al.get(i).getItemname()); - sqlTables.put(al.get(i).getItemname(), t); + for (ItemsVO vo : getItemIDTableNames()) { + sqlTables.put(vo.getItemname(), getTableName(vo.getItemid(), vo.getItemname())); } } } @@ -303,19 +301,17 @@ public class JdbcMapper { initialized = false; } - List al; Map tableIds = new HashMap<>(); // - al = getItemIDTableNames(); - for (int i = 0; i < al.size(); i++) { - String t = getTableName(al.get(i).getItemid(), al.get(i).getItemname()); - sqlTables.put(al.get(i).getItemname(), t); - tableIds.put(al.get(i).getItemid(), t); + for (ItemsVO vo : getItemIDTableNames()) { + String t = getTableName(vo.getItemid(), vo.getItemname()); + sqlTables.put(vo.getItemname(), t); + tableIds.put(vo.getItemid(), t); } // - al = getItemTables(); + List al = getItemTables(); String oldName = ""; String newName = ""; @@ -375,7 +371,7 @@ public class JdbcMapper { // TODO: in general it would be possible to query the count, earliest and latest values for each item too but it // would be a very costly operation return sqlTables.keySet().stream().map(itemName -> new JdbcPersistenceItemInfo(itemName)) - .collect(Collectors. toUnmodifiableSet()); + .collect(Collectors. toSet()); } private static String formatRight(final Object value, final int len) { 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 40c26df1a3..44e584303a 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 @@ -128,7 +128,7 @@ public class JdbcPersistenceService extends JdbcMapper implements QueryablePersi */ @Override public void store(Item item, @Nullable String alias) { - // Don not store undefined/uninitialised data + // Do not store undefined/uninitialized data if (item.getState() instanceof UnDefType) { logger.debug("JDBC::store: ignore Item '{}' because it is UnDefType", item.getName()); return; @@ -141,8 +141,8 @@ public class JdbcPersistenceService extends JdbcMapper implements QueryablePersi } long timerStart = System.currentTimeMillis(); storeItemValue(item); - logger.debug("JDBC: Stored item '{}' as '{}' in SQL database at {} in {} ms.", item.getName(), - item.getState().toString(), (new java.util.Date()).toString(), System.currentTimeMillis() - timerStart); + logger.debug("JDBC: Stored item '{}' as '{}' in SQL database at {} in {} ms.", item.getName(), item.getState(), + new java.util.Date(), System.currentTimeMillis() - timerStart); } @Override @@ -204,7 +204,7 @@ public class JdbcPersistenceService extends JdbcMapper implements QueryablePersi long timerStart = System.currentTimeMillis(); List items = getHistItemFilterQuery(filter, conf.getNumberDecimalcount(), table, item); - logger.debug("JDBC::query: query for {} returned {} rows in {} ms", item.getName(), items.size(), + logger.debug("JDBC::query: query for {} returned {} rows in {} ms", itemName, items.size(), System.currentTimeMillis() - timerStart); // Success -- 2.47.3