[tarantool-patches] Re: [PATCH v2 1/1] schema:frommap() to create table or tuple

Kirill Shcherbatov kshcherbatov at tarantool.org
Mon Apr 2 22:42:32 MSK 2018


I've also updated commit message content.

diff --git a/src/box/lua/space.cc b/src/box/lua/space.cc
index f8583a2..2ff9a11 100644
--- a/src/box/lua/space.cc
+++ b/src/box/lua/space.cc
@@ -38,6 +38,7 @@ extern "C" {
  	#include <lua.h>
  	#include <lauxlib.h>
  	#include <lualib.h>
+	#include <trivia/util.h>
  } /* extern "C" */

  #include "box/space.h"
@@ -175,7 +176,7 @@ lbox_fillspace(struct lua_State *L, struct space 
*space, int i)
  	lua_pushstring(L, space->def->engine_name);
  	lua_settable(L, i);

-	/* space.schema_version */
+	/* space._schema_version */
  	lua_pushstring(L, "_schema_version");
  	luaL_pushuint64(L, box_schema_version());
  	lua_settable(L, i);
@@ -400,8 +401,8 @@ static struct trigger on_alter_space_in_lua = {
  /**
   * Get a C pointer for space structure.
   * Caches the result. Cleans the user(negative) stack itself.
- * @param Lua space object at top of the Lua stack
- * @return C structure pointer
+ * @param Lua space object at top of the Lua stack.
+ * @retval C structure pointer.
   */
  static int
  lbox_space_ptr_cached(struct lua_State *L)
@@ -422,6 +423,8 @@ lbox_space_ptr_cached(struct lua_State *L)
  		lua_getfield(L, 1, "id");
  		uint32_t id = luaL_touint64(L, -1);
  		space = space_by_id(id);
+		if (!space)
+			luaL_error(L, "Specified space is not exists");

  		/** update the cache */
  		luaL_pushuint64(L, global_shema_version);
@@ -435,11 +438,11 @@ lbox_space_ptr_cached(struct lua_State *L)
  }

  /**
- * Make a tuple or a table Lua object by map
- * @param Lua space object
- * @param Lua map table object
- * @param Lua opts table object (optional)
- * @return C structure pointer
+ * Make a tuple or a table Lua object by map.
+ * @param Lua space object.
+ * @param Lua map table object.
+ * @param Lua opts table object (optional).
+ * @retval C structure pointer.
   */
  static int
  lbox_space_frommap(struct lua_State *L)
@@ -461,7 +464,6 @@ lbox_space_frommap(struct lua_State *L)

  	lbox_space_ptr_cached(L);
  	space = (struct space *)lua_topointer(L, -1);
-
  	dict = space->format->dict;
  	lua_createtable(L, space->def->field_count, 0);

@@ -472,8 +474,9 @@ lbox_space_frommap(struct lua_State *L)
  		const char *key = lua_tolstring(L, -2, &key_len);
  		uint32_t key_hash = lua_hashstring(L, -2);
  		if (tuple_fieldno_by_name(dict, key, key_len, key_hash, &fieldno)) {
+			const char *err_msg = tt_sprintf("Unknown field '%s'", key);
  			lua_pushnil(L);
-			lua_pushstring(L, "Unknown field");
+			lua_pushstring(L, err_msg);
  			return 2;
  		}
  		lua_rawseti(L, -3, fieldno+1);


On 02.04.2018 14:19, v.shpilevoy at tarantool.org wrote:
> Hello. Thanks for your contributing! A several (5) minor fixes are left:
> 
> 1. Please, describe the patch in a commit message body. It would be good, if you
> write why the feature is needed, who needs this, and very short description of
> the feature itself: API usage example, options description. See Vladimir Davydov
> patches as the perfect example.
> 
>> 	/* space.schema_version */
>> 	lua_pushstring(L, "_schema_version");
>> 	luaL_pushuint64(L, box_schema_version());
>> 	lua_settable(L, i);
> 
> 2. Please, update the comment too: /* space._schema_version */ (added '_').
> 
>> /**
>>   * Get a C pointer for space structure.
>>   * Caches the result. Cleans the user(negative) stack itself.
>>   * @param Lua space object at top of the Lua stack
>>   * @return C structure pointer
>>   */
>> static int
>> lbox_space_ptr_cached(struct lua_State *L)
> 
> 3. Please, use @retval instead of @return, and put '.' at the end of a sentence.
> 
> 4. Seems like the following test crashes Tarantool. Please, fix it.
> 
> box.cfg{}
> format = {{'field1', 'unsigned'}}
> s = box.schema.create_space('test', {format = format})
> pk = s:create_index('pk')
> s:drop()
> s:frommap({field1 = 100})
> 
> Process 67761 stopped
> * thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xe8)
>      frame #0: 0x0000000100100b68 tarantool`lbox_space_frommap(L=0x0000000103200378) at space.cc:465
>     462 		lbox_space_ptr_cached(L);
>     463 		space = (struct space *)lua_topointer(L, -1);
>     464 	
> -> 465 		dict = space->format->dict;
>     466 		lua_createtable(L, space->def->field_count, 0);
>     467 	
>     468 		lua_pushnil(L);
> Target 0: (tarantool) stopped.
> 
> 
> 
>> 		if (tuple_fieldno_by_name(dict, key, key_len, key_hash, &fieldno)) {
>> 			lua_pushnil(L);
>> 			lua_pushstring(L, "Unknown field");
>> 			return 2;
>> 		}
>> 		lua_rawseti(L, -3, fieldno+1);
> 
> 
> 5. Please, return field name into error message. In the previous patch the error message
> was ok. Just do not throw it. And put spaces before and after arithmetic operations.
> 
> 




More information about the Tarantool-patches mailing list