[Tarantool-patches] [PATCH v1 06/21] sql: refactor RANDOM() function
imeevma at tarantool.org
imeevma at tarantool.org
Fri Oct 8 20:31:43 MSK 2021
Part of #4145
---
src/box/sql/func.c | 36 ++++++++++++------------------------
1 file changed, 12 insertions(+), 24 deletions(-)
diff --git a/src/box/sql/func.c b/src/box/sql/func.c
index f5040fb6e..8caf389ab 100644
--- a/src/box/sql/func.c
+++ b/src/box/sql/func.c
@@ -880,6 +880,17 @@ func_printf(struct sql_context *ctx, int argc, struct Mem *argv)
ctx->is_aborted = true;
}
+/** Implementation of the RANDOM() function. */
+static void
+func_random(struct sql_context *ctx, int argc, struct Mem *argv)
+{
+ (void)argc;
+ (void)argv;
+ int64_t r;
+ sql_randomness(sizeof(r), &r);
+ mem_set_int(ctx->pOut, r, r < 0);
+}
+
static const unsigned char *
mem_as_ustr(struct Mem *mem)
{
@@ -1045,29 +1056,6 @@ contextMalloc(struct sql_context *context, i64 nByte)
return z;
}
-/*
- * Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
- * as VDBE code so that unused argument values do not have to be computed.
- * However, we still need some kind of function implementation for this
- * routines in the function table. The noopFunc macro provides this.
- * noopFunc will never be called so it doesn't matter what the implementation
- * is. We might as well use the "version()" function as a substitute.
- */
-#define noopFunc sql_func_version /* Substitute function - never called */
-
-/*
- * Implementation of random(). Return a random integer.
- */
-static void
-randomFunc(struct sql_context *context, int argc, struct Mem *argv)
-{
- (void)argc;
- (void)argv;
- int64_t r;
- sql_randomness(sizeof(r), &r);
- sql_result_int(context, r);
-}
-
/*
* Implementation of randomblob(N). Return a random blob
* that is N bytes long.
@@ -1918,7 +1906,7 @@ static struct sql_func_definition definitions[] = {
FIELD_TYPE_INTEGER, func_position_octets, NULL},
{"PRINTF", -1, {FIELD_TYPE_ANY}, FIELD_TYPE_STRING, func_printf, NULL},
{"QUOTE", 1, {FIELD_TYPE_ANY}, FIELD_TYPE_STRING, quoteFunc, NULL},
- {"RANDOM", 0, {}, FIELD_TYPE_INTEGER, randomFunc, NULL},
+ {"RANDOM", 0, {}, FIELD_TYPE_INTEGER, func_random, NULL},
{"RANDOMBLOB", 1, {FIELD_TYPE_INTEGER}, FIELD_TYPE_VARBINARY,
randomBlob, NULL},
{"REPLACE", 3,
--
2.25.1
More information about the Tarantool-patches
mailing list