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

Reply via email to