Системные переменные и параметры конфигурации

Системные переменные

SqlQuery, описанные в серверном xml-файле поддерживают системные переменные, значения которых серверная часть автоматически формирует и подставляет вместе со значениями пользовательских переменных. Значения системных переменных можно переопределить, передав в запрос параметры с такими же именами.

Текущим пользователем считается пользователь, от имени которого был отправлен запрос с клиентской части на сервер.

Переменные пользователя

Таблицы, из которых будут браться значения, задаются тэгом <UserSettings> описанном в серверном xml-файле. Название таблицы пользователей глобальной схемы данных задается атрибутом PublicUserTable (по умолчанию public.user), а название таблицы пользователей в локальной схеме данных - атрибутом Table. Название таблицы соответствий пользователей и групп в локальной схеме данных указывается в атрибуте UserGroupTable.

{UserId}

Идентификатор текущего пользователя из таблицы пользователей локальной схемы данных. Название поля задается атрибутом IdField.

{PublicUserId}

Идентификатор текущего пользователя из таблицы пользователей глобальной схемы данных. Название поля задается атрибутом PublicUserIdField.

{UserName}

Системное имя текущего пользователя из таблицы пользователей глобальной схемы данных. Название поля задается атрибутом PublicUserNameField.

{UserFullName}

Видимое имя текущего пользователя из таблицы пользователей глобальной схемы данных. Название поля задается атрибутом PublicUserFullNameField.

{UserEnabled}

Признак активного состояния текущего пользователя из таблицы пользователей глобальной схемы данных. Название поля задается атрибутом PublicUserEnabledField.

{UserGroupIds}

Список идентификаторов групп, в которых состоит текущий пользователь. Значения берутся из таблицы соответствий пользователей и групп в локальной схеме данных.

{UserGroupIdsArray}

Массив идентификаторов групп, в которых состоит текущий пользователь. Значения берутся из таблицы соответствий пользователей и групп в локальной схеме данных.

Переменные даты и времени

Дата и время отображается в часовом поясе сервера, который задается в файле конфигурации сервера appsettings.json в поле TimeZone.

{Now}

Текущая дата со временем на сервере

{NowTime}

Текущее время на сервере

{NowDate}

Текущая дата на сервере

{NowYear}

Текущий год на сервере

{NowMonth}

Текущая месяц на сервере

{NowHour}

Возвращает количество часов из текущего времени на сервере

{NowMinute}

Возвращает количество минут из текущего времени на сервере

{NowSecond}

Возвращает количество секунд из текущего времени на сервере

Переменные временной зоны

Временная зона сервера задается в файле конфигурации сервера appsettings.json в поле TimeZone.

{ServerTimeZone}

Текущая временная зона сервера.

{TimeZoneOffset}

Устаревший Величина смещения временной зоны текущего пользователя относительно Etc/GMT.

{ServerTimeZoneOffset}

Устаревший Величина смещения временной зоны сервера относительно Etc/GMT.

{TimeZoneDiff}

Устаревший Разница между временной зоной сервера и временной зоной текущего пользователя.

Как правило в sql-запросах и функциях используем параметры конфигураций.

Параметры конфигурации

Перед выполнением каждого SqlQuery сервер выполняет запрос на установку параметров конфигурации:

SELECT
    set_config('ws.user_id', (1)::varchar, False),
    set_config('ws.public_user_id', (1)::varchar, False),
    set_config('ws.server_time_zone', ('Etc/GMT')::varchar, False),

    -- Устаревшие
    set_config('ws.time_zone_offset', (3)::varchar, False),
    set_config('ws.time_zone_diff', (3)::varchar, False),
    set_config('ws.server_time_zone_offset', (0)::varchar, False);

Метод set_config устанавливает для параметра значение, которое будет доступно до конца текущего сеанса. Чтобы получить значение параметра необходимо использовать метод current_setting:

SELECT current_setting('ws.server_time_zone');

Платформа поддерживает следующие параметры конфигурации:

ws.user_id

Идентификатор текущего пользователя из таблицы пользователей локальной схемы данных. Название поля задается атрибутом IdField.

ws.public_user_id

Идентификатор текущего пользователя из таблицы пользователей глобальной схемы данных. Название поля задается атрибутом PublicUserIdField.

ws.server_time_zone

Текущая временная зона сервера.

ws.server_time_zone_offset

Устаревший Величина смещения временной зоны сервера относительно Etc/GMT.

ws.time_zone_offset

Устаревший Величина смещения временной зоны текущего пользователя относительно Etc/GMT.

ws.time_zone_diff

Устаревший Разница между временной зоной сервера и временной зоной текущего пользователя.

Так же перед выполнением SqlQuery сервер выполняет запрос на установку временной зоны для сервера PostgreSQL:

SET time zone 'Etc/GMT';

Временная зона для сервера PostgreSQL устанавливается только для текущего сеанса. Это необходимо, чтобы исключить неприятные ситуации из-за редактированием настроек сервера PostgreSQL и изменения его временной зоны. В качестве значения используется временная зона сервера.

Last updated