• Официальный сайт SDK
  • Сайт с примерами кода

Описание языка GQL

GQL является похожим на SQL языком выполнения запросов, который производит загрузку объектов из масштабируемого хранилища платформы App Engine. Несмотря на то, что большинство возможностей языка запросов GQL отличаются от соответствующих в традиционных реляционных базах данных, его синтаксис очень похож на SQL.

Синтаксис запроса GQL может быть кратко описан так:

ClNFTEVDVCAqIEZST00gJmx0O9GC0LjQvyZndDsKW1dIRVJFICZsdDvRg9GB0LvQvtCy0LjQtSZndDsgW0FORCAmbHQ70YPRgdC70L7QstC40LUmZ3Q7IC4uLl1dCltPUkRFUiBCWSAmbHQ70YHQstC+0LnRgdGC0LLQviZndDsgW0FTQyB8IERFU0NdIFssICZsdDvRgdCy0L7QudGB0YLQstC+Jmd0OyBbQVNDIHwgREVTQ10gLi4uXV0KW0xJTUlUIFsmbHQ70YHQvNC10YnQtdC90LjQtSZndDssXSZsdDvRh9C40YHQu9C+INGA0LXQt9GD0LvRjNGC0LDRgtC+0LImZ3Q7XQpbT0ZGU0VUICZsdDvRgdC80LXRidC10L3QuNC1Jmd0O10KJmx0O9GD0YHQu9C+0LLQuNC1Jmd0OyA6PSAmbHQ70YHQstC+0LnRgdGC0LLQviZndDsgeyZsdDsgfCAmbHQ7PSB8ICZndDsgfCAmZ3Q7PSB8ID0gfCAhPSB9ICZsdDvQt9C90LDRh9C10L3QuNC1Jmd0OwombHQ70YPRgdC70L7QstC40LUmZ3Q7IDo9ICZsdDvRgdCy0L7QudGB0YLQstC+Jmd0OyBJTiAmbHQ70YHQv9C40YHQvtC6Jmd0OwombHQ70YHQstC+0LnRgdGC0LLQviZndDsgOj0gQU5DRVNUT1IgSVMgJmx0O9C+0LHRitC10LrRgiDQuNC70Lgg0LXQs9C+INC60LvRjtGHJmd0Owo==

Также как и в SQL, в GQL названия операций регистронезависимы. Однако указываемые в запросе типы и имена свойств являются чувствительными к регистру символов.

Запрос GQL возвращает ноль или несколько объектов данных заданного типа в качестве экземпляров класса соответствующей модели. Результат всегда содержит полные данные объекта, таким образом GQL запрос всегда должен зачинаться с выражения SELECT * FROM с указанием после него значения типа объекта. (В подобных местах всегда должен указывается параметр *, так как требуется сохранять совместимость с синтаксисом языка SQL). GQL запрос не может выполнять доступные в SQL операции объединения ("join").

Необязательное выражение WHERE применяет к результирующему набору данных одно или несколько условий выборки. Каждое из них использует сравнение какого-либо свойства объекта с заданным значением с помощью оператора сравнения. Если несколько условий заданы с указанием оператора AND между ними, то объект, возвращаемый запросом, должен удовлетворять всем этим условиям. Запросы GQL не могут содержать оператор OR. Однако, может использоваться оператор IN, который является ограниченной реализацией OR.

Оператор IN задает сравнение значения свойства объекта с каждым значением списка. Он эквивалентен множеству условий сравнения с помощью =, объединенных оператором OR. Объект, значение заданного свойства которого совпадает с любым значением из списка, будет возвращен в результатах запроса.

Примечание: Операторы IN и != для своей работы задействуют несколько сопутствующих запросов. К примеру, оператор IN производит выполнение нескольких соответствующих запросов для каждого значения списка. В объектах, возвращаемых в результате сопутствующего запроса, производится удаление дубликатов. Допускается выполнение до 30 сопутствующих запросов для одного выражения GQL.

В условии также может задаваться, что объект должен иметь вышестоящего предка, с использованием оператора ANCESTOR IS. Этим значением может быть экземпляр модели или ключ типа Key объекта-предка. Для дополнительной информации о предках объектов, обратитесь к разделу Ключи и группы объектов.

Левая часть любого условия сравнения всегда должна быть именем свойства. Его правая часть может быть следующим значением (в соответствии с типом данных этого свойства):

  • строка типа str, ограниченная одинарными кавычками. Все используемые символы кавычек внутри строки должны быть заданы двойным выражением: ''. К примеру: 'Joe''s Diner'
  • значение типа целое число или число с плавающей точкой. К примеру: 42.7
  • логическое значение, такое как TRUE или FALSE.
  • параметр подстановки. В строке запроса позиционные параметры задаются номерами: title = :1, именованные - именами title = :mytitle

Значения параметров подстановки могут быть заданы как позиционные или именованные, переданные конструктору класса GqlQuery или методу gql() класса Model. Те типы свойств, которые не имеют соответствующего строкового представления (включая списки), должны быть заданы в запросах с помощью подстановки параметров. Параметры подстановки в экземпляре класса GqlQuery могут быть переприсвоены на новые значения в любой момент времени (что также является эффективным использованием системных ресурсов) при помощи метода bind().

Необязательное выражение ORDER BY определяет, что результаты должны быть отсортированы по заданным свойствам либо в порядке возрастания (параметр ASC), либо убывания (DESC). Если направление не указано, то по умолчанию используется порядок по возрастанию ASC. Необязательное выражение ORDER BY может задавать несколько порядков сортировки результатов запроса в виде списка с разделителями, которые применяются слева направо.

Необязательное выражение LIMIT указывает запросу вернуть только заданное число результатов. Выражение LIMIT также может включать параметр смещение для указания пропуска нужного количества результатов, считая от начала выборки. Необязательное выражение OFFSET может также задавать параметр смещение, если в запросе не присутствует выражение LIMIT.

Примечание: Выражение LIMIT может задавать максимум 1000 объектов. Если указано большее число, то используется вышеуказанное ограничение. Те же самые правила действуют для метода fetch() класса GqlQuery.

Примечание: Также как и параметр offset метода fetch(), параметр выражения OFFSET в строке GQL запроса не уменьшает фактического числа получаемых системой объектов из хранилища. Он применяется только к результирующему набору данных, возвращаемому методом fetch(). Запрос с параметром смещения имеет характеристики производительности, которые линейно зависят от размера этого смещения.

Для дополнительной информации о выполнении GQL запросов, подстановки параметров и получению результатов, смотрите описание класса GqlQuery и метода класса Model.gql().