added realization for Hsql
This commit is contained in:
parent
640e20197f
commit
7f2c36952c
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.thingsboard.server.dao.sqlts.ts;
|
package org.thingsboard.server.dao.sqlts.ts;
|
||||||
|
|
||||||
|
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.thingsboard.server.dao.model.sqlts.ts.TsKvLatestEntity;
|
import org.thingsboard.server.dao.model.sqlts.ts.TsKvLatestEntity;
|
||||||
@ -22,6 +23,9 @@ import org.thingsboard.server.dao.sqlts.AbstractLatestInsertRepository;
|
|||||||
import org.thingsboard.server.dao.util.HsqlDao;
|
import org.thingsboard.server.dao.util.HsqlDao;
|
||||||
import org.thingsboard.server.dao.util.SqlTsDao;
|
import org.thingsboard.server.dao.util.SqlTsDao;
|
||||||
|
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Types;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@SqlTsDao
|
@SqlTsDao
|
||||||
@ -37,6 +41,16 @@ public class HsqlLatestInsertRepository extends AbstractLatestInsertRepository {
|
|||||||
private static final String INSERT_OR_UPDATE_LONG_STATEMENT = getInsertOrUpdateStringHsql(TS_KV_LATEST_TABLE, TS_KV_LATEST_CONSTRAINT, LONG_V, HSQL_LATEST_ON_LONG_VALUE_UPDATE_SET_NULLS);
|
private static final String INSERT_OR_UPDATE_LONG_STATEMENT = getInsertOrUpdateStringHsql(TS_KV_LATEST_TABLE, TS_KV_LATEST_CONSTRAINT, LONG_V, HSQL_LATEST_ON_LONG_VALUE_UPDATE_SET_NULLS);
|
||||||
private static final String INSERT_OR_UPDATE_DBL_STATEMENT = getInsertOrUpdateStringHsql(TS_KV_LATEST_TABLE, TS_KV_LATEST_CONSTRAINT, DBL_V, HSQL_LATEST_ON_DBL_VALUE_UPDATE_SET_NULLS);
|
private static final String INSERT_OR_UPDATE_DBL_STATEMENT = getInsertOrUpdateStringHsql(TS_KV_LATEST_TABLE, TS_KV_LATEST_CONSTRAINT, DBL_V, HSQL_LATEST_ON_DBL_VALUE_UPDATE_SET_NULLS);
|
||||||
|
|
||||||
|
private static final String INSERT_OR_UPDATE =
|
||||||
|
"MERGE INTO ts_kv_latest USING(VALUES ?, ?, ?, ?, ?, ?, ?, ?) " +
|
||||||
|
"T (entity_type, entity_id, key, ts, bool_v, str_v, long_v, dbl_v) " +
|
||||||
|
"ON (ts_kv_latest.entity_type=T.entity_type " +
|
||||||
|
"AND ts_kv_latest.entity_id=T.entity_id " +
|
||||||
|
"AND ts_kv_latest.key=T.key) " +
|
||||||
|
"WHEN MATCHED THEN UPDATE SET ts_kv_latest.ts = T.ts, ts_kv_latest.bool_v = T.bool_v, ts_kv_latest.str_v = T.str_v, ts_kv_latest.long_v = T.long_v, ts_kv_latest.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
|
@Override
|
||||||
public void saveOrUpdate(TsKvLatestEntity entity) {
|
public void saveOrUpdate(TsKvLatestEntity entity) {
|
||||||
processSaveOrUpdate(entity, INSERT_OR_UPDATE_BOOL_STATEMENT, INSERT_OR_UPDATE_STR_STATEMENT, INSERT_OR_UPDATE_LONG_STATEMENT, INSERT_OR_UPDATE_DBL_STATEMENT);
|
processSaveOrUpdate(entity, INSERT_OR_UPDATE_BOOL_STATEMENT, INSERT_OR_UPDATE_STR_STATEMENT, INSERT_OR_UPDATE_LONG_STATEMENT, INSERT_OR_UPDATE_DBL_STATEMENT);
|
||||||
@ -44,7 +58,40 @@ public class HsqlLatestInsertRepository extends AbstractLatestInsertRepository {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveOrUpdate(List<TsKvLatestEntity> entities) {
|
public void saveOrUpdate(List<TsKvLatestEntity> 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
|
@Override
|
||||||
|
|||||||
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.thingsboard.server.dao.sqlts.ts;
|
package org.thingsboard.server.dao.sqlts.ts;
|
||||||
|
|
||||||
|
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.thingsboard.server.dao.model.sqlts.ts.TsKvEntity;
|
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.HsqlDao;
|
||||||
import org.thingsboard.server.dao.util.SqlTsDao;
|
import org.thingsboard.server.dao.util.SqlTsDao;
|
||||||
|
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Types;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@SqlTsDao
|
@SqlTsDao
|
||||||
@ -37,6 +41,17 @@ public class HsqlTimeseriesInsertRepository extends AbstractTimeseriesInsertRepo
|
|||||||
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_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
|
@Override
|
||||||
public void saveOrUpdate(TsKvEntity entity) {
|
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);
|
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
|
@Override
|
||||||
public void saveOrUpdate(List<TsKvEntity> entities) {
|
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
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user