tarantool/node-tarantool-driver

Поддержать операцию 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
end
tarantool.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 у себя должно заработать.

Спасибо, сегодня попробую!