Fix native query for SQL_Server. (#732)
This commit is contained in:
@@ -11,6 +11,7 @@ package org.eclipse.hawkbit.repository.jpa;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@@ -106,7 +107,16 @@ public class JpaDeploymentManagement implements DeploymentManagement {
|
||||
*/
|
||||
private static final int ACTION_PAGE_LIMIT = 1000;
|
||||
|
||||
private static final String QUERY_DELETE_ACTIONS_BY_STATE_AND_LAST_MODIFIED = "DELETE FROM sp_action WHERE tenant=#tenant AND status IN (%s) AND last_modified_at<#last_modified_at LIMIT 1000";
|
||||
private static final String QUERY_DELETE_ACTIONS_BY_STATE_AND_LAST_MODIFIED_DEFAULT = "DELETE FROM sp_action WHERE tenant=#tenant AND status IN (%s) AND last_modified_at<#last_modified_at LIMIT "
|
||||
+ ACTION_PAGE_LIMIT;
|
||||
|
||||
private static final EnumMap<Database, String> QUERY_DELETE_ACTIONS_BY_STATE_AND_LAST_MODIFIED;
|
||||
|
||||
static {
|
||||
QUERY_DELETE_ACTIONS_BY_STATE_AND_LAST_MODIFIED = new EnumMap<>(Database.class);
|
||||
QUERY_DELETE_ACTIONS_BY_STATE_AND_LAST_MODIFIED.put(Database.SQL_SERVER, "DELETE TOP (" + ACTION_PAGE_LIMIT
|
||||
+ ") FROM sp_action WHERE tenant=#tenant AND status IN (%s) AND last_modified_at<#last_modified_at ");
|
||||
}
|
||||
|
||||
private final EntityManager entityManager;
|
||||
private final ActionRepository actionRepository;
|
||||
@@ -713,7 +723,7 @@ public class JpaDeploymentManagement implements DeploymentManagement {
|
||||
final int statusCount = status.size();
|
||||
final Status[] statusArr = status.toArray(new Status[statusCount]);
|
||||
|
||||
final String queryStr = String.format(QUERY_DELETE_ACTIONS_BY_STATE_AND_LAST_MODIFIED,
|
||||
final String queryStr = String.format(getQueryForDeleteActionsByStatusAndLastModifiedBeforeString(database),
|
||||
formatInClauseWithNumberKeys(statusCount));
|
||||
final Query deleteQuery = entityManager.createNativeQuery(queryStr);
|
||||
|
||||
@@ -726,6 +736,11 @@ public class JpaDeploymentManagement implements DeploymentManagement {
|
||||
return deleteQuery.executeUpdate();
|
||||
}
|
||||
|
||||
private static String getQueryForDeleteActionsByStatusAndLastModifiedBeforeString(Database database) {
|
||||
return QUERY_DELETE_ACTIONS_BY_STATE_AND_LAST_MODIFIED.getOrDefault(database,
|
||||
QUERY_DELETE_ACTIONS_BY_STATE_AND_LAST_MODIFIED_DEFAULT);
|
||||
}
|
||||
|
||||
private static String formatInClauseWithNumberKeys(final int count) {
|
||||
return formatInClause(IntStream.range(0, count).mapToObj(String::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user