Синтаксис AQL


AQL

Это встроенный язык запросов к ArangoDB.

Типы запросов

Любой AQL запрос должен либо возвращать результат, либо модифицировать данные. При возврате результата запрос должен содержать ключевое слово RETURN, при модификации данных одно из ключевых слов: INSERT, UPDATE, REPLACE, REMOVE или UPSERT.


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

AQL допускает только один запрос в одной строке запроса. Поэтому точки с запятой, как в SQL, не допускаются.

Пробелы

Пробелы (пробел, возврат каретки, перенос строки и табуляция) могут быть использованы в запросе для повышения его читабельности. Ключевые слова могут быть разделены неограниченным числом пробелов. Пробелы внутри строк должны быть заключены в кавычки.
Комментарии
Коментарии можно вписать в любом месте в запросе. Текст, содержащийся в комментарии игнорируется парсером AQL. AQL предоставляет два типа комментариев, похожих на комментарии в C, C++:
  • Однострочный комментарий. Начинается с //
  • Многострочный комментарий. Заключить тест в /* комментарий */
Например:

/* this is a comment */ RETURN 1
/* these */ RETURN /* are */ 1 /* multiple */ + /* comments */ 1
/* this is a multi line comment */
// a single line comment

Ключевые слова

AQL поддерживает следующие базовые операции:
  • FOR: обход массива
  • RETURN: возврат результата (проекция)
  • FILTER: фильтрация результата
  • SORT: сортировка результата
  • LIMIT: ограничение выборки (слайсинг)
  • LET: создание переменной
  • COLLECT: группировка результата
  • INSERT: создание нового документа
  • UPDATE: частичное обновление существующего документа
  • REPLACE: замена существующего документа
  • REMOVE: удаление существующего документа
  • UPSERT: создать или обновить существующий документ
Пример AQL запроса:

FOR u IN users
  FILTER u.type == "newbie" && u.active == true
  RETURN u.name
В этом примере использовались базовые операции FOR, FILTER и RETURN. Ключевое слово IN является второстепенным и идет в дополнение к базовым операциям.

Нельзя использовать названия коллекций как ключевые слова. Если все-таки название коллекции совпадает с ключевым словом ( например FOR u IN filter) то для избежании ошибки и доступа к коллекции необходимо называние коллекции заключить в кавычки (FOR u IN "filter")

Ключевые слова регистронезависимы их можно писать как с маленькой так и с большой буквы.

Так же существует еще несколько ключевых слов, которые идут в дополнение к базовым. Дополнительные ключевые слова могут быть добавлены в других версиях ArangoDB, на данный момент (v3.1) список дополнительных ключевых слов такой:

  • AGGREGATE
  • ALL
  • AND
  • ANY
  • ASC
  • COLLECT
  • DESC
  • DISTINCT
  • FALSE
  • FILTER
  • FOR
  • GRAPH
  • IN
  • INBOUND
  • INSERT
  • INTO
  • LET
  • LIMIT
  • NONE
  • NOT
  • NULL
  • OR
  • OUTBOUND
  • REMOVE
  • REPLACE
  • RETURN
  • SHORTEST_PATH
  • SORT
  • TRUE
  • UPDATE
  • UPSERT
  • WITH

Имена

Имена используются для обозначения объектов (коллекций, атрибутов, переменных и функций) в AQL-запросах

Максимальная длина любого имени - 64 байта. Имена в AQL всегда регистрозависимы.

Ключевые слова не должны использоваться как имена объектов. Если все-таки ключевое слово по какой-то причине используется как имя - то необходимо заключить это имя в кавычки. Например:
FOR f IN `filter`
  RETURN f.`sort`
Или:
FOR f IN ´filter´
  RETURN f.´sort´

Имена коллекций

Имена коллекций могут быть использованы в запросах так же как они пишутся. Исключение - только если имя коллекции совпадает с ключевым словом, тогда его нужно заключить в кавычки.

Коллекции должны обозначаться по следующим правилам:
  • Имя могут содержать только буквы от a до z (a-z) в любом регистре, цифры от 0 до 9, символ подчеркивания (_) или тире (-). Так же никакие non-ASCII символы не разрешены
  • Пользовательская коллекция всегда должна начинаться с буквы. Системная коллекция должна начинаться с подчеркивания. Все системные коллекции начинаются с символа подчеркивания, используются для внутренних нужд ArangoDB и не должны использоваться пользователем
  • Максимальная длина названия 64 байта
  • Имя коллекции регистронезависимо
ALQ содержит ограничение в 256 коллекций на один запрос. Этот лимит распространяется на коллекции документов и на коллекции вершин (графов)

Имена атрибутов

При обращении к атрибутам документов из коллекции необходимо использовать полное имя атрибута (через точку collection_name.attribute). Это связано с тем, что в запросе можно использовать несколько коллекций с неоднозначными именами атрибутов. Чтобы избежать двусмысленности, нельзя писать имя атрибута отдельно.

FOR u IN users
  FOR f IN friends
    FILTER u.active == true && f.active == true && u.id == f.userId
    RETURN u.name
В примере выше activenameid, и userId  - это имена атрибутов. Доступ к ним осуществляется через коллекции u (users) и (friends)

Правила формирования имен атрибутов:
  • Имена атрибутов не совпадать с системными именами:
    • _id - содержит id документа
    • _key - содержит ключ документа
    • _rev - содержит номер ревизии документа
    • _from - в коллекции вершин указывает ссылку на документ (от)
    • _to - в коллекции вершин указывает ссылку на документ (куда)
  • Теоретически имена атрибутов могут содержать любые действительные символы в кодировке UTF-8 но на практике это лучше не использовать, так как можно потерять совместимость с JavaScript и другими языками, в которых можно использовать ArangoDB
  • Атрибуты с содержанием символа @ должны быть экранированы кавычками
  • ArangoDB не ограничивает длину имени атрибута. Но лучше не использовать слишком длинные имена
  • Имена атрибутов регистрозависимы
  • Атрибуты с пустыми именами (пустая строка) запрещены

Имена переменных

AQL позволяет создать дополнительные переменные в запросах.  Имена дополнительных переменных должны отличаться от ключевых слов и названий коллекций. 
FOR u IN users
  LET friends = u.friends
  RETURN { "name" : u.name, "friends" : friends }
В примере мы определили переменную friends, которой присвоили значение u.friends

Допустимые имена переменных - это буквы a-z любого регистра, цифры от 0 до 9, символ подчеркивания (_) и символ доллара ($). Имя переменной не должно начинаться с цифры. Если имя переменной начинается со знака подчеркивания - после него должна идти как минимум одна буква или цифра.
Символ доллара может использоваться только как первая буква переменной.





Комментарии

Популярные сообщения из этого блога

Что за фрукт ArangoDB