diff --git a/bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBQueryUtils.java b/bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBQueryUtils.java index e2455ee6d0b02..6db7770d29d25 100644 --- a/bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBQueryUtils.java +++ b/bundles/org.openhab.persistence.dynamodb/src/main/java/org/openhab/persistence/dynamodb/internal/DynamoDBQueryUtils.java @@ -21,6 +21,7 @@ import org.openhab.core.items.GenericItem; import org.openhab.core.items.Item; import org.openhab.core.persistence.FilterCriteria; +import org.openhab.core.persistence.FilterCriteria.Operator; import org.openhab.core.persistence.FilterCriteria.Ordering; import software.amazon.awssdk.enhanced.dynamodb.AttributeConverter; @@ -144,7 +145,7 @@ private static void addStateFilter(QueryEnhancedRequest.Builder queryBuilder, if (filter.getState() != null) { // Convert filter's state to DynamoDBItem in order get suitable string representation for the state Expression.Builder stateFilterExpressionBuilder = Expression.builder() - .expression(String.format("#attr %s :value", filter.getOperator().getSymbol())); + .expression(String.format("#attr %s :value", operatorAsString(filter.getOperator()))); // Following will throw IllegalArgumentException when filter state is not compatible with // item. This is acceptable. GenericItem stateToFind = DynamoDBPersistenceService.copyItem(item, item, filter.getItemName(), @@ -205,6 +206,19 @@ private static void addFilterbyItemAndTimeFilter(QueryEnhancedRequest.Builder qu } } + /** + * Convert op to string suitable for dynamodb filter expression + * + * @param op + * @return string representation corresponding to the given the Operator + */ + private static String operatorAsString(Operator op) { + if (op == Operator.NEQ) { + return "<>"; + } + return op.getSymbol(); + } + private static void acceptAsDTO(Item item, boolean legacy, DynamoDBItemVisitor visitor) { ZonedDateTime dummyTimestamp = ZonedDateTime.now(); if (legacy) {