Tarantool CE/EE Documentation portal logo
Помощь

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

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

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

Имя

Назначение

box.tuple.new()

Создание кортежа

box.tuple.is()

Проверка, является ли заданный объект кортежем

#tuple_object

Подсчет количества полей кортежа

tuple_object.bsize()

Получение количества байтов в кортеже

tuple_object[field-number]

Получение поля кортежа по номеру

tuple_object[field-name]

Получение поля кортежа по имени

tuple_object[field-path]

Получение полей или частей кортежа по пути

tuple_object:find(), tuple_object:findall()

Получение номера первого поля / всех полей, соответствующих искомому значению

tuple_object:format()

Получение формата кортежа

tuple_object.info()

Получение информации о кортеже

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-таблицы и обратно

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