Вложенный модуль box.tuple
Вложенный модуль box.tuple предоставляет доступ только для чтения к
пользовательским данным типа кортеж tuple. С его помощью для
отдельного кортежа можно сделать следующее: выборочно
искать содержимое поля, получать информацию о размере, проводить
итерацию по всем полям и выполнять преобразование в
Lua-таблицу.
Ниже приведен перечень всех функций модуля box.tuple.
Имя | Назначение |
|---|---|
Создание кортежа | |
Проверка, является ли заданный объект кортежем | |
Подсчет количества полей кортежа | |
Получение количества байтов в кортеже | |
Получение поля кортежа по номеру | |
Получение поля кортежа по имени | |
Получение полей или частей кортежа по пути | |
Получение номера первого поля / всех полей, соответствующих искомому значению | |
Получение формата кортежа | |
Получение информации о кортеже | |
Получение значения следующего поля кортежа | |
Подготовка к итерации | |
Получение полей кортежа в виде таблицы | |
Получение полей кортежа в виде таблицы с парами ключ: | |
Удаление (и замена) полей кортежа | |
Получение полей кортежа | |
Обновление кортежа | |
Обновление кортежа с игнорированием ошибок |
Представленная ниже функция проиллюстрирует, как можно преобразовать кортежи в Lua-таблицы и списки скаляров и обратно:
tuple = box.tuple.new({scalar1, scalar2, ... scalar_n}) -- скаляры в кортежlua_table = {tuple:unpack()} -- кортеж в Lua-таблицуlua_table = tuple:totable() -- кортеж в Lua-таблицуscalar1, scalar2, ... scalar_n = tuple:unpack() -- кортеж в скалярыtuple = box.tuple.new(lua_table) -- Lua-таблицу в кортеж
Затем она найдет поле, которое содержит значение 'b', удалит это поле
из кортежа и отобразит количество байтов, оставшихся в кортеже. Данная
функция использует следующие функции box.tuple Tarantool: new(),
unpack(), find(), transform(), bsize().
function example()local tuple1, tuple2, lua_table_1, scalar1, scalar2, scalar3, field_numberlocal luatable1 = {}tuple1 = box.tuple.new({'a', 'b', 'c'})luatable1 = tuple1:totable()scalar1, scalar2, scalar3 = tuple1:unpack()tuple2 = box.tuple.new(luatable1[1],luatable1[2],luatable1[3])field_number = tuple2:find('b')tuple2 = tuple2:transform(field_number, 1)return 'tuple2 = ' , tuple2 , ' # of bytes = ' , tuple2:bsize()end
... А вот что происходит, когда вызывается функция:
tarantool> example()---- tuple2 =- ['a', 'c']- ' # of bytes = '- 5...