Search in sources :

Example 6 with TsKvLatestEntity

use of org.thingsboard.server.dao.model.sqlts.latest.TsKvLatestEntity in project thingsboard by thingsboard.

the class PsqlLatestInsertTsRepository method saveOrUpdate.

@Override
public void saveOrUpdate(List<TsKvLatestEntity> entities) {
    transactionTemplate.execute(new TransactionCallbackWithoutResult() {

        @Override
        protected void doInTransactionWithoutResult(TransactionStatus status) {
            String batchUpdateQuery = updateByLatestTs ? BATCH_UPDATE_BY_LATEST_TS : BATCH_UPDATE;
            String insertOrUpdateQuery = updateByLatestTs ? INSERT_OR_UPDATE_BY_LATEST_TS : INSERT_OR_UPDATE;
            int[] result = jdbcTemplate.batchUpdate(batchUpdateQuery, new BatchPreparedStatementSetter() {

                @Override
                public void setValues(PreparedStatement ps, int i) throws SQLException {
                    TsKvLatestEntity tsKvLatestEntity = entities.get(i);
                    ps.setLong(1, tsKvLatestEntity.getTs());
                    if (tsKvLatestEntity.getBooleanValue() != null) {
                        ps.setBoolean(2, tsKvLatestEntity.getBooleanValue());
                    } else {
                        ps.setNull(2, Types.BOOLEAN);
                    }
                    ps.setString(3, replaceNullChars(tsKvLatestEntity.getStrValue()));
                    if (tsKvLatestEntity.getLongValue() != null) {
                        ps.setLong(4, tsKvLatestEntity.getLongValue());
                    } else {
                        ps.setNull(4, Types.BIGINT);
                    }
                    if (tsKvLatestEntity.getDoubleValue() != null) {
                        ps.setDouble(5, tsKvLatestEntity.getDoubleValue());
                    } else {
                        ps.setNull(5, Types.DOUBLE);
                    }
                    ps.setString(6, replaceNullChars(tsKvLatestEntity.getJsonValue()));
                    ps.setObject(7, tsKvLatestEntity.getEntityId());
                    ps.setInt(8, tsKvLatestEntity.getKey());
                    if (updateByLatestTs) {
                        ps.setLong(9, tsKvLatestEntity.getTs());
                    }
                }

                @Override
                public int getBatchSize() {
                    return entities.size();
                }
            });
            int updatedCount = 0;
            for (int i = 0; i < result.length; i++) {
                if (result[i] == 0) {
                    updatedCount++;
                }
            }
            List<TsKvLatestEntity> insertEntities = new ArrayList<>(updatedCount);
            for (int i = 0; i < result.length; i++) {
                if (result[i] == 0) {
                    insertEntities.add(entities.get(i));
                }
            }
            jdbcTemplate.batchUpdate(insertOrUpdateQuery, new BatchPreparedStatementSetter() {

                @Override
                public void setValues(PreparedStatement ps, int i) throws SQLException {
                    TsKvLatestEntity tsKvLatestEntity = insertEntities.get(i);
                    ps.setObject(1, tsKvLatestEntity.getEntityId());
                    ps.setInt(2, tsKvLatestEntity.getKey());
                    ps.setLong(3, tsKvLatestEntity.getTs());
                    ps.setLong(9, tsKvLatestEntity.getTs());
                    if (updateByLatestTs) {
                        ps.setLong(15, tsKvLatestEntity.getTs());
                    }
                    if (tsKvLatestEntity.getBooleanValue() != null) {
                        ps.setBoolean(4, tsKvLatestEntity.getBooleanValue());
                        ps.setBoolean(10, tsKvLatestEntity.getBooleanValue());
                    } else {
                        ps.setNull(4, Types.BOOLEAN);
                        ps.setNull(10, Types.BOOLEAN);
                    }
                    ps.setString(5, replaceNullChars(tsKvLatestEntity.getStrValue()));
                    ps.setString(11, replaceNullChars(tsKvLatestEntity.getStrValue()));
                    if (tsKvLatestEntity.getLongValue() != null) {
                        ps.setLong(6, tsKvLatestEntity.getLongValue());
                        ps.setLong(12, tsKvLatestEntity.getLongValue());
                    } else {
                        ps.setNull(6, Types.BIGINT);
                        ps.setNull(12, Types.BIGINT);
                    }
                    if (tsKvLatestEntity.getDoubleValue() != null) {
                        ps.setDouble(7, tsKvLatestEntity.getDoubleValue());
                        ps.setDouble(13, tsKvLatestEntity.getDoubleValue());
                    } else {
                        ps.setNull(7, Types.DOUBLE);
                        ps.setNull(13, Types.DOUBLE);
                    }
                    ps.setString(8, replaceNullChars(tsKvLatestEntity.getJsonValue()));
                    ps.setString(14, replaceNullChars(tsKvLatestEntity.getJsonValue()));
                }

                @Override
                public int getBatchSize() {
                    return insertEntities.size();
                }
            });
        }
    });
}
Also used : TsKvLatestEntity(org.thingsboard.server.dao.model.sqlts.latest.TsKvLatestEntity) BatchPreparedStatementSetter(org.springframework.jdbc.core.BatchPreparedStatementSetter) TransactionStatus(org.springframework.transaction.TransactionStatus) PreparedStatement(java.sql.PreparedStatement) ArrayList(java.util.ArrayList) List(java.util.List) TransactionCallbackWithoutResult(org.springframework.transaction.support.TransactionCallbackWithoutResult)

Aggregations

TsKvLatestEntity (org.thingsboard.server.dao.model.sqlts.latest.TsKvLatestEntity)6 BasicTsKvEntry (org.thingsboard.server.common.data.kv.BasicTsKvEntry)3 TsKvEntry (org.thingsboard.server.common.data.kv.TsKvEntry)3 ArrayList (java.util.ArrayList)2 List (java.util.List)2 StringDataEntry (org.thingsboard.server.common.data.kv.StringDataEntry)2 TsKvLatestRemovingResult (org.thingsboard.server.common.data.kv.TsKvLatestRemovingResult)2 TsKvLatestCompositeKey (org.thingsboard.server.dao.model.sqlts.latest.TsKvLatestCompositeKey)2 Lists (com.google.common.collect.Lists)1 Futures (com.google.common.util.concurrent.Futures)1 ListenableFuture (com.google.common.util.concurrent.ListenableFuture)1 MoreExecutors (com.google.common.util.concurrent.MoreExecutors)1 PreparedStatement (java.sql.PreparedStatement)1 Comparator (java.util.Comparator)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 Optional (java.util.Optional)1 UUID (java.util.UUID)1 Function (java.util.function.Function)1 Collectors (java.util.stream.Collectors)1