diff --git a/CHANGELOG b/CHANGELOG index 31ca7d35c9..b9ad80aaff 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,42 @@ v3.0.0 (XXXX-XX-XX) ------------------- -* allow to set print.limitString to configure the number of characters +* added AQL array comparison operators + + All AQL comparison operators now lso exist in an array variant. In the + array variant, the operator is prefixed with one of the keywords *ALL*, *ANY* + or *NONE*. Using one of these keywords changes the operator behavior to + execute the comparison operation for all, any, or none of its left hand + argument values. It is therefore expected that the left hand argument + of an array operator is an array. + + Examples: + + [ 1, 2, 3 ] ANY == 2 // true + [ 1, 2, 3 ] ANY == 4 // false + [ 1, 2, 3 ] ANY > 0 // true + [ 1, 2, 3 ] ANY IN [ 4, 5, 6 ] // false + [ 1, 2, 3 ] ANY IN [ 1, 42 ] // true + [ 1, 2, 3 ] ALL IN [ 2, 3, 4 ] // false + [ 1, 2, 3 ] ALL IN [ 1, 2, 3 ] // true + [ 1, 2, 3 ] ALL > 2 // false + [ 1, 2, 3 ] ALL > 0 // true + [ 1, 2, 3 ] NONE IN [ 3 ] // false + [ 1, 2, 3 ] NONE IN [ 23, 42 ] // true + [ 1, 2, 3 ] NONE < 99 // false + [ 1, 2, 3 ] NONE > 10 // true + +* improved AQL optimizer to remove unnecessary sort operations in more cases + +* allow enclosing AQL identifiers in forward ticks in addition to using + backward ticks + + This allows convenient writing of AQL queries in JavaScript template strings + (that is itself delimited with backticks), e.g. + + var q = `FOR doc IN ´collection´ RETURN doc.´name´`; + +* allow to set `print.limitString` to configure the number of characters to output before truncating * make logging configurable per log "topic" @@ -82,6 +117,12 @@ v3.0.0 (XXXX-XX-XX) v2.8.3 (XXXX-XX-XX) ------------------- +* fixed AQL filter condition collapsing for deeply-nested cases, potentially + enabling usage of indexes in some dedicated cases + +* added parentheses in AQL explain command output to correctly display precedence + of logical and arithmetic operators + * Foxx Model event listeners defined on the model are now correctly invoked by the Repository methods (issue #1665) diff --git a/Documentation/Books/Users/Aql/Operators.mdpp b/Documentation/Books/Users/Aql/Operators.mdpp index c4a744efca..5115ac40f7 100644 --- a/Documentation/Books/Users/Aql/Operators.mdpp +++ b/Documentation/Books/Users/Aql/Operators.mdpp @@ -41,6 +41,33 @@ true != null // true 42 NOT IN [ 17, 40, 50 ] // true ``` +!SUBSUBSECTION Array comparison operators + +The comparison operators also exist as *array variant*. In the array +variant, the operator is prefixed with one of the keywords *ALL*, *ANY* +or *NONE*. Using one of these keywords changes the operator behavior to +execute the comparison operation for all, any, or none of its left hand +argument values. It is therefore expected that the left hand argument +of an array operator is an array. + +Examples: + +``` +[ 1, 2, 3 ] ANY == 2 // true +[ 1, 2, 3 ] ANY == 4 // false +[ 1, 2, 3 ] ANY > 0 // true +[ 1, 2, 3 ] ANY IN [ 4, 5, 6 ] // false +[ 1, 2, 3 ] ANY IN [ 1, 42 ] // true +[ 1, 2, 3 ] ALL IN [ 2, 3, 4 ] // false +[ 1, 2, 3 ] ALL IN [ 1, 2, 3 ] // true +[ 1, 2, 3 ] ALL > 2 // false +[ 1, 2, 3 ] ALL > 0 // true +[ 1, 2, 3 ] NONE IN [ 3 ] // false +[ 1, 2, 3 ] NONE IN [ 23, 42 ] // true +[ 1, 2, 3 ] NONE < 99 // false +[ 1, 2, 3 ] NONE > 10 // true +``` + !SUBSUBSECTION Logical operators The following logical operators are supported in AQL: diff --git a/Documentation/Books/Users/Aql/Syntax.mdpp b/Documentation/Books/Users/Aql/Syntax.mdpp index b422e96976..1863eacd15 100644 --- a/Documentation/Books/Users/Aql/Syntax.mdpp +++ b/Documentation/Books/Users/Aql/Syntax.mdpp @@ -132,8 +132,9 @@ The maximum supported length of any name is 64 bytes. Names in AQL are always case-sensitive. Keywords must not be used as names. If a reserved keyword should be used as a -name, the name must be enclosed in backticks. Enclosing a name in backticks -makes it possible to use otherwise reserved keywords as names. An example for this is: +name, the name must be enclosed in backticks or forward ticks. Enclosing a name in +backticks or forward ticks makes it possible to use otherwise reserved keywords +as names. An example for this is: FOR f IN `filter` RETURN f.`sort` @@ -141,6 +142,12 @@ makes it possible to use otherwise reserved keywords as names. An example for th Due to the backticks, *filter* and *sort* are interpreted as names and not as keywords here. +The example can alternatively written as: + + FOR f IN ´filter´ + RETURN f.´sort´ + + !SUBSUBSECTION Collection names Collection names can be used in queries as they are. If a collection happens to