From 98c40a6e0ea7e150f82dc2dc828db0b5b075c282 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Tue, 17 Dec 2024 20:24:04 +0100 Subject: [PATCH] ArangoDB: between operator --- jnosql-arangodb/pom.xml | 6 ++ .../communication/QueryAQLConverter.java | 8 ++- .../ArangoDBDocumentManagerTest.java | 62 +++++++++++++++++++ .../test/resources/simplelogger.properties | 12 ++++ 4 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 jnosql-arangodb/src/test/resources/simplelogger.properties diff --git a/jnosql-arangodb/pom.xml b/jnosql-arangodb/pom.xml index d5a50da43..912e8ff11 100644 --- a/jnosql-arangodb/pom.xml +++ b/jnosql-arangodb/pom.xml @@ -49,5 +49,11 @@ arangodb-java-driver-shaded ${arango.driver} + + org.slf4j + slf4j-simple + 2.0.16 + test + diff --git a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverter.java b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverter.java index 94e748e3c..9c39166f0 100644 --- a/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverter.java +++ b/jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverter.java @@ -101,7 +101,7 @@ private static AQLQueryResult convert(String documentCollection, .append(", ").append(maxResult); } else if (maxResult > 0) { aql.append(LIMIT).append(maxResult); - } else if(firstResult > 0) { + } else if (firstResult > 0) { aql.append(LIMIT).append(firstResult).append(", null"); } @@ -180,6 +180,12 @@ private static void definesCondition(CriteriaCondition condition, definesCondition(documentCondition, aql, params, entity, ++localCounter); aql.append(END_EXPRESSION); return; + case BETWEEN: + List betweenList = ValueUtil.convertToList(document.value(), ArangoDBValueWriteDecorator.ARANGO_DB_VALUE_WRITER); + appendCondition(aql, params, entity, Element.of(document.name(), betweenList.get(0)), GREATER_EQUALS_THAN); + aql.append(AND); + appendCondition(aql, params, entity, Element.of(document.name(), betweenList.get(1)), LESSER_EQUALS_THAN); + return; default: throw new IllegalArgumentException("The condition does not support in AQL: " + condition.condition()); } diff --git a/jnosql-arangodb/src/test/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentManagerTest.java b/jnosql-arangodb/src/test/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentManagerTest.java index 3c67b1cde..900478bf0 100644 --- a/jnosql-arangodb/src/test/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentManagerTest.java +++ b/jnosql-arangodb/src/test/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentManagerTest.java @@ -343,6 +343,45 @@ void shouldInsertUUID() { } + @Test + void shouldFindBetween() { + var deleteQuery = delete().from(COLLECTION_NAME).where("type").eq("V").build(); + entityManager.delete(deleteQuery); + entityManager.insert(getEntitiesWithValues()); + + var query = select().from(COLLECTION_NAME) + .where("age").between(22, 23) + .build(); + + var result = entityManager.select(query).toList(); + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(result).hasSize(2); + softly.assertThat(result).map(e -> e.find("age").orElseThrow().get(Integer.class)).contains(22, 23); + softly.assertThat(result).map(e -> e.find("age").orElseThrow().get(Integer.class)).doesNotContain(25); + }); + } + + @Test + void shouldFindBetween2() { + var deleteQuery = delete().from(COLLECTION_NAME).where("type").eq("V").build(); + entityManager.delete(deleteQuery); + entityManager.insert(getEntitiesWithValues()); + + var query = select().from(COLLECTION_NAME) + .where("age").between(22, 23) + .and("type").eq("V") + .build(); + + var result = entityManager.select(query).toList(); + + SoftAssertions.assertSoftly(softly -> { + softly.assertThat(result).hasSize(2); + softly.assertThat(result).map(e -> e.find("age").orElseThrow().get(Integer.class)).contains(22, 23); + softly.assertThat(result).map(e -> e.find("age").orElseThrow().get(Integer.class)).doesNotContain(25); + }); + } + private CommunicationEntity getEntity() { CommunicationEntity entity = CommunicationEntity.of(COLLECTION_NAME); Map map = new HashMap<>(); @@ -373,4 +412,27 @@ private CommunicationEntity createDocumentList() { return entity; } + private List getEntitiesWithValues() { + var lucas = CommunicationEntity.of(COLLECTION_NAME); + lucas.add(Element.of("name", "Lucas")); + lucas.add(Element.of("age", 22)); + lucas.add(Element.of("location", "BR")); + lucas.add(Element.of("type", "V")); + + var luna = CommunicationEntity.of(COLLECTION_NAME); + luna.add(Element.of("name", "Luna")); + luna.add(Element.of("age", 23)); + luna.add(Element.of("location", "US")); + luna.add(Element.of("type", "V")); + + var otavio = CommunicationEntity.of(COLLECTION_NAME); + otavio.add(Element.of("name", "Otavio")); + otavio.add(Element.of("age", 25)); + otavio.add(Element.of("location", "BR")); + otavio.add(Element.of("type", "V")); + + + return asList(lucas, otavio, luna); + } + } diff --git a/jnosql-arangodb/src/test/resources/simplelogger.properties b/jnosql-arangodb/src/test/resources/simplelogger.properties new file mode 100644 index 000000000..9268538a1 --- /dev/null +++ b/jnosql-arangodb/src/test/resources/simplelogger.properties @@ -0,0 +1,12 @@ +org.slf4j.simpleLogger.logFile=System.out +org.slf4j.simpleLogger.showDateTime=true +org.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss.SSS +org.slf4j.simpleLogger.showThreadName=true +org.slf4j.simpleLogger.showLogName=true +org.slf4j.simpleLogger.showShortLogName=false + +org.slf4j.simpleLogger.defaultLogLevel=info +org.slf4j.simpleLogger.log.org.testcontainers=warn + +## ArangoDB communication debug level +#org.slf4j.simpleLogger.log.com.arangodb.internal.net.Communication=debug