Ошибка синтаксического анализа литерала AQL без нуля в начале - PullRequest
0 голосов
/ 15 ноября 2018

Я получаю ошибку синтаксического анализа с запросом AQL, который включает числовой литерал со значением 'x', где
-1 опущен , например x < .5 или x > -.2.

Я думаю, что это может быть ошибкой, но в документации четко не указано, требуется ли начальный ноль или нет (кажется странным, что это потребуется).

Я использую только версию 3.4 rc4, поэтому я не могу проверить, присутствует ли это поведение в каких-либо официально выпущенных версиях. Может кто-нибудь подтвердить? Или здесь есть разработчики ArangoDB, которые хотят комментировать?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

AQL не поддерживает числовые литералы с плавающей запятой без начальных цифр.

Документация показывает примеры поддерживаемых обозначений, и таких, как .5, среди них нет.

Если вы хотите предложить это как функцию, создайте проблему на GitHub .

Вы можете найти код, который определяет языковые токены для чисел здесь: https://github.com/arangodb/arangodb/blob/devel/arangod/Aql/tokens.ll#L447

(0|[1-9][0-9]*) {
  /* a numeric integer value */
...
(0|[1-9][0-9]*)((\.[0-9]+)?([eE][\-\+]?[0-9]+)?) {
  /* a numeric double value */

Как видно из этих регулярных выражений, такие литералы, как 00 и 00.123 также не поддерживаются - в целой части не должно быть более одного 0.

0 голосов
/ 05 декабря 2018

Обновление

Недавно мы объединили запрос на получение в ветку devel ArangoDB, которая добавляет поддержку дробных чисел без ведущих нулей в AQL. Это доступно в версии разработки ArangoDB начиная со следующей сборки, но пока недоступно ни в одном выпуске. Пока что целевой выпуск будет 3,5.

Если есть востребованный спрос на эту функцию, следует легко перенести пулл-запрос на ArangoDB 3.4.

0 голосов
/ 16 ноября 2018

Запустил это в 3.3.19 и работает нормально:

let tmp = [0.2,3,4,0.5]
for t in tmp
filter t > 0.5
return t

Это выдает ошибку разбора

let tmp = [0.2,3,4,0.5]
for t in tmp
filter t > .5
return t

Итак, я думаю, что можно с уверенностью сказать, что 0 является обязательным

...