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..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 = " == "; @@ -157,7 +160,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: @@ -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 8be6c521f..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,21 +11,19 @@ * 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 org.junit.jupiter.api.condition.EnabledIfSystemProperty; +import java.util.List; 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 @@ -135,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); } @@ -154,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); }