Skip to content
/ f8n Public

Библиотека формирующая SQL запросы с фильтрацией, сортировкой, лимитами и постраничным выводом на основе RESTful параметров HTTP(s) запросов.

License

Notifications You must be signed in to change notification settings

webnice/f8n

Repository files navigation

Filtration


Go Report Card

filtration -> f[iltratio]n -> f[8]n -> f8n

Библиотека 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

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

About

Библиотека формирующая SQL запросы с фильтрацией, сортировкой, лимитами и постраничным выводом на основе RESTful параметров HTTP(s) запросов.

Topics

Resources

License

Stars

Watchers

Forks