Версия:

Модуль pickle

Модуль pickle

Индекс

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

Имя Использование
pickle.pack() Конвертация Lua-переменных в двоичный формат
pickle.unpack() Конвертация Lua-переменных в двоичный формат
pickle.pack(format, argument[, argument ...])

Чтобы использовать примитивы бинарного протокола Tarantool’а из Lua, необходимо конвертировать Lua-переменные в двоичный формат. Прототипом вспомогательной функции pickle.pack() выступила функция „pack“ из Perl.

Спецификаторы формата

b, B конвертирует скалярное Lua-значение в 1-байтное целое число и хранит целое число в полученной строке
s, S конвертирует скалярное Lua-значение в 2-байтное целое число и хранит целое число в полученной строке, сначала младший байт
i, I конвертирует скалярное Lua-значение в 4-байтное целое число и хранит целое число в полученной строке, сначала младший байт
l, L конвертирует скалярное Lua-значение в 8-байтное целое число и хранит целое число в полученной строке, сначала младший байт
n конвертирует скалярное Lua-значение в 2-байтное целое число и хранит целое число в полученной строке, порядок от старшего к младшему,
N конвертирует скалярное Lua-значение в 4-байтное целое число и хранит целое число в полученной строке, порядок от старшего к младшему,
q, Q конвертирует скалярное Lua-значение в 8-байтное целое число и хранит целое число в полученной строке, порядок от старшего к младшему,
f конвертирует скалярное Lua-значение в 4-байтное число с плавающей запятой и хранит число с плавающей запятой в полученной строке
d конвертирует скалярное Lua-значение в 8-байтное число двойной точности и хранит число двойной точности в полученной строке
a, A конвертирует скалярное Lua-значение в последовательность байтов и хранит последовательность в полученной строке
Параметры:
  • format (string) – строка со спецификаторами формата
  • argument(s) (scalar-value) – скалярные значения к форматированию
возвращается:

бинарная строка, которая содержит все аргументы, упакованные в соответствии со спецификаторами формата.

тип возвращаемого значения:
 

string (строка)

Скалярное значение может быть либо переменной, либо литеральным значением. Следует помнить, что большие целые числа нужно вводить с tonumber64() или суффиксами LL или ULL.

Возможные ошибки: неизвестный спецификатор формата.

Пример:

tarantool> pickle = require('pickle')
 ---
 ...
 tarantool> box.space.tester:insert{0, 'hello world'}
 ---
 - [0, 'hello world']
 ...
 tarantool> box.space.tester:update({0}, {{'=', 2, 'bye world'}})
 ---
 - [0, 'bye world']
 ...
 tarantool> box.space.tester:update({0}, {
          >   {'=', 2, pickle.pack('iiA', 0, 3, 'hello')}
          > })
 ---
 - [0, "\0\0\0\0\x03\0\0\0hello"]
 ...
 tarantool> box.space.tester:update({0}, {{'=', 2, 4}})
 ---
 - [0, 4]
 ...
 tarantool> box.space.tester:update({0}, {{'+', 2, 4}})
 ---
 - [0, 8]
 ...
 tarantool> box.space.tester:update({0}, {{'^', 2, 4}})
 ---
 - [0, 12]
 ...
pickle.unpack(format, binary-string)

Противоположность pickle.pack(). Внимание: если используется спецификатор формата „A“, он должен идти последним.

Параметры:
возвращается:

Список строк или чисел.

тип возвращаемого значения:
 

таблица

Пример:

tarantool> pickle = require('pickle')
 ---
 ...
 tarantool> tuple = box.space.tester:replace{0}
 ---
 ...
 tarantool> string.len(tuple[1])
 ---
 - 1
 ...
 tarantool> pickle.unpack('b', tuple[1])
 ---
 - 48
 ...
 tarantool> pickle.unpack('bsi', pickle.pack('bsi', 255, 65535, 4294967295))
 ---
 - 255
 - 65535
 - 4294967295
 ...
 tarantool> pickle.unpack('ls', pickle.pack('ls', tonumber64('18446744073709551615'), 65535))
 ---
 ...
 tarantool> num, num64, str = pickle.unpack('slA', pickle.pack('slA', 666,
          > tonumber64('666666666666666'), 'string'))
 ---
 ...