Модуль pickle
Ниже приведен перечень всех функций модуля pickle.
Имя | Назначение |
|---|---|
Преобразование переменных Lua в бинарный формат | |
Преобразование переменных Lua обратно из бинарного формата |
Для использования примитивов бинарного протокола 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-байтовое число с плавающей точкой (float) и сохраняет его в результирующей строке |
d | преобразует скалярное значение Lua в 8-байтовое число двойной точности (double) и сохраняет его в результирующей строке |
a, A | преобразует скалярное значение Lua в последовательность байтов и сохраняет ее в результирующей строке |
Параметры:
format(string) — строка, содержащая спецификаторы форматаargument(s)(scalar-value) — скалярные значения для форматирования
Возвращает
бинарная строка, содержащая все аргументы, упакованные в соответствии со спецификаторами формата.
Тип возвращаемого значения
string
Скалярное значение может быть либо переменной, либо литеральным значением. Следует помнить, что большие целые числа нужно вводить с tonumber64() или суффиксами LL или ULL.
Возможные ошибки:
- Количество аргументов не соответствует формату. Примечание: избыточные значения просто игнорируются.
- Ожидалось 8/16/32/64-битное целое число.
- Неподдерживаемый спецификатор формата pack.
Пример:
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.pack().
Внимание: если используется спецификатор формата 'A', он должен идти
последним.
Параметры:
format(string) — строка, содержащая спецификаторы форматаbinary-string(string) — распаковываемая бинарная строка
Возвращает
Список строк или чисел.
Тип возвращаемого значения
table
Возможные ошибки:
- Слишком много байтов: распаковано X, всего Y. X < Y.
- Получено X байтов (ожидалось: Y+). X < Y.
- Неподдерживаемый спецификатор формата.
Пример:
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'))---...