Adjust to core changes (#14952)

Signed-off-by: Jan N. Klug <github@klug.nrw>
This commit is contained in:
J-N-K
2023-05-08 09:35:36 +02:00
committed by GitHub
parent 5fe6d325a3
commit c3a9a4c7b6
14 changed files with 124 additions and 80 deletions

View File

@@ -384,6 +384,10 @@ public class DynamoDBPersistenceService implements QueryablePersistenceService {
// Proceed with query
//
String itemName = filter.getItemName();
if (itemName == null) {
logger.warn("Item name is missing in filter {}", filter);
return List.of();
}
Item item = getItemFromRegistry(itemName);
if (item == null) {
logger.warn("Could not get item {} from registry! Returning empty query results.", itemName);

View File

@@ -54,7 +54,11 @@ public class DynamoDBQueryUtils {
}
QueryEnhancedRequest.Builder queryBuilder = QueryEnhancedRequest.builder()
.scanIndexForward(filter.getOrdering() == Ordering.ASCENDING);
addFilterbyItemAndTimeFilter(queryBuilder, expectedTableSchema, filter.getItemName(), filter);
String itemName = filter.getItemName();
if (itemName == null) {
throw new IllegalArgumentException("Item name not set");
}
addFilterbyItemAndTimeFilter(queryBuilder, expectedTableSchema, itemName, filter);
addStateFilter(queryBuilder, expectedTableSchema, item, dtoClass, filter);
addProjection(dtoClass, expectedTableSchema, queryBuilder);
return queryBuilder.build();
@@ -154,26 +158,25 @@ public class DynamoDBQueryUtils {
private static void addFilterbyItemAndTimeFilter(QueryEnhancedRequest.Builder queryBuilder,
ExpectedTableSchema expectedTableSchema, String partition, final FilterCriteria filter) {
boolean hasBegin = filter.getBeginDate() != null;
boolean hasEnd = filter.getEndDate() != null;
ZonedDateTime begin = filter.getBeginDate();
ZonedDateTime end = filter.getEndDate();
boolean legacy = expectedTableSchema == ExpectedTableSchema.LEGACY;
AttributeConverter<ZonedDateTime> timeConverter = AbstractDynamoDBItem.getTimestampConverter(legacy);
if (!hasBegin && !hasEnd) {
// No need to place time filter filter but we do filter by partition
if (begin == null && end == null) {
// No need to place time filter, but we do filter by partition
queryBuilder.queryConditional(QueryConditional.keyEqualTo(k -> k.partitionValue(partition)));
} else if (hasBegin && !hasEnd) {
queryBuilder.queryConditional(QueryConditional.sortGreaterThan(
k -> k.partitionValue(partition).sortValue(timeConverter.transformFrom(filter.getBeginDate()))));
} else if (!hasBegin && hasEnd) {
queryBuilder.queryConditional(QueryConditional.sortLessThan(
k -> k.partitionValue(partition).sortValue(timeConverter.transformFrom(filter.getEndDate()))));
} else {
assert hasBegin && hasEnd; // invariant
} else if (begin != null && end == null) {
queryBuilder.queryConditional(QueryConditional
.sortGreaterThan(k -> k.partitionValue(partition).sortValue(timeConverter.transformFrom(begin))));
} else if (begin == null && end != null) {
queryBuilder.queryConditional(QueryConditional
.sortLessThan(k -> k.partitionValue(partition).sortValue(timeConverter.transformFrom(end))));
} else if (begin != null && end != null) {
queryBuilder.queryConditional(QueryConditional.sortBetween(
k -> k.partitionValue(partition).sortValue(timeConverter.transformFrom(filter.getBeginDate())),
k -> k.partitionValue(partition).sortValue(timeConverter.transformFrom(filter.getEndDate()))));
k -> k.partitionValue(partition).sortValue(timeConverter.transformFrom(begin)),
k -> k.partitionValue(partition).sortValue(timeConverter.transformFrom(end))));
}
}