Top.Mail.Ru
box.space._func | Tarantool
Tarantool
Узнайте содержание релиза 2.8

box.space._func

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]).

Доступны следующие операции:

Пример:

В следующем примере создадим функцию с именем ‘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')
---
...