Changeset: 39963bbe1a36 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=39963bbe1a36 Branch: Oct2020-merged-Jun2020 Log Message:
Merge with Oct2020. diffs (232 lines): diff --git a/clients/Tests/MAL-signatures.stable.out b/clients/Tests/MAL-signatures.stable.out --- a/clients/Tests/MAL-signatures.stable.out +++ b/clients/Tests/MAL-signatures.stable.out @@ -6523,6 +6523,7 @@ stdout of test 'MAL-signatures` in direc [ "batudf", "fuse", "command batudf.fuse(X_1:bat[:int], X_2:bat[:int]):bat[:lng] ", "UDFBATfuse;", "" ] [ "batudf", "fuse", "command batudf.fuse(X_1:bat[:sht], X_2:bat[:sht]):bat[:int] ", "UDFBATfuse;", "" ] [ "batudf", "reverse", "command batudf.reverse(X_1:bat[:str]):bat[:str] ", "UDFBATreverse;", "" ] +[ "batuuid", "new", "unsafe command batuuid.new(X_1:bat[:int]):bat[:uuid] ", "UUIDgenerateUuidInt_bulk;", "" ] [ "batxml", "attribute", "command batxml.attribute(X_1:str, X_2:bat[:str]):bat[:xml] ", "BATXMLattribute;", "" ] [ "batxml", "comment", "command batxml.comment(X_1:bat[:str]):bat[:xml] ", "BATXMLcomment;", "" ] [ "batxml", "concat", "command batxml.concat(X_1:bat[:xml], X_2:bat[:xml]):bat[:xml] ", "BATXMLconcat;", "" ] diff --git a/clients/Tests/MAL-signatures.stable.out.int128 b/clients/Tests/MAL-signatures.stable.out.int128 --- a/clients/Tests/MAL-signatures.stable.out.int128 +++ b/clients/Tests/MAL-signatures.stable.out.int128 @@ -9124,6 +9124,7 @@ stdout of test 'MAL-signatures` in direc [ "batudf", "fuse", "command batudf.fuse(X_1:bat[:lng], X_2:bat[:lng]):bat[:hge] ", "UDFBATfuse;", "" ] [ "batudf", "fuse", "command batudf.fuse(X_1:bat[:sht], X_2:bat[:sht]):bat[:int] ", "UDFBATfuse;", "" ] [ "batudf", "reverse", "command batudf.reverse(X_1:bat[:str]):bat[:str] ", "UDFBATreverse;", "" ] +[ "batuuid", "new", "unsafe command batuuid.new(X_1:bat[:int]):bat[:uuid] ", "UUIDgenerateUuidInt_bulk;", "" ] [ "batxml", "attribute", "command batxml.attribute(X_1:str, X_2:bat[:str]):bat[:xml] ", "BATXMLattribute;", "" ] [ "batxml", "comment", "command batxml.comment(X_1:bat[:str]):bat[:xml] ", "BATXMLcomment;", "" ] [ "batxml", "concat", "command batxml.concat(X_1:bat[:xml], X_2:bat[:xml]):bat[:xml] ", "BATXMLconcat;", "" ] diff --git a/clients/mapiclient/ReadlineTools.c b/clients/mapiclient/ReadlineTools.c --- a/clients/mapiclient/ReadlineTools.c +++ b/clients/mapiclient/ReadlineTools.c @@ -312,7 +312,7 @@ invoke_editor(int cnt, int key) { char editor_command[BUFFER_SIZE]; char *read_buff = NULL; char *editor = NULL; - FILE *fp; + FILE *fp = NULL; size_t content_len; size_t read_bytes, idx; #ifdef WIN32 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 @@ -189,22 +189,9 @@ UUIDcompare(const void *L, const void *R #endif } -static str -#ifdef HAVE_HGE -UUIDgenerateUuid(uuid *retval) -#else -UUIDgenerateUuid(uuid **retval) -#endif +static inline void +UUIDgenerateUuid_internal(uuid *u) { - uuid *u; - -#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); #else @@ -226,6 +213,25 @@ UUIDgenerateUuid(uuid **retval) /* make sure this is version 4 (random UUID) */ u->u[6] = (u->u[6] & 0x0F) | 0x40; #endif +} + +static str +#ifdef HAVE_HGE +UUIDgenerateUuid(uuid *retval) +#else +UUIDgenerateUuid(uuid **retval) +#endif +{ + uuid *u; + +#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 + UUIDgenerateUuid_internal(u); return MAL_SUCCEED; } @@ -241,6 +247,42 @@ UUIDgenerateUuidInt(uuid **retval, int * } static str +UUIDgenerateUuidInt_bulk(bat *ret, const bat *bid) +{ + BAT *b = NULL, *bn = NULL; + BUN n = 0; + str msg = MAL_SUCCEED; + uuid *restrict bnt = NULL; + + if ((b = BATdescriptor(*bid)) == NULL) { + msg = createException(MAL, "uuid.generateuuidint_bulk", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); + goto bailout; + } + n = BATcount(b); + if ((bn = COLnew(b->hseqbase, TYPE_uuid, n, TRANSIENT)) == NULL) { + msg = createException(MAL, "uuid.generateuuidint_bulk", SQLSTATE(HY013) MAL_MALLOC_FAIL); + goto bailout; + } + bnt = Tloc(bn, 0); + for (BUN i = 0 ; i < n ; i++) + UUIDgenerateUuid_internal(&(bnt[i])); + bn->tnonil = true; + bn->tnil = false; + BATsetcount(bn, n); + bn->tsorted = n < 2; + bn->tkey = n < 2; + +bailout: + if (b) + BBPunfix(b->batCacheid); + if (msg && bn) + BBPreclaim(bn); + else if (bn) + BBPkeepref(*ret = bn->batCacheid); + return msg; +} + +static str UUIDisaUUID(bit *retval, str *s) { uuid u; @@ -361,6 +403,7 @@ mel_func uuid_init_funcs[] = { command("uuid", "prelude", UUIDprelude, false, "", args(1,1, arg("",void))), command("uuid", "new", UUIDgenerateUuid, true, "Generate a new uuid", args(1,1, arg("",uuid))), command("uuid", "new", UUIDgenerateUuidInt, true, "Generate a new uuid (dummy version for side effect free multiplex loop)", args(1,2, arg("",uuid),arg("d",int))), + command("batuuid", "new", UUIDgenerateUuidInt_bulk, true, "Generate a new uuid (dummy version for side effect free multiplex loop)", args(1,2, batarg("",uuid),batarg("d",int))), command("uuid", "uuid", UUIDstr2uuid, false, "Coerce a string to a uuid, validating its format", args(1,2, arg("",uuid),arg("s",str))), command("uuid", "str", UUIDuuid2str, false, "Coerce a uuid to its string type", args(1,2, arg("",str),arg("u",uuid))), command("uuid", "isaUUID", UUIDisaUUID, false, "Test a string for a UUID format", args(1,2, arg("",bit),arg("u",str))), diff --git a/sql/backends/monet5/sql_upgrades.c b/sql/backends/monet5/sql_upgrades.c --- a/sql/backends/monet5/sql_upgrades.c +++ b/sql/backends/monet5/sql_upgrades.c @@ -2515,30 +2515,29 @@ sql_update_oct2020_sp1(Client c, mvc *sq { size_t bufsize = 1024, pos = 0; char *buf = NULL, *err = NULL; - res_table *output = NULL; - BAT *b = NULL; + + if (!sql_bind_func(sql->sa, mvc_bind_schema(sql, "sys"), "uuid", sql_bind_localtype("int"), NULL, F_FUNC)) { + if ((buf = GDKmalloc(bufsize)) == NULL) + throw(SQL, __func__, SQLSTATE(HY013) MAL_MALLOC_FAIL); - if ((buf = GDKmalloc(bufsize)) == NULL) - throw(SQL, __func__, SQLSTATE(HY013) MAL_MALLOC_FAIL); + if (!*systabfixed && (err = sql_fix_system_tables(c, sql, prev_schema)) != NULL) { + GDKfree(buf); + return err; + } + *systabfixed = true; - /* if there are 4 'log' functions of the same name in the catalog: ((base 'e' or any base) * (flt or dbl)), then upgrade */ - pos += snprintf(buf + pos, bufsize - pos, - "select id from sys.functions where name = 'log' and mod = 'mmath' and func = 'log' and system = true;\n"); - assert(pos < bufsize); - if ((err = SQLstatementIntern(c, buf, "update", true, false, &output))) - goto bailout; - if ((b = BATdescriptor(output->cols[0].b))) { - if (BATcount(b) == 4) { - if (!*systabfixed && (err = sql_fix_system_tables(c, sql, prev_schema)) != NULL) - goto bailout; - *systabfixed = true; - } + pos += snprintf(buf + pos, bufsize - pos, "set schema sys;\n"); + /* 45_uuid.sql */ + pos += snprintf(buf + pos, bufsize - pos, + "create function sys.uuid(d int) returns uuid\n" + " external name uuid.\"new\";\n" + "GRANT EXECUTE ON FUNCTION sys.uuid(int) TO PUBLIC;\n"); + + pos += snprintf(buf + pos, bufsize - pos, "set schema \"%s\";\n", prev_schema); + assert(pos < bufsize); + printf("Running database upgrade commands:\n%s\n", buf); + err = SQLstatementIntern(c, buf, "update", true, false, NULL); } -bailout: - if (b) - BBPunfix(b->batCacheid); - if (output) - res_table_destroy(output); GDKfree(buf); return err; /* usually MAL_SUCCEED */ } diff --git a/sql/scripts/45_uuid.sql b/sql/scripts/45_uuid.sql --- a/sql/scripts/45_uuid.sql +++ b/sql/scripts/45_uuid.sql @@ -14,6 +14,11 @@ create function sys.uuid() returns uuid external name uuid."new"; GRANT EXECUTE ON FUNCTION sys.uuid() TO PUBLIC; +-- generate a new uuid with a dummy parameter, so it can be called for a column +create function sys.uuid(d int) +returns uuid external name uuid."new"; +GRANT EXECUTE ON FUNCTION sys.uuid(int) TO PUBLIC; + create function sys.isaUUID(s string) returns boolean external name uuid."isaUUID"; GRANT EXECUTE ON FUNCTION sys.isaUUID(string) TO PUBLIC; diff --git a/sql/test/sys-schema/Tests/systemfunctions.stable.out b/sql/test/sys-schema/Tests/systemfunctions.stable.out --- a/sql/test/sys-schema/Tests/systemfunctions.stable.out +++ b/sql/test/sys-schema/Tests/systemfunctions.stable.out @@ -3659,6 +3659,8 @@ stdout of test 'systemfunctions` in dire [ "sys", "user_statistics", 5, "bigint", "" ] [ "sys", "user_statistics", 6, "clob", "" ] [ "sys", "uuid", 0, "uuid", "create function sys.uuid()\nreturns uuid external name uuid.\"new\";" ] +[ "sys", "uuid", 0, "uuid", "create function sys.uuid(d int)\nreturns uuid external name uuid.\"new\";" ] +[ "sys", "uuid", 1, "int", "" ] [ "sys", "vacuum", 0, "clob", "create procedure vacuum(sys string, tab string)\nexternal name sql.vacuum;" ] [ "sys", "vacuum", 1, "clob", "" ] [ "sys", "var", 0, "char", "create function \"sys\".\"var\"() returns table(\"schema\" string, \"name\" string, \"type\" string, \"value\" string) external name \"sql\".\"sql_variables\";" ] diff --git a/sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 b/sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 --- a/sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 +++ b/sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 @@ -4139,6 +4139,8 @@ stdout of test 'systemfunctions` in dire [ "sys", "user_statistics", 5, "bigint", "" ] [ "sys", "user_statistics", 6, "clob", "" ] [ "sys", "uuid", 0, "uuid", "create function sys.uuid()\nreturns uuid external name uuid.\"new\";" ] +[ "sys", "uuid", 0, "uuid", "create function sys.uuid(d int)\nreturns uuid external name uuid.\"new\";" ] +[ "sys", "uuid", 1, "int", "" ] [ "sys", "vacuum", 0, "clob", "create procedure vacuum(sys string, tab string)\nexternal name sql.vacuum;" ] [ "sys", "vacuum", 1, "clob", "" ] [ "sys", "var", 0, "char", "create function \"sys\".\"var\"() returns table(\"schema\" string, \"name\" string, \"type\" string, \"value\" string) external name \"sql\".\"sql_variables\";" ] _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list