[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