Библиотека golang.
Библиотека для работы с реляционными базами данных, реализующая формированием SQL запроса с фильтрацией, сортировкой, лимитами и постраничным выводом, используя данные полученные через параметры URN запроса.
go get github.com/webnice/f8n
package main
import "github.com/webnice/f8n"
В библиотеку передаётся запрос, из которого библиотека забирает значения из описанных ниже переменных. Строка запроса и все значения кодируются в URLENCODE, в соответствии с HTTP стандартом, но ниже в примерах, описаны не закодированные значения, для простоты чтения и понимания.
limit - [Строка] - Лимит результата, составное поле, формат значения:
{порядковый номер первого элемента}:{количество элементов в ответе}
Значения:
-
Порядковый номер — число, больше или равно 0, не может быть меньше нуля.
-
Количество элементов в ответе — число, больше или равно 0, если указано 0 или отрицательное значение (тогда выводятся все записи (нет лимита)). Допускается указание пустых значений.
Пример: limit=: (нет лимита) — эквивалентно: limit=0:-1.
Допускается значение состоящее из одного числа.
Пример: limit=15 — эквивалентно: limit=0:15.
Если будет передано несколько значений лимита, будет возвращена 4хх ошибка.
По умолчанию: limit=0:-1 (нет лимита).
Пример: limit=10:90.
by - [Строка] - Имя поля сортировки результата, составное поле, формат значения:
{имя поля объекта}:{порядок сортировки}
Значения порядка сортировки:
-
asc — прямая сортировка.
-
desc — обратная сортировка. В соответствии с правилами HTTP, если необходимо передать несколько значений сортировки, то их надо передавать последовательно, в порядке приоритета.
Пример: order=id:asc&order=name:desc.
filter - [Строка] - Описание простой фильтрации данных, составное поле, формат значения:
{имя поля}:{способ сравнения}:{значение}.
В соответствии с правилами HTTP, если необходимо передать несколько фильтров, то их надо передавать последовательно в порядке приоритета. Если переданы несколько параметров filter, тогда они объединяются по принципу «И».
Пример: ?filter=cty:lk:mos*&filter=con:eq:asia.
Способы сравнения:
Значение | Описание |
---|---|
eq | = - равно. |
lt | < - меньше. |
le | <= - меньше или равно. |
gt | > - больше. |
ge | >= - больше или равно. |
ne | != - не равно. |
ke | Аналог SQL LIKE. Для указания символов используются: ? - Одиночный символ. * - Произвольное количество символов. Пример: filter=section:ke:П?рвый. |
kn | Аналог SQL NOT LIKE. Для указания символов используются: ? - Одиночный символ. * - Произвольное количество символов. Пример: filter=section:kn:П*й. |
in | Идентификаторы через запятую для условия выборки IN (?). Пример: filter=id:in:1,3,5,7 |
ni | Идентификаторы через запятую для условия отрицания NOT IN (?). Пример: filter=id:ni:1,3,5,7 |
tie - [Строка] - Режим работы простой фильтрации, устаревший параметр, оставлен для обратной совместимости, формат значения:
tie={значение}.
Параметр tie указывает простому фильтру в каком режиме он должен объединять два и более параметров фильтрации. Есть два режима, режим AND (по умолчанию) и режим OR.
ВНИМАНИЕ! Параметр игнорируется если используется map. Режим tie оставлен только для обратной совместимости и полностью заменяется map.
Пример: ?filter=cty:lk:mos*&filter=con:eq:asia&tie=or.
Режимы простой фильтрации:
Значение | Описание |
---|---|
and | Режим логического И, значения filter будут объединяться в запросе WHERE через AND, по принципу «И» (по умолчанию). |
or | Режим логического ИЛИ, значения filter будут объединяться в запросе WHERE через OR, по принципу «ИЛИ». |
map - [Строка] - Описание сложной фильтрации данных, составное поле, формат значения:
{имя фильтра}{:операция:}{имя фильтра}
Описывает логическую операцию между двумя и более фильтрами и позволяет группировать фильтры в операторные скобки. Сложная фильтрация может описывать все требуемые логические условия, условия filter оставлены для совместимости с первой версией библиотеки фильтрации и если используются, то объединение логических операций происходит по следующему принципу:
-
Если переданы несколько параметров map, тогда они объединяются по принципу «ИЛИ».
-
Если переданы одновременно параметры filter и map, тогда filter объединяются по принципу «И», map объединяются по принципу «ИЛИ», а группа условий filter и группа условий map объединяются по принципу «И», по следующей формуле:
(filter1 И filter 2 … И filterN) И (map1 ИЛИ map2 ... ИЛИ mapN) {имя фильтра} — любое произвольное значение не совпадающее с ключевыми словами. {:операция:} — логическая операция или операторные скобки описанные в таблице ниже.
Логические операции:
Операция | Описание |
---|---|
:or: | Логическое ИЛИ |
:and: | Логическое И |
( | Открывающаяся операторная скобка. |
) | Закрывающаяся операторная скобка. |
Пример 1: map=f1:or:f2:or:(f3:and:f4)&f1=field1:eq:1&f2=field2:eq:2&...
Пример 2: http://localhost?map=((group1:and:group2:or:group3)or(group4:or:group5))or(group4:and:group5)&group1=field1:eq:value1&group2=field2:ke:value2&group3=field3:ke:value3&group4=field1:ke:value4&group5=field2:ke:value5
Пример 3: http://localhost?
map=(первая:and:вторая:or:третья)or(четвёртая:or:пятая)
&map=((первая:and:вторая)or(третья:and:четвёртая))
&первая=field1:eq:value1
&вторая=field2:ke:value2
&третья=field3:ke:value3
&четвёртая=field1:ke:value4
&пятая=field2:ke:value5