Документация на русском языке
поддерживается сообществом

Вложенный модуль box.tuple

Вложенный модуль box.tuple предоставляет доступ только для чтения к пользовательским данным типа кортеж tuple. С его помощью для отдельного кортежа можно сделать следующее: выборочно искать содержимое поля, получать информацию о размере, проводить итерацию по всем полям и выполнять преобразование в Lua-таблицу.

Ниже приведен перечень всех функций модуля box.tuple.

Имя Использование
box.tuple.new() Создание кортежа
#tuple_object Подсчет полей кортежа
box.tuple.bsize() Подсчет байтов в кортеже
tuple_object[field-number] Получение поля кортежа по номеру
tuple_object[field-name] Получение поля кортежа по имени
tuple_object[field-path] Получение полей кортежа или компонентов по пути
tuple_object:find(), tuple_object:findall() Получение номера первого поля, совпадающего с искомым значением
tuple_object:next() Получение значения следующего поля из кортежа
tuple_object:pairs(), tuple_object:ipairs() Подготовка к итерации
tuple_object:totable() Получение полей кортежа в виде таблицы
tuple_object:tomap() Получение полей кортежа в виде таблицы, а также пар ключ-значение
tuple_object:transform() Удаление (и замена) полей кортежа
tuple_object:unpack() Получение полей кортежа
tuple_object:update() Обновление кортежа
tuple_object:upsert() Обновление кортежа, игнорируя ошибки

Представленная ниже функция проиллюстрирует, как можно преобразовать кортежи в 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_number local 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 ... 
Нашли ответ на свой вопрос?
Обратная связь