[tarantool-patches] Re: [PATCH 2/6] sql: annotate SQL functions with return type
Vladislav Shpilevoy
v.shpilevoy at tarantool.org
Thu Sep 27 23:23:53 MSK 2018
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,
More information about the Tarantool-patches
mailing list