box.space._func
-
box.space.
_func
¶ _func
– это системный спейс, который содержит кортежи с функциями, созданными с помощью box.schema.func.create() или box.schema.func.create(func-name [, {options-with-body}]).Кортежи в данном спейсе включают в себя следующие поля:
- id (идентификатор типа integer)
- owner (идентификатор типа integer)
- имя функции
- флаг
setuid
- название языка (необязательно): „LUA“ (по умолчанию) или „C“
- body (тело функции)
- флаг
is_deterministic
- флаг
is_sandboxed
- опции
Если кортеж с функцией был создан старым способом без указания
body
, то в спейсе_func
будут указаны значения body, флагаis_deterministic
и флагаis_sandboxed
, которые используются по умолчанию. Такие кортежи с функцией называются «непостоянными». Lua-функции по-прежнему создаются с помощьюfunction function_name () ... end
без каких-либо добавлений в спейс_func
. Спейс_func
предназначен лишь для хранения кортежей с функциями так, чтобы их имена могли использоваться в функциях выдачи / отмены прав.Если же кортеж с функцией был создан новым способом с указанием тела функции
body
, то все поля могут содержать нестандартные значения. Такие функции называются «постоянными». Их следует вызывать, используяbox.func.func-name:call([parameters])
.Доступны следующие операции:
- Создание кортежа в
_func
с помощью box.schema.func.create(). - Удаление кортежа в
_func
с помощью box.schema.func.drop(). - Проверка наличия кортежа в
_func
с помощью box.schema.func.exists().
Пример:
В следующем примере создадим функцию с именем ‘f7’, поместим ее в спейс
_func
в Tarantool и выдадим права на „выполнение“ этой функции пользователю „guest“.tarantool> function f7() > box.session.uid() > end --- ... tarantool> box.schema.func.create('f7') --- ... tarantool> box.schema.user.grant('guest', 'execute', 'function', 'f7') --- ... tarantool> box.schema.user.revoke('guest', 'execute', 'function', 'f7') --- ...
Представление системного спейса
_func
—_vfunc
.