From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id 813862BC35 for ; Thu, 27 Sep 2018 16:23:57 -0400 (EDT) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id AvX8IbVzUQUJ for ; Thu, 27 Sep 2018 16:23:57 -0400 (EDT) Received: from smtp52.i.mail.ru (smtp52.i.mail.ru [94.100.177.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id C1A2D2BC33 for ; Thu, 27 Sep 2018 16:23:56 -0400 (EDT) Subject: [tarantool-patches] Re: [PATCH 2/6] sql: annotate SQL functions with return type References: From: Vladislav Shpilevoy Message-ID: <00abc300-9b7a-f247-cc34-90cb7e904483@tarantool.org> Date: Thu, 27 Sep 2018 23:23:53 +0300 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-help: List-unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-subscribe: List-owner: List-post: List-archive: To: tarantool-patches@freelists.org, Nikita Pettik Cc: Georgy Kirichenko My review fixes are on the branch in a separate commit and here: ========================================================================== diff --git a/src/box/lua/lua_sql.c b/src/box/lua/lua_sql.c index e69e143db..f9e63aae6 100644 --- a/src/box/lua/lua_sql.c +++ b/src/box/lua/lua_sql.c @@ -130,10 +130,8 @@ int lbox_sql_create_function(struct lua_State *L) { struct sqlite3 *db = sql_get(); - if (db == NULL) { - luaL_error(L, "Please call box.cfg{} first"); - return 0; - } + if (db == NULL) + return luaL_error(L, "Please call box.cfg{} first"); int argc = lua_gettop(L); /* * Three function prototypes are possible: @@ -149,53 +147,46 @@ lbox_sql_create_function(struct lua_State *L) lua_isfunction(L, 3) && lua_isnumber(L, 4)) && !(argc == 5 && lua_isstring(L, 1) && lua_isstring(L, 2) && lua_isfunction(L, 3) && lua_isnumber(L, 4) && - lua_isboolean(L, 5))) { - luaL_error(L, "Invalid arguments"); - return 0; - } + lua_isboolean(L, 5))) + return luaL_error(L, "Invalid arguments"); enum affinity_type type = AFFINITY_UNDEFINED; const char *type_arg = lua_tostring(L, 2); - if (strcmp(type_arg, "INT") == 0 || strcmp(type_arg, "INTEGER") == 0) { + if (strcmp(type_arg, "INT") == 0 || strcmp(type_arg, "INTEGER") == 0) type = AFFINITY_INTEGER; - } else if (strcmp(type_arg, "TEXT") == 0) { + else if (strcmp(type_arg, "TEXT") == 0) type = AFFINITY_TEXT; - } else if (strcmp(type_arg, "FLOAT") == 0) { + else if (strcmp(type_arg, "FLOAT") == 0) type = AFFINITY_REAL; - } else if (strcmp(type_arg, "NUM") == 0) { + else if (strcmp(type_arg, "NUM") == 0) type = AFFINITY_NUMERIC; - } else if (strcmp(type_arg, "BLOB") == 0) { + else if (strcmp(type_arg, "BLOB") == 0) type = AFFINITY_BLOB; - } else { - luaL_error(L, "Unknown type"); - } + else + return luaL_error(L, "Unknown type"); /* -1 indicates any number of arguments. */ int func_arg_num = -1; bool is_deterministic = false; if (argc == 4) { - func_arg_num = (int) lua_tonumber(L, 4); + func_arg_num = lua_tointeger(L, 4); lua_pop(L, 1); } else if (argc == 5) { is_deterministic = lua_toboolean(L, 5); - func_arg_num = (int) lua_tonumber(L, 4); + func_arg_num = lua_tointeger(L, 4); lua_pop(L, 2); } - const char *name = lua_tostring(L, 1); - size_t name_len = strlen(name); + size_t name_len; + const char *name = lua_tolstring(L, 1, &name_len); char *normalized_name = (char *) region_alloc(&fiber()->gc, name_len + 1); - if (normalized_name == NULL) { - luaL_error(L, "out of memory"); - return 0; - } + if (normalized_name == NULL) + return luaL_error(L, "out of memory"); memcpy(normalized_name, name, name_len); normalized_name[name_len] = '\0'; sqlite3NormalizeName(normalized_name); struct lua_sql_func_info *func_info = (struct lua_sql_func_info *) malloc(sizeof(*func_info)); - if (func_info == NULL) { - luaL_error(L, "out of memory"); - return 0; - } + if (func_info == NULL) + return luaL_error(L, "out of memory"); func_info->func_ref = luaL_ref(L, LUA_REGISTRYINDEX); sqlite3_create_function_v2(db, normalized_name, type, func_arg_num, is_deterministic ? SQLITE_DETERMINISTIC : 0,