AQL user-defined functions were introduced in ArangoDB 1.3, and the namespace resolution
operator for them was the single colon (`:`). A function call looked like this:
RETURN mygroup:myfunc()
The single colon caused an ambiguity in the AQL grammar, making it indistinguishable from
named attributes or the ternary operator in some cases, e.g.
{ mygroup:myfunc ? mygroup:myfunc }
The change of the namespace resolution operator from `:` to `::` fixes this ambiguity.
Existing user functions in the database will be automatically fixed when starting ArangoDB
1.4 with the `--upgrade` option. However, queries using user-defined functions need to be
adjusted on the client side to use the new operator.
This change will create field access hints also for AQL function calls.
Calls to functions will not be optimised, but meaningless usages of functions will not be optimised away.
For example:
FOR p IN PATHS(users, relations, "outbound")
FILTER LENGTH(p.edges) > 0 && LENGTH(p.edges) < 0
RETURN p
The FILTER in the above query uses the LENGTH() function two times in a way that no result will be produced.
Before, function calls were excluded from expression collapsing and simplification.
Now, multiple calls to the same function with the same call argument might be optimised away if the calls will
lead to no results being produced. This will only work for functions that are called with exactly one argument
which also must be an attribute name, and when the function calls are used in relational operations.