Skip to main content

Выборка

Тип метаданных query

Библиотека компонентов

http://n2oapp.net/framework/config/schema/query-4.0

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
nameСтрокаНаименование выборки
object-idСсылка на объектОбъект выборки
routeСтрокаURL выборкиИдентификатор выборки

Пример

<?xml version='1.0' encoding='UTF-8'?><query xmlns="http://n2oapp.net/framework/config/schema/query-4.0"  object-id="myObject"  name="Моя выборка">  <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>#

Получение списка записей по определенным фильтрам.

note

В выборке может быть несколько <list> с разными наборами фильтров (атрибут filters).

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
filtersИдентификаторы через запятуюИдентификаторы фильтров (filter-id). При наличии хотя бы одного из фильтров сработает этот провайдер данных.
mapperdataset, spel, javascript, groovyСпособ маппинга фильтров в параметры провайдераdataset
result-mappingСтрокаМаппинг списка результатовДля каждого провайдера данных свои значения по умолчанию
count-mappingСтрокаМаппинг общего количества записейДля каждого провайдера данных свои значения по умолчанию

Тело

Провайдер данных

Пример

<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><fields>  <field id="firstName">    <filters>      <like filter-id="firstNameLike" mapping="first_name"/>    </filters>  </filed>  <field id="lastName">    <filters>      <like filter-id="lastNameLike" mapping="last_name"/>    </filters>  </filed></fields>

<count>#

Получение количества записей.

note

В выборке может быть несколько <count> с разными наборами фильтров (атрибут filters).

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
mapperdataset, spel, javascript, groovyСпособ маппинга фильтров в параметры провайдераdataset
count-mappingСтрокаМаппинг общего количества записейДля каждого провайдера данных свои значения по умолчанию
filtersИдентификаторы через запятуюИдентификаторы фильтров (filter-id). При наличии хотя бы одного из фильтров сработает этот провайдер данных.

Тело

Провайдер данных

Пример

<count filters="firstNameLike">  <sql>SELECT count(*) FROM mytable</sql></count>

<unique>#

Получение уникальной записи по определенным фильтрам.

note

В выборке может быть несколько <unique> с разными наборами фильтров (атрибут filters).

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
filtersИдентификаторы через запятуюИдентификаторы фильтров (filter-id). При наличии хотя бы одного из фильтров сработает этот провайдер данных.
mapperdataset, spel, javascript, groovyСпособ маппинга фильтров в параметры провайдераdataset
result-mappingСтрокаМаппинг результатаДля каждого провайдера данных свои значения по умолчанию

Тело

Провайдер данных

Пример

<unique filters="id">  <sql>SELECT first_name, last_name       FROM mytable       WHERE id = :id  </sql><unique><fields>  <field id="id">    <filters>      <eq/>    </filters>  </field></fields>

<fields>#

Поля выборки.

<field>#

Поле выборки.

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
idСтрокаИдентификатор поля
nameСтрокаНаименование поляНаименование аналогичного поля в объекте
domainТип данныхТип данныхstring
<select>#

Способ получения данных из поля выборки.

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
mappingВыражениеМаппинг данных поля из провайдераСовпадает с id
default-valueСтрокаЗначение, которое проставится в поле, если в провайдере оно пустое

Тело

Определяет как получать это поле выборки в провайдере. Например, в случае SQL провайдера задаёт значение плейсхолдера :select.

Пример

<page>  <sql>SELECT :select FROM mytable</sql></page>...<field>  <select mapping="fname" default-value="Неизвестный">first_name as fname</select></field>
<filters>#

Способы фильтрации поля выборки.

Элементы

НаименованиеТипОписаниеЗначение по умолчанию
<eq>ВыражениеФильтр эквивалентности
<in>ВыражениеФильтр вхождения хотя бы одного в список
<like>ВыражениеФильтр вхождения подстроки в строку
<like-start>ВыражениеФильтр начала подстроки
<is-null>ВыражениеФильтр пустого поля
<contains>ВыражениеФильтр вхождения списка в список
<overlaps>ВыражениеФильтр пересечения списка со списком
<more>ВыражениеФильтр больше
<less>ВыражениеФильтр меньше
<not-eq>ВыражениеФильтр не эквивалентности
<not-in>ВыражениеФильтр не вхождения в список
<is-not-null>ВыражениеФильтр не пустого поля

Базовые Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
filter-idСтрокаИдентификатор фильтра
mappingВыражениеМаппинг значения фильтра в параметры провайдераЭквивалентен id
domainТип данныхТип, в который будет конвертировано значение при отправке в провайдерЭквивалентен domain от <field> с преобразованием в список для множественных типов
default-valueСтрокаЗначение, по которому будет идти постоянная фильтрация, если для этогофильтра не передано другое значение
normalizeСтрокаВыражение для предварительного преобразования входных данных.

Пример

<filters>  <eq mapping="gender_id"    default-value="1">gender_id = :gender_id</eq>  <in filter-id="genders*.id"    mapping="genders"    domain="integer[]">gender_id in (:genders)</in>  <like filter-id="gender.name" domain="string" normalize="#this.toLowerCase()"/></filters>
<sorting>#

Способ сортировки поля выборки.

Атрибуты

НаименованиеТипОписаниеЗначение по умолчанию
mappingВыражениеМаппинг плейсхолдера направления сортировки в провайдере[fieldId]Direction

Тело

Определяет как сортировать это поле выборки в провайдере. Например, в случае SQL провайдера задаёт значение плейсхолдера :sorting.

Пример

<page>  <sql>SELECT first_name FROM mytable ORDER BY :sorting</sql></page>...<field id="firstName">  <sorting mapping="firstNameDirection">first_name :firstNameDirection</sorting></field>
<expression>#

Задаёт значение плейсхолдера :expression, который можно использовать в теле <select>, <filters>, <sorting>.

Тело

Значение плейсхолдера :expression.

<join>#

Задаёт выражение для соединения с другими сущностями(таблицами), если это необходимо для этого поля.

Тело

Определяет с какими сущностями(таблицами) необходимо соединиться, чтобы получить поле. Например, в случае SQL провайдера задаёт значение плейсхолдера :join.

Пример

<field id="firstName">  <expression>t1.first_name</expression>  <select mapping="fname">:expression as fname</select>  <filters>    <eq mapping="first_name">:expression = :first_name</eq>  </filters>  <sorting>:expression :direction</sorting>  <join>table t1 on t1.id=t2.t1_id</join></field>