Выборка
Тип метаданных
query
Библиотека компонентов
http://n2oapp.net/framework/config/schema/query-5.0
Атрибуты
Наименование | Тип | Описание | Значение по умолчанию |
---|---|---|---|
object-id | Ссылка на объект | Идентификатор объекта выборки | |
route | Строка | URL выборки | Идентификатор выборки |
Тело
<list> - Получение списка записей
<unique> - Получение уникальной записи
<count> - Получение количества записей
<fields> - Список полей выборки
<filters> - Список фильтров выборки
Пример
<?xml version='1.0' encoding='UTF-8'?>
<query xmlns="http://n2oapp.net/framework/config/schema/query-5.0"
object-id="myObject">
<list>
<sql>
SELECT :select FROM mytable
WHERE :filters
ORDER BY :sorting
LIMIT :limit OFFSET :offset
</sql>
</list>
<count>
<sql>
SELECT count(*) FROM mytable
WHERE :filters
</sql>
</count>
<fields>
...
</fields>
</query>
<list>
Получение списка записей
В выборке может быть несколько <list>
с разными наборами фильтров (атрибут filters
).
Атрибуты
Наименование | Тип | Описание | Значение по умолчанию |
---|---|---|---|
filters | Список ссылок на фильтры | Идентификаторы фильтров (через запятую). Вызов провайдера данных сработает только при наличии всех фильтров в запросе | |
result-mapping | Строка | Маппинг списка результатов. Используется SpEL выражение | |
result-normalize | Строка | Нормализация списка результатов. Используется SpEL выражение | |
count-mapping | Строка | Маппинг общего количества записей. Используется SpEL выражение | |
asc-expression | Строка | Выражение ASC направления сортировки | asc |
desc-expression | Строка | Выражение DESC направления сортировки | desc |
additional-mapping | Строка | Маппинг дополнительной информации. Используется SpEL выражение |
Настройки
#Значение asc направления сортировки
n2o.engine.query.asc-expression = asc
#Значение desc направления сортировки
n2o.engine.query.desc-expression = desc
Тело
Пример
<list filters="firstNameLike, lastNameLike">
<sql>
SELECT first_name, last_name
FROM mytable
WHERE first_name like '%'||:first_name
OR last_name '%'||:last_name
</sql>
</list>
<unique>
Получение уникальной записи
В выборке может быть несколько <unique>
с разными наборами фильтров (атрибут filters
).
Атрибуты
Наименование | Тип | Описание |
---|---|---|
filters | Список ссылок на фильтры | Идентификаторы фильтров (через запятую). Вызов провайдера данных сработает только при наличии всех фильтров в запросе |
result-mapping | Строка | Маппинг результата. Используется SpEL выражение |
result-normalize | Строка | Нормализация результата. Используется SpEL выражение |
Тело
Пример
<unique filters="id">
<sql>
SELECT first_name, last_name
FROM mytable
WHERE id = :id
</sql>
</unique>
<count>
Получение количества записей
В выборке может быть несколько <count>
с разными наборами фильтров (атрибут filters
).
Атрибуты
Наименование | Тип | Описание |
---|---|---|
filters | Список ссылок на фильтры | Идентификаторы фильтров (через запятую). Вызов провайдера данных сработает только при наличии всех фильтров в запросе |
count-mapping | Строка | Маппинг количества записей. Используется SpEL выражение |
Тело
Пример
<count filters="firstNameLike">
<sql>
SELECT count(*) FROM mytable
</sql>
</count>
<fields>
Поля выборки
Тело
<field> - Простое поле
<reference> - Составное поле
<list> - Списковое поле
<field>
Простое поле выборки
Атрибуты
Наименование | Тип | Описание | Значение по умолчанию | Обязательность |
---|---|---|---|---|
id | Строка | Идентификатор поля | ! | |
name | Строка | Наименование поля | ||
domain | Тип данных | Тип данных | ||
default-value | Строка | Значение по умолчанию. Будет использовано, если значение для поля не передано | ||
sorting | true false | Является ли поле сортируемым | false. Если задан sorting-expression , то - true | |
sorting-mapping | Строка | Маппинг плейсхолдера направления сортировки в провайдере. Используется SpEL выражение | [идентификатор_поля]Direction | |
sorting-expression | Строка | Выражение сортировки поля | ||
mapping | Строка | Маппинг данных поля из провайдера. Используется SpEL выражение | [' + id + '] | |
normalize | Строка | Нормализация данных поля из провайдера. Используется SpEL выражение | ||
select | true false | Участвует ли поле в выборке | true | |
select-expression | Строка | Выражение для подстановки на место плейсхолдера select в провайдере |
Настройки
#Участвует ли поле в выборке (для всех видов полей)
n2o.api.query.field.is_selected = true
#Участвует ли поле в сортировке (для всех видов полей)
n2o.api.query.field.is_sorted = false
Тело
<switch> - Конструкция switch
Пример
<field id="myName" mapping="['name']" default-value="user" normalize="#this.toUpperCase()">
<switch>...</switch>
</field>
<switch>
Конструкция switch
Тело
<case> - Вариант переключения
<default> - Вариант по умолчанию
Пример
<switch>
<case value="1">Мужской</case>
<case value="2">Женский</case>
<default>Неопределенный</default>
</switch>
<case>
Вариант переключения
Атрибуты
Наимен ование | Тип | Описание | Обязательность |
---|---|---|---|
value | Строка | Значение, с которым сравнивается значение поля | ! |
Тело
Значение, возвращаемое в случае совпадения value со значением поля
<default>
Вариант по умолчанию
Тело
Значение, которое будет выбрано при несовпадении ни одного из value со значением поля
<reference>
Составное поле выборки
Атрибуты
Наименование | Тип | Описание | Значение по умолчанию | Обязательность |
---|---|---|---|---|
id | Строка | Идентификатор поля | ! | |
mapping | Строка | Маппинг данных поля из провайдера. Используется SpEL выражение | [' + id + '] | |
normalize | Строка | Нормализация данных поля из провайдера. Используется SpEL выражение | ||
select | true false | Участвует ли поле в выборке | true | |
select-expression | Строка | Выражение для подстановки на место плейсхолдера select в провайдере | ||
select-key | Строка | Ключ для подстановки на место плейсхолдера в select-expression |
Тело
<field> - Простое поле
<reference> - Составное поле
<list> - Списковое поле
Пример
<reference id="owner" select-expression="owner { $$ownerSelect }" select-key="ownerSelect">
<field>...</field>
<list>...</list>
<reference>...</reference>
</reference>
<list>
Списковое поле выборки
Атрибуты
Наименование | Тип | Описание | Значение по умолчанию | Обязательность |
---|---|---|---|---|
id | Строка | Идентификатор поля | ! | |
mapping | Строка | Маппинг данных поля из провайдера. Используется SpEL выражение | [' + id + '] | |
normalize | Строка | Нормализация данных поля из провайдера. Используется SpEL выражение | ||
select | true false | Участвует ли поле в выборке | true | |
select-expression | Строка | Выражение для подстановки на место плейсхолдера select в провайдере | ||
select-key | Строка | Ключ для подстановки на место плейсхолдера в select-expression |
Тело
<field> - Простое поле
<reference> - Составное поле
<list> - Списковое поле
Пример
<list id="showrooms" select-key="showroomsSelect"
select-expression="showrooms { $$showroomsSelect }">
<field>...</field>
<list>...</list>
<reference>...</reference>
</list>
<filters>
Список фильтров выборки
Тело
Наименование | Тип | Описание |
---|---|---|
<eq> | Выражение | Фильтр эквивалентности |
<notEq> | Выражение | Фильтр не эквивалентности |
<more> | Выражение | Фильтр больше |
<less> | Выражение | Фильтр меньше |
<like> | Выражение | Фильтр вхождения подстроки в строку |
<in> | Выражение | Фильтр вхождения хотя бы одного в список |
<notIn> | Выражение | Фильтр не вхождения в список |
<contains> | Выражение | Фильтр вхождения списка в список |
<isNull> | Выражение | Фильтр пустого поля |
<isNotNull> | Выражение | Фильтр не пустого поля |
<eqOrIsNull> | Выражение | Фильтр эквивалентности и не пустого поля |
<likeStart> | Выражение | Фильтр начала подстроки |
Важно отметить, что тип фильтра играет роль только для <test>
и <mongo>
провайдеров.
В таком случае тело фильтра может быть сгенерировано согласно его типу.
Во всех остальных ситуациях указание тела фильтра обязательно,
а его тип служит скорее удобным указанием для какой фильтрации он используется,
но не несет никакой дополнительной функции.
Значения выражений по умолчанию для разных провайдеров
Наименование | test | mongo |
---|---|---|
<eq> | fieldId :eq :filterId | {'fieldId' : filterId} |
<notEq> | fieldId :notEq :filterId | {'fieldId': {$ne: '#filterId'}} |
<more> | fieldId :more :filterId | {'fieldId': {$gte: '#filterId'}} |
<less> | fieldId :less :filterId | {'fieldId': {$lte: '#filterId'}} |
<like> | fieldId :like :filterId | {'fieldId': {$regex: '.*#filterId.*'}} |
<in> | fieldId :in :filterId | {'fieldId': {$in: '#filterId'}} |
<notIn> | fieldId :notIn :filterId | {'fieldId': {$nin: '#filterId'}} |
<contains> | fieldId :contains :filterId | - |
<isNull> | fieldId :isNull :filterId | - |
<isNotNull> | fieldId :isNotNull :filterId | - |
<eqOrIsNull> | fieldId :eqOrIsNull :filterId | - |
<likeStart> | - | {'fieldId': {$regex: '#filterId.*'}} |
Базовые атрибуты
Наименование | Тип | Описание | Значение по умолчанию | Обязательность |
---|---|---|---|---|
filter-id | Строка | Идентификатор фильтра | ||
field-id | Ссылка на поле | Идентификатор поля фильтра | ||
mapping | Строка | Маппинг значения фильтра в поле провайдера. Используется SpEL выражение | [' + filter-id + '] | ! |
domain | Тип данных | Тип данных, к которому будет приведено значение фильтра | Значение domain от <field> | |
default-value | Строка | Значение, которое будет использоваться, если значение фильтра не передано | ||
normalize | Строка | Выражение для предварительной нормализации данных фильтра. Используется SpEL выражение | ||
required | true false | Обязательность ф ильтра выборки | false |
Пример
<filters>
<eq field-id="gender.id" mapping="gender_id" default-value="1">
gender_id = :gender_id
</eq>
<in field-id="genders" filter-id="genders*.id" domain="integer[]">
gender_id in (:genders)
</in>
<like field-id="gender.name" filter-id="gender.name"
domain="string" normalize="#this.toLowerCase()"/>
</filters>