[tarantool-patches] [PATCH] box: add tuple:size function

  • From: AlexeyIvushkin <ivushkinalex@xxxxxxxxx>
  • To: tarantool-patches@xxxxxxxxxxxxx
  • Date: Tue, 2 Oct 2018 23:50:33 +0300

From: Morgan-iv <ivushkinalex@xxxxxxxxx>

When operating with tuples, we only have tuple:bsize function
to get size of tuple. tuple:bsize returns only size of MessagePack
part of struct tuple, without tuple_meta. New function tuple:size
returns size of all tuple, with MessagePack and tuple_meta

Closes #2256
---
https://github.com/tarantool/tarantool/issues/2256
https://github.com/tarantool/tarantool/tree/Morgan-iv/gh-2256
 src/box/lua/tuple.c     | 10 ++++++++++
 src/box/lua/tuple.lua   |  1 +
 test/box/tuple.result   | 12 ++++++++++++
 test/box/tuple.test.lua |  6 ++++++
 4 files changed, 29 insertions(+)

diff --git a/src/box/lua/tuple.c b/src/box/lua/tuple.c
index 65660ce..1ae49d6 100644
--- a/src/box/lua/tuple.c
+++ b/src/box/lua/tuple.c
@@ -489,6 +489,15 @@ lbox_tuple_to_string(struct lua_State *L)
        return 1;
 }
 
+static int
+lbox_tuple_size(struct lua_State *L)
+{
+       struct tuple *tuple = lua_checktuple(L, 1);
+       size_t size = tuple_size(tuple);
+       lua_pushinteger(L, size);
+       return 1;
+}
+
 void
 luaT_pushtuple(struct lua_State *L, box_tuple_t *tuple)
 {
@@ -506,6 +515,7 @@ static const struct luaL_Reg lbox_tuple_meta[] = {
        {"__gc", lbox_tuple_gc},
        {"tostring", lbox_tuple_to_string},
        {"slice", lbox_tuple_slice},
+       {"size", lbox_tuple_size},
        {"transform", lbox_tuple_transform},
        {"tuple_to_map", lbox_tuple_to_map},
        {"tuple_field_by_path", lbox_tuple_field_by_path},
diff --git a/src/box/lua/tuple.lua b/src/box/lua/tuple.lua
index 63ea73e..801ee3c 100644
--- a/src/box/lua/tuple.lua
+++ b/src/box/lua/tuple.lua
@@ -286,6 +286,7 @@ local methods = {
     ["update"]      = tuple_update;
     ["upsert"]      = tuple_upsert;
     ["bsize"]       = tuple_bsize;
+    ["size"]        = internal.tuple.size;
     ["tomap"]       = internal.tuple.tuple_to_map;
 }
 
diff --git a/test/box/tuple.result b/test/box/tuple.result
index e035cb9..418f5f8 100644
--- a/test/box/tuple.result
+++ b/test/box/tuple.result
@@ -186,6 +186,18 @@ t:bsize()
 ---
 - 5
 ...
+-- tuple:size()
+t = box.tuple.new('abc')
+---
+...
+t
+---
+- ['abc']
+...
+t:size()
+---
+- 15
+...
 --
 -- Test cases for #106 box.tuple.new fails on multiple items
 --
diff --git a/test/box/tuple.test.lua b/test/box/tuple.test.lua
index 9df978d..7f4e2b3 100644
--- a/test/box/tuple.test.lua
+++ b/test/box/tuple.test.lua
@@ -49,6 +49,12 @@ t = box.tuple.new('abc')
 t
 t:bsize()
 
+-- tuple:size()
+
+t = box.tuple.new('abc')
+t
+t:size()
+
 --
 -- Test cases for #106 box.tuple.new fails on multiple items
 --
-- 
2.7.4


Other related posts: