node-tarantool-driver
node-tarantool-driver copied to clipboard
int32 в индексе
tarantool.select(spaceId: Number or String, indexId: Number or String, limit: Number, offset: Number, iterator: Iterator, key: tuple) ключ для индекса не позволяет выполнить поиск по значению больше чем int32 connection.select('chat', 'primary', 20, 0, 'lt', [2147483648])
UnhandledPromiseRejectionWarning: TarantoolError: Supplied key type of part 0 does not match index part type: expected unsigned connection.select('chat', 'primary', 20, 0, 'lt', [2147483647]) - работает нормально
Тоже столкнулся. Да и не только в select. Такая же проблема и в insert. Да, жесткий баг. К примеру, хранить timestamp в миллисекундах не получится из-за него.
Work-around: завернуть в хранимку (вот call нормально работает). Или просто юзать string...
The reason is msgpack considers the value as a double
if it doesn't fit:
> a=[21474836470]
[ 21474836470 ]
> typeof(a[0])
'number'
> msgpack.encode(a)
<Buffer 91 cb 42 13 ff ff ff d8 00 00>
Where 0xcb
means float 64
.
In progress at #53 , will be fixed by using packInteger()
method, which forces msgpack-lite to safely encode a number.
If value doesn't fit as int32
, it will be packed as int64
rather than float 64
.