Changeset: d3ed3ff1fe48 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d3ed3ff1fe48
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/modules/atoms/uuid.c
Branch: default
Log Message:

If we have 128 bit integers, use them as storage format for UUID.
"External" types take extra allocs, so using builtin types for storage
saves on that.


diffs (128 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1911,14 +1911,18 @@ ssize_t URLtoString(str *s, size_t *len,
 int UUIDcompare(const uuid *l, const uuid *r);
 ssize_t UUIDfromString(const char *svalue, size_t *len, uuid **retval, bool 
external);
 str UUIDgenerateUuid(uuid **retval);
+str UUIDgenerateUuid(uuid *retval);
 str UUIDgenerateUuidInt(uuid **retval, int *d);
+str UUIDgenerateUuidInt(uuid *retval, int *d);
 BUN UUIDhash(const void *u);
 str UUIDisaUUID(bit *retval, str *u);
 const uuid *UUIDnull(void);
 str UUIDprelude(void *ret);
 uuid *UUIDread(uuid *u, stream *s, size_t cnt);
 str UUIDstr2uuid(uuid **retval, str *s);
+str UUIDstr2uuid(uuid *retval, str *s);
 ssize_t UUIDtoString(str *retval, size_t *len, const uuid *value, bool 
external);
+str UUIDuuid2str(str *retval, const uuid *u);
 str UUIDuuid2str(str *retval, uuid **u);
 gdk_return UUIDwrite(const uuid *u, stream *s, size_t cnt);
 str WLCaction(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
diff --git a/monetdb5/modules/atoms/uuid.c b/monetdb5/modules/atoms/uuid.c
--- a/monetdb5/modules/atoms/uuid.c
+++ b/monetdb5/modules/atoms/uuid.c
@@ -59,10 +59,17 @@ mal_export uuid *UUIDread(uuid *u, strea
 mal_export ssize_t UUIDtoString(str *retval, size_t *len, const uuid *value, 
bool external);
 mal_export gdk_return UUIDwrite(const uuid *u, stream *s, size_t cnt);
 
+#ifdef HAVE_HGE
+mal_export str UUIDgenerateUuid(uuid *retval);
+mal_export str UUIDgenerateUuidInt(uuid *retval, int *d);
+mal_export str UUIDstr2uuid(uuid *retval, str *s);
+mal_export str UUIDuuid2str(str *retval, const uuid *u);
+#else
 mal_export str UUIDgenerateUuid(uuid **retval);
 mal_export str UUIDgenerateUuidInt(uuid **retval, int *d);
 mal_export str UUIDstr2uuid(uuid **retval, str *s);
 mal_export str UUIDuuid2str(str *retval, uuid **u);
+#endif
 mal_export str UUIDisaUUID(bit *retval, str *u);
 
 static uuid uuid_nil;                  /* automatically initialized as zeros */
@@ -72,7 +79,11 @@ UUIDprelude(void *ret)
 {
        (void) ret;
        assert(UUID_SIZE == 16);
-       (void) malAtomSize(sizeof(uuid), "uuid");
+       int u = malAtomSize(sizeof(uuid), "uuid");
+       (void) u;                                       /* not needed if 
HAVE_HGE not defined */
+#ifdef HAVE_HGE
+       BATatoms[u].storage = TYPE_hge;
+#endif
        return MAL_SUCCEED;
 }
 
@@ -173,14 +184,22 @@ UUIDcompare(const uuid *l, const uuid *r
 }
 
 str
+#ifdef HAVE_HGE
+UUIDgenerateUuid(uuid *retval)
+#else
 UUIDgenerateUuid(uuid **retval)
+#endif
 {
        uuid *u;
        int i = 0, r = 0;
 
+#ifdef HAVE_HGE
+       u = retval;
+#else
        if (*retval == NULL && (*retval = GDKmalloc(UUID_SIZE)) == NULL)
                throw(MAL, "uuid.new", SQLSTATE(HY013) MAL_MALLOC_FAIL);
        u = *retval;
+#endif
 #ifdef HAVE_UUID
        uuid_generate(u->u);
        (void) i;
@@ -204,7 +223,11 @@ UUIDgenerateUuid(uuid **retval)
 }
 
 str
+#ifdef HAVE_HGE
+UUIDgenerateUuidInt(uuid *retval, int *d)
+#else
 UUIDgenerateUuidInt(uuid **retval, int *d)
+#endif
 {
        (void)d;
        return UUIDgenerateUuid(retval);
@@ -220,6 +243,28 @@ UUIDisaUUID(bit *retval, str *s)
        return MAL_SUCCEED;
 }
 
+#ifdef HAVE_HGE
+str
+UUIDstr2uuid(uuid *retval, str *s)
+{
+       size_t l = UUID_SIZE;
+
+       if (UUIDfromString(*s, &l, &retval, false) == UUID_STRLEN) {
+               return MAL_SUCCEED;
+       }
+       throw(MAL, "uuid.uuid", "Not a UUID");
+}
+
+str
+UUIDuuid2str(str *retval, const uuid *u)
+{
+       size_t l = 0;
+       *retval = NULL;
+       if (UUIDtoString(retval, &l, u, false) < 0)
+               throw(MAL, "uuid.str", GDK_EXCEPTION);
+       return MAL_SUCCEED;
+}
+#else
 str
 UUIDstr2uuid(uuid **retval, str *s)
 {
@@ -240,6 +285,7 @@ UUIDuuid2str(str *retval, uuid **u)
                throw(MAL, "uuid.str", GDK_EXCEPTION);
        return MAL_SUCCEED;
 }
+#endif
 
 BUN
 UUIDhash(const void *v)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to