Skip to content

Commit 2f7435f

Browse files
committed
ArangoDB: fix precedence of NOT operator in AQL query generation
1 parent 937f2d6 commit 2f7435f

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* Contributors:
1212
*
1313
* Otavio Santana
14+
* Michele Rastelli
1415
*/
1516
package org.eclipse.jnosql.databases.arangodb.communication;
1617

@@ -38,6 +39,8 @@ final class QueryAQLConverter {
3839
private static final String REMOVE = " REMOVE ";
3940
private static final String RETURN = " RETURN ";
4041
private static final String SEPARATOR = " ";
42+
private static final String START_EXPRESSION = "(";
43+
private static final String END_EXPRESSION = ")";
4144
private static final String AND = " AND ";
4245
private static final String OR = " OR ";
4346
private static final String EQUALS = " == ";
@@ -173,7 +176,9 @@ private static void definesCondition(CriteriaCondition condition,
173176
case NOT:
174177
CriteriaCondition documentCondition = document.get(CriteriaCondition.class);
175178
aql.append(NOT);
179+
aql.append(START_EXPRESSION);
176180
definesCondition(documentCondition, aql, params, entity, ++counter);
181+
aql.append(END_EXPRESSION);
177182
return;
178183
default:
179184
throw new IllegalArgumentException("The condition does not support in AQL: " + condition.condition());

jnosql-arangodb/src/test/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverterTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@
1111
* Contributors:
1212
*
1313
* Otavio Santana
14+
* Michele Rastelli
1415
*/
1516
package org.eclipse.jnosql.databases.arangodb.communication;
1617

1718
import org.eclipse.jnosql.communication.semistructured.SelectQuery;
1819
import org.junit.jupiter.api.Test;
1920

21+
import java.util.List;
2022
import java.util.Map;
2123

2224
import static org.eclipse.jnosql.communication.semistructured.SelectQuery.select;
@@ -131,7 +133,7 @@ public void shouldRunEqualsQueryNot() {
131133
String aql = convert.query();
132134
Map<String, Object> values = convert.values();
133135
assertEquals("value", values.get("name"));
134-
assertEquals("FOR c IN collection FILTER NOT c.name == @name RETURN c", aql);
136+
assertEquals("FOR c IN collection FILTER NOT ( c.name == @name) RETURN c", aql);
135137

136138
}
137139

@@ -150,7 +152,7 @@ public void shouldNegate() {
150152
assertEquals("Assis", values.get("city"));
151153
assertEquals("Otavio", values.get("name"));
152154
assertEquals("Lucas", values.get("name_1"));
153-
assertEquals("FOR c IN collection FILTER NOT c.city == @city AND c.name == @name OR NOT c.name == @name_1 RETURN c", aql);
155+
assertEquals("FOR c IN collection FILTER NOT ( c.city == @city) AND c.name == @name OR NOT ( c.name == @name_1) RETURN c", aql);
154156

155157
}
156158

0 commit comments

Comments
 (0)