|
|
|
@ -15,6 +15,7 @@ |
|
|
|
*/ |
|
|
|
package org.thingsboard.server.dao.sqlts.ts; |
|
|
|
|
|
|
|
import org.springframework.jdbc.core.BatchPreparedStatementSetter; |
|
|
|
import org.springframework.stereotype.Repository; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.thingsboard.server.dao.model.sqlts.ts.TsKvEntity; |
|
|
|
@ -22,6 +23,9 @@ import org.thingsboard.server.dao.sqlts.AbstractTimeseriesInsertRepository; |
|
|
|
import org.thingsboard.server.dao.util.HsqlDao; |
|
|
|
import org.thingsboard.server.dao.util.SqlTsDao; |
|
|
|
|
|
|
|
import java.sql.PreparedStatement; |
|
|
|
import java.sql.SQLException; |
|
|
|
import java.sql.Types; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
@SqlTsDao |
|
|
|
@ -34,9 +38,20 @@ public class HsqlTimeseriesInsertRepository extends AbstractTimeseriesInsertRepo |
|
|
|
|
|
|
|
private static final String INSERT_OR_UPDATE_BOOL_STATEMENT = getInsertOrUpdateStringHsql(TS_KV_TABLE, TS_KV_CONSTRAINT, BOOL_V, HSQL_ON_BOOL_VALUE_UPDATE_SET_NULLS); |
|
|
|
private static final String INSERT_OR_UPDATE_STR_STATEMENT = getInsertOrUpdateStringHsql(TS_KV_TABLE, TS_KV_CONSTRAINT, STR_V, HSQL_ON_STR_VALUE_UPDATE_SET_NULLS); |
|
|
|
private static final String INSERT_OR_UPDATE_LONG_STATEMENT = getInsertOrUpdateStringHsql(TS_KV_TABLE, TS_KV_CONSTRAINT, LONG_V , HSQL_ON_LONG_VALUE_UPDATE_SET_NULLS); |
|
|
|
private static final String INSERT_OR_UPDATE_LONG_STATEMENT = getInsertOrUpdateStringHsql(TS_KV_TABLE, TS_KV_CONSTRAINT, LONG_V, HSQL_ON_LONG_VALUE_UPDATE_SET_NULLS); |
|
|
|
private static final String INSERT_OR_UPDATE_DBL_STATEMENT = getInsertOrUpdateStringHsql(TS_KV_TABLE, TS_KV_CONSTRAINT, DBL_V, HSQL_ON_DBL_VALUE_UPDATE_SET_NULLS); |
|
|
|
|
|
|
|
private static final String INSERT_OR_UPDATE = |
|
|
|
"MERGE INTO ts_kv USING(VALUES ?, ?, ?, ?, ?, ?, ?, ?) " + |
|
|
|
"T (entity_type, entity_id, key, ts, bool_v, str_v, long_v, dbl_v) " + |
|
|
|
"ON (ts_kv.entity_type=T.entity_type " + |
|
|
|
"AND ts_kv.entity_id=T.entity_id " + |
|
|
|
"AND ts_kv.key=T.key " + |
|
|
|
"AND ts_kv.ts=T.ts) " + |
|
|
|
"WHEN MATCHED THEN UPDATE SET ts_kv.bool_v = T.bool_v, ts_kv.str_v = T.str_v, ts_kv.long_v = T.long_v, ts_kv.dbl_v = T.dbl_v " + |
|
|
|
"WHEN NOT MATCHED THEN INSERT (entity_type, entity_id, key, ts, bool_v, str_v, long_v, dbl_v) " + |
|
|
|
"VALUES (T.entity_type, T.entity_id, T.key, T.ts, T.bool_v, T.str_v, T.long_v, T.dbl_v);"; |
|
|
|
|
|
|
|
@Override |
|
|
|
public void saveOrUpdate(TsKvEntity entity) { |
|
|
|
processSaveOrUpdate(entity, INSERT_OR_UPDATE_BOOL_STATEMENT, INSERT_OR_UPDATE_STR_STATEMENT, INSERT_OR_UPDATE_LONG_STATEMENT, INSERT_OR_UPDATE_DBL_STATEMENT); |
|
|
|
@ -44,7 +59,40 @@ public class HsqlTimeseriesInsertRepository extends AbstractTimeseriesInsertRepo |
|
|
|
|
|
|
|
@Override |
|
|
|
public void saveOrUpdate(List<TsKvEntity> entities) { |
|
|
|
jdbcTemplate.batchUpdate(INSERT_OR_UPDATE, new BatchPreparedStatementSetter() { |
|
|
|
@Override |
|
|
|
public void setValues(PreparedStatement ps, int i) throws SQLException { |
|
|
|
ps.setString(1, entities.get(i).getEntityType().name()); |
|
|
|
ps.setString(2, entities.get(i).getEntityId()); |
|
|
|
ps.setString(3, entities.get(i).getKey()); |
|
|
|
ps.setLong(4, entities.get(i).getTs()); |
|
|
|
|
|
|
|
if (entities.get(i).getBooleanValue() != null) { |
|
|
|
ps.setBoolean(5, entities.get(i).getBooleanValue()); |
|
|
|
} else { |
|
|
|
ps.setNull(5, Types.BOOLEAN); |
|
|
|
} |
|
|
|
|
|
|
|
ps.setString(6, entities.get(i).getStrValue()); |
|
|
|
|
|
|
|
if (entities.get(i).getLongValue() != null) { |
|
|
|
ps.setLong(7, entities.get(i).getLongValue()); |
|
|
|
} else { |
|
|
|
ps.setNull(7, Types.BIGINT); |
|
|
|
} |
|
|
|
|
|
|
|
if (entities.get(i).getDoubleValue() != null) { |
|
|
|
ps.setDouble(8, entities.get(i).getDoubleValue()); |
|
|
|
} else { |
|
|
|
ps.setNull(8, Types.DOUBLE); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public int getBatchSize() { |
|
|
|
return entities.size(); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
|