Поддержать операцию call
monolithed opened this issue · 7 comments
Без вызова хранимых процедур драйвер практически бесполезен (
+1
Оно работает, я просто тесты на это не писал пока. Ну во всяком случае truncate отрабатывает.
space:create_index('primary', {
parts = {
1, 'str'
}
})
-- Хранимая процедура добавления списка записей
function batch (data)
for index, value in pairs(data) do
box.space[config.name]:insert(value)
end
endtarantool.insert('batch', [
[ 'foo' ],
[ 'bar' ]
])
.then(result => {
console.log('result', result);
})
.catch(error => {
console.log('error', error);
});error Tuple/Key must be MsgPack array
Оказалось что в процедуру приходит первый элемент массива.
Вот эта бы процедура отработала:
function batch (data)
box.space[config.name]:insert(data)
endОднако, я ожидаю, что в функцию должна прийти таблица элементов.
Я могу конечно передать json, предварительно сериализировать его у себя, а затем сделать декод в тарантуле, но это какой-то оверхед...
Хотелось бы чтобы работало примерно так же:
➜ rlwrap nc 0 9001
net_box = require 'net.box'
connection = net_box:new('localhost', 9000)
connection:call('batch', {
{'foo'},
{'bar'}
})
-- [ [ 'foo'], ['bar'] ]@monolithed переделал немного call, чтобы он аргументы в себя принимал, а не просто массив. Нет там ничего не надо перекодировать и докодировать в том примере можно просто первый массив еще раз в массив обернуть, но в принципе в новой версии и так заработает, второй элемент массива просто становился вторым аргументом.
@monolithed обнови package у себя должно заработать.
Спасибо, сегодня попробую!