Top.Mail.Ru
box.space._func | Tarantool
 

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 identifier),
  • owner (integer identifier),
  • имя функции,
  • the setuid flag,
  • название языка (необязательно): „LUA“ (по умолчанию) or „C“.
  • the body
  • the is_deterministic flag
  • the is_sandboxed flag
  • options

If the function tuple was made in the older way without specification of body, then the _func space will contain default values for the body and the is_deterministic flag and the is_sandboxed flag. Such function tuples are called «not persistent». You continue to create Lua functions in the usual way, by saying function function_name () ... end, without adding anything in the _func space. The _func space only exists for storing function tuples so that their names can be used within grant/revoke functions.

If the function tuple was made the newer way with specification of body, then all the fields may contain non-default values. Such functions are called «persistent». They should be invoked with 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')
---
...