From 937f2d6965716f1e0744aa0de457b4365fe3be75 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Mon, 4 Nov 2024 15:37:36 +0100 Subject: [PATCH 1/2] ArangoDB: fix AQL query generation with AND conditions --- .../databases/arangodb/communication/QueryAQLConverter.java | 2 +- .../arangodb/communication/QueryAQLConverterTest.java | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) 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 9b2fdc7b9..505e5c1d1 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 @@ -157,7 +157,7 @@ private static void definesCondition(CriteriaCondition condition, if (isFirstCondition(aql, counter)) { aql.append(AND); } - definesCondition(dc, aql, params, entity, counter +1); + definesCondition(dc, aql, params, entity, ++counter); } return; case OR: diff --git a/jnosql-arangodb/src/test/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverterTest.java b/jnosql-arangodb/src/test/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverterTest.java index 8be6c521f..03ad17c17 100644 --- a/jnosql-arangodb/src/test/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverterTest.java +++ b/jnosql-arangodb/src/test/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverterTest.java @@ -16,16 +16,12 @@ import org.eclipse.jnosql.communication.semistructured.SelectQuery; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import java.util.Map; -import static org.eclipse.jnosql.communication.driver.IntegrationTest.MATCHES; -import static org.eclipse.jnosql.communication.driver.IntegrationTest.NAMED; import static org.eclipse.jnosql.communication.semistructured.SelectQuery.select; import static org.junit.jupiter.api.Assertions.assertEquals; -@EnabledIfSystemProperty(named = NAMED, matches = MATCHES) public class QueryAQLConverterTest { @Test From 2f7435f38bda8ec37eb23c8b833f0d63056d07c6 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Mon, 4 Nov 2024 21:49:20 +0100 Subject: [PATCH 2/2] ArangoDB: fix precedence of NOT operator in AQL query generation --- .../databases/arangodb/communication/QueryAQLConverter.java | 5 +++++ .../arangodb/communication/QueryAQLConverterTest.java | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) 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 505e5c1d1..f1ea0e3b7 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 @@ -11,6 +11,7 @@ * Contributors: * * Otavio Santana + * Michele Rastelli */ package org.eclipse.jnosql.databases.arangodb.communication; @@ -38,6 +39,8 @@ final class QueryAQLConverter { private static final String REMOVE = " REMOVE "; private static final String RETURN = " RETURN "; private static final String SEPARATOR = " "; + private static final String START_EXPRESSION = "("; + private static final String END_EXPRESSION = ")"; private static final String AND = " AND "; private static final String OR = " OR "; private static final String EQUALS = " == "; @@ -173,7 +176,9 @@ private static void definesCondition(CriteriaCondition condition, case NOT: CriteriaCondition documentCondition = document.get(CriteriaCondition.class); aql.append(NOT); + aql.append(START_EXPRESSION); definesCondition(documentCondition, aql, params, entity, ++counter); + aql.append(END_EXPRESSION); 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/QueryAQLConverterTest.java b/jnosql-arangodb/src/test/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverterTest.java index 03ad17c17..9868635cc 100644 --- a/jnosql-arangodb/src/test/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverterTest.java +++ b/jnosql-arangodb/src/test/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverterTest.java @@ -11,12 +11,14 @@ * Contributors: * * Otavio Santana + * Michele Rastelli */ package org.eclipse.jnosql.databases.arangodb.communication; import org.eclipse.jnosql.communication.semistructured.SelectQuery; import org.junit.jupiter.api.Test; +import java.util.List; import java.util.Map; import static org.eclipse.jnosql.communication.semistructured.SelectQuery.select; @@ -131,7 +133,7 @@ public void shouldRunEqualsQueryNot() { String aql = convert.query(); Map values = convert.values(); assertEquals("value", values.get("name")); - assertEquals("FOR c IN collection FILTER NOT c.name == @name RETURN c", aql); + assertEquals("FOR c IN collection FILTER NOT ( c.name == @name) RETURN c", aql); } @@ -150,7 +152,7 @@ public void shouldNegate() { assertEquals("Assis", values.get("city")); assertEquals("Otavio", values.get("name")); assertEquals("Lucas", values.get("name_1")); - assertEquals("FOR c IN collection FILTER NOT c.city == @city AND c.name == @name OR NOT c.name == @name_1 RETURN c", aql); + assertEquals("FOR c IN collection FILTER NOT ( c.city == @city) AND c.name == @name OR NOT ( c.name == @name_1) RETURN c", aql); }