Вложенный модуль 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 ...