]> git.basschouten.com Git - openhab-addons.git/commitdiff
Fix Derby/H2/HSQLDB/SQLite queries for storing timestamps (#13817)
authorJacob Laursen <jacob-github@vindvejr.dk>
Fri, 2 Dec 2022 07:14:23 +0000 (08:14 +0100)
committerGitHub <noreply@github.com>
Fri, 2 Dec 2022 07:14:23 +0000 (08:14 +0100)
Fixes #13816

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/db/JdbcDerbyDAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/db/JdbcH2DAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/db/JdbcHsqldbDAO.java
bundles/org.openhab.persistence.jdbc/src/main/java/org/openhab/persistence/jdbc/internal/db/JdbcSqliteDAO.java

index a0c40efe0c0b2663e58609385f6965d781f8f0d8..1b110de9a68eb9fcc37112fd7433959955943b53 100644 (file)
@@ -13,6 +13,7 @@
 package org.openhab.persistence.jdbc.internal.db;
 
 import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -193,6 +194,22 @@ public class JdbcDerbyDAO extends JdbcBaseDAO {
         }
     }
 
+    @Override
+    public void doStoreItemValue(Item item, State itemState, ItemVO vo, ZonedDateTime date) throws JdbcSQLException {
+        ItemVO storedVO = storeItemValueProvider(item, itemState, vo);
+        String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
+                new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
+                new String[] { storedVO.getTableName().toUpperCase(), storedVO.getDbType(), "?" });
+        java.sql.Timestamp timestamp = new java.sql.Timestamp(date.toInstant().toEpochMilli());
+        Object[] params = { timestamp, storedVO.getValue() };
+        logger.debug("JDBC::doStoreItemValue sql={} timestamp={} value='{}'", sql, timestamp, storedVO.getValue());
+        try {
+            Yank.execute(sql, params);
+        } catch (YankSQLException e) {
+            throw new JdbcSQLException(e);
+        }
+    }
+
     @Override
     public List<HistoricItem> doGetHistItemFilterQuery(Item item, FilterCriteria filter, int numberDecimalcount,
             String table, String name, ZoneId timeZone) throws JdbcSQLException {
index 2bbdcf7ebfcce8e3491e69f43c84365c2762299b..8b2ef9ff8d6b734d9cbdaa334f53f8a189ad4086 100644 (file)
@@ -12,6 +12,8 @@
  */
 package org.openhab.persistence.jdbc.internal.db;
 
+import java.time.ZonedDateTime;
+
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.knowm.yank.Yank;
 import org.knowm.yank.exceptions.YankSQLException;
@@ -93,6 +95,22 @@ public class JdbcH2DAO extends JdbcBaseDAO {
         }
     }
 
+    @Override
+    public void doStoreItemValue(Item item, State itemState, ItemVO vo, ZonedDateTime date) throws JdbcSQLException {
+        ItemVO storedVO = storeItemValueProvider(item, itemState, vo);
+        String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
+                new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
+                new String[] { storedVO.getTableName(), storedVO.getDbType(), "?" });
+        java.sql.Timestamp timestamp = new java.sql.Timestamp(date.toInstant().toEpochMilli());
+        Object[] params = { timestamp, storedVO.getValue() };
+        logger.debug("JDBC::doStoreItemValue sql={} timestamp={} value='{}'", sql, timestamp, storedVO.getValue());
+        try {
+            Yank.execute(sql, params);
+        } catch (YankSQLException e) {
+            throw new JdbcSQLException(e);
+        }
+    }
+
     /****************************
      * SQL generation Providers *
      ****************************/
index 35160585bb43beb73a34c50f0c4dd57805cc6322..9fa66d1e5183079ba4fe48857ac2d3fa867ad824 100644 (file)
@@ -12,6 +12,8 @@
  */
 package org.openhab.persistence.jdbc.internal.db;
 
+import java.time.ZonedDateTime;
+
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.knowm.yank.Yank;
@@ -139,6 +141,22 @@ public class JdbcHsqldbDAO extends JdbcBaseDAO {
         }
     }
 
+    @Override
+    public void doStoreItemValue(Item item, State itemState, ItemVO vo, ZonedDateTime date) throws JdbcSQLException {
+        ItemVO storedVO = storeItemValueProvider(item, itemState, vo);
+        String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
+                new String[] { "#tableName#", "#dbType#", "#tableName#", "#tablePrimaryValue#" },
+                new String[] { storedVO.getTableName(), storedVO.getDbType(), storedVO.getTableName(), "?" });
+        java.sql.Timestamp timestamp = new java.sql.Timestamp(date.toInstant().toEpochMilli());
+        Object[] params = { timestamp, storedVO.getValue() };
+        logger.debug("JDBC::doStoreItemValue sql={} timestamp={} value='{}'", sql, timestamp, storedVO.getValue());
+        try {
+            Yank.execute(sql, params);
+        } catch (YankSQLException e) {
+            throw new JdbcSQLException(e);
+        }
+    }
+
     /****************************
      * SQL generation Providers *
      ****************************/
index fc2888e795a6d2a128d16caff92e5d363ec69d6e..27d86988224cfc36120a0666f0b02a0bc6e157f5 100644 (file)
@@ -12,6 +12,8 @@
  */
 package org.openhab.persistence.jdbc.internal.db;
 
+import java.time.ZonedDateTime;
+
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.knowm.yank.Yank;
@@ -121,6 +123,22 @@ public class JdbcSqliteDAO extends JdbcBaseDAO {
         }
     }
 
+    @Override
+    public void doStoreItemValue(Item item, State itemState, ItemVO vo, ZonedDateTime date) throws JdbcSQLException {
+        ItemVO storedVO = storeItemValueProvider(item, itemState, vo);
+        String sql = StringUtilsExt.replaceArrayMerge(sqlInsertItemValue,
+                new String[] { "#tableName#", "#dbType#", "#tablePrimaryValue#" },
+                new String[] { storedVO.getTableName(), storedVO.getDbType(), "?" });
+        java.sql.Timestamp timestamp = new java.sql.Timestamp(date.toInstant().toEpochMilli());
+        Object[] params = { timestamp, storedVO.getValue() };
+        logger.debug("JDBC::doStoreItemValue sql={} timestamp={} value='{}'", sql, timestamp, storedVO.getValue());
+        try {
+            Yank.execute(sql, params);
+        } catch (YankSQLException e) {
+            throw new JdbcSQLException(e);
+        }
+    }
+
     /****************************
      * SQL generation Providers *
      ****************************/