From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp38.i.mail.ru (smtp38.i.mail.ru [94.100.177.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 7856E46970F for ; Thu, 28 Nov 2019 02:40:49 +0300 (MSK) References: <20191127213037.94837-1-k.sosnin@tarantool.org> From: Vladislav Shpilevoy Message-ID: Date: Thu, 28 Nov 2019 00:40:46 +0100 MIME-Version: 1.0 In-Reply-To: <20191127213037.94837-1-k.sosnin@tarantool.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [Tarantool-patches] [PATCH v2] box: frommap() bug fix List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Chris Sosnin , tarantool-patches@dev.tarantool.org, Kirill Yukhin Thanks for the patch! When changes are minor, it is not worth sending a new version. Just respond to my comments in the same thread, and append a new patch version to the end of the response. Also, please, when address my objections, answer to them inline with a piece of diff for that concrete objection. So your response email should look like this: > Cite of my comment 1 Your answer 1. Your diff to that comment. > Cite of my comment 2 Your answer 2. Your diff to that comment. Etc. New version of the patch. In case you send a new version of the patch in a new thread, you should respond to my comments in the old thread. When you cite my comments, and respond to each of them, you make the review simpler and faster. This patch LGTM. On 27/11/2019 22:30, Chris Sosnin wrote: > Thank you for the review! > Fixed version below. > branch: https://github.com/tarantool/tarantool/tree/ksosnin/gh-4262-frommap-error-handle > issue: https://github.com/tarantool/tarantool/issues/4262 > > - If an optional argument is provided for > space_object:frommap() (which is {table = true|false}), > type match for first arguments is omitted, which is > incorrect. We should return the result only after making > sure it is possible to build a tuple. > > - If there is a type mismatch, however, frommap() does not > return nil, err as it is mentioned in the description, so we > change it to be this way. > > Closes #4262 > --- > src/box/lua/space.cc | 13 +++++++++---- > test/box/tuple.result | 8 +++++++- > test/box/tuple.test.lua | 1 + > 3 files changed, 17 insertions(+), 5 deletions(-) > > diff --git a/src/box/lua/space.cc b/src/box/lua/space.cc > index f6e96f0c0..e772a924d 100644 > --- a/src/box/lua/space.cc > +++ b/src/box/lua/space.cc > @@ -580,14 +580,19 @@ lbox_space_frommap(struct lua_State *L) > } > lua_rawseti(L, -3, fieldno+1); > } > - if (table) > - return 1; > > lua_replace(L, 1); > lua_settop(L, 1); > tuple = luaT_tuple_new(L, -1, space->format); > - if (tuple == NULL) > - return luaT_error(L); > + if (tuple == NULL) { > + struct error *e = diag_last_error(&fiber()->diag); > + lua_pushnil(L); > + lua_pushstring(L, e->errmsg); > + return 2; > + } > + if (table) { > + return 1; > + } > luaT_pushtuple(L, tuple); > return 1; > usage_error: > diff --git a/test/box/tuple.result b/test/box/tuple.result > index 9140211b7..78f919deb 100644 > --- a/test/box/tuple.result > +++ b/test/box/tuple.result > @@ -1121,7 +1121,13 @@ s:frommap() > ... > s:frommap({}) > --- > -- error: Tuple field 1 required by space format is missing > +- null > +- Tuple field 1 required by space format is missing > +... > +s:frommap({ddd = 'fail', aaa = 2, ccc = 3, bbb = 4}, {table=true}) > +--- > +- null > +- 'Tuple field 4 type does not match one required by operation: expected unsigned' > ... > s:frommap({ddd = 1, aaa = 2, ccc = 3, bbb = 4}, {table = true}) > --- > diff --git a/test/box/tuple.test.lua b/test/box/tuple.test.lua > index 3ac2902fe..baf2f22d5 100644 > --- a/test/box/tuple.test.lua > +++ b/test/box/tuple.test.lua > @@ -373,6 +373,7 @@ s:frommap({ddd = 1, aaa = 2, bbb = 3}) > s:frommap({ddd = 1, aaa = 2, ccc = 3, eee = 4}) > s:frommap() > s:frommap({}) > +s:frommap({ddd = 'fail', aaa = 2, ccc = 3, bbb = 4}, {table=true}) > s:frommap({ddd = 1, aaa = 2, ccc = 3, bbb = 4}, {table = true}) > s:frommap({ddd = 1, aaa = 2, ccc = 3, bbb = 4}, {table = false}) > s:frommap({ddd = 1, aaa = 2, ccc = 3, bbb = box.NULL}) > -- > 2.21.0 (Apple Git-122.2) >