Вложенный модуль box.tuple
Вложенный модуль box.tuple
предоставляет доступ только для чтения к пользовательским данным типа кортеж tuple
. С его помощью для отдельного кортежа можно сделать следующее: выборочно искать содержимое поля, получать информацию о размере, проводить итерацию по всем полям и выполнять преобразование в Lua-таблицу.
Ниже приведен перечень всех функций модуля box.tuple
.
Имя | Использование |
---|---|
box.tuple.new() | Создание кортежа |
box.tuple.is() | Проверка, является ли переданный объект кортежем |
#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
...