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