From 4a67ffd0282adbef11356fbe6c17ac16e9a31879 Mon Sep 17 00:00:00 2001 From: baslr Date: Mon, 7 Aug 2017 11:22:42 +0200 Subject: [PATCH 1/2] aql char length null returns now 0 --- Documentation/Books/AQL/Functions/String.md | 2 +- arangod/Aql/Functions.cpp | 2 +- js/server/modules/@arangodb/aql.js | 4 ---- js/server/tests/aql/aql-functions-string.js | 4 ++-- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/Documentation/Books/AQL/Functions/String.md b/Documentation/Books/AQL/Functions/String.md index 4fef3bcabbbb..a6795fdc7eec 100644 --- a/Documentation/Books/AQL/Functions/String.md +++ b/Documentation/Books/AQL/Functions/String.md @@ -16,7 +16,7 @@ Return the number of characters in *value* (not byte length). |Array / Object|number of unicode characters from the resulting stringification| |true| 4 | |false| 5 | -|null| 4 | +|null| 0 | ### CONCAT() diff --git a/arangod/Aql/Functions.cpp b/arangod/Aql/Functions.cpp index 12e4da97db23..7b4c830d0b78 100644 --- a/arangod/Aql/Functions.cpp +++ b/arangod/Aql/Functions.cpp @@ -1153,7 +1153,7 @@ AqlValue Functions::CharLength(arangodb::aql::Query* query, length = buffer->length(); } else if (value.isNull(true)) { - length = 4; + length = 0; } else if (value.isBoolean()) { if (value.toBoolean()) { diff --git a/js/server/modules/@arangodb/aql.js b/js/server/modules/@arangodb/aql.js index 0b04d27b940b..b9d5ba382acc 100644 --- a/js/server/modules/@arangodb/aql.js +++ b/js/server/modules/@arangodb/aql.js @@ -2037,10 +2037,6 @@ function AQL_CONCAT_SEPARATOR () { function AQL_CHAR_LENGTH (value) { 'use strict'; - if (value === undefined || value === null) { - return 4; - } - // https://mathiasbynens.be/notes/javascript-unicode return [...AQL_TO_STRING(value)].length; } diff --git a/js/server/tests/aql/aql-functions-string.js b/js/server/tests/aql/aql-functions-string.js index 7abd19c5d145..c42359aed884 100644 --- a/js/server/tests/aql/aql-functions-string.js +++ b/js/server/tests/aql/aql-functions-string.js @@ -1635,8 +1635,8 @@ function ahuacatlStringFunctionsTestSuite () { assertEqual([ 13 ], getQueryResults("RETURN NOOPT(CHAR_LENGTH('the quick fox'))")); assertEqual([ 13 ], getQueryResults("RETURN NOOPT(V8(CHAR_LENGTH('the quick fox')))")); - assertEqual([ 4 ], getQueryResults("RETURN NOOPT(CHAR_LENGTH(null))")); - assertEqual([ 4 ], getQueryResults("RETURN NOOPT(V8(CHAR_LENGTH(null)))")); + assertEqual([ 0 ], getQueryResults("RETURN NOOPT(CHAR_LENGTH(null))")); + assertEqual([ 0 ], getQueryResults("RETURN NOOPT(V8(CHAR_LENGTH(null)))")); assertEqual([ 4 ], getQueryResults("RETURN NOOPT(CHAR_LENGTH(true))")); assertEqual([ 4 ], getQueryResults("RETURN NOOPT(V8(CHAR_LENGTH(true)))")); From 1bac44b7588531b0378729598a67a3444fc37068 Mon Sep 17 00:00:00 2001 From: Manuel B Date: Mon, 7 Aug 2017 14:39:55 +0200 Subject: [PATCH 2/2] Update CHANGELOG --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 86140f9fbd64..d7405f865fc3 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ devel ----- +* AQL CHAR_LENGTH(null) returns now 0. Since AQL TO_STRING(null) is '' (string of length 0) + * fixed a multi-threading issue in the agency when callElection was called while the SuperVision was calling updateSnapshot