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