Changeset: f50201252dba for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f50201252dba
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
monetdb5/modules/atoms/uuid.c
sql/backends/monet5/sql_upgrades.c
sql/test/sys-schema/Tests/systemfunctions.stable.out
sql/test/sys-schema/Tests/systemfunctions.stable.out.int128
Branch: default
Log Message:
Merged 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
@@ -6639,6 +6639,7 @@ stdout of test 'MAL-signatures` in direc
[ "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", "isaUUID", "command
batuuid.isaUUID(X_1:bat[:str]):bat[:bit] ", "UUIDisaUUID_bulk;", "" ]
+[ "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
@@ -9199,6 +9199,7 @@ stdout of test 'MAL-signatures` in direc
[ "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", "isaUUID", "command
batuuid.isaUUID(X_1:bat[:str]):bat[:bit] ", "UUIDisaUUID_bulk;", "" ]
+[ "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;
}
@@ -256,6 +262,42 @@ isaUUID(str s)
}
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)
{
*retval = isaUUID(*s);
@@ -405,6 +447,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
@@ -3596,6 +3596,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
@@ -4063,6 +4063,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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list