diff --git a/core/tarantool_lua.m b/core/tarantool_lua.m index 1ed40a189688d56670e64c6580427b3053825852..f1c3b4934116c419c11960c5a7717c5bd110863b 100644 --- a/core/tarantool_lua.m +++ b/core/tarantool_lua.m @@ -67,6 +67,7 @@ static char format_to_opcode(char format) case '&': return 2; case '|': return 3; case '^': return 4; + case ':': return 5; default: return format; } } @@ -148,6 +149,7 @@ lbox_pack(struct lua_State *L) case '&': /* set field&=val */ case '|': /* set field|=val */ case '^': /* set field^=val */ + case ':': /* splice */ u32buf= (u32) lua_tointeger(L, i); /* field no */ luaL_addlstring(&b, (char *) &u32buf, sizeof(u32)); luaL_addchar(&b, format_to_opcode(*format)); diff --git a/test/box/lua.result b/test/box/lua.result index 5ad20fae0032aeee5d7754e75e357bf5b363ecb6..b741939bfeb64c5e28c42ce3da5a3e9c4c50efb4 100644 --- a/test/box/lua.result +++ b/test/box/lua.result @@ -560,3 +560,18 @@ lua f==g --- - true ... +lua box.space[0]:insert('test', 'something to splice') +--- + - 1953719668: {'something to splice'} +... +lua box.space[0]:update('test', ':p', 1, box.pack('ppp', 0, 4, 'no')) +--- + - 1953719668: {'nothing to splice'} +... +lua box.space[0]:update('test', ':p', 1, box.pack('ppp', 0, 2, 'every')) +--- + - 1953719668: {'everything to splice'} +... +lua box.space[0]:truncate() +--- +... diff --git a/test/box/lua.test b/test/box/lua.test index d9242622cf6ca98d168780aa41fed9663a73fae3..b763425fe611f61bd74fc8f7fcee044c06eedd20 100644 --- a/test/box/lua.test +++ b/test/box/lua.test @@ -154,3 +154,7 @@ exec admin "lua box.fiber.cancel(box.fiber.self())" exec admin "lua f:id(), box.fiber.self():id()" exec admin "lua g = box.fiber.self()" exec admin "lua f==g" +exec admin "lua box.space[0]:insert('test', 'something to splice')" +exec admin "lua box.space[0]:update('test', ':p', 1, box.pack('ppp', 0, 4, 'no'))" +exec admin "lua box.space[0]:update('test', ':p', 1, box.pack('ppp', 0, 2, 'every'))" +exec admin "lua box.space[0]:truncate()"