[Tarantool-patches] [PATCH v1 1/8] sql: refactor ABS() funcion

Vladislav Shpilevoy v.shpilevoy at tarantool.org
Fri Oct 29 01:11:11 MSK 2021


Hi! Thanks for the fixes!

>>> +	assert(mem_is_int(arg));
>>> +	uint64_t u = mem_is_uint(arg) ? arg->u.u : (uint64_t)-arg->u.i;
>>
>> 2. You could make return when mem_is_uint(). It would remove '?' and
>> mem_set_uint() which would calls mem_clear() inside.
>>
> I am not sure that I understood correctly. In case of argument being uint we
> can use mem_copy_as_ephemeral() instead of mem_set_uint(), but I am not sure
> if it would be better.

I mean this:

====================
diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index dbeb38bee..2a848be31 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -239,11 +239,10 @@ func_abs_int(struct sql_context *ctx, int argc, struct Mem *argv)
 	assert(argc == 1);
 	(void)argc;
 	struct Mem *arg = &argv[0];
-	if (mem_is_null(arg))
+	if (mem_is_null(arg) || mem_is_uint(arg))
 		return;
 	assert(mem_is_int(arg));
-	uint64_t u = mem_is_uint(arg) ? arg->u.u : (uint64_t)-arg->u.i;
-	mem_set_uint(ctx->pOut, u);
+	mem_set_uint(ctx->pOut, (uint64_t)-arg->u.i);
 }
====================

Up to you.


More information about the Tarantool-patches mailing list