From 0210f261a502e769ff0fe9477bbdd79921518776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= <hugo@lysator.liu.se> Date: Tue, 5 Mar 2024 16:47:00 +0100 Subject: [PATCH] General cleanup. --- sqlite-uuid.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/sqlite-uuid.c b/sqlite-uuid.c index b9a6696..9868e32 100644 --- a/sqlite-uuid.c +++ b/sqlite-uuid.c @@ -2,14 +2,27 @@ SQLITE_EXTENSION_INIT1 #include <uuid.h> -static void sqlite_uuid(sqlite3_context *context, int argc, sqlite3_value **argv) { +#define UUID_BYTES (128/8) +#define UUID_STRLEN (UUID_BYTES * 2 + 4) + + +static void sqlite_uuid(sqlite3_context *context, int argc, sqlite3_value **argv) { uuid_t uuid; uuid_generate_random(uuid); - char str[37]; + char str[UUID_STRLEN + 1]; uuid_unparse(uuid, &str[0]); - sqlite3_result_text(context, str, 37, SQLITE_TRANSIENT); + sqlite3_result_text(context, str, UUID_STRLEN + 1, SQLITE_TRANSIENT); + + uuid_clear(uuid); +} + +static void sqlite_uuid_blob(sqlite3_context *context, int argc, sqlite3_value **argv) { + uuid_t uuid; + uuid_generate_random(uuid); + + sqlite3_result_blob(context, uuid, UUID_BYTES, SQLITE_TRANSIENT); uuid_clear(uuid); } @@ -28,8 +41,14 @@ int sqlite3_extension_init ( (void) pzErrMsg; rc = sqlite3_create_function(db, "uuid", 0, - SQLITE_UTF8|SQLITE_INNOCUOUS, - 0, sqlite_uuid, 0, 0); + SQLITE_UTF8|SQLITE_INNOCUOUS/*|SQLITE_DIRECTONLY*/, + 0, sqlite_uuid, 0, 0); + + if (rc != SQLITE_OK) return rc; + + rc = sqlite3_create_function(db, "uuid-blob", 0, + SQLITE_UTF8|SQLITE_INNOCUOUS/*|SQLITE_DIRECTONLY*/, + 0, sqlite_uuid_blob, 0, 0); return rc; } -- GitLab